|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Quote:
Quadrature encoders have two outputs. Both are 50% duty cycle square waves and are usually referred to as Phase A and Phase B. Phase B usually lags behind A by 90 deg. Typically Phase A is used as a trigger, or more specifically, tied to an interrupt on the RC. When the "trigger", or interrupt, takes place, an IRS (Interrupt Service Routine) looks at Phase B. If B is high, the ISR increments the content of a counter, if B is low, the counter is decremented. Incrementing or decrementing can be swapped easily by modifying the code. Usually incrementing means you are moving forward, decrementing means reverse, but again, you can determine in code what you want it to represent. Now, the value in the "counter" represents a unit of measure. The measurement it represents is determined by what it is physically driven by. Lets just use the output of a transmission as an example. Let's also assume we are using a 100 count per revolution encoder. The output shaft has a 15 tooth sprocket on it and it is driving a 6 in. dia. wheel with a 22 tooth sprocket on it. Here is the math. Pi*D=18.85 in. per wheel revolution 22/15=1.466 revolutions of the encoder per wheel revolution. 100*1.466=146.6 counts per wheel revolution. 18.85/146.6 = .129 inches of travel per count from the encoder. |
|
#2
|
|||||
|
|||||
|
Re: Help Programming a Quadrature Encoder
Quote:
|
|
#3
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Quote:
Take a look at his code. It is really good. |
|
#4
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
http://www.killerbees33.com/index.ph...d=27&Itemid=50
This is a link to some of Jim Z's programming tips. If your robot is slicing one way or the other, wheel encoders may help, but you can also use a gyro and have it adjust to keep a 0 heading. Sorry I am not a programmer, but hopefully some of Jim's stuff might help. |
|
#5
|
|||
|
|||
|
Re: Help Programming a Quadrature Encoder
Quote:
|
|
#6
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Quote:
The way an interrupt works is that you enter the ISR on the transition from a low state to a high state. You can choose which transition it is, but I'm pretty sure it's low-to-high by default in Kevin's code. In the ISR, you check the value of B by just using the standard "rc_dig_inX" variable. In Kevin's code, that's #defined to ENCODER_Y_PHASE_B_PIN. When you're going forward, B will be one value, let's say 1. When you're going reverse, B will be the opposite value, 0. A picture illustrates this better: ![]() (from: http://digital.ni.com/public.nsf/all...256275005E18E2) Hope that helps. Ask more if you still have questions! |
|
#7
|
|||||
|
|||||
|
Re: Help Programming a Quadrature Encoder
So just to be sure, if phase B lead is forward, then phase B lag is reverse?
|
|
#8
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Yup!
|
|
#9
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
That could be true. But, if one encoder is on the right side and one on the left, they could be different. That is not really a problem, just modify your ISRs to meet your needs.
|
|
#10
|
|||||
|
|||||
|
Re: Help Programming a Quadrature Encoder
You mean there's a difference between putting the encoder on the left side or the right side of the gear/wheel?
|
|
#11
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
What Bill is getting at is that while the A signal of the encoder on the left side of the drive train might be leading, the encoder on the right side of the drive train might be lagging. You can check the signals coming out of the encoders with an oscilloscope, or what I usually do is just hook it up, look at the encoder counts in a terminal, and reverse the sign bit if necessary.
|
|
#12
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Generally the data sheet for the encoder will specify which signal leads which.
For example, it may say... A leads B in a clockwise rotation. So if it's turning clockwise then A will come first followed by B. Conversely if it's turning counter clockwise the B will come first followed by A. I highly recommend downloading and reading this excellent white paper on quadrature encoders. It explains the A versus B, and provides mostly functional code. The sample code does have 2 bugs, but you should be able to find them. If not PM me. Our team has been using this methodology for the last 2 or 3 seasons very successfully. http://www.chiefdelphi.com/media/papers/1490 Read it, I think you will see the lights go on in your head and you'll have a much better understanding. |
|
#13
|
||||
|
||||
|
Re: Help Programming a Quadrature Encoder
Quote:
Again, this is really simple to handle in the ISR. For the same direction of travel make sure both encoders are incrementing, and decrementing for the opposite direction. Read through Kevin Watson's encoder code, this is all spelled out clearly. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Quadrature shaft encoder source | billbo911 | Kit & Additional Hardware | 7 | 06-01-2008 19:52 |
| Encoder help | E_Unit | Electrical | 5 | 16-02-2007 11:02 |
| Turning a gear-tooth sensor into a quadrature output encoder | Jared Russell | Programming | 4 | 18-01-2006 22:19 |
| Encoder help | Windward | Programming | 21 | 14-01-2006 15:10 |
| shaft encoder help | stephenthe1 | Programming | 2 | 03-12-2004 16:09 |