Files
License_plate_recognition/robot_sg90.c
2025-10-18 16:05:39 +08:00

70 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
}