導航:首頁 > 編程語言 > stc單片機控制舵機程序

stc單片機控制舵機程序

發布時間:2022-09-23 16:51:40

1. 怎麼用STC單片機控制舵機

選個STC的帶PWM和AD功能的單片機,比如便宜的STC12C2052AD,支持兩路PWM,8路復用AD。配置單片機PWM輸出,調整占空比來控制舵機的速度,如果需要正反轉,可以加個H橋電路或者晶元。舵機的轉動角度,可以用AD來采樣舵機電位器。

2. 怎麼利用Stc15F2K60S2單片機 模擬系列,控制舵機旋轉在線求簡單的實例程序

#include <reg52.h> //12M晶振

sbit PWM=P1^0; //定義P1^0為輸出埠
unsigned int pwm_h=2430,pwm; //定義pwm信號中的高電平時間

范圍 535< pwm_h <2430
bit fa;
void Init_Timer0() //定時器初始化子程序
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x0F6;
EA = 1;
ET0 = 1;
TR0 = 1; //定時器開關打開
}

void main() //主函數
{
Init_Timer0(); //定時器初始化
PWM=0;
while(1)
{
if(fa)
{
fa=0;
pwm_h=20000-pwm_h;

}

}
}

void Timer0() interrupt 1 using 1
{

TH0 =(-pwm_h)/256;

// (65535-200) /256=0xff;
TL0 =(-pwm_h)%256; //0.1ms一個記時器周期

236 % 256 = 236
fa=1;
PWM=~PWM;

}

3. STC12C5A60S2單片機怎麼通過通信控制舵機控制板,讓雙足執行動作

首先要保證協議是正確的! 可以先把舵機控制板接到電腦上!用電腦端的串口調試助手!發送協議數據!看看舵機控制板有動作沒有! 然後,再將單片機連接到電腦的串口上,同樣單片機向電腦發送串口數據,看看是否是正確的協議數據!都沒有問題了!再把舵機控制板與單片機通過串口連接!在測試是否正確! 按照上面的方法!都可以解決問題! 有問題請留言!

4. 單片機STC89C52 如何控制舵機

1、舵機控制信號一般是50HZ的PWM波,占空比在10%-20%之間,51自己寫程序用定時器實現占空比控制就可以。
2、如果是步進電機,我知道要在他們(電機和單片機)之間加個ULN2003控制心片就可以了。
3、舵機的控制信號時周期為20毫秒的信號,高電平時間為1ms到2ms,因此用任何一個I/0口輸出中信號就可以控制舵機運轉。

5. STC單片機的PWM控制舵機程序,無法達到預期效果

PCA輸出pwm最小頻率是12分頻/256可以用定時器T0調整PCA頻率但是我還沒弄會,不如直接用T0或者T1直接出pwm雖然麻煩點,但是絕對能用,感興趣的話留郵箱給你發一份T0T1控制輸出多路的pwm控制舵機程序。如果你用PCA控製成功了也告訴我啊,尤其是頻率怎麼通過T0控制的,還有就是如果用T0控制PCA輸出的pwm是不是浪費了點。相互交流

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

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

7. 我有一塊stc12c5a60s2單片機想用它控制舵機,請問該如何連接舵機同求程序。

舵機由周期20ms的脈沖控制,其中0.5ms-2ms高電位控制0-180°舵角。我想發射高電位0.5ms低電位19.5ms的脈沖方波。
我想法是令P2.1管腳置1延遲0.5ms在令P2.1管腳置0延遲19.5ms如此循環。這樣可以嗎?
我編的程序如下,用示波器檢驗的時候總是不對。有懂得可以幫忙看下嗎?
#include"STC12C5A.h"
sbit out=P2^1; //定義輸出管腳
unsigned char i,a,b,c;
void main()
{
out=1; //初始化
i=5; // 計時器0.1ms中斷一次,0.5ms循環5次
a=5;
b=1;
c=1;
TMOD=0x01; //定時器0工作方式1
TL0=0xa4; //實際晶振11.0782MHz,延遲0.1msT0初值
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; //0.5ms後i=195,下次延遲19.5ms
a=i;
b=1;
}
i--;
if(i==0)
{
b--;
c=1-c;
out=c;
}
}
我看好些舵機控製程序用的是PWM模塊,那我這個想法可以嗎?

8. 單片機控制舵機程序

如果你自己不會寫程序,就用555來做吧,很容易,在網上可以查到用555做的振盪器電路圖。

