当前位置:首页 > 数据库

OpenHarmony Neptune开发板PWM驱动SG90伺服舵机

想了解更多内容,驱动请访问:

和华为官方合作共建的伺服鸿蒙技术社区

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}{ 红色线}红色线===>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

想了解更多内容,请访问:

和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

云服务器

分享到:

滇ICP备2023006006号-16