一、舵机s90
二、舵机原理
首先看一般舵机的原理,舵机内部有一个基准电路,产生周期为20ms,高电平宽度为1.5ms的基准信号,这个位置其实是舵机转角的中间位置。通过比较信号线的PWM信号与基准信号,内部的电机控制板得出一个电压差值,将这个差值加到电机上控制舵机转动。控制舵机的高电平范围为0.5ms到2.5ms。0.5ms为最小角度,2.5ms为最大角度。
以180度舵机为例:
0.5ms----------------0度;
1ms -----------------45度;
1.5ms----------------90度;
2ms -----------------135度;
2.5ms ---------------180度;
舵机是一个伺服电机,属于伺服系统控制,伺服系统(servomechanism)又称随动系统,是用来精确地跟随或复现某个过程的反馈控制系统。伺服系统使物体的位置、方位、状态等输出被控量能够跟随输入目标(或给定值)的任意变化的自动控制系统。舵机的转动由PWM脉冲控制,每经过一个脉冲舵机转过一个特定的角度。同时舵机是一个闭环控制系统,因为,伺服电机本身具备发出脉冲的功能,所以伺服电机每旋转一个角度,都会发出对应数量的脉冲,这样,和伺服电机接受的脉冲形成了呼应,或者叫闭环,如此一来,系统就会知道发了多少脉冲给伺服电机,同时又收了多少脉冲回来,这样,就能够很精确的控制电机的转动,从而实现精确的定位。
三、舵机测试代码
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
#include <wiringPi.h>
#define SG90Pin 1
static int i = 0;
int jd;
void signal_handler(int signum)
{
if(i <= jd){
digitalWrite(SG90Pin,HIGH);
}else{
digitalWrite(SG90Pin,LOW);
}
if(i == 40){
i=0;
}
i++;
}
int main()
{
struct itimerval itv;
wiringPiSetup();
pinMode(SG90Pin,OUTPUT);
//设定定时器时间
itv.it_interval.tv_sec = 0;
itv.it_interval.tv_usec = 500;
//设定开始生效,启动定时器的时间
itv.it_value.tv_sec = 1;
itv.it_value.tv_usec = 0;
//设定定时方式
if(-1 == setitimer(ITIMER_REAL,&itv,NULL)){
perror("error");
exit(-1);
}
signal(SIGALRM,signal_handler);
while(1){
scanf("%d",&jd);
}
return 0;
}
四、说明
本次实验使用的是wiringOP-master.zip。