1.舵機(jī)準(zhǔn)備
舵機(jī)是單片機(jī)機(jī)械控制入門(mén)必學(xué)的模塊,在一些機(jī)器人關(guān)節(jié)中也是采用舵機(jī)作為控制,學(xué)習(xí)并熟練掌握使用舵機(jī)是我們對(duì)單片機(jī)的進(jìn)一步認(rèn)識(shí)。
所以我們不能一直局限地使用開(kāi)發(fā)板進(jìn)行學(xué)習(xí),而是擴(kuò)展一些電子模塊來(lái)輔助我們更加深入了解單片機(jī)。所以大家需要自行購(gòu)買(mǎi)舵機(jī)。
小型的舵機(jī)與大型的舵機(jī)控制原理幾乎大同小異,考慮到經(jīng)濟(jì)的合理使用,我們選擇小型舵機(jī)作為入門(mén)學(xué)習(xí)和簡(jiǎn)單使用即可。
常見(jiàn)的小型舵機(jī)型號(hào)為“9g舵機(jī)”,外觀(guān)大體如下
不過(guò)筆者覺(jué)得這種型號(hào)的舵機(jī)雖然便宜且大家都普遍使用,但是這種舵機(jī)遠(yuǎn)沒(méi)有金屬舵機(jī)好用,所以筆者還是建議大家選擇購(gòu)買(mǎi)與上圖體型差不多但價(jià)格稍貴一點(diǎn)的金屬舵機(jī)為好,本教程使用的舵機(jī)型號(hào)如下圖所示
2.舵機(jī)控制原理
本教程使用的舵機(jī)為9g尺寸,型號(hào)為“MG90S”作為示例模塊。
這種舵機(jī)的作用角度為0~180度,也就是舵機(jī)槳可以任意在某個(gè)角度卡死不動(dòng),由于供電原因我們使用蠻力是很難掰動(dòng)舵機(jī)槳的,只有舵機(jī)掉電之后舵機(jī)槳才會(huì)任意地讓我們扭動(dòng)。
舵機(jī)有三根線(xiàn),除了供電的兩根電源線(xiàn)還有一根信號(hào)線(xiàn),因?yàn)槲覀兪褂玫氖?V電壓功率的舵機(jī),所以其電源線(xiàn)可以直接接到單片機(jī)的+5V和GND上,信號(hào)線(xiàn)的話(huà)就接到單片機(jī)的一個(gè)IO端口上,這個(gè)IO端口通過(guò)輸出PWM控制舵機(jī)槳的角度在任意位置上固定停留。
這個(gè)PWM的周期為20ms,高電平的時(shí)間在0.5ms~2.5ms之間可以控制舵機(jī)槳角度的停留位置。
0.5ms---------0度。
1.0ms---------45度。
1.5ms---------90度。
2.0ms---------135度。
2.5ms---------180度。
我們把舵機(jī)的電源線(xiàn)接好,然后信號(hào)線(xiàn)連接P1.7,把代碼下載進(jìn)去,舵機(jī)槳在上電之后就會(huì)旋轉(zhuǎn)到一個(gè)固定角度的位置上停留在那不動(dòng),我們想扭動(dòng)舵機(jī)槳是比較吃力的。
3.代碼
#include <reg52.h> #include <function.h>//詳見(jiàn)第六章第8講 #include <timer.h> //詳見(jiàn)第八章第11講 sbit PWMOUT = P1^7; //舵機(jī)信號(hào)線(xiàn)引腳 void main() { LED_Init();//初始化LED硬件模塊 EA = 1; //閉合總中斷開(kāi)關(guān) TIM0_Init(100,9);//定時(shí)0.1ms,9是微調(diào)使定時(shí)精度更高 while(1); } void TIM0_IRQHandler() interrupt 1 { static u8 pwm=0; TH0 = T0RH; //重新加載重載值 TL0 = T0RL; pwm++; if(pwm>=200)pwm=0; //pwm在0~199之間間隔0.1ms變化,周期為20ms if(pwm<10)PWMOUT=1;//高電平在周期為20ms的PWM中持續(xù)的時(shí)間為1ms,低電平持續(xù)的時(shí)間就是19ms,舵機(jī)槳在45度處的位置停留不動(dòng) else PWMOUT=0; }
我們畫(huà)出波形圖
斷電之后我們把舵機(jī)槳扭到另一個(gè)角度位置,然后再上電,觀(guān)察舵機(jī)槳的實(shí)驗(yàn)現(xiàn)象好好領(lǐng)悟這個(gè)小模塊的工作原理。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門(mén)課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程