CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug Reports on this forum. Send them to support@ccsinfo.com

Suggestions for implementing a rotary (quadrature) encoder.

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
JAM2014



Joined: 24 Apr 2014
Posts: 135

View user's profile Send private message

Suggestions for implementing a rotary (quadrature) encoder.
PostPosted: Tue May 03, 2022 1:47 pm     Reply with quote

Hi All,

I have a new project design that uses a rotary encoder for user input. The encoder is a CTS series 290 (Digikey CT3007-ND), which is a 2 bit quadrature encoder with 20 pulses per revolution, paired with a momentary switch. In the design prototype, I currently have the 'A', 'B', and 'SW' encoder connections made to RD4, RD5, and RD6 of an 18F45K50 PIC. I 'poll' these inputs periodically using an interrupt generated timer 'tick' every 50mS. This seems to work 'OK', but is not really 100% robust and reliable. Other timer 'ticks' execute every 100mS for a PID control loop, and every 1S for a display update....

I'm about to have a 2nd prototype PCB made, and I'm thinking of changing the encoder 'A', 'B', and 'SW' connections to RC0, RC1, and RC2 on the PIC to take advantage of the IOC capability of the 18F45K50. I've also added an RC filter and Schmitt trigger buffer to each of the three encoder connections so the outputs are really clean with nice edges!

If you were designing a new PIC circuit with a rotary encoder, is this how you'd connect the encoder? Is this the encoder you'd use? Are there better/easier encoder devices, and is there a better/different way to connect it?

I'm NOT 100% wedded to this encoder, or this PIC, although I do need a USB capable PIC for this project!

Thanks,

Jack
temtronic



Joined: 01 Jul 2010
Posts: 8511
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue May 03, 2022 2:04 pm     Reply with quote

Used to use HP encoders, then switched to LSI/CSI, FAR superior, simple to install....just looked online, while they still sell the encoders 'chips', didn't see any actual encoders..hmmm....

I would use the IOC pins if possible..grab a breadboard, cut code, test it out....
CCS may have an example ? They do for 'polled' I believe ??
newguy



Joined: 24 Jun 2004
Posts: 1803

View user's profile Send private message

PostPosted: Tue May 03, 2022 2:12 pm     Reply with quote

That's how I've done it in the past, although I had wired mine to pins B4-B6 to take advantage of the INT_RB of the 18F452 I used at the time.

Interrupt occurs, read the state of the port (pins), determine the current state, compare with last state, and you know direction of turn. Bonus points: race this interrupt against a timer to determine rate of turn. Slow turns (timer wins): increment/decrement by one. Fast turns (change interrupt wins), increment/decrement by 5 or 10.
Ttelmah



Joined: 11 Mar 2010
Posts: 17981

View user's profile Send private message

PostPosted: Wed May 04, 2022 12:41 am     Reply with quote

Three different ways of doing this 'sensibly'.

1) Use an external decoder.
2) Use a PIC that has a quadrature decoder built in. Devices like the 4431.
3) As others have said, use IOC (INT_RB). I've done IOC with a highly
optimised interrupt handler with a 10000 line opto sensor in the past,
and merrily handled 400RPM at this resolution.

Have a look at this thread (and the links from it):

[url]
http://www.ccsinfo.com/forum/viewtopic.php?t=44491&postdays=0&postorder=asc&highlight=quad&start=15
[/url]
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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