你只要输入控制信号就可以了
舵机的控制信号,是以20ms为间隔的一系列脉宽可在15ms上下1ms范围内变动的脉冲信号,舵机角度实时追踪脉宽变化
舵机的2根线,一般黑色是地线,然后依次为V+(一般都是红色)和信号线舵机由周期20ms的脉冲控制,其中05ms-2ms高电位控制0-180°舵角。我想发射高电位05ms低电位195ms的脉冲方波。
我想法是令P21管脚置1延迟05ms在令P21管脚置0延迟195ms如此循环。这样可以吗?
我编的程序如下,用示波器检验的时候总是不对。有懂得可以帮忙看下吗?
#include"STC12C5Ah"
sbit out=P2^1; //定义输出管脚
unsigned char i,a,b,c;
void main()
{
out=1; //初始化
i=5; // 计时器01ms中断一次,05ms循环5次
a=5;
b=1;
c=1;
TMOD=0x01; //定时器0工作方式1
TL0=0xa4; //实际晶振110782MHz,延迟01msT0初值
TH0=0xff;
EA=1; //开总中断
ET0=1; // 定时器0中断开
TR0=1; // 定时器0开始工作
while(1); //等待中断
}
void T0_ISR(void) interrupt 1 //T0中断程序
{
TL0=0xa4;
TH0=0xff;
if(b==0)
{
i=200-a; //05ms后i=195,下次延迟195ms
a=i;
b=1;
}
i--;
if(i==0)
{
b--;
c=1-c;
out=c;
}
}
我看好些舵机控制程序用的是PWM模块,那我这个想法可以吗?舵机的驱动电流应该很大,单片机的I/O口输出的电流有限,应该不可能直接驱动,你可以找一个专用的驱动芯片来驱动,比如说ULN2003A,我就是常用这个驱动的,因为便宜。比如你是用51单片机的话,那么除了P0口需接上拉电阻外,其它的I/O口可以不用接,因为他们自身都存在上拉电阻。还有就是你可以用三极管来驱动,也是一样的,网上应该有很多的图,这里我就不给你找了。不过很简单的,你可以参考数码管用三极管驱动时的电路的,很简单的。给舵机单独供电,不但能提高电压,增大电流,以提供大的驱动功率,而且能改善单片机体统供电质量,提高抗干扰能力,是一比较优化的供电方案。
要提供更高的电压给舵机单独供电,要把舵机的vcc端用线引出来,接到电源上,同时将两电源的地线连接到一起。需要注意的是,单独供电的电源电压要保证舵机电路安全,单片机驱动部分,如果需要还要进行电平转换。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)