Clear Filters
Clear Filters

DC Motor Position Control using Potentiometer as a Feedback

125 views (last 30 days)
I am trying to control the position of a dc motor using a potentiometer as a feedback (on simulink). The idea is to input an angle from 0 to 180 degrees and then motor will spin clockwise or anti-clockwise (depending on it's physical position) until it gets to the desired angle. My goal is to implement a P controller on this process (getting to the desired angle). The problem is that I am confused on how to express the problem on it. At first I have a similar setup as the one in Picture 1. After that, in Picture 2, I have expressed the dc motor's speed with a constant and I have used Digital Pin 9 for PWM. So 0 means that dc motor will not spin and 255 means that dc motor will spin at its highest speed. Potentiometer is connected at pin 5 and its value is shown on the simulink's display. Both dc motor's speed and potentiometer's value are working and I would like some suggestions at Picture 2. My idea is to set a desired angle as a constant, do you think that it will work with a constant block? Also, I am confused on how am I going to connect dc motor's speed and potentiometers value with my P controller, can you suggest me a way? One last thing is, how can I get the current angle and then fix the error in order to get to the desired angle, any ideas?
Thank you so much for your time, appreciate your help !
Excuse me for any mistakes !
Picture 2: Thoughts of the model in Simulink
Christos Tsallis
Christos Tsallis on 11 Jan 2022
Edited: Christos Tsallis on 11 Jan 2022
So my PID's input is going to be random again? Did I understand correctly?
Mathieu NOE
Mathieu NOE on 12 Jan 2022
yes , basically replace the step block by the random generator and record the PID output along with the position sensor signal

Sign in to comment.

Answers (2)

Christos Tsallis
Christos Tsallis on 12 Jan 2022
Hello, I am facing some issues. At first, my PID’s output is the PWM signal which controls the speed of the dc motor. If this speed is less than 65, motor can’t spin at all. I tried to tune again the P value by myself (I=0, D=0) with the Random Number Generator Block as an input. I set its main value equal to 90 and its variance 30 (for RNG block). The problem is that when it oscillates for one random number it goes close to this random value and after that cause of the PWM’s output is less than 65 it doesn’t move at all (when a new RNG value occurs). So at the scope there are less than 5 seconds which they show the system’s response… The DC motor which I use is called TT DC Gear Motor and it operates at 3 - 6 Volts. It’s “datasheet” can be seen here: Do you think that I need a better dc motor in order to fix my problem ? Thank you for your time, appreciate your help !
Christos Tsallis
Christos Tsallis on 27 Jan 2022
Hello Sir,
a lot of days have past since my last message, excuse me about that.
I haven't yet connected my PID controller to the SG90 Servo, but I bought the following motor :
I bought it cause on its datasheet there are all the required variables that are needed in order to simulate a DC Motor in simulink and then get the best PID values using Auto-Tune. So, I will replace my current TT DC Gear motor with this and I will see the results...
I will inform you again, when it will be on my hands !
Thank you for everything !
Mathieu NOE
Mathieu NOE on 28 Jan 2022
ok - sounds good
I see the gear ratio is only 1/52
all the best for the future

Sign in to comment.

Noor Amira Ilyanie
Noor Amira Ilyanie on 4 Aug 2022
what is 0 to 255 unit? is it voltage or rpm? or bit?


Find more on Control Algorithm Design in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!