70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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();
 | 
						||
}
 |