1. 怎么用51单片机控制舵机
操作步骤:
1 单片机,舵机,电源共地;
2 用两个稳压芯片进行供电,将电源分开来;
3 舵机信号端没有直接连接单片机IO口,我串了一个10K的电阻,也就是这一步之后就可以控制舵机。
2. 控制舵机一定要用舵机控制板吗 单片机直接控制怎么样
你好,单片机是无法直接控制舵机的。原因如下:
1:单片机io口输出的电流太低,无法全功率驱动电机。
2:有些单片机加上拉后输出电流可提高,但舵机属于感性负载,在动作时会产生较大的干扰,影响单片机或者周围元器件的正常工作。
建议:最稳妥的方法是单片机输出驱动光耦,光耦驱动mos管,mos管驱动舵机。如果舵机功率较小用三极管驱动即可。如果舵机数量较多或者功率较大要做到电源隔离。
希望对你有帮助,谢谢。
3. 51单片机控制舵机左转90然后延时2秒再右转180,延时两秒回到中间,怎么做
以下程序可供参考
//用一个定时器定时100US产生PWM波
//周期200*100us=20ms
//改变b的值可改变占空比 b=10对应高电平时间1ms
#include<STC12C5A.H>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P2^0;
uchar a=200,b=15;//b=15对应舵机0度
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void main()
{
TMOD=0X01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
EA=1;
TR0=1;
P1M0=0X0F; //低4位推挽输出 控制两个电机正反转
P1M1=0X00;
P2M0=0X01; //最低位推挽输出 控制舵机
P2M1=0X00;
while(1)
{
P1=0x0a;
b=15;Delay1ms(2000);//直行
b=10;Delay1ms(1000);//左转
b=15;Delay1ms(2000);//直行
b=20;Delay1ms(1000);//右转
b=15;Delay1ms(2000);//直行
P1=0x05;
b=15;Delay1ms(2000);//后退
b=10;Delay1ms(1000);//后左转
b=15;Delay1ms(2000);//后退
b=20;Delay1ms(1000);//后右转
b=15;Delay1ms(2000);//后退
}
}
void timer0()interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
a++;
if(a<=b) PWM=1;
else PWM=0;
if(a==200){a=0;PWM=1;}
}
4. 舵机如何用单片机控制正反转
用单片机的蚂裂芦I/0来控制源雀两个继电器就可以控制电机的正反转了。好像用单片机闷带来控制有点浪费啊,用二个555就可以搞定了。
5. 如何用单片机控制舵机及程序详细
//双定时器产生PWM波,控制舵机
//定时器0负责置高电平和控制定时器1的开停,定时器1负责置低电平
#include<STC12C5A.H>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P3^7;
uint b=1500;//1.5ms 舵机0位
void Delay1ms(uint i) //1ms延时程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void main()
{
b=1500;
TMOD=0X11;
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
TH1=(65536-b)/256;
TL1=(65536-b)%256;
ET0=1;
EA=1;
TR0=1;
PWM=1;
P1M0=0X0F; //P1低4位推挽输出 接L298N直流电机驱动模块 带动后轮两个电机
P1M1=0X00;
while(1)
{
P1=0x0a; //低4位 1010 正转
b=1500;Delay1ms(2000);//直行
b=1000;Delay1ms(1000);//左转
b=1500;Delay1ms(2000);//直行
b=2000;Delay1ms(1000);//右转
b=1500;Delay1ms(2000);//直行
P1=0x05; //低4位 0101 反转
b=1500;Delay1ms(2000);//后退
b=1000;Delay1ms(1000);//后左转
b=1500;Delay1ms(2000);//后退
b=2000;Delay1ms(1000);//后右转
b=1500;Delay1ms(2000);//后退
}
}
void timer0()interrupt 1//定时器0定时20ms
{
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;
PWM=1;
TR1=1;
ET1=1;
}
void timer1()interrupt 3//定时器1定时1到2ms
{
TH1=(65536-b)/256;
TL1=(65536-b)%256;
PWM=0;
TR1=0;
ET1=0;
}