|
|
View previous topic :: View next topic |
Author |
Message |
filjoa
Joined: 04 May 2008 Posts: 260
|
Configure ADC with rotation sensor |
Posted: Fri Jan 13, 2017 1:25 pm |
|
|
Hi
After so long without programming, for professional reasons I'm back ...
But now it is time to take a course, so I come to ask for your help.
I have a positioning sensor "ri360p0-qr24m0-eliu5x2-h1151" and wanted to read with the values on a PIC18F458
As the values vary between 0 and 10V (0º-360º), how should I configure my ADC to print the terminal in degrees?
As the PIC works at 5V, I have to make a resistive divider for values ranging from 0 to 5V (0º-360º), I had thought to use pin A3 with a reference value to facilitate calculations.
Can someone help me figure out how to make these calculations?
Code: |
#include <18F458.h>
#device adc=10 //adc com 10bits
#fuses HS,NOWDT,NOPROTECT,NOLVP,BROWNOUT,STVREN
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main(void)
{
int16 readadc, value;
int8 i;
setup_adc_ports(AN0_AN1_VSS_VREF); // colocar referencia em A3 escala 0-1023
setup_adc(ADC_CLOCK_DIV_2);
while (TRUE)
{
printf("Angle: %4lu\r", value);
}
}
|
|
|
|
asmboy
Joined: 20 Nov 2007 Posts: 2128 Location: albany ny
|
|
Posted: Fri Jan 13, 2017 1:43 pm |
|
|
So take stock.
You have a 10 bit DAC and 360 degrees.
So 360/1024=.3516 BEST CASE degrees per DAC count.
Sadly this is a ratio of 2.8444.... which is never going to give you
whole degrees - since 3 counts =1.0547 degrees.
How FAST does the encoder turn in your application?
I see it is rated to 12,000 RPM. thats 200 RPS
Why on earth are you using a BRUTALLY expensive voltage
output encoder and how well do you understand the way
rotation speed, PIC Clock frequency and only 10 (slow) bits +/- - 2 bits
is going to make it hard to know anything about the encoder position with high accuracy unless it only moves at a dead CRAWL.....
Why not use a pulse output encoder and a PIC with fast DE-encoder hardware built in ? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19545
|
|
Posted: Fri Jan 13, 2017 1:46 pm |
|
|
Start again.
Use the 4-20mA output. This is better for noise immunity anyway, and allows you to choose the voltage being generated.
Then connect this to a 110R resistor, so you get 2.2v for 20mA.
Use a 2.5v bandgap reference on Vref. Need this for stability.
Then read the ADC. Subtract 180, and divide by 2. Result is in degrees.
How does this work?.
The range from 0 to 360, gives 4 to 20mA. 16mA span.
16mA * 110R = 1.76v
The ADC running off 2.5v gives 2.5/1024v V/step. = 0.00244v
1.76/0.00244 = 720. 720/2 = 360.
The 4mA gives 0.44v. 0.44/0.00244 = 180.
So subtract 180, then divide by 2, and you have degrees.
This is a classic example of designing the hardware to simplify the maths. |
|
|
filjoa
Joined: 04 May 2008 Posts: 260
|
|
Posted: Fri Jan 13, 2017 4:38 pm |
|
|
hi
thanks for this help...
My head is full of rust on programming
I understand all
best regards |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|