当前位置:网站首页>【零基础玩转BLDC系列】无刷直流电机闭环控制与软件架构
【零基础玩转BLDC系列】无刷直流电机闭环控制与软件架构
2022-08-09 05:11:00 【大彪爱工作】
无刷直流电动机基本转动原理等内容请参考《基于霍尔传感器的无刷直流电机控制原理》、《基于反电动势过零检测法的无刷直流电机控制原理》、《以GD32F30x为例定时器相关功能详解》与《无刷直流电机无位置传感器三段式启动法详细介绍及代码分享》,BLDC基本原理及基础知识本篇不再赘述。
1.PID控制原理
将偏差的比例、积分和微分通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。
typedef struct
{
//误差项最近两个值 0新值 1旧值
float error[2];
//PID 三个基本参数
float Kp;
float Ki;
float Kd;
float Pout; //比例项输出
float Iout; //积分项输出
float Dout; //微分项输出
float out; //三项叠加输出
float max_out; //PID最大输出
float min_out; //PID最小输出
} pid_type_def;
比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差。
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的。为了消除稳态误差,在控制器中必须引入“积分项”。
在微分控制中,控制器的输出与输入误差信号的微分成正比关系。“微分项”能预测误差变化的趋势,这样,具有比例+微分的控制器就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分控制器能改善系统在调解过程中的动态特性。
float PID_calc(pid_type_def *pid, float ref, float fb)
{
//计算最新的误差值
pid->error[0] = ref - fb;
//比例项计算输出
pid->Pout = pid->Kp * pid->error[0];
//积分项计算输出
pid->Iout += pid->Ki * pid->error[0];
//微分项输出
pid->Dout = pid->Kd * ( pid->error[0] - pid->error[1] );
pid->Iout=( pid->Iout < pid->min_out ) ? pid->min_out : pid->Iout ;
pid->Iout=( pid->Iout > pid->max_out ) ? pid->max_out : pid->Iout ;
//叠加三个输出到总输出
pid->out = pid->Pout + pid->Iout + pid->Dout;
pid->out=( pid->out < pid->min_out ) ? pid->min_out : pid->out ;
pid->out=( pid->out > pid->max_out ) ? pid->max_out : pid->out ;
pid->error[1] = pid->error[0];
return pid->out;
}
2.转速控制
对BLDC进行转速控制是最常用的控制方式,转速闭环控制以电机实际转速为反馈量,与给定转速值进行比较,计算两者偏差,并对偏差值进行PID控制,从而逐渐消除此偏差,使电机转速达到给定值。
通过转子位置传感器获取当前的电机转速𝑣feedback和转子位置信号(Rotor positionsignal);计算给定转速𝑣reference和实际转速𝑣feedback的差值𝑣error,送入转速PID控制器中进行计算,动态调整PWM占空比,输出相应的PWM驱动信号到驱动电路;根据当前转子位置信号,确定换相步序和绕组导通顺序,控制驱动电路的通断情况;重复以上过程,逐渐消除转速误差,直到电机转速达到给定值。
3.电流控制
由于BLDC的扭矩与电流有效值成比例关系,对BLDC进行电流控制,可实现对BLDC的线性扭矩控制。将采集到的BLDC电机的母线电流作为反馈量,与给定电流控制量进行比较,再将两者误差带入PID控制器,从而逐渐消除电流误差。
通过转子位置传感器获取转子位置信号(Rotor position signal),通过ADC模块获取电机的母线电流𝑖feedback;计算给定电流𝑖reference和实际𝑖feedback的差值𝑖error,送入电流PID控制器中进行计算,动态调整PWM占空比,输出相应的PWM驱动信号到驱动电路;根据当前转子位置信号,确定换相步序和绕组导通顺序,控制驱动电路的通断情况;重复以上过程,直到电机的母线电流达到给定值。
4.软件架构
整个软件层分为应用层、算法层和驱动层。
应用层包括main 主函数模块,ISR 中断处理函数模块、时基Systick 模块和BLDC 应用接口模块;算法层包括BLDC Algorithm 模块和PID control 模块;驱动层(Driver layer):包括GD32Fxx_Standard_peripheral library(GD 芯片固件库),hardware(硬件驱动配置)模块,utils(工具软件)模块,led/digital_led(LED 和数码管)模块,key/usart/flash(按键/串口/数据存储)等模块。
边栏推荐
猜你喜欢
随机推荐
Perl basic grammar
【计算机网络-哈工大】---学习笔记(下)---(二)Web安全威胁、SSL\IPsec、虚拟专用网、防火墙
Parameters in dynamic libraries cannot be modified through macro definitions or global variables in header files
3.3V控制输出5V的方法
How to choose an APS system, it is necessary to clarify these seven key factors
Quantitative Genetics Heritability Calculation 2: Half Siblings and Full Siblings
说明高级语言、汇编语言、机器语言三者的区别,谈谈你对汇编语言的认识。
电气规则
【HMS Core】【FAQ】【AR Engine】AR Engine常见问题合集
C进阶-C语言文件操作
步进电机驱动的使用及程序
区别如下概念:路径、绝对路径、相对路径、当前目录。系统磁盘上存在某个可执行文件,但在DOS环境输入其文件名却提示没有这个文件,是什么原因?
22-08-08 西安 尚医通(04)MongoDB命令、MongoTemplate、MongoRepository
阻塞队列实现异步消费
【Harmony OS】【ArkUI】ets开发 基础页面布局与数据连接
STM32定时器输入捕获频率(cube)
C语言之内存函数
Why do enterprises need business intelligence BI in the digital age
mysql content does not exist error
Still don't know what business intelligence (BI) is?After reading this article, you will understand