hi3861软件
This commit is contained in:
69
robot_sg90.c
Normal file
69
robot_sg90.c
Normal file
@@ -0,0 +1,69 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
|
||||
#include "ohos_init.h"
|
||||
#include "cmsis_os2.h"
|
||||
#include "iot_gpio.h"
|
||||
#include "hi_io.h"
|
||||
#include "hi_time.h"
|
||||
|
||||
//查阅机器人板原理图可知,SG90舵机通过GPIO2与3861连接
|
||||
//SG90舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度
|
||||
#define GPIO2 2
|
||||
|
||||
//输出20000微秒的脉冲信号(x微秒高电平,20000-x微秒低电平)
|
||||
void set_angle( unsigned int duty) {
|
||||
IoTGpioSetDir(GPIO2, IOT_GPIO_DIR_OUT);//设置GPIO2为输出模式
|
||||
|
||||
//GPIO2输出x微秒高电平
|
||||
IoTGpioSetOutputVal(GPIO2, IOT_GPIO_VALUE1);
|
||||
hi_udelay(duty);
|
||||
|
||||
//GPIO2输出20000-x微秒低电平
|
||||
IoTGpioSetOutputVal(GPIO2, IOT_GPIO_VALUE0);
|
||||
hi_udelay(20000 - duty);
|
||||
}
|
||||
|
||||
/*Steering gear turn left (counter-clockwise 90 degrees)
|
||||
1、依据角度与脉冲的关系,设置高电平时间为1000微秒
|
||||
2、发送20次脉冲信号,控制舵机逆时针旋转90度
|
||||
*/
|
||||
void engine_turn_left(void)
|
||||
{
|
||||
for (int i = 0; i < 20; i++) {
|
||||
set_angle(1000);
|
||||
}
|
||||
}
|
||||
|
||||
/*Steering gear turn right (clockwise 90 degrees)
|
||||
1、依据角度与脉冲的关系,设置高电平时间为2000微秒
|
||||
2、发送20次脉冲信号,控制舵机顺时针旋转90度
|
||||
*/
|
||||
void engine_turn_right(void)
|
||||
{
|
||||
for (int i = 0; i < 20; i++) {
|
||||
set_angle(2000);
|
||||
}
|
||||
}
|
||||
|
||||
/*Steering gear return to middle
|
||||
1、依据角度与脉冲的关系,设置高电平时间为1500微秒
|
||||
2、发送20次脉冲信号,控制舵机居中
|
||||
*/
|
||||
void regress_middle(void)
|
||||
{
|
||||
for (int i = 0; i < 20; i++) {
|
||||
set_angle(1500);
|
||||
}
|
||||
}
|
||||
|
||||
// 顺时针旋转90度
|
||||
void servo_rotate_clockwise_90(void) {
|
||||
engine_turn_right();
|
||||
}
|
||||
|
||||
// 逆时针旋转90度
|
||||
void servo_rotate_counter_clockwise_90(void) {
|
||||
engine_turn_left();
|
||||
}
|
||||
Reference in New Issue
Block a user