erickone96 Posted November 28, 2016 Report Share Posted November 28, 2016 Hey there, I have been working in a dc motor control project. So far I got the motor running open loop pretty good (clockwise and counter clockwise), and now I wanna implement a closed loop speed feedback. I tried using the quadrature decoder to read the pulses coming from an quadrature incremental encoder. So this is what I read at approx. 1720 rpm Pulse Count 33133033 Speed -17034 Speed Radians: -36.43 Pulse Count 33130475 Speed -17296 Speed Radians: -36.16 Pulse Count 33127931 Speed -17003 Speed Radians: -36.05 Pulse Count 33125396 Speed -16801 Speed Radians: -37.98 Pulse Count 33122854 Speed -17035 Speed Radians: -36.73 Pulse Count 33120307 Speed -16784 Speed Radians: -36.69 It is negative because its rotating counter clockwise. Why is it too inaccurate? I have attached my project just in case someone wants to take a look at it. Thanks, code02.zip P.D. The motor runs at 4000 rpm max. Encoder specs: 1000 ppr. A, B, and I. Quote Link to comment Share on other sites More sharing options...
Jack Gassett Posted November 29, 2016 Report Share Posted November 29, 2016 Is it counting steps accurately? Can you have your stepper spin for a certain amount of steps and see if the count matches what you sent? Jack. Quote Link to comment Share on other sites More sharing options...
erickone96 Posted November 30, 2016 Author Report Share Posted November 30, 2016 Hey Jack, The decoder is giving me a good reading of getSpeed function type 0 (96MHz clock ticks for 5 A_clock pulses). I am able to compute the RPM and then average 40 readings giving me a pretty good and fast RPM reading. The only issue now is that I get an average RPM = 0 everynow and then. Not sure what could be causing it since decoder seems to be working properly. I'm using this method to average the RPM: https://www.arduino.cc/en/Tutorial/Smoothing And this is how Im computing the RPM for example: Robot_Control_Library.getSpeed(0): 37366 Time for the 5 pulses: 37366 x 10.4ns 5 pulsles out of 1000 ppr = 0.005 V = 0.005 rev / 387us = 12.9 rev/s x 60 = 774 rpm. In my code, Im computing it as: rpmreading = 28846153/ Robot_Control_Library.getSpeed(0). Im guessing that the prob is because of the large numbers in the computation ? Any suggestions ? Thanks, Ruben Quote Link to comment Share on other sites More sharing options...
erickone96 Posted November 30, 2016 Author Report Share Posted November 30, 2016 Nevermind, I was reading the rpm value from the register where I was sending it. I changed the Serial.print(RPM) and didnt show any 0 anymore lol. Thanks though! Quote Link to comment Share on other sites More sharing options...
Jack Gassett Posted November 30, 2016 Report Share Posted November 30, 2016 Awesome! Looks like you are making steady progress with this. Can you share with us what project you are working on? Pictures would be even better! Jack. Quote Link to comment Share on other sites More sharing options...
erickone96 Posted November 30, 2016 Author Report Share Posted November 30, 2016 Sure thing. I will do that as soon as I finish it. Erick Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.