OpenHarmony Neptune开发板PWM驱动SG90 伺服舵机 原创 精华
本文介绍如何在Neptune开发板上,使用openHarmony IoT硬件子系统的PWM接口 驱动SG90 伺服舵机。
1、环境准备
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
1.2 Neptune开发板 openharmony V1.1.0 LTS 版本获取:
git clone https://gitee.com/hihopeorg_group/neptune-harmony-os1.1-iot.git
2、材料准备
1、Neptune HarmonyOS物联网 IOT模组
2、SG90 伺服舵机
3、杜邦线若干
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}$;
duty:IoTPwmStart接口的duty参数是控制输出方波的占空比的参数,占空比是指PWM输出的方波波形的高电平时间占整个方波周期的比例,具体占空比值是 duty /256的比值,,例如想要输出占空比50%的方波信号,那么duty填的值就要是128;
5、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.编写代码
有了以上知识,我们就可以编写代码了,关键代码如下:
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;
}
7、编译、烧录,并测试最后的完成效果。