Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to program the Arduino to make the servo do variable speed movement?

Justinli

Member level 2
Joined
Apr 29, 2021
Messages
44
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
225
I bought an Arduino controller online and bought several bus servos to make a quadruped robot. I want to use Arduino to control the servo variable speed movement and can show it on the LCD display in real-time.
I found that the control program given by the store can only realize the uniform motion of the servo mode, and I would like to ask how to program the algorithm to realize the variable speed motion of the servo bionic.
 

Aussie Susan

Advanced Member level 4
Joined
Jan 5, 2015
Messages
1,281
Helped
382
Reputation
764
Reaction score
383
Trophy points
83
Activity points
13,848

KlausST

Super Moderator
Staff member
Joined
Apr 17, 2014
Messages
19,944
Helped
4,370
Reputation
8,749
Reaction score
4,352
Trophy points
1,393
Activity points
132,017
Hi

Do an internet search:
"How to control a model servo"
Then
"Arduino PWM"
Then
"Arduino server control"

It's all done before, all documented, even libraries and videos are available.
May I ask what you did to find the information on your own?

Klaus
 

Justinli

Member level 2
Joined
Apr 29, 2021
Messages
44
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
225
From what I read in the data sheet for that servo (https://github.com/microrobotics/DS3235-270/blob/master/DS3235-270_datasheet.pdf) the PWM sets the angle (which is rather common for this type of servo) but the only thing that changes the rotation speed is the supply voltage (item 3-2 in the reference document) and that not by much.
Susan
So I need to change the speed of the servo by changing the supply voltage?
Is it possible to achieve variable speed by using delay.( )?
--- Updated ---

Hi

Do an internet search:
"How to control a model servo"
Then
"Arduino PWM"
Then
"Arduino server control"

It's all done before, all documented, even libraries and videos are available.
May I ask what you did to find the information on your own?

Klaus
But Aussie Susan said PWM is not controlling speed but the angle, most of the examples I searched are uniform speed, I don't know much about servos yet, so I'm sorry if this makes you feel unpleasant.
 

c_mitra

Advanced Member level 5
Joined
Nov 13, 2012
Messages
3,687
Helped
914
Reputation
1,830
Reaction score
891
Trophy points
1,393
Activity points
28,885
No, it is a kind of stepper; depending on the PWM width it moves 90, 180 or 270 deg. Common steppers are 1.8 deg (200 pulses per turn)

Program to set pwm for 90 deg step. Then set the gap between the pulses to control speed.

The movement will be jerky but that is the way it works!
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,519
Helped
14,272
Reputation
28,807
Reaction score
12,976
Trophy points
1,393
Location
Bochum, Germany
Activity points
280,609
Obviously servo supply will affect the maximum speed. Variable speed will be achieved by varying the set point in a ramp instead of hard steps. It's a basic programming problem that hasn't much to do with the specific servo type.
--- Updated ---

No, it is a kind of stepper; depending on the PWM width it moves 90, 180 or 270 deg. Common steppers are 1.8 deg (200 pulses per turn)
No stepper. A DC motor with position feedback and controller.
 

c_mitra

Advanced Member level 5
Joined
Nov 13, 2012
Messages
3,687
Helped
914
Reputation
1,830
Reaction score
891
Trophy points
1,393
Activity points
28,885
No stepper. A DC motor with position feedback and controller.

It runs on pulses, not DC. The motor has two wires, it is not a typical servo.

The datasheet calls it a servo but it does not report the position, much like a stepper.

The dead time is 2 us and it should be able to move fast. Max freq specified is 50-330 Hz; not great.

More similar to clock motors; but they call it "coreless digital servo", whatever that may mean...
 

KlausST

Super Moderator
Staff member
Joined
Apr 17, 2014
Messages
19,944
Helped
4,370
Reputation
8,749
Reaction score
4,352
Trophy points
1,393
Activity points
132,017
Hi,

it is a standard servo for model cars. .. as far as I can see. Nothing special.
It has DC input and a PWM control line (3 wires in total) to control the angle.

Inside:
There is
* a DC motor (usually)
* a position feedback pot
* and a control electronic.
The electronic is a regulation loop. The setpoint is given by the PWM, the actual position by the pot and the electronics controls the motor in a way that it moves the servo mechanics to the desired position.

Klaus
 

Justinli

Member level 2
Joined
Apr 29, 2021
Messages
44
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
225
Hi,

it is a standard servo for model cars. .. as far as I can see. Nothing special.
It has DC input and a PWM control line (3 wires in total) to control the angle.

Inside:
There is
* a DC motor (usually)
* a position feedback pot
* and a control electronic.
The electronic is a regulation loop. The setpoint is given by the PWM, the actual position by the pot and the electronics controls the motor in a way that it moves the servo mechanics to the desired position.

Klaus
Yes but my problem is that I want it to be able to do variable speed motion, not the angle.
If you know of some suitable examples please also write links in your reply, thank you very much!
--- Updated ---

No, it is a kind of stepper; depending on the PWM width it moves 90, 180 or 270 deg. Common steppers are 1.8 deg (200 pulses per turn)

Program to set pwm for 90 deg step. Then set the gap between the pulses to control speed.

The movement will be jerky but that is the way it works!
Do I need to follow your approach to programming? Do you have some programming examples of this?
 

c_mitra

Advanced Member level 5
Joined
Nov 13, 2012
Messages
3,687
Helped
914
Reputation
1,830
Reaction score
891
Trophy points
1,393
Activity points
28,885
Do I need to follow your approach to programming? Do you have some programming examples of this?
Simplest approach will be to take an existing working code and insert suitable delays in the PWM pulse train. The delay function commonly used in arduino standard library is interrupt inefficient (my knowledge is rusted) but you can insert in the pwm code very easily.

Why reinvent the wheel because it will add to debugging time and effort and nothing new to knowledge. The thin wire is connected to PWM??
--- Updated ---

The electronic is a regulation loop. The setpoint is given by the PWM, the actual position by the pot and the electronics controls the motor in a way that it moves the servo mechanics to the desired position.

Klaus
I see. Thanks for the clarification.
--- Updated ---

Yes but my problem is that I want it to be able to do variable speed motion, not the angle.
If you know of some suitable examples please also write links in your reply, thank you very much!
--- Updated ---


Do I need to follow your approach to programming? Do you have some programming examples of this?
You can get some hint at https://www.arduino.cc/en/pmwiki.php?n=Tutorial/SecretsOfArduinoPWM

First see that the overall frequency is within the specified limit: i.e., 50-330 Hz (this will be the PWM frequency output by arduino)

Select step size of the servo: 0.5 us, 1 us or 2 us (this will be the on time for the square pulse; look up the proper register for this.

You get a range of 6 fold (50-330Hz) speed range and 2 fold (90deg or 180deg per pulse)- total 12 fold speed

You can try values outside these range too.

By the way, the angle is like phase; 90 deg step per pulse means 1/4 turn and so on. Total RPM depends on the frequency * (1/4 for 90deg pulse or 1/2 for 180 deg pulse)
 
Last edited:

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
48,519
Helped
14,272
Reputation
28,807
Reaction score
12,976
Trophy points
1,393
Location
Bochum, Germany
Activity points
280,609
Select step size of the servo: 0.5 us, 1 us or 2 us (this will be the on time for the square pulse; look up the proper register for this.
You get a range of 6 fold (50-330Hz) speed range and 2 fold (90deg or 180deg per pulse)- total 12 fold speed
You can try values outside these range too.
You seem still to misunderstand the servo operation principle. The position of the servo is continuously controlled by a pulse width of 0.5 to 2.5 ms. In practice, the resolution is limited by the Arduino pwm register width as well as by the decoder inside a digital servo. As the datasheet tells, there's a 2 µs (1/1000 of total set point range) dead band, respectively the angle resolution is about 0.3 degree.
 

c_mitra

Advanced Member level 5
Joined
Nov 13, 2012
Messages
3,687
Helped
914
Reputation
1,830
Reaction score
891
Trophy points
1,393
Activity points
28,885
You seem still to misunderstand the servo operation principle. The position of the servo is continuously controlled by a pulse width of 0.5 to 2.5 ms. In practice, the resolution is limited by the Arduino pwm register width as well as by the decoder inside a digital servo. As the datasheet tells, there's a 2 µs (1/1000 of total set point range) dead band, respectively the angle resolution is about 0.3 degree.
It is entirely possible that I have misunderstood some points. If the servo cannot rotate full 360 deg (one complete turn), it may be only good for setting angles.

But the datasheet says that it can rotate in one direction (CCW) only. That may mean that the internal potentiometer is a 360 deg encoder.

May be it cannot move full 360 deg and I am wrong in that case.

Thanks for setting me on the right way
 

Justinli

Member level 2
Joined
Apr 29, 2021
Messages
44
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
225
Hi.

Why servos in a quadcopter?
What are they used for?

Klaus
I'd like to take a servo motor simulation first, I guess maybe they are very similar, as long as the replacement small servo can operate that formal robot can also operate in this way. But I could be wrong and I might need more help from you.
--- Updated ---

You seem still to misunderstand the servo operation principle. The position of the servo is continuously controlled by a pulse width of 0.5 to 2.5 ms. In practice, the resolution is limited by the Arduino pwm register width as well as by the decoder inside a digital servo. As the datasheet tells, there's a 2 µs (1/1000 of total set point range) dead band, respectively the angle resolution is about 0.3 degree.
Thanks for your patient explanation, I don't know much about servo, maybe I need more help from you.
 
Last edited:

KlausST

Super Moderator
Staff member
Joined
Apr 17, 2014
Messages
19,944
Helped
4,370
Reputation
8,749
Reaction score
4,352
Trophy points
1,393
Activity points
132,017
I'd like to take a servo motor simulation first, I guess maybe they are very similar, as long as the replacement small servo can operate that formal robot can also operate in this way. But I could be wrong and I might need more help from you.
A servo motor simulation .... only you know what this means.
They are very similar .... to what?
As long as the replacement servo ... I have no idea
that formal robot can also operate in this way ... what robot? Which way?

But I could be wrong and I might need more help from you. .... Without clear information I can't help.

I have no idea what you want to achieve.

Klaus
 

Justinli

Member level 2
Joined
Apr 29, 2021
Messages
44
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
225
It is entirely possible that I have misunderstood some points. If the servo cannot rotate full 360 deg (one complete turn), it may be only good for setting angles.

But the datasheet says that it can rotate in one direction (CCW) only. That may mean that the internal potentiometer is a 360 deg encoder.

May be it cannot move full 360 deg and I am wrong in that case.

Thanks for setting me on the right way
Thanks for your enthusiastic reply too, maybe I need to learn a bit about how the servo works from the basics.
 

KlausST

Super Moderator
Staff member
Joined
Apr 17, 2014
Messages
19,944
Helped
4,370
Reputation
8,749
Reaction score
4,352
Trophy points
1,393
Activity points
132,017
maybe I need to learn a bit about how the servo works from the basics.
I have internet. I can do internet search, like "how does a model servo work video". Thousands of hits.

May I ask why you don't do this on your own?

Klaus
 

LaTeX Commands Quick-Menu:

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top