文章目录
- 一、硬件电路
- 二、舵机初始化
- 三、舵机控制
一、硬件电路
通过TIMER3的通道3提供PWM驱动电机
二、舵机初始化
初始化让舵机位于最左边,也就是0°。
static int ServoInit(struct Servo *ptdev){
if(NULL == ptdev){
LogDebug("ServoInit EINVAL \r\n");
return -EINVAL;
}
int ret = ServoDevPwm.Config(&ServoDevPwm,SET_PERIOD_VALUE,20000000);
if(ret != ESUCCESS){
LogDebug("ServoDev.Config EIO \r\n");
return -EIO;
}
ret = ServoDevPwm.Config(&ServoDevPwm,SET_COMPARE_VALUE,500000);
if(ret != ESUCCESS){
LogDebug("ServoDev.Config EIO \r\n");
return -EIO;
}
return ESUCCESS;
}
在本文中
舵机0°时 PWM周期为20ms 占空时间为0.5ms
舵机45°时 PWM周期为20ms 占空时间为1ms
舵机90°时 PWM周期为20ms 占空时间为1.5ms
舵机180°时 PWM周期为20ms 占空时间为2ms
三、舵机控制
static int ServoSetAngle(struct Servo *ptdev,uint8_t angle){
if(NULL == ptdev || angle > 180){
LogDebug("ServoSetAngle EINVAL \r\n");
return -EINVAL;
}
uint32_t compare = 500000 + angle*500000/45;
int ret = ServoDevPwm.Config(&ServoDevPwm,SET_COMPARE_VALUE,compare);
if(ret != ESUCCESS){
LogDebug("ServoDev.Config EIO \r\n");
return -EIO;
}
return ESUCCESS;
}