0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)控制舵機(jī)的教程 按鍵控制舵機(jī)轉(zhuǎn)動(dòng)的程序代碼

冬至子 ? 來源:鬧鬧的小破站 ? 作者:廣軟彭于晏 ? 2023-10-31 16:49 ? 次閱讀

舵機(jī):

舵機(jī)一般由舵盤、減速齒輪組、位置反饋電位器、直流電機(jī)、控制電路板等組成。一般情況下舵機(jī)的信號(hào)線為黃色或者白色,電源主要常見為4.2-7.4V,不同的供電將直接影響舵機(jī)的扭矩標(biāo)準(zhǔn)。

控制方法-PWM

PWM通過占空比來控制舵機(jī),所謂PWM就是通過程序控制單片機(jī)IO口按照一定的時(shí)間規(guī)律輸出高電平或低電平,具體可以上網(wǎng)查閱資料了解一下。

以下為不同的占空比時(shí)間對(duì)應(yīng)的舵機(jī)角度:

圖片

對(duì)于t=0.5 - 2.5ms的產(chǎn)生,寫程序時(shí)我們可以采用全局變量。讓全局變量等于525之間,因?yàn)槎鏅C(jī)的一個(gè)計(jì)數(shù)周期是0.1ms,這樣全局變量的525正好就是0.5~2.5ms

PWM波產(chǎn)生思路:將信號(hào)管腳線初始化為低電平,然后寫一個(gè)while循環(huán),在循環(huán)中將該管腳置為為高電平,延時(shí),再拉低為低電平,如此循環(huán)產(chǎn)生PWM波,以高電平產(chǎn)生時(shí)間來控制舵機(jī)轉(zhuǎn)動(dòng)角度。

注意:5mv以上的控制電壓的變化就會(huì)引起電機(jī)的抖動(dòng)。

基于單片機(jī)的控制:

單片機(jī)系統(tǒng)實(shí)現(xiàn)對(duì)舵機(jī)輸出轉(zhuǎn)角的控制,必須先完成兩個(gè)任務(wù):

1、產(chǎn)生PWM周期信號(hào),本設(shè)計(jì)產(chǎn)生一個(gè)20ms的周期信號(hào);
2、脈寬的調(diào)整,即單片機(jī)模擬PWM信號(hào)的輸出,并調(diào)整占空比。

當(dāng)系統(tǒng)中只需要實(shí)現(xiàn)一個(gè)舵機(jī)的控制,采用的控制方式是改變單片機(jī)的一個(gè)定時(shí)器中斷的初值,將20ms分為兩次中斷執(zhí)行,一次短定時(shí)中斷和一次長(zhǎng)定時(shí)中斷。這樣既節(jié)省了硬件電路,也減少了軟件開銷,控制系統(tǒng)工作效率和控制精度都很高。

具體的設(shè)計(jì)過程:例如想讓舵機(jī)轉(zhuǎn)向左極限的角度,它的正脈沖為2ms,則負(fù)脈沖為20ms-2ms=18ms,所以開始時(shí)在控制口發(fā)送高電平,然后設(shè)置定時(shí)器在2ms后發(fā)生中斷,中斷發(fā)生后,在中斷程序里將控制口改為低電平,并將中斷時(shí)間改為18ms,再過18ms進(jìn)入下一次定時(shí)中斷,再將控制口改為高電平,并將定時(shí)器初值改為2ms,等待下次中斷到來,如此往復(fù)實(shí)現(xiàn)PWM信號(hào)輸出到舵機(jī)。用修改定時(shí)器中斷初值的方法巧妙形成了脈沖信號(hào),調(diào)整時(shí)間段的寬度便可使伺服機(jī)靈活運(yùn)動(dòng)。

為保證軟件在定時(shí)中斷里采集其他信號(hào),并且使發(fā)生PWM信號(hào)的程序不影響中斷程序的運(yùn)行(如果這些程序所占用時(shí)間過長(zhǎng),有可能會(huì)發(fā)生中斷程序還未結(jié)束,下次中斷又到來的后果),所以需要將采集信號(hào)的函數(shù)放在長(zhǎng)定時(shí)中斷過程中執(zhí)行,也就是說每經(jīng)過兩次中斷執(zhí)行一次這些程序,執(zhí)行的周期還是20ms。

如果系統(tǒng)中需要控制幾個(gè)舵機(jī)的準(zhǔn)確轉(zhuǎn)動(dòng),可以用單片機(jī)和計(jì)數(shù)器進(jìn)行脈沖計(jì)數(shù)產(chǎn)生PWM信號(hào)。

