OpenHarmony Neptune開發板PWM驅動SG90伺服舵機
本文介紹如何在Neptune開發板上,使用openHarmony IoT硬件子系統的PWM接口 驅動SG90 伺服舵機。
一、環境準備
1.1 開發環境、編譯環境搭建,參考官方文檔,參考鏈接如下:
1.2 Neptune開發板 openharmony V1.1.0 LTS 版本獲?。?/p>
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git
二、材料準備
1、Neptune HarmonyOS物聯網 IOT模組
2、SG90 伺服舵機
3、杜邦線若干
三、接線方法
- \color{brown}{棕色線}棕色線===>GND
- \color{yellow}{黃色線}黃色線===>PB0
- \color{red}{紅色線}紅色線===>5V
4、相關基礎知識介紹
鴻蒙系統IoT硬件子系統提供了一些外設相關的接口,目錄位于:
- base/iot_hardware/peripheral/interfaces/kits
PWM相關接口,接口頭文件為iot_pwm.h,其中用PWM輸出方波的API:
- unsigned int IoTPwmStart(unsigned int port, unsigned short duty, unsigned int freq);
接口參數介紹:
freq:IoTPwmStart接口中freq參數就是PWM實際輸出的方波頻率\color{red}{頻率范圍0-65535}頻率范圍0−65535;
duty:IoTPwmStart接口的duty參數是控制輸出方波的占空比的參數,占空比是指PWM輸出的方波波形的高電平時間占整個方波周期的比例,具體占空比值是 duty /256的比值,,例如想要輸出占空比50%的方波信號,那么duty填的值就要是128;
五、SG90 伺服舵機驅動原理
舵機的控制一般需要一個20ms的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內的角度控制脈沖部分
需要產生一個20ms的時基脈沖所需的頻率為50HZ
(f=1/T,二者成反比(其中f為頻率,T為周期)。頻率是單位時間內完成周期性變化的次數,是描述周期運動頻繁程度的量。周期,物體作往復運動或物理量作周而復始的變化時,重復一次所經歷的時間)
占空比 = t / T 相關參數如下:
- t = 0.5ms------0 °
- t = 1.0ms------45°
- t = 1.5ms------90°
- t = 2.0ms------135°
- t = 2.5ms------180°
PWM占空比是指在一個周期內,信號處于高電平的時間占據整個信號周期的百分比,由于PWM周期為20ms,所以(以舵機會轉動 45°為例),占空比就應該為1ms/20ms = 5%
六.編寫代碼
有了以上知識,我們就可以編寫代碼了,關鍵代碼如下:
void Servo_Angle_Control(uint32_t angle)//舵機角度控制函數
- void Servo_Angle_Control(uint32_t angle)//舵機角度控制函數
- {
- float time=0;
- float dutytime=0;
- uint16_t duty=0;
- time=angle/9; //計算角度所對應時間
- dutytime=(time+5)/200; //公式(angle/90+0.5)/20
- duty=256*dutytime; //計算占空比
- //printf("angle:%d\n",angle);
- //printf("duty:%0.1f%%\n",dutytime*100);
- IoTPwmStart(0,duty,50);
- }
- static void PWMTask(void *arg)
- {
- osDelay(20);
- (void)arg;
- int t=5;
- while (t--)
- {
- Servo_Angle_Control(0);
- osDelay(200);
- Servo_Angle_Control(45);
- osDelay(200);
- Servo_Angle_Control(90);
- osDelay(200);
- Servo_Angle_Control(135);
- osDelay(200);
- Servo_Angle_Control(180);
- osDelay(200);
- }
- return NULL;
- }
七、編譯、燒錄,并測試最后的完成效果。
文章相關附件可以點擊下面的原文鏈接前往下載
https://harmonyos.51cto.com/resource/1093