STM32 电机教程 28 - ST MCLIB实战之 位置闭环控制

前言

      ST MotorControl Workbench 生成的工程默认实现了电机的电流闭环和速度闭环控制,有些应用场合需要对电机的位置也实现闭环控制,如舵机,伺服系统等,本节就给大家介绍一下基于ST MotorControl Workbench生成的电机工程,如何实现位置闭环控制。

      基于ST MotorControl Workbench生成的电机工程,电流(Iq,id)环的实现在mc_tasks.c文件FOC_CurrController函数中的两个PI_Controller接口调用。其函数调用关系为:ADC1_2_IRQHandler –》TSK_HighFrequencyTask -》CurrController -》PI_Controller。

电机的速度环的实现是基于电流环来实现的,即电流环是内环,速度环是外环,速度环的输出是电流环的输入:

在ST电机库中,速度环的实现在speed_torq_ctrl.c中的STC_CalcTorqueReference函数中,函数调用关系为:SysTick_Handler-》MC_RunMotorControlTasks-》MC_Scheduler-》TSK_MediumFrequencyTaskM1-》(RUN)FOC_CalcCurrRef -》STC_CalcTorqueReference-》PI_Controller。

其于上面对ST MotorControl Workbench生成的电机工程分析,给工程加入位置环也可以像速度环一样的方式实现,即位置环为外环,电流环为内环来两环串联方式实现位置闭环控制,当然也可以位置环为外环,速度环为中间环,电流环为内环三环串联方式实现位置闭环控制。本节给大家介绍第一次即位置环为外环,电流环为内环来两环串联方式实现位置闭环控制的具体操作:

 

在三环控制中,不可避免的会涉及到加速度的计算,正常控制过程为:加速、匀速、减速、定位过程。

那么会涉及到加速度以及定位阶段的控制,这边我们可以按照加速度与速度差成反比,而定位阶段可以直接设定速度为0但是实际使用过程中我们会发现直接的速度模式在定位阶段力量限。

方法一:PID 需要特别设定,更能够定位到给定位置;

方法二:抛开速度环,直接力矩控制;

 实际框图如上图 

增加以下变量或函数用于位置环控制

 

1) 位置环PID 结构体PID_Handle_t PIDAngleHandle_M1   

2) 位置控制的结构体Position_Handle_t   

3) 位置角度误差Position_GetErrorAngle   

4) 位置环速度参考输出计算Position_CalcSpeedReferrence   

5) 位置环力矩参考输出计算Position_CalcTorqueReferrence

 

具体操作为:经工程加入事先准备好的mc_position.c和mc_position.h文件:

在mc_task.c的中频任务函数TSK_MediumFrequencyTaskM1中增加位置环差值数据计算,根据差值计算,当差值在阈值之上的话进行速度控制,在RUN下调用函数Position_GetErrorAngle 和Position_CalcSpeedReferrence。

 

如果差值缩小到一定范围内,则进行力矩控制,在函数FOC_CalcCurrRef中进行调用。

 

最后测试说明,要使用位置模式,需在spi_pwm_encoder.h 开启对应的宏定义

#define POSITION_CONTROL

 

OK,本节内容到此结束,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,每天都会有技术干货推出!!

 

文中源码及资料下载,微信关注 “张十三的博客” 公众号: 在公众号里给十三发送 “下载|STM32 电机教程 28” 即可得到资料下载地址

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章