PID 调节控制做电机速度控制 V1.1 – Jan 23, 2006
19, Innovation First Road • Science Park • Hsin-Chu • Taiwan 300 • R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 E-mail: ***************.cn
PID 调节控制做电机速度控制
版权声明
凌阳科技股份有限公司保留对此文件修改之权利且不另行通知。凌阳科技股份有限公司所提供之信息相信为正确且可靠之信息,但并不保证本文件中绝无错误。请于向凌阳科技股份有限公司提出订单前,自行确定所使用之相关技术文件及规格为最新之版本。若因贵公司使用本公司之文件或产品,而涉及第三人之专利或著作权等智能财产权之应用及配合时,则应由贵公司负责取得同意及授权,本公司仅单纯贩售产品,上述关于同意及授权,非属本公司应为保证之责任。又未经凌阳科技股份有限公司之正式书面许可,本公司之所有产品不得使用于医疗器材,维持生命系统及飞航等相关设备。
1
模拟PID 控制...................................................................................................................................... 1 1.1 模拟PID 控制原理...................................................................................................................... 1
2
数字PID 控制...................................................................................................................................... 3 2.1 位置式PID 算法.......................................................................................................................... 3 2.2 增量式PID 算法.......................................................................................................................... 4 2.3 控制器参数整定......................................................................................................................... 4
2.3.1 凑试法........................................................................................................................... 5 2.3.2 临界比例法................................................................................................................... 5 2.3.3 经验法........................................................................................................................... 5 2.3.4 采样周期的选择........................................................................................................... 6 2.4 参数调整规则的探索................................................................................................................. 6 2.5 自校正PID 控制器...................................................................................................................... 7
3
软件说明............................................................................................................................................. 8 3.1 软件说明..................................................................................................................................... 8 3.2 档案构成..................................................................................................................................... 8 3.3 DMC 界面.................................................................................................................................... 8 3.4 子程序说明................................................................................................................................. 9
4
程序范例........................................................................................................................................... 16 4.1 DEMO 程序............................................................................................................................... 16 4.2 程序流程与说明....................................................................................................................... 19 4.3 中断子流程与说明................................................................................................................... 20
5
MCU 使用资源................................................................................................................................. 21 5.1 MCU 硬件使用资源说明.......................................................................................................... 21
6
实验测试........................................................................................................................................... 22 6.1 响应曲线................................................................................................................................... 22
7
参考文献........................................................................................................................................... 26
修订记录
日期
版本
编写及修订者
初版 错误校正
编写及修订说明
4、微分作用可改善系统的动态特性,阻止偏差的变化,有助于减小超调量,消除振荡,缩短调节时间t s ,允许加大 Kp ,使系统稳态误差减小,提高控制精度,达到满意的控制效果。所以,在e k 比较大时,Kd 取零,实际为PI 控制;在e k 比较小时,Kd 取一正值,实行PID 控制。
2.5
自校正PID 控制器
对于一个特定的被控对象,在纯比例控制的作用下改变比例系数可以求出产生临界振荡的振荡根据Z -N 条件,有
周期Tu 和临界比例系数Ku 。
T =0. 1Tu Ti =0. 5Tu Td =0. 125Tu
代入(式2-5)则有:
∆u k =Kp (2. 45e k −3. 5e k −1+1. 25e k −2 (式2-7)
很显然,采用上式可以十分容易的实现常数Kp 的校正。
3 软件说明
3.1 软件说明
AN_SPMC75_0012在微处理器SPMC75F2413A 上实现数字PID 对BLDC 速度的调节,重点将是对PID 参数的整定,使系统的动静态性能达到“满意”的效果。
3.2 档案构成
文件名称 Main Chap2 Initial ISR
DigitalPID_V100.lib
功能
BLDC 驱动相关参数初始化,DMC 服务 BLDC 驱动相关函数 系统所有相关初始化程序 驱动中相应的中断服务
PID 设置,初始化和PID 计算函数库函数
类型C C C C lib lib
Spmc75_dmc_lib_V100.lib DMC 通信程序
3.3 DMC界面
Speed1_Cmd:设置电机运转的速度 Speed1_Now:电机当前反馈速度
Speed1_Kp:2.5节 自校正PID 控制器中提到的Kp 值 User_R0:当前P_TMR3_TGRA寄存器的值 User_R1:设置速度与电机实际转速的差值 Motor 1 Start 和 Motor 1 Stop 控制启停
PID 调节控制做电机速度控制
3.4 子程序说明 PIDInit (
原 形 描 述 输入参数 输出参数 头 文 件 库 文 件 注意事项 例 子
void PIDInit (void
PID 所用到的RAM 清零 无 无
Spmc75_PID.h DigitalPID_V100 请在设置参数前使用。 PIDInit (;
PIDSetPoint (
原 形 描 述 输入参数 输出参数 头 文 件 库 文 件 注意事项 例 子
void PIDSetPoint(int 设置PID 调节的目标值 期望值 无
Spmc75_PID.h DigitalPID_V100
PIDSetPoint (2000; //期望电动机的转速为2000rpm
PIDGetSetpoint (
原 形 描 述 输入参数 输出参数 头 文 件 库 文 件 注意事项 例 子
int PIDGetSetpoint(void 读取PID 调节设置的目标值 无
所设置的期望值 Spmc75_PID.h DigitalPID_V100
得到的期望值将和数值的是同一个数值
uiSpeed = PIDSetPoint (; //读取所设置的期望电动机转速
IncPIDCalc (
原 形 描 述 输入参数 输出参数 头 文 件 库 文 件 注意事项 例 子
int IncPIDCalc(int 增量式PID 计算 PID 调节当前采样值 计算增量 Spmc75_PID.h DigitalPID_V100
(式2-5)增量式PID 算法的实现。
uiGoalvalue += IncPIDCalc (1998; //位置式PID 控制算法通过增量式控制算法递推实现,当前采样得到转速1998rpm 。
LocPIDCalc (
原 形 描 述 输入参数 输出参数 头 文 件 库 文 件 注意事项 例 子
其它应用函数式对BLDC 驱动的实现,不再一一赘述,可以参考【AN_SPMC75_0003】应用例的介绍。
unsigned int LocPIDCalc(int 位置式PID 计算 PID 调节当前采样值
位置式PID 计算出的绝对位置值 Spmc75_PID.h DigitalPID_V100
(式2-4)位置式式PID 算法的实现。
uiGoalvalue = LocPIDCalc (1998; //位置式PID 控制算法,当前采样得到转速1998rpm 。
PID 调节控制做电机速度控制
4 程序范例
4.1 DEMO程序
/*=============================================*/ //应用范例
/*=============================================*/ #include "Spmc75_regs.h" #include "Spmc_typedef.h" #include "unspmacro.h" #include "Spmc75_BLDC.h"
main( {
P_IOA_SPE->W = 0x0000; P_IOB_SPE->W = 0x0000; P_IOC_SPE->W = 0x0000;
Spmc75_System_Init(; //Spmc75系统初始化
while(1 { BLDC_Run_Service(; //启停监控 NOP(; } }
//================================================================= // Description: IRQ0 interrupt source is XXX,used to XXX // Notes:错误保护
//================================================================= void IRQ0(void __attribute__ ((ISR; void IRQ0(void {
IPM_Fault_Protect(; }
//================================================================= // Description: IRQ1 interrupt source is XXX,used to XXX // Notes:BLDC启动及正常运行服务
//================================================================= void IRQ1(void __attribute__ ((ISR;
PID 调节控制做电机速度控制
void IRQ1(void {
/*=============================================================*/ /*Position detection change interrupt
/*=============================================================*/ if(P_TMR0_Status->B.PDCIF && P_TMR0_INT->B.PDCIE {
BLDC_Motor_Normalrun(; }
/*=============================================================*/ /*Timer Counter Overflow
/*=============================================================*/ if(P_TMR0_Status->B.TCVIF && P_TMR0_INT->B.TCVIE {
BLDC_Motor_Startup(; }
P_TMR0_Status->W = P_TMR0_Status->W; }
//================================================================= // Description: IRQ6 interrupt source is XXX,used to XXX // Notes:DMC接收中断服务函数
//================================================================= void IRQ6(void __attribute__ ((ISR; void IRQ6(void {
if(P_INT_Status->B.UARTIF {
if(P_UART_Status->B.RXIF MC75_DMC_RcvStream(; if(P_UART_Status->B.TXIF && P_UART_Ctrl->B.TXIE; } }
//================================================================= // Description: IRQ7 interrupt source is XXX,used to XXX // Notes:512Hz定时中断完成PID 调节速度
//================================================================= void IRQ7(void __attribute__ ((ISR; void IRQ7(void {
if(P_INT_Status->B.CMTIF { if(PCMT Ctrl->B.CM0IF && PCMT Ctrl->B.CM0IE
{
BLDC_Motor_Actiyator(; } P_CMT_Ctrl->W = P_CMT_Ctrl->W; } }
PID 计算子函数:
PID 调节控制做电机速度控制
//数据结构
typedef struct PID {
int SetPoint; //设定目标 Desired Value long SumError; //误差累计
double Proportion; //比例常数 Proportional Const double Integral; //积分常数 Integral Const double Derivative; //微分常数 Derivative Const
int LastError; //Error[-1] int PrevError; //Error[-2] } PID;
static PID sPID; static PID *sptr = &sPID;
//PID参数初始化
void IncPIDInit(void {
sptr->SumError = 0; sptr->LastError = 0; //Error[-1] sptr->PrevError = 0; //Error[-2]
sptr->Proportion = 0; //比例常数 Proportional Const sptr->Integral = 0; //积分常数Integral Const sptr->Derivative = 0; //微分常数 Derivative Const sptr->SetPoint = 0; }
PID 调节控制做电机速度控制
6 实验测试
测试主要是针对120度上相PWM 方波驱动带霍尔位置传感的直流无刷电动机并应用PID 控制来进行对电动机的速度调节。硬件原理图及关于BLDC 驱动请参照【AN_SPMC75_0003】。Kp 参数的调整,在源程序中是可以用预编译定义的。如果定义的话就可以在DMC 下对Kp 参数调整,但请注意,DMC 下的参数需要是扩大一千倍的。例如:Kp =0.105,DMC 参数就应该是105。这样Kp 的范围就可以在(400,10),对于这个范围的参数只能说是能正常的工作。如果说最适合,那么还请您根据系统的需要,按照各种整定方法对其进行全面的评估。
【注意】 1、在这里PID 参数的选择和PWM 的载波频率也有一定的关系,载波频率越高则
【P_TMRx_TGRA】所设置的范围就越小,调节就比较的快。这种种因数希望到能考虑在内,得到最适合的PID 参数。
【注意】 2、如果选择使用DMC 来调整PID 的Kp 参数,请先设置转速(Speed1_Cmd)和Kp (Speed1_Kp)的数值再启动Motor1;若是使用固定的PID 的Kp 参数(在程序中固定),请先设置转速(Speed1_Cmd)再启动Motor1。
【注意】 3、在DMC 下PID 参数的时候Speed1_Kp与Kp 的关系是Speed1_Kp=1000Kp ,就是说如果要设置Kp 为0.125,DMC 的Speed1_Kp应该给出125。
6.1
响应曲线 所有测试都是在空载,PWM 载波为6KHz 的情况下进行:
1、 Speed1_Kp=10,即Kp =0.01。在转速从0rpm 升至2000rpm 的响应曲线,如图 6.1。
PID 调节控制做电机速度控制
图 6.1 Kp =0.01响应曲线
2、 Speed1_Kp=105,即Kp =0.105。在转速从0rpm 升至2000rpm 的响应曲线,如图 6.2。
图 6.2 Kp=0.105响应曲线
PID 调节控制做电机速度控制
3、 Speed1_Kp=180,即Kp =0.180。在转速从0rpm 升至2000rpm 的响应曲线,如图 6.3。
图 6.3 Kp =0.180响应曲线
4、 Speed1_Kp=250,即Kp =0.250。在转速从0rpm 升至2000rpm 的响应曲线,如图 6.4。
PID 调节控制做电机速度控制
图 6.4 Kp =0.250响应曲线
PID 调节控制做电机速度控制
7 参考文献
【1】SUNPLUS SPMC75F2413A编程指南V1.0 Oct 12 2004
【2】机械工业出版 直流无刷电动机原理及应用(第二版)
电动机的单片机控制
单片机模糊逻辑控制 张琛编着 【3】北京航空航天大学出版社 【3】北京航空航天大学出版社
王晓明编着 余永权、曾碧着下载本文