
int readPin = 0; //用来连接电位器
int servopin = 7; //定义舵机接口数字接口7
void servopulse(int angle)//定义一个脉冲函数
{
int pulsewidth=(angle11)+500; //将角度转化为500-2480的脉宽值
digitalWrite(servopin,HIGH); //将舵机接口电平至高
delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
digitalWrite(servopin,LOW); //将舵机接口电平至低
delayMicroseconds(20000-pulsewidth);
}
voidsetup()
{
pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
}
voidloop()
{
//读取电位器(传感器)的读数,接到33V,值范围从0到660左右
int readValue = analogRead(readPin);
//把值的范围映射到0到165左右
int angle = readValue / 4;
//发送50个脉冲
for(int i=0;i<50;i++)
{
//引用脉冲函数
servopulse(angle);
}
}
先要知道舵机控制的原理,控制波形PWM的占空比决定了舵机的控制角度,你需要每个角度它所对应的占空比是多少,从1个角度转到另1个角度是占空比慢慢转变的过程,而波形的周期是不变的。接下来就是单片机控制PWM波形占空比的实现,这个比较简单,可以用定时器也可以不用,具体程序思路就不说了,每个人思路都不一样,能保证输出波形正确就OK了
定时器0表示的是脉冲总周期20ms,定时器1表示的是正脉冲宽度(如pwm_value = 1500时表示正脉冲宽度为15ms), 而while循序只是为了改变正脉冲宽度。运行过程是:定时器0和定时器,1同时开启,此时pwm = 1,定时器1的时间到了之后pwm = 0,并关闭定时器1,等待脉冲总周期达到20ms即定时器0中断,在定时器0的中断服务中又将pwm赋值为1并开启定时器1……以这样的方式循环就可以控制舵机转动了!
以上就是关于Arduino控制舵机的程序全部的内容,包括:Arduino控制舵机的程序、我想用AVR的一个定时器中断来控制舵机的左右45度转动,请问中断程序怎么写呢、51单片机控制舵机转角的C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)