PDA

View Full Version : How do I convert an internal variable into frequency



schlaray
- 4th February 2007, 16:08
I am using a 10 bit A/D converter on a 16F877A. The input is from a voltage divider where one of the resistors is the sensing element. What I want to do is determine the dv/dt (frequency) across the sensor and use a set value to trigger an event. All of the examples I have come across have an external frequency source, my application is using the output from the A/D converter (0 t0 1024). I have some code (peak detector) to give me a count and I know this value must be divided by a time period to give me the frequency. Can someone steer me in the right direction?

Ioannis
- 5th February 2007, 06:37
Hi! You have not mentioned if the values come with a regular rate. If they do then I suppose you have to use maths (diferrentiation) to get your value.

I am not an math's expert though.

Another method might be to use Interrupts and check the value from A/D. Then use select case commands to decide whta to do.

Ioannis

schlaray
- 5th February 2007, 15:47
For sake of argument, let us say that I am using a temperature sensor. Normally the temperature (output of the A/D) is constant. When the temperature changes, I want to know the rate of change.

HenrikOlsson
- 6th February 2007, 06:17
Hi,
You need to sample your analog signal at precise intervals. Then, to find the rate of change, it's just a matter of comparing the last reading with the new one.

At what interval you sample depends on the expected rate of change of the signal. If it's temperature you should perhaps sample once every second, minute or even hour but if it's voltage perhaps once every mS or even faster - it all depends on the application.


/Henrik Olsson.

Ioannis
- 6th February 2007, 07:22
Henrik, Hi!

Just comparing the samples, would require a lot of if then or select case commands. That is why I suggested differentiation. Also now it came to my mind that differentiation could happily be done in hardware with op-amp's. Select the proper R-C values according to the signal and then get an analog value, proportional to the rate of signal change.

I would prefer the digital way though...

Ioannis

HenrikOlsson
- 6th February 2007, 07:56
Hi Ioannis,
OK, you lost me there.... I'm no math expert either but isn't differentiation the same as derivative ie. the difference between two samples with respect to time. (in this case)

Let's say we read a voltage once every second first reading is 2.2V second reading is 2.5V the rate of change is then 0.3V/second third reading is 4.0V, rate of change is now 1.5V/second and so on.

It may very well be that I misunderstood the original question, if so you'll have to excuse me, but he said he was looking for the rate of change.

/Henrik Olsson.

Ioannis
- 6th February 2007, 08:35
Well the derivative is a number (no units associated with). So the derivative of a function that represents volts (say the 220*sin(t)) is not volts. Is a simple number (negative or positive) that represents the direction of the change or the will of the function to do a change. The larger positive number the more steep the change is.

Hope it made it a little more clear if I understood it...!

Ioannis

HenrikOlsson
- 6th February 2007, 09:58
Ioannis,
Really, I think we are basicly saying the same thing here, however.... You wrote:


Well the derivative is a number (no units associated with).

I think this is where you are wrong. The derivative is the rate of change. But you cant just say that the rate of change is 7. You have to say 7 this per that otherwise it doensn't make sense IMO. For example 1.5V per second or 25degrees per hour or 15m/s per second etc.

I found this on Wikipedia:


In mathematics, a derivative is the rate of change of a quantity. A derivative is an instantaneous rate of change: it is calculated at a specific instant rather than as an average over time. The process of finding a derivative is called differentiation. The reverse process is integration. The two processes are the central concepts of calculus and the relationship between them is the fundamental theorem of calculus.


Again, I believe we're meaning the same thing but without assigning units to the numbers they just doesn't make sense.

/Henrik Olsson.

Ioannis
- 7th February 2007, 07:43
From what I remember the derivative is the tangent of the curve described by the function and shows the gradient of the tangent line. So a tangent cannot have units.

This is how far I can go...!

I understand what you are trying to say as a rate of change (like the slew rate of an op-amp). But on functions, a derivative I am sure is just a number, showing the direction of the curve at that point.

Maybe a math guru is listening here to give a hand?

Ioannis

P.S. Since all the maths I learned was in greek language, maybe the terms I am using are not the proper ones, so.... I am sorry for that!

schlaray
- 7th February 2007, 16:53
The sensor connected to the A/D normally produces a constant , fixed output. The A/D output is therefore also fixed at this point in time. When a flow is present, the sensor produces a sin wave output whose frequency is dependant on the flow rate. The A/D output produces a series of varying numerical values if plotted against time would look like a sin wave. I have a program that will detect the numerical peak of each sin wave and I can count these peaks. Right now, I am using a timer (TMR0) with interrupts to generate the time base. This timer is activated when flow starts. The count /time will give me the frequency. The program will have a variable trip value i.e. when f >= trip then alarm. My program is almost operational with a few bugs remaining to be worked out.

I have built this circuit using Op Amps etc., and now I would like to keep up with the times and reduce the number of components using a PIC.

I wish to thank all those who have contributed and still might contribute to this thread.
R.W.S.

Ioannis
- 8th February 2007, 07:36
Since your sensor produces a sine wave as a signal I would propose for the conversion part, to do the following:

Drive a cheap 4046 PLL with the sensor signal. From the VCO control voltage drive a buffer op-amp (optional but suggested) and then the A/D of your PIC. Now you have a clean analog voltage that follows your flow converted to a digital.

If you want to do the opposite, drive a voltage to the VCO of the 4046 and now you have a voltage to frequency converter (very linear I might say).

Ioannis

schlaray
- 9th February 2007, 14:05
It was my error to mention dv/dt. Although I would like to measure this also, the frequency is what I am looking for.
Thank you IOANNIS for your suggestions but my thrust right now is to try and do it all with the 16F877A.

The program I have right now runs just fine when it is compiled and programmed under ICD. Using the real time compiler and programmer it doesn't work?????

Any suggestions?

Ioannis
- 9th February 2007, 19:41
Hm, that's another story. What compiler, what code, what programmer, what...

Please post everything you have to look at.

Ioannis

schlaray
- 12th February 2007, 23:51
After playing with the program over the weekend I discovered two registers (intcon and option_reg) were incorrectly configured. The "Clock" generating ticks was not turning off . Steping through the program with the registers displayed the MCSP revealed the defect. Thank you IOANNIS for you offer to provide further assistance. I think I have a good start now with other obsticles yet to overcome.

Ioannis
- 13th February 2007, 07:26
You are welcome.