1. 从零搭建STM32CubeMX电机控制工程
第一次用STM32CubeMX配置电机控制时,我对着满屏的选项有点懵。后来发现只要抓住几个关键配置,半小时就能搭好基础框架。打开CubeMX新建工程后,首先选择你的STM32型号(我常用F4系列),然后进入Clock Configuration确保系统时钟正确。这里有个坑:如果外部晶振频率设错,后续定时器计算全都会出问题。
接下来是定时器配置的重头戏。我用TIM1生成PWM驱动电机,具体参数要根据电机特性调整:
- Prescaler设为0(不分频)
- Counter Period决定PWM频率,普通直流电机用10kHz左右
- PWM Mode选择PWM mode 1
- Pulse初始值设为0
编码器接口配置更简单,选择另一个定时器(如TIM2)的Encoder Mode,注意AB相极性要和硬件接线一致。最后在Project Manager里勾选"Generate peripheral initialization as a pair of .c/.h files",这样HAL库的电机驱动代码会更清晰。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 增量式PI控制器的代码实现
很多教程一上来就讲PID公式推导,其实对工程师来说,先把代码跑通更重要。我在项目里验证过的增量式PI控制器长这样:
c复制// pid.h
typedef struct {
float Kp;
float Ki;
int target;
int last_error;
int integral;
} PI_Controller;
void PI_Init(PI_Controller *pid, float kp, float ki);
int PI_Update(PI_Controller *pid, int feedback);
对应的.c文件实现:
c复制// pid.c
void PI_Init(PI_Controller *pid, float kp, float ki) {
pid->Kp = kp;
pid->Ki = ki;
pid->target = 0;
pid->last_error = 0;
pid->in
