From c1c2cb7c71d793d4f330391c34201a4f1e29d99b Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Sun, 15 Aug 2021 17:26:48 +0100 Subject: [PATCH] ENCODERS.md: Add note on missed pulses. encoder.py: replace property with function. --- encoders/ENCODERS.md | 6 ++++++ encoders/encoder.py | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/encoders/ENCODERS.md b/encoders/ENCODERS.md index 3f0c79e..097bb0e 100644 --- a/encoders/ENCODERS.md +++ b/encoders/ENCODERS.md @@ -92,6 +92,12 @@ hardware may need to be adapted to limit the rate at which signals can change, possibly with a CR low pass filter and a schmitt trigger. This clearly won't work if the pulse rate from actual shaft rotation exceeds this limit. +In a careful test on a Pyboard 1.1 with an optical encoder pulses were +occasionally missed. My guess is that, on rare occasions, pulses can arrive too +fast for even hard IRQ's to keep track. For machine tool applications, the +conclusion would seem to be that hardware decoding or possibly a rate limiting +circuit is required. + # Problem 3: Concurrency The presented code samples use interrupts in order to handle the potentially diff --git a/encoders/encoder.py b/encoders/encoder.py index 0843dd7..9f8da70 100644 --- a/encoders/encoder.py +++ b/encoders/encoder.py @@ -24,7 +24,6 @@ class Encoder: self.forward = self.pin_x.value() ^ self.pin_y.value() ^ self.reverse ^ 1 self._pos += 1 if self.forward else -1 - @property def position(self): return self._pos*self.scale