脈沖計(jì)數(shù)可以利用51單片機(jī)的內(nèi)部計(jì)數(shù)器來實(shí)現(xiàn),但是從軟件系統(tǒng)的穩(wěn)定性和程序結(jié)構(gòu)的合理性看,宜使用外部的計(jì)數(shù)器,還可以提高CPU的工作效率。

下面列舉一個(gè)按鍵控制舵機(jī)轉(zhuǎn)動(dòng)的程序代碼

#include

#include

typedef unsigned char uchar;

typedef unsigned int uint;

sbit KEY1=P3^4;

//按鍵1

sbit KEY2=P3^5;

//按鍵2

sbit PWM_OUT=P2^7;

//PWM輸出口

uint PWM_Value;

//定義pwm值

uchar order=0;

void Delay(unsigned int s);

//延時(shí)函數(shù)聲明

uchar flag;

//舵機(jī)按鍵標(biāo)志

/ 延時(shí)函數(shù) /
void Delay(unsigned int s)

{

unsigned int i;

for(i=0; i

for(i=0; i

}

/ 定時(shí)器初始化 /
void Init_Timer0()

{

TMOD=0x11;

TH0=(65536-1500)/256;

TL0=(65536-1500)%256;

EA = 1;

ET0 = 1;

TR0 = 1;

PT0=1;

}

/ 主函數(shù) /
void main(void)

{

Delay(6000);

PWM_Value = 1500;

//pwm初值為1500

Init_Timer0();

while(1)

{

if((KEY1 ==0 )|(KEY2 ==0 ))

//按鍵1或按鍵2被按下

{

if(KEY1 ==0 )

//確認(rèn)按鍵1被按下

{

flag = 1;

//標(biāo)志位賦值1

}

if(KEY2 ==0 )

//確認(rèn)按鍵2被按下

{
flag = 2;

//標(biāo)志位賦值2
}

}
else

{

flag = 0;

//否則標(biāo)志位為0

}

Delay(20);

//延時(shí)20ms

}
}

/ 中斷程序 **/
void timer0(void) interrupt 1
{

if(flag==1) PWM_Value += 1;

//如果標(biāo)志位1時(shí),pwm的值加1

if(flag==2) PWM_Value -= 1;

//如果標(biāo)志位為2時(shí),pwm減1

if(PWM_Value>=2500)

//如果pwm的值大于2500

PWM_Value = 2500;

//則保持在2500

if(PWM_Value<=500)

//如果pwm的值小于500

PWM_Value=500;

//則保持在500

switch(order)

{

case 1:PWM_OUT=1;

TH0=(65536-PWM_Value) > >8;

       TL0=(uchar)(65536-PWM_Value);

       break;                          

case 2:PWM_OUT=0;

       TH0=(65536-(5000-PWM_Value)) > >8;    

       TL0=(uchar)(65536-(5000-PWM_Value));

       break;                          

case 3:

       TH0=60536 > >8;   

       TL0=(uchar)60536;

       break;

case 4:

       TH0=60536 > >8;   

       TL0=(uchar)60536;

       order=0;

       break;

default: order=0;

break;

}
order++;
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電位器
    +關(guān)注

    關(guān)注

    14

    文章

    996

    瀏覽量

    66501
  • 直流電機(jī)
    +關(guān)注

    關(guān)注

    36

    文章

    1692

    瀏覽量

    69901
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    272

    文章

    5689

    瀏覽量

    122159
  • PWM控制
    +關(guān)注

    關(guān)注

    7

    文章

    189

    瀏覽量

    26176
  • 舵機(jī)
    +關(guān)注

    關(guān)注

    17

    文章

    255

    瀏覽量

    40775
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    51單片機(jī)控制舵機(jī)程序

    51單片機(jī)控制舵機(jī)程序,希望對(duì)你有幫助,謝謝頂一下
    發(fā)表于 11-02 17:35 ?102次下載

    51單片機(jī)控制舵機(jī)

    利用簡(jiǎn)單的51單片機(jī)的PWM的脈沖控制信號(hào)來很方便的控制機(jī)舵機(jī)
    發(fā)表于 11-10 15:25 ?103次下載

    單片機(jī)按鍵控制程序【匯編版】

    單片機(jī)按鍵控制程序【匯編版】單片機(jī)按鍵控制程序【匯編版】單片機(jī)按鍵控制程序【匯編版】
    發(fā)表于 12-29 11:04 ?0次下載

    單片機(jī)實(shí)現(xiàn)舵機(jī)轉(zhuǎn)角控制

    單片機(jī)實(shí)現(xiàn)舵機(jī)轉(zhuǎn)角控制單片機(jī)實(shí)現(xiàn)舵機(jī)轉(zhuǎn)角控制單片機(jī)實(shí)現(xiàn)舵機(jī)轉(zhuǎn)角
    發(fā)表于 04-28 14:57 ?24次下載

    51單片機(jī)控制舵機(jī)程序

    僅提供參考 51單片機(jī)控制機(jī)器人數(shù)字舵機(jī)的示例程序。程序比較簡(jiǎn)單,但演示了
    發(fā)表于 06-23 18:14 ?171次下載

    c51舵機(jī)轉(zhuǎn)動(dòng)仿真

    89c52單片機(jī)按鍵控制舵機(jī)精確轉(zhuǎn)動(dòng)
    發(fā)表于 01-28 20:01 ?14次下載

    如何用單片機(jī)控制舵機(jī)程序詳細(xì)

    本文首先介紹了舵機(jī)概述與工作原理,其次介紹了舵機(jī)的PWM信號(hào),最后詳細(xì)闡述了單片機(jī)控制舵機(jī)方法及程序
    發(fā)表于 05-11 11:06 ?5.9w次閱讀
    如何用<b class='flag-5'>單片機(jī)</b><b class='flag-5'>控制</b><b class='flag-5'>舵機(jī)</b>及<b class='flag-5'>程序</b>詳細(xì)

    使用51單片機(jī)按鍵直接控制舵機(jī)旋轉(zhuǎn)的程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)按鍵直接控制舵機(jī)旋轉(zhuǎn)的程序免費(fèi)下載。
    發(fā)表于 06-25 17:43 ?23次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>按鍵</b>直接<b class='flag-5'>控制</b><b class='flag-5'>舵機(jī)</b>旋轉(zhuǎn)的<b class='flag-5'>程序</b>免費(fèi)下載

    如何使用51單片機(jī)按鍵控制舵機(jī)旋轉(zhuǎn)

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)按鍵控制舵機(jī)旋轉(zhuǎn)主要內(nèi)容包括了:1.舵機(jī)的與單片機(jī)
    發(fā)表于 06-18 17:44 ?23次下載
    如何使用<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>按鍵控制</b><b class='flag-5'>舵機(jī)</b>旋轉(zhuǎn)

    基于51單片機(jī)舵機(jī)控制器設(shè)計(jì)

    在上一期免費(fèi)51單片機(jī)舵機(jī)開源項(xiàng)目中:最簡(jiǎn)單DIY基于51單片機(jī)舵機(jī)
    的頭像 發(fā)表于 11-19 09:35 ?7016次閱讀

    51單片機(jī)舵機(jī)控制

    51單片機(jī)舵機(jī)控制系統(tǒng)概述硬件設(shè)計(jì)程序設(shè)計(jì)概述在這篇博客中,將介紹一個(gè)基于51
    發(fā)表于 11-05 11:06 ?21次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>舵機(jī)</b><b class='flag-5'>控制</b>

    基于51單片機(jī)的紅外遙控舵機(jī)例程源代碼

    基于51單片機(jī)的紅外遙控舵機(jī)例程源代碼
    發(fā)表于 05-16 11:16 ?14次下載

    基于51單片機(jī)的利用S2和S3按鍵控制舵機(jī)正反轉(zhuǎn)例程

    基于51單片機(jī)的利用S2和S3按鍵控制舵機(jī)正反轉(zhuǎn)例程
    發(fā)表于 05-16 11:13 ?2次下載

    基于89C51單片機(jī)舵機(jī)按鍵控制程序程序

    基于89C51單片機(jī)舵機(jī)按鍵控制程序程序
    發(fā)表于 05-16 09:09 ?3次下載

    如何使用單片機(jī)控制舵機(jī)轉(zhuǎn)動(dòng)

    單片機(jī)是一種集成電路,它可以被編程以控制外部電子設(shè)備的運(yùn)行。舵機(jī)是一種能夠轉(zhuǎn)動(dòng)到特定位置的電動(dòng)機(jī),常用于模型、機(jī)器人以及其他需要精確控制位置
    的頭像 發(fā)表于 12-29 10:15 ?1373次閱讀