Add quadrature encoder starter course
This commit is contained in:
commit
032ef0a15b
5 changed files with 140 additions and 0 deletions
9
README.md
Normal file
9
README.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Quadrature Encoder Course
|
||||||
|
|
||||||
|
This sample course repo is for the Robot U prototype.
|
||||||
|
|
||||||
|
It is intentionally small and follows the course structure the site expects:
|
||||||
|
|
||||||
|
- `lessons/<chapter>/<lesson>/<markdown-file>.md`
|
||||||
|
|
||||||
|
The course walks from raw encoder signals to closed-loop motor control.
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
title: Meet the Quadrature Encoder
|
||||||
|
summary: Learn what the A and B channels are and why their phase offset lets you count motion.
|
||||||
|
chapter: Reading Encoder Signals
|
||||||
|
order: 1
|
||||||
|
tags:
|
||||||
|
- encoders
|
||||||
|
- motors
|
||||||
|
- feedback
|
||||||
|
estimated_minutes: 8
|
||||||
|
---
|
||||||
|
|
||||||
|
# Meet the Quadrature Encoder
|
||||||
|
|
||||||
|
A quadrature encoder gives you two square-wave signals, usually called `A` and `B`.
|
||||||
|
|
||||||
|
Those signals toggle as the shaft turns. The important detail is that they do not toggle at the same time. One channel leads the other by a quarter of a cycle, which is where the name quadrature comes from.
|
||||||
|
|
||||||
|
That phase offset gives you two useful facts:
|
||||||
|
|
||||||
|
1. You can count edges to measure motion.
|
||||||
|
2. You can compare which signal leads to determine direction.
|
||||||
|
|
||||||
|
## What you should observe
|
||||||
|
|
||||||
|
- Slow rotation produces clean transitions you can inspect with a logic analyzer.
|
||||||
|
- Reversing the shaft swaps which channel leads.
|
||||||
|
- More pulses per revolution means finer position measurement.
|
||||||
|
|
||||||
|
## Checkpoint
|
||||||
|
|
||||||
|
Capture both channels while rotating the shaft by hand and confirm that one channel leads the other.
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
title: Counting Direction and Steps
|
||||||
|
summary: Decode edges from the A and B channels to recover step count and direction.
|
||||||
|
chapter: Reading Encoder Signals
|
||||||
|
order: 2
|
||||||
|
tags:
|
||||||
|
- decoding
|
||||||
|
- interrupts
|
||||||
|
- firmware
|
||||||
|
estimated_minutes: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
# Counting Direction and Steps
|
||||||
|
|
||||||
|
Once you can read the A and B channels, the next job is decoding.
|
||||||
|
|
||||||
|
The most common approach is:
|
||||||
|
|
||||||
|
- trigger on an edge
|
||||||
|
- read both channels
|
||||||
|
- use a lookup table or state machine to update the count
|
||||||
|
|
||||||
|
If your decoder sees illegal state jumps, you are probably dropping edges or reading a noisy signal.
|
||||||
|
|
||||||
|
## Practical notes
|
||||||
|
|
||||||
|
- Start with low shaft speed.
|
||||||
|
- Add debounce or filtering only if the hardware needs it.
|
||||||
|
- Test forward and reverse explicitly.
|
||||||
|
|
||||||
|
## Checkpoint
|
||||||
|
|
||||||
|
Write firmware that increments a counter when the shaft turns forward and decrements when it turns backward.
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
title: Measuring Wheel Speed
|
||||||
|
summary: Convert encoder counts over time into rotational speed for a drive wheel.
|
||||||
|
chapter: Using Encoder Feedback
|
||||||
|
order: 1
|
||||||
|
tags:
|
||||||
|
- speed
|
||||||
|
- odometry
|
||||||
|
- robotics
|
||||||
|
estimated_minutes: 9
|
||||||
|
---
|
||||||
|
|
||||||
|
# Measuring Wheel Speed
|
||||||
|
|
||||||
|
Position counts become useful control signals once you add time.
|
||||||
|
|
||||||
|
To estimate wheel speed:
|
||||||
|
|
||||||
|
1. sample the encoder count at a fixed interval
|
||||||
|
2. subtract the previous count from the current count
|
||||||
|
3. divide by the sample period
|
||||||
|
4. convert counts per second into revolutions per second or wheel surface speed
|
||||||
|
|
||||||
|
## Why this matters
|
||||||
|
|
||||||
|
Speed feedback is the bridge between open-loop motor commands and predictable robot motion.
|
||||||
|
|
||||||
|
If two drive motors get the same PWM value but spin at different speeds, your robot will drift. Encoder-based speed estimation lets you detect and correct that mismatch.
|
||||||
|
|
||||||
|
## Checkpoint
|
||||||
|
|
||||||
|
Plot wheel speed over time while ramping the motor command up and down.
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
title: Closing the Loop with a PID
|
||||||
|
summary: Use encoder speed feedback to hold a target wheel speed with a simple controller.
|
||||||
|
chapter: Using Encoder Feedback
|
||||||
|
order: 2
|
||||||
|
tags:
|
||||||
|
- control
|
||||||
|
- pid
|
||||||
|
- robotics
|
||||||
|
estimated_minutes: 12
|
||||||
|
---
|
||||||
|
|
||||||
|
# Closing the Loop with a PID
|
||||||
|
|
||||||
|
With encoder speed feedback in place, you can command a target speed and adjust motor output based on error.
|
||||||
|
|
||||||
|
The basic control loop is:
|
||||||
|
|
||||||
|
- measure current speed
|
||||||
|
- compute `error = target - measured`
|
||||||
|
- update the controller
|
||||||
|
- send the new motor command
|
||||||
|
|
||||||
|
Start simple. A proportional controller is often enough to prove the loop works before adding integral or derivative terms.
|
||||||
|
|
||||||
|
## What good behavior looks like
|
||||||
|
|
||||||
|
- the wheel reaches the target speed quickly
|
||||||
|
- overshoot stays limited
|
||||||
|
- the response remains stable when load changes
|
||||||
|
|
||||||
|
## Checkpoint
|
||||||
|
|
||||||
|
Tune a controller so the wheel returns to the target speed after you briefly drag on the tire by hand.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue