目录
工作原理
舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度(高电平)从0.5ms-2.5ms,相对应舵盘的位置为0—180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。
控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动—系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。1° = 500us/45 = 11.1us
舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度。
代码
#include <wiringPi.h>
#include <stdio.h>
int main()
{
wiringPiSetupGpio(); //当使用这个函数初始化树莓派引脚时,程序中使用的是BCM GPIO 引脚编号表。
pinMode(1,OUTPUT);
while(1)
{
digitalWrite(1,HIGH);
delayMicroseconds(500);
digitalWrite(1, LOW);
delayMicroseconds(19500);
}
return 0;
}
wiringPiSetupGpio();要用sudo超级权限操作
硬件PWM
#include <stdio.h>
#include <wiringPi.h>
int Pwmpin = 18; ////物理引脚12对应的是BCM的18引脚
int main()
{
wiringPiSetupGpio();
pinMode(Pwmpin, PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetRange(2000); //周期设置为2000,最终我们要通过时钟,分频,配置最终频率为50hz才能得出20ms,舵机就是20ms
pwmSetClock(192);
//50hz = 19.2M/192/2000
pwmWrite(Pwmpin, 150); //2000对应20ms,我们让他转90°是1.5ms,对应150
delay(1000);
pwmWrite(Pwmpin, 200);
return 0;
}