導航:首頁 > 操作系統 > 單片機控制舵機c程序

單片機控制舵機c程序

發布時間:2023-01-23 20:33:01

⑴ 51單片機控制舵機轉角的C語言程序

定時器0表示的是脈沖總周期20ms,定時器1表示的是正脈沖寬度(如pwm_value = 1500時表示正脈沖寬度為1.5ms), 而while循序只是為了改變正脈沖寬度。運行過程是:定時器0和定時器,1同時開啟,此時pwm = 1,定時器1的時間到了之後pwm = 0,並關閉定時器1,等待脈沖總周期達到20ms即定時器0中斷,在定時器0的中斷服務中又將pwm賦值為1並開啟定時器1……以這樣的方式循環就可以控制舵機轉動了!

⑵ 51單片機pwm輸出控制舵機,c程序,但是不能正常輸出,求大家看看

是不是高低電平時間太短,我看你的程序輸出應該是很亂的,不是固定長度的高低電平

你用示波器看看PWM管腳是否有波形輸出

⑶ 求問單片機控制舵機連續來回轉動而不停下來的C程序怎麼寫

因為舵機中有電位器,輸出1.5ms寬度的脈沖寬度是正90度,所以你可以寫一個for循環,然後引進一個參數,不停地改變0.5ms到2.5ms之間的脈沖寬度就行了。(用延遲函數可以調整速度)希望能幫到你!

⑷ 如何用單片機控制舵機及程序詳細

//雙定時器產生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;
}

⑸ 編51單片機C程序,遙控器按鍵控制舵機左右轉,僅每上電轉一下。示波器見控制波形正常,原因可能是什麼

量電壓是不行的,如果達不到那麼大的電流舵機還是轉不動,建議將控制器跟舵機電機分開供電,這些東西都是比較耗電的,很容易在啟動時把電源電壓拉低,很不穩定。

⑹ 急求51單片機控制舵機C語言程序,舵機可以根據設定旋轉任意角度!急求啊,大神幫幫忙!非常感謝!

#include<reg52.h>typedef unsigned int uint;typedef unsigned char uchar;sbit pwm=P0^3;//輸出PWM信號uchar count=0;uint pwm_value=1500;//初值為1.5msuint value[]={1500,1000,1500,2000,1500};//void delay_ms(uint x){uint i;while(x--)for(i=0;i<125;i++);}void InitTimer(void){TMOD=0x11;//開定時器0,1TH0=-20000/256;//定時20MS,20MS為一個周期TL0=-20000%256;TH1=-1500/256;//定時1.5MS,這時舵機處於0度TL1=-1500%256;EA=1;//開總斷TR0=1;//開定時器0ET0=1;TR1=1;//開定時器1ET1=1;}void timer0(void) interrupt 1//定時器0中斷函數{pwm=1;TH0=-20000/256;TL0=-20000%256;TR1=1;count++;}void timer1(void) interrupt 3//定時器1中斷函數{pwm=0;TH1=-pwm_value/256;TL1=-pwm_value%256;TR1=0;}void main(void)//主函數{uchar i;InitTimer();pwm_value=1500;while(1){for(i=0;i<5;i++){pwm_value=value[i];//通過數組就可以改變舵機的轉角度delay_ms(1000);}}}

⑺ 單片機C語言控制舵機

如果需要上電就動作
只需要把程序裡面的if(KEY)判斷語句直接去掉就可以了。
不判斷直接執行動作即可。

⑻ 單片機控制舵機程序

//12MHz
#include
<reg51.h>
void
InitTimer0(void)
{
TMOD
=
0x01;
TH0
=
0x0B1;
TL0
=
0x0E0;
EA
=
1;
ET0
=
1;
TR0
=
1;
}
void
delay(void)
//誤差
0us
延時1ms
此處可以修改高電平周期
//修改此處的延時可以更改舵機轉的角度
,45度具體是多少
你可以試試
{
unsigned
char
a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void
main(void)
{
InitTimer0();
P1_2=0;
while(1);
}
void
Timer0Interrupt(void)
interrupt
1
{
//20ms中斷
TH0
=
0x0B1;
TL0
=
0x0E0;
P1_2=1;
delay();
P1_2=0;
}

⑼ 51單片機控制舵機轉角的C語言程序

舵機頻率50hz就是說一周期是20ms,占空比在百分之2.5到12.5可以從-90轉到90度
單片機內部有工作的晶振頻率,定時器就是基於這個頻率計時,根據程序可以知道,20ms計時20000,所以計時器每加一的時間為1us,這個程序的意思就是先工作定時器0,20ms後輸出置為1並打開定時器1,定時器1計時到1.5ms後觸發中斷使得輸出為0,即占空比為1.5/20=百分之7.5,中間位置
定時器的寄存器加到0會觸發中斷,所以寄存器都寫負數,如想要20ms就寫-20000,這樣往上加到0需要的計數的次數就為20000,一次計數為1us,所以為20ms,而寄存器是由兩個八位寄存器組成的,所以20000要分開寫
建議有時間可以去看一下郭天祥老師的51單片機視頻,能搜到而且不多,貌似第三集是講的定時器

⑽ 求一段c語言舵機程序

給段偽代碼吧


intmain()
{
初始化src_angle_A,dst_angle_A;
初始化src_angle_B,dst_angle_B;
初始化src_angle_C,dst_angle_C;
初始化src_angle_D,dst_angle_D;
intA_flag=0;
intB_flag=0;
intCD_flag=0;

while(1)
{
if(key1_down())
{
if(A_flag==0)
{
set_angle_A(dst_angle_A);
}
else
{
set_angle_A(src_angle_A);
}
A_flag=1-A_flag;
}

if(key2_down())
{
if(B_flag==0)
{
set_angle_B(dst_angle_B);
}
else
{
set_angle_B(src_angle_B);
}
B_flag=1-B_flag;
}

if(key3_down())
{
if(CD_flag==0)
{
set_angle_C(dst_angle_C);
set_angle_D(dst_angle_D);
}
else
{
set_angle_C(src_angle_C);
set_angle_D(src_angle_D);
}
CD_flag=1-CD_flag;
}
delay_ms(10);
}
return0;
}
閱讀全文

與單片機控制舵機c程序相關的資料

熱點內容
反詐騙app怎麼找回密碼 瀏覽:631
java方法和函數 瀏覽:420
程序員衣服穿反 瀏覽:959
java多類繼承 瀏覽:159
怎麼用多玩我的世界連接伺服器地址 瀏覽:483
為什麼華為手機比安卓流暢 瀏覽:177
javamap多線程 瀏覽:228
卡西歐app怎麼改時間 瀏覽:843
jquery壓縮圖片 瀏覽:970
用紙筒做解壓東西 瀏覽:238
神奇寶貝伺服器如何tp 瀏覽:244
雲伺服器支持退貨嗎 瀏覽:277
貸款等額本息演算法 瀏覽:190
根伺服器地址配置 瀏覽:501
單片機是軟體還是硬體 瀏覽:624
vivo手機怎麼看編譯編號 瀏覽:320
塑鋼扣條演算法 瀏覽:301
linux應用程序安裝 瀏覽:414
linux怎麼查找命令 瀏覽:431
安卓12原生和非原生是什麼意思 瀏覽:277