hi3861软件

This commit is contained in:
2025-10-18 16:05:39 +08:00
parent 3d7a4dcb4d
commit 30edbda7de
36 changed files with 1888 additions and 1785 deletions

69
robot_sg90.c Normal file
View 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();
}