前言
昨天添加了I2C的驱动代码,OLED的表情代码
烧录进入初步测试一下,看起来基本正常。
第一个表情基本正常显示了。今天添加上PWM相关代码和接口
舵机操作部分
添加servo.c和.h文件,在main中去调用设置角度的接口完成舵机角度的设置。
我们使用TIM2定时器,左右舵机的控制定时器, TIM2的四路通道作为四个舵机的PWM输出口。
#include "servo.h"
#include "tim.h"
void Servo_Init(void) {
// 启动 PWM 输出
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);
}
void Servo_SetAngle(TIM_HandleTypeDef *htim, uint32_t Channel, uint8_t angle) {
// 将角度转换为 PWM 占空比
uint32_t pulse = (angle * 2000 / 180) + 500;
__HAL_TIM_SET_COMPARE(htim, Channel, pulse);
}
main函数测试代码,四个舵机设置成不同的角度。
// 设置舵机角度
Servo_SetAngle(&htim2, TIM_CHANNEL_1, 90);
Servo_SetAngle(&htim2, TIM_CHANNEL_2, 45);
Servo_SetAngle(&htim2, TIM_CHANNEL_3, 135);
Servo_SetAngle(&htim2, TIM_CHANNEL_4, 180);
总结
代码已上git