ARM®mbed OS入门开发 按键控制舵机旋转
舵机是一种位置带齿轮减速的伺服驱动器, 其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号, 将获得的直流偏置电压与电位器的电压比较,获得电压差输出。经由电路板上的IC 判断转动方向, 再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回信号,判断是否已经到达定位。 适用于那些需要角度不断变化并可以保持的控制系统。当电机转速一定时, 通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。一般舵机旋转的角度范围是0 度到180 度。 舵机的转动的角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的, 标准PWM(脉冲宽度调制)信号的周期固定为20ms(50Hz),理论上脉宽分布应在1ms到2ms 之间, 但是,事实上脉宽可由0.5ms 到2.5ms 之间,脉宽和舵机的转角0°~180°相对应。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。 以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 这只是一种参考数值,具体的参数,请参见舵机的技术参数。小型舵机的工作电压一般为4.8V或6V,转速也不是很快, 一般为0.22/60度或0.18/60度,所以假如你更改角度控制脉冲的宽度太快时,舵机可能反应不过来。 如果需要更快速的反应,就需要更高的转速了。 本例程用的舵机型号为TOWER PRO SG90的三根线分别用棕、红、橙三种颜色进行区分, 棕色为接地线,红色为电源正极线,橙色为信号线。
本程序中将信号线接到D9引脚,模拟输出PWM信号。
//mbed+nucleo070
//按键控制舵机左右转,复位键舵机复位
#include "mbed.h"
#include "Servo.h"//mbed里simen的舵机库
Servo myservo(D9);//舵机控制引脚
DigitalOut myled(LED1);
DigitalOut myled1(LED2);
DigitalIn pb(USER_BUTTON);//用户键按下左转
DigitalIn pb1(D10); //另一键按下右转,照片无此键
int button1=0;
int button2=0;
float servo=0;
// SPST Pushbutton demo using internal PullUp function
// no external PullUp resistor needed
// Pushbutton from P8 to GND.
int main()
{
myservo=0;
pb.mode(PullUp);
pb1.mode(PullUp);
while(1)
{
myled = pb;
myled1 = pb1;
if(pb==0)
{
myservo = myservo+0.1;
wait(0.2);
}
else if(pb1==0)
{
myservo=myservo-0.1;
wait(0.2);
}
}
}
|