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); } } } |
库作者Simon Ford
|
有机会弄弄 |
支持一下。 |
支持一下!! |
谢谢分享学习一下 |
666,原来Mbed还有直接控制舵机的函数 |
支持!!! |
Nicede 的帖子 |
有导出的keil工程吗? 需要一个STM32F103C8T6 的工程,自己导出来的编译错误太多了 |