1.舵機準備
舵機是單片機機械控制入門必學的模塊,在一些機器人關節中也是采用舵機作為控制,學習并熟練掌握使用舵機是我們對單片機的進一步認識。
所以我們不能一直局限地使用開發板進行學習,而是擴展一些電子模塊來輔助我們更加深入了解單片機。所以大家需要自行購買舵機。
小型的舵機與大型的舵機控制原理幾乎大同小異,考慮到經濟的合理使用,我們選擇小型舵機作為入門學習和簡單使用即可。
常見的小型舵機型號為“9g舵機”,外觀大體如下

不過筆者覺得這種型號的舵機雖然便宜且大家都普遍使用,但是這種舵機遠沒有金屬舵機好用,所以筆者還是建議大家選擇購買與上圖體型差不多但價格稍貴一點的金屬舵機為好,本教程使用的舵機型號如下圖所示

2.舵機控制原理
本教程使用的舵機為9g尺寸,型號為“MG90S”作為示例模塊。
這種舵機的作用角度為0~180度,也就是舵機槳可以任意在某個角度卡死不動,由于供電原因我們使用蠻力是很難掰動舵機槳的,只有舵機掉電之后舵機槳才會任意地讓我們扭動。
舵機有三根線,除了供電的兩根電源線還有一根信號線,因為我們使用的是5V電壓功率的舵機,所以其電源線可以直接接到單片機的+5V和GND上,信號線的話就接到單片機的一個IO埠上,這個IO埠通過輸出PWM控制舵機槳的角度在任意位置上固定停留。
這個PWM的周期為20ms,高電平的時間在0.5ms~2.5ms之間可以控制舵機槳角度的停留位置。
0.5ms---------0度。
1.0ms---------45度。
1.5ms---------90度。
2.0ms---------135度。
2.5ms---------180度。
我們把舵機的電源線接好,然后信號線連接P1.7,把代碼下載進去,舵機槳在上電之后就會旋轉到一個固定角度的位置上停留在那不動,我們想扭動舵機槳是比較吃力的。
3.代碼
#include <reg52.h>
#include <function.h>//詳見第六章第8講
#include <timer.h> //詳見第八章第11講
sbit PWMOUT = P1^7; //舵機信號線引腳
void main()
{
LED_Init();//初始化LED硬體模塊
EA = 1; //閉合總中斷開關
TIM0_Init(100,9);//定時0.1ms,9是微調使定時精度更高
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中持續的時間為1ms,低電平持續的時間就是19ms,舵機槳在45度處的位置停留不動
else PWMOUT=0;
我們畫出波形圖

斷電之后我們把舵機槳扭到另一個角度位置,然后再上電,觀察舵機槳的實驗現象好好領悟這個小模塊的作業原理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263943.html
標籤:軟件測試
