您现在的位置是:亿华云 > IT科技
OpenHarmony Neptune开发板PWM驱动SG90伺服舵机
亿华云2025-10-03 03:04:54【IT科技】7人已围观
简介想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的PWM
想了解更多内容,驱动请访问:
和华为官方合作共建的伺服鸿蒙技术社区
https://harmonyos.51cto.com
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的舵机PWM接口 驱动SG90 伺服舵机。
一、驱动环境准备
1.1 开发环境、伺服编译环境搭建,舵机参考官方文档,驱动参考链接如下:
Neptune开发板的伺服环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:
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}{ 红色线}红色线===>5V4、驱动相关基础知识介绍
鸿蒙系统IoT硬件子系统提供了一些外设相关的伺服接口,目录位于:
base/iot_hardware/peripheral/interfaces/kitsPWM相关接口,舵机接口头文件为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
想了解更多内容,请访问:
和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com
很赞哦!(54)
上一篇: 如何通过仿真提高数据中心性能
下一篇: 超大规模数据中心的优势和面临的挑战