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

开发 前端
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的PWM接口 驱动SG90 伺服舵机。

[[423122]]

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

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

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硬件子系统提供了一些外设相关的接口,目录位于:

  1. base/iot_hardware/peripheral/interfaces/kits 

PWM相关接口,接口头文件为iot_pwm.h,其中用PWM输出方波的API:

  1. 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)//舵机角度控制函数

  1. void Servo_Angle_Control(uint32_t angle)//舵机角度控制函数 
  2.   float time=0;  
  3.   float dutytime=0; 
  4.   uint16_t duty=0; 
  5.   time=angle/9;                         //计算角度所对应时间 
  6.   dutytime=(time+5)/200;                //公式(angle/90+0.5)/20 
  7.   duty=256*dutytime;                    //计算占空比 
  8.   //printf("angle:%d\n",angle); 
  9.   //printf("duty:%0.1f%%\n",dutytime*100); 
  10.   IoTPwmStart(0,duty,50); 
  11.  
  12. static void PWMTask(void *arg) 
  13.     osDelay(20); 
  14.     (void)arg; 
  15.     int t=5; 
  16.     while (t--) 
  17.     { 
  18.     Servo_Angle_Control(0); 
  19.     osDelay(200); 
  20.     Servo_Angle_Control(45); 
  21.     osDelay(200); 
  22.     Servo_Angle_Control(90); 
  23.     osDelay(200); 
  24.     Servo_Angle_Control(135); 
  25.     osDelay(200); 
  26.     Servo_Angle_Control(180); 
  27.     osDelay(200);  
  28.     } 
  29.     return NULL

七、编译、烧录,并测试最后的完成效果。

[[423123]]

文章相关附件可以点击下面的原文链接前往下载

https://harmonyos.51cto.com/resource/1093

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

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

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-09-10 10:01:04

鸿蒙HarmonyOS应用

2021-09-08 15:44:56

鸿蒙HarmonyOS应用

2021-10-11 14:14:42

鸿蒙HarmonyOS应用

2022-04-01 15:54:01

DHCP网络协议开发板

2022-01-07 21:11:27

鸿蒙HarmonyOS应用

2021-05-10 09:40:29

鸿蒙HarmonyOS应用

2022-10-14 15:55:24

环境搭建鸿蒙

2023-09-14 15:49:42

PWM鸿蒙

2023-03-02 20:52:11

​ PWM脉冲宽度调制

2022-03-03 19:21:50

Harmony鸿蒙操作系统

2021-12-16 15:14:54

鸿蒙HarmonyOS应用

2020-12-29 09:59:01

鸿蒙HarmonyOS智能家居

2020-12-16 10:05:48

鸿蒙开发板Onenet平台

2022-02-24 16:39:41

OpenHarmonNiobe开发鸿蒙

2021-06-25 15:32:13

鸿蒙HarmonyOS应用

2022-04-14 11:44:25

LiteOS线程鸿蒙

2020-10-20 09:32:43

HiSparkWi-FiIoT

2023-04-10 09:39:11

2022-08-19 10:54:47

操作系统鸿蒙
点赞
收藏

51CTO技术栈公众号