更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com本文介绍如何使用Neptune开发板,使用PWMopenHarmony物联网硬件子系统的接口,用于驱动SG90伺服伺服。一、环境准备1.1开发环境、编译环境搭建,参考官方文档,参考链接如下:Neptune开发板环境搭建及使用1.2Neptune开发板openharmonyV1.1.0LTS版本获取:gitclonehttps://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git二、材料准备1.NeptuneHarmonyOSIOT模块2.SG90舵机舵机3.杜邦线数条3.接线方式\颜色{棕色}{棕色线}棕线===>GND\color{yellow}{yellowline}黄线===>PB0\color{red}{redline}红线===>5V4,相关基础知识介绍鸿蒙系统物联网硬件子系统提供一些外设相关的接口,目录位于:base/iot_hardware/peripheral/interfaces/kitsPWM相关接口,接口头文件为iot_pwm.h,PWM输出方波的API:unsignedintIoTPwmStart(unsignedintport,unsignedshortduty,unsignedintfreq);接口参数介绍:freq:IoTPwmStart接口中的freq参数为PWM实际输出的方波频率\color{red}{frequencyrange0-65535};theduty: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%6.编写代码有了以上知识,我们就可以编写代码了,关键代码如下:voidServo_Angle_Control(uint32_tangle)//舵机角度控制函数voidServo_Angle_Control(uint32_tangle)//舵机角度控制函数{floattime=0;floatdutytime=0;uint16_tduty=0;time=angle/9;//计算角度对应的时间dutytime=(time+5)/200;//公式(angle/90+0.5)/20duty=256*dutytime;//计算占空比//printf("angle:%d\n",angle);//printf("duty:%0.1f%%\n",dutytime*100);IoTPwmStart(0,duty,50);}staticvoidPWMTask(void*arg){osDelay(20);(void)arg;intt=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);}returnNULL;}七、编译、烧录、测试最终完成效果。文章相关附件可点击下方链接下载原文https://harmonyos.51cto.com/resource/1093更多信息请访问:与华为官方共建鸿蒙科技社区https:///harmonyos.51cto.com
