From 22351b5b3dcec28ec052eb70010bef53a39ef670 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 1 Aug 2007 09:56:28 +0200 Subject: Added encoder documentation. --- digital/asserv/doc/asserv.txt | 126 +++++++++++ digital/asserv/doc/decoder_states.svg | 402 ++++++++++++++++++++++++++++++++++ 2 files changed, 528 insertions(+) create mode 100644 digital/asserv/doc/asserv.txt create mode 100644 digital/asserv/doc/decoder_states.svg (limited to 'digital') diff --git a/digital/asserv/doc/asserv.txt b/digital/asserv/doc/asserv.txt new file mode 100644 index 00000000..fdf9ad5f --- /dev/null +++ b/digital/asserv/doc/asserv.txt @@ -0,0 +1,126 @@ +============================================= + Asserv: Microcontroller based motor control +============================================= +:Author: Ni + +Encoders +======== + +To control a motor using a PID, a feedback is needed. Its role is to measure +the position of the rotor shaft. One commonly used solution is the +optical incremental encoder. This encoder has a determined number of +positions. It will output an impulsion each time its position change, with a +second output which make it possible to determine the rotation direction. + +Some encoders also output an index signal used to know the exact shaft +position after initialisation. + +Encoders signals +---------------- + +The two output channels are usually named A and B. The encoder wheel will +generate two square waveforms, with a 90 degrees phase shift. The B channel +will generate counting impulsions, the A channel will be used to determine the +direction (actually, A and B can be swapped). Here is a example waveform for +an encoder turning smoothly in a given direction:: + + A: _____------______------______---- + B: --______------______------______- + Pos: ^0 ^1 ^2 + +The ``^`` symbol show the transition between positions. Here is a more +chaotic movement:: + + A: _____--------------------______-------______---- + B: --______--------------------______---______----- + Pos: ^0 ^1 ^0 + +After the transition to the position 0, the rotor stayed steady, then +continued to the position 1. Finally, it continued in the same direction for +less than a position and returned to position 0. + +If this does not seems clear to you, wait, there is a simpler view below. + +Encoders which are sold for 500 positions will generate 500 positive edges per +turn on each channel. + +Actually, the resolution of the encoder can be improved, and moreover, with a +simpler view of the signal. The A and B channels can be seen as a Grey coding +of four sub-positions (the Grey code defines a sequence of binary number where +each number differ from the previous or the following one by one and only one +bit): + += = ======== +B A Position += = ======== +0 0 0 +0 1 1 +1 1 2 +1 0 3 += = ======== + +With this system, it is easy to know what is the rotation direction. Just +look at the sub-positions and determine if the new one is before or after the +old one. + +Here is the same waveform with this new way of thinking:: + + A: _____------______------______----- + B: --______------______------______-- + SPos: ^0 ^1 ^2 ^3 ^0 ^1 ^2 ^3 ^0 ^1 ^2 + Pos: 0 1 2 3 4 5 6 7 8 9 10 + +``SPos`` is the sub-position. + +Decoding, the D flip-flop schematic +----------------------------------- + +One commonly used schematic to decode this kind of signal uses a single D +flip-flop. This kind of flip-flop copies its D input to its Q output on each +clock rising edge. Here is this schematic: + +TODO: insert the schematic + +On each B rising edge, A is copied to the flip-flop output. If the rotor is +going forward, Q will be low. If the rotor is going backward, Q will be high. +The B signal is also connected to the clock input of a counter and Q to its +direction input. + +This schematic has one major drawback. Look at this waveform:: + + A: ______------__________------______ + B: ___------______----______------___ + SPos: 0 ^3 ^2 ^1 ^0 ^3 ^0 ^1 ^2 ^3 ^0 + Pos: 0 -1 -2 -3 -4 -5 -4 -3 -2 -1 0 + Q: _________________________--------- + Count: ^- ^- ^+ + Pos: 0 -1 -2 -1 + +TODO: to better show the problem, the counter should be defined. If it count +on the rising edge, does it take the old or the new value of Q (new for a +software counter, old for a programmable logic one for example). + +Decoding, the four states automaton +----------------------------------- + +This decoding use the observation done before about the Grey encoding of the +four sub-positions. + +At a given time, the automaton is in one of the four states defined by the A +and B signals. When one of the signals changes, the automaton switches to the +new state, incrementing or decrementing the position counter: + +.. image:: decoder_states.png + :alt: Automaton states + +Decoding, less resolution without losing steps +---------------------------------------------- + +In the D flip-flop solution, the problem is that the increment is done on a +different edge from the decrement. This solution address this problem. + +When A is low, count up if B goes from 1 to 0, and count down if B goes from 1 +to 1. Do nothing if A is high. + +This solution give more accuracy than the single D flip-flop (i.e. does not +lose steps) without the extra needed bits of the full automaton solution. diff --git a/digital/asserv/doc/decoder_states.svg b/digital/asserv/doc/decoder_states.svg new file mode 100644 index 00000000..6e4a6d59 --- /dev/null +++ b/digital/asserv/doc/decoder_states.svg @@ -0,0 +1,402 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + 0 + + + + 2 + + + + 3 + + + + 1 + + + + + + + + + + + + + + + + + + - + - + - + - + + + -- cgit v1.2.3