9. 單片機STC89C52 如何控制舵機

#include<reg52.h> //51單片機頭文件

#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義

void delay(uint); //延時子函數聲明
void enable1(void);
void enable2(void);

sbit P1_0=P1^0; //PWM信號輸出端
sbit K1=P1^1;
sbit K2=P1^2;
sbit K3=P1^3;

/****************************主函數***********************************/

void main()
{
P1_0=1; //置PWM初始輸出為高電平

while(1)
{
if(K1==0)
{
delay(20);
if(K1==0)
{
while(!K1);
enable1();
//while(!s2)
}
}

if(K2==0)
{
delay(20);
if(K2==0)
{
while(!K2);
enable2();
}

}
/* if(K3==0)
{
delay(20);
if(K3==0)
{
Init3;
}

}
*/
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void enable1(void)
{
TMOD=0x01; //設置定時器0工作方式1後面運行TR位啟動
TH0=(65536-1500)/256;
TL0=(65536-1500)%256; //1.5ms 的高電平
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}

void enable2(void)
{
TMOD=0x10; //設置定時器1工作方式1後面運行TR位啟動
TH1=(65536-900)/256;
TL1=(65536-900)%256; //1.5ms 的高電平
EA=1; //開總中斷
ET1=1; //開定時器1中斷
TR1=1; //啟動定時器1

}
//設置第三種PWM方式的初始化
/*
void Init3()
{
TMOD=0x01; //設置定時器0工作方式1後面運行TR位啟動
TH0=(65536-1500)/256;
TL0=(65536-1500)%256; //1.5ms 的高電平

}
*/

/******************************中斷服務程序**********************************/

void PWM1() interrupt 1 //定時器0 中斷,產生方波
{
if(P1_0==1) //如果上個電平為1,則下個低電平的時間為18.5ms
{
TH0=(65536-18500)/256;
TL0=(65536-18500)%256;
}
else //如果上個電平為0,則下個高電平為1.5ms
{
TH0=(65535-1500)/256;
TL0=(65535-1500)%256;
}
P1_0=~P1_0;
}

void PWM2() interrupt 3 //定時器1中斷,產生方波
{
if(P1_0==1) //如果上個電平為1,則下個低電平的時間為18.5ms
{
TH0=(65536-19000)/256;
TL0=(65536-19000)%256;
}
else //如果上個電平為0,則下個高電平為1.5ms
{
TH0=(65535-900)/256;
TL0=(65535-900)%256;
}
P1_0=~P1_0;
}

//定時器2設置第三種PWM波
/* void PWM3() interrupt 5 //定時器2 中斷,產生方波
{
if(P1_0==1) //如果上個電平為1,則下個低電平的時間為18.5ms
{
TH0=(65536-18500)/256;
TL0=(65536-18500)%256;
}
else //如果上個電平為0,則下個高電平為1.5ms
{
TH0=(65535-1500)/256;
TL0=(65535-1500)%256;
}
P1_0=~P1_0;
}
*/

辛苦之作,如果能夠回答你的問題,別忘了給分哦~~喵喵

10. stc單片機pwm控制舵機

可選擇定時器0的溢出或ECI腳輸入作pcw/pwm的時鍾源

閱讀全文

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

熱點內容
廣西廣電網路的默認ip 瀏覽:191
政府發紅頭文件內容會實現嗎 瀏覽:552
騰訊貴安七星數據中心英文怎麼寫 瀏覽:489
玩火的女孩有幾個版本 瀏覽:113
tvshowtracker安卓版 瀏覽:983
App數據分析應該從哪些緯度 瀏覽:17
到底要不要升級ios92 瀏覽:875
cad2014安裝包安裝文件在哪裡 瀏覽:63
電信密碼無法登錄 瀏覽:820
cad的列印到文件怎麼設置 瀏覽:902
智行app鉑金會員怎麼還有期限 瀏覽:581
win10用子文件夾改名 瀏覽:234
ae鋼筆工具在哪裡 瀏覽:460
gn105數據線插哪裡 瀏覽:916
破鎖屏密碼方法 瀏覽:835
股票數據放哪裡 瀏覽:576
m格式庫文件 瀏覽:279
天際通數據服務怎麼開票 瀏覽:430
寫小說發哪個網站比較好 瀏覽:244
小米電視3藍牙文件路徑 瀏覽:111

友情鏈接