找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 7962|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機控制舵機程序 紅黃褐三根線PWM控制

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:593054 發(fā)表于 2019-8-4 13:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
舵機有紅黃褐三根線,紅線接VCC,褐線接GND,黃線接PWM輸入信號,用PWM信號控制舵機的轉(zhuǎn)動
pwm信號的周期為20ms,0,5ms-0°,1ms-45°,1.5ms-90°,2.0ms-135°,2.5ms-180°,通過控制單片機使其在pwm引腳輸出對應(yīng)的pwm波形來控制舵機轉(zhuǎn)動到指定的角度
下面我寫的是用K1開關(guān)控制的舵機自動轉(zhuǎn)動的程序,按下K1,舵機轉(zhuǎn)動,再次按下K1,舵機停止轉(zhuǎn)動
注意:因為舵機平均0.13MS轉(zhuǎn)動60°,所以當(dāng)產(chǎn)生指定的信號后需要維持一端時間,使舵機能轉(zhuǎn)動到指定的角度,然后載改變PWM信號,信號維持時間的長短控制轉(zhuǎn)動的快慢

//使用15系列51單片機的定時器2進行中斷計時產(chǎn)生PWM波形信號
#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)識
int k=0,count=0;
void Timer0Initial()
{
        T2L = 0xAE;               
        T2H = 0xFB;
} //定時0.1ms,11.0592MHz,0.01%的誤差

void initial_Timer()
{
        
                  
        
        AUXR |= 0x04;        //設(shè)置1T模式
               
        Timer0Initial();        
        
        AUXR |= 0x10;//定時器2開始計時
        IE2 |=0x04;        //允許定時器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ù),1ms

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

        
}

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

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

}

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

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:658403 發(fā)表于 2019-12-9 00:03 | 只看該作者
驅(qū)動圖中這個舵機  需要程序就行  還是需要舵機驅(qū)動模塊?
回復(fù)

使用道具 舉報

板凳
ID:725540 發(fā)表于 2020-4-27 12:35 | 只看該作者
qkaitt 發(fā)表于 2019-12-9 00:03
驅(qū)動圖中這個舵機  需要程序就行  還是需要舵機驅(qū)動模塊?

需要單獨的舵機模塊
回復(fù)

使用道具 舉報

地板
ID:763807 發(fā)表于 2020-5-29 12:46 來自觸屏版 | 只看該作者
song666 發(fā)表于 2020-4-27 12:35
需要單獨的舵機模塊

需要電源嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表