主控:STM32F103C8T6
1. 电机测速
在进行速度控制之前,我们首先需要进行速度采样,这里参见
2. 电机驱动
这里不细说电机驱动模块的选型和使用,而是说一个常见的误区。我们驱动电机要使用两路PWM,一般是一路给PWM信号,一路是纯低电平。但这其实是不好的,正确的做法是一路给PWM,另一路给纯高电平。此时PWM的占空比越低,电机的速度越快。
如果大家使用的是类似于A4950或者DRV8870这样的电机驱动芯片,它们的数据手册中都会有这样的描述
这是DRV8870的,明确说明了PWM加高电平是最佳控制方式。

这是A4950的,用曲线图的方式说明了PWM加高电平时电流会更加稳定。
此外,如果使用PWM加高电平的控制方式,在设置速度为0时,两路信号都会输出纯高电平,此时会触发芯片的刹车模式,使得电机快速停止转动,避免我们制作的小车出现刹不住车的情况。
3. 速度环实现
PID的原理就不赘述了,我们直接看代码。
现在我们已经在定时器中断中完成了电机的速度采样,得到了电机的速度,接下来我们需要进行PID计算,并输出相应占空比的PWM给电机。
但是在此之前,我们需要编写PID的计算函数和进行相关初始化,下面是代码
PID.h部分
#ifndef _PID_H_
#define _PID_H_
#include "stm32f1xx.h"
#include "encoder.h"
#include <stdio.h>
#include "control.h"
//PID三个参数的值
#define KP_speed 2
#define KI_speed 0
#define KD_speed 0
typedef struct _PID//PID参数结构体
{
float kp,ki,kd;
float err,lastErr;
float integral,maxIntegral; //积分值
float output,maxOutput;
}PID;
void PID_Init(void);
float Speed_PID_Realize(PID* pid,float target,float feedback);//一次PID计算
PID.c部分
#include

本文详细介绍了基于STM32F103C8T6的电机PID速度环控制,包括电机测速、驱动、速度环实现及调参步骤。重点讲解了驱动电路的正确配置,PID控制器的改进(如加入死区和零目标处理)以及如何通过调整PID参数实现稳定快速的电机控制。最后,分享了调参经验和评估标准。
最低0.47元/天 解锁文章
1660

被折叠的 条评论
为什么被折叠?



