STM32 CubeMax直流电机速度环控制

STM32 CubeMax直流电机速度环控制

本例基于STM32F103C8T6与CubeMax

1. 速度环控制的思路

要对直流电机进行速度环控制,首先先给电机输出一个初始占空比的PWM信号,然后适用编码器读取电机的实时转速,观察电机是转得快了还是慢了,如果转得快了就减小占空比,转的快了就增大占空比,直到达到目标转速。

算法的具体思路看之前讲PID原理的那一篇

2. CubeMax配置

3. 接线

4. 代码编写

pid.c的内容如下

#ifndef _PID_H_

#define _PID_H_

  

#include "stm32f1xx.h"

#include "encoder.h"

#include <stdio.h>

  

//PID三个参数的值

#define KP1 27 //便于以后写多个pid算法并行,这里加序号1

#define KI1 25

#define KD1 2

  
  

typedef struct _PID//PID参数结构体

{

    float kp,ki,kd;

    float err,lastErr;

    float integral,maxIntegral; //积分值

    float output,maxOutput;

}PID;

  

void PID_Init(void);

void PID_SingleCal(PID* pid,float target,float feedback);//一次PID计算

  
  

#endif

pid.c内容如下

#include "pid.h"

  

PID pid1;

  

void PID_Init(void)//PID参数初始化

{

    pid1.err = 0;

    pid1.integral = 0;

    pid1.maxIntegral = 2000;

    pid1.maxOutput = __HAL_TIM_GetAutoreload(&PWM_TIM);

    pid1.lastErr = 0;

    pid1.output = 0;

    pid1.kp = KP1;

    pid1.ki = KI1;

    pid1.kd = KD1;

}

  
  

/****************************************

 * 作用:进行一次PID计算

 * 参数:PID参数结构体地址;目标值;反馈值

 * 返回值:无

 * ****************************************/

void PID_SingleCal(PID* pid,float target,float feedback)//一次PID计算

{

    pid->err = target - feedback;

    //printf("pid->err = %f
",pid->err);

    pid->integral += pid->err;

    //printf("pid->integral = %f
",pid->integral);

  

    if(pid->integral < -pid1.maxIntegral) pid->integral = -pid1.maxIntegral;//限制积分值

    else if(pid->integral > pid1.maxIntegral) pid->integral = pid1.maxIntegral;

    //pid->output = pid->err * pid->kp ;

  

   pid->output = (pid->kp * pid->err) + (pid->ki * pid->integral) + (pid1.kd * (pid->err - pid->lastErr));//全量式PID

  

    if(pid->output < 0) pid->output = 0;//限制积分值

    else if(pid->output > pid1.maxOutput) pid->output = pid1.maxOutput;

  
  

    pid->lastErr = pid->err;

}

此外要在编码器测速函数中增加对输出PWM占空比的控制,encoder,c文件如下

5. 结果

设置目标速度为200,最后还是能比较稳定地维持在200,只是过程比较曲折,说明参数没有调得足够好,还有改进空间

参数整定可以参考野火的教程

经验分享 程序员 微信小程序 职场和发展