標(biāo)題: 51單片機(jī)控制舵機(jī)程序 紅黃褐三根線PWM控制 [打印本頁]

作者: chenf    時(shí)間: 2019-8-4 13:28
標(biāo)題: 51單片機(jī)控制舵機(jī)程序 紅黃褐三根線PWM控制
舵機(jī)有紅黃褐三根線,紅線接VCC,褐線接GND,黃線接PWM輸入信號(hào),用PWM信號(hào)控制舵機(jī)的轉(zhuǎn)動(dòng)
pwm信號(hào)的周期為20ms,0,5ms-0°,1ms-45°,1.5ms-90°,2.0ms-135°,2.5ms-180°,通過控制單片機(jī)使其在pwm引腳輸出對(duì)應(yīng)的pwm波形來控制舵機(jī)轉(zhuǎn)動(dòng)到指定的角度
下面我寫的是用K1開關(guān)控制的舵機(jī)自動(dòng)轉(zhuǎn)動(dòng)的程序,按下K1,舵機(jī)轉(zhuǎn)動(dòng),再次按下K1,舵機(jī)停止轉(zhuǎn)動(dòng)
注意:因?yàn)槎鏅C(jī)平均0.13MS轉(zhuǎn)動(dòng)60°,所以當(dāng)產(chǎn)生指定的信號(hào)后需要維持一端時(shí)間,使舵機(jī)能轉(zhuǎn)動(dòng)到指定的角度,然后載改變PWM信號(hào),信號(hào)維持時(shí)間的長(zhǎng)短控制轉(zhuǎn)動(dòng)的快慢

//使用15系列51單片機(jī)的定時(shí)器2進(jìn)行中斷計(jì)時(shí)產(chǎn)生PWM波形信號(hào)
#include<STC15F2K60S2.h>
int flag=0;
sbit pwm1=P1^1;
sbit key1=P3^2;//開關(guān)1引腳
unsigned int value[]={6,11,16,21,16,11};//誤差原因,6-0°,11-45°,16-90°,21-135°,26-180°
unsigned int percent = 0;//0.1ms次數(shù)標(biāo)識(shí)
int k=0,count=0;
void Timer0Initial()
{
        T2L = 0xAE;               
        T2H = 0xFB;
} //定時(shí)0.1ms,11.0592MHz,0.01%的誤差

void initial_Timer()
{
        
                  
        
        AUXR |= 0x04;        //設(shè)置1T模式
               
        Timer0Initial();        
        
        AUXR |= 0x10;//定時(shí)器2開始計(jì)時(shí)
        IE2 |=0x04;        //允許定時(shí)器2中斷
        EA = 1;        //打開總中斷
}

void delay(unsigned int x)
{
        unsigned int i,j;
        for(i = 0;i< x; ++i)
                for(j = 120; j >0 ; --j)
                        ;
}//延時(shí)函數(shù),1ms

void keyscan()//按鍵掃描函數(shù)
{
        if(key1 == 0)
        {
                delay(3);//按鍵消抖,延時(shí)消抖
                if(key1 == 0)
                {
                        
                        while(!key1);//按鍵放開
                        
                        flag=!flag;
                }
               
        }

        
}

void initial()
{
        key1 = 1;
        
        
        initial_Timer();
}//初始化

void Timer0() interrupt 12 //定時(shí)器2
{
        if(flag==1){//若打開開關(guān)
                percent += 1;//設(shè)置周期
                if(percent == 200)
                {
                        count++;
                        percent = 0;
                        pwm1 = 1;
                }//產(chǎn)生低電平,當(dāng)達(dá)到20ms時(shí),進(jìn)入下個(gè)周期,重新產(chǎn)生蹈叩縉?
                if(percent == value[k])
                {
                        
                        pwm1 = 0;
                }//產(chǎn)生高電平,當(dāng)時(shí)間達(dá)到時(shí),變?yōu)榈碗娖?br />                 if(count==20){
                        count=0;
                        k++;
                        if(k==6)k=0;
                }//,13ms/60°,延時(shí),給舵機(jī)時(shí)間轉(zhuǎn)動(dòng)到指定的角度
        }
        Timer0Initial();

}

剩下的程序在文件中
定時(shí)器2舵機(jī).zip (29.63 KB, 下載次數(shù): 86)

作者: qkaitt    時(shí)間: 2019-12-9 00:03
驅(qū)動(dòng)圖中這個(gè)舵機(jī)  需要程序就行  還是需要舵機(jī)驅(qū)動(dòng)模塊?
作者: song666    時(shí)間: 2020-4-27 12:35
qkaitt 發(fā)表于 2019-12-9 00:03
驅(qū)動(dòng)圖中這個(gè)舵機(jī)  需要程序就行  還是需要舵機(jī)驅(qū)動(dòng)模塊?

需要單獨(dú)的舵機(jī)模塊
作者: oyb.c    時(shí)間: 2020-5-29 12:46
song666 發(fā)表于 2020-4-27 12:35
需要單獨(dú)的舵機(jī)模塊

需要電源嗎




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1