【程序】【必须】PID速度环控制,代码+调参

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

主控:STM32F103C8T6

1. 电机测速

在进行速度控制之前,我们首先需要进行速度采样,这里参见

2. 电机驱动

​ 这里不细说电机驱动模块的选型和使用,而是说一个常见的误区。我们驱动电机要使用两路PWM,一般是一路给PWM信号,一路是纯低电平。但这其实是不好的,正确的做法是一路给PWM,另一路给纯高电平。此时PWM的占空比越低,电机的速度越快。

​ 如果大家使用的是类似于A4950或者DRV8870这样的电机驱动芯片,它们的数据手册中都会有这样的描述

​ 这是DRV8870的,明确说明了PWM加高电平是最佳控制方式。

image-20230120225734578

这是A4950的,用曲线图的方式说明了PWM加高电平时电流会更加稳定。image-20230120230343030

​ 此外,如果使用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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值