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的時鍾源