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;
}