-
2020-01-23 13:12:25
PID增量控制
#include"Pid_Init.h" #include"main.h" extern u16 out; extern u16 CurSpeed; extern u16 SpeedSet; extern u16 PWMTime; int error=0; //当前偏差 int error1=0; //上次偏差 int error2=0; //上上次偏差 struct Pid_Struct{ float kp; float ki; float kd; //pid控制系数 float uk; //当前增量输出 float uk1; //上次增量输出 float uk2; //上上次增量输出 }; struct Pid_Struct PID; //PID参数初始化 void PID_Init(){ PID.kp=15; PID.ki=10; PID.kd=3; PID.uk=0; PID.uk1=0; PID.uk2=0; } //PID增量算法控制转速 void PID_Control(){ error=SpeedSet-CurSpeed;// PID.uk2=(PID.kp*(error-error1) \ +PID.ki*error \ +PID.kd*(error-2*error1+error2))/50; /*增量PID算法*/ PID.uk=PID.uk1+PID.uk2; out=(int)PID.uk; if(out>1000) { out=1000; } else if(out<0) { out=0; } PID.uk1=PID.uk; error2=error1; error1=error; PWMTime=out; }
工程代码:
https://www.cirmall.com/circuit/15364/
更多相关内容 -
PID算法控制电机转速
2018-11-29 15:08:58PID算法控制电机转速 ,STM32开发例程,适合初学者学习, -
入门PID控制算法——控制电机稳定在目标转速
2020-11-08 12:34:58本程序基于STM32 F103RCT6,使用TB6612FNG驱动模块来实现对电机的速度控制,使用了3个定时器分别执行3种功能。具体内容请见代码注释。 本资源中各个参数都很大的原因是因为我的ARR值达到了7200,同时存在启动时直接... -
PID算法控制电机转速。单片机
2018-11-01 16:16:03用PID控制算法实现的单片机程序, PID是比例、积分、微分的简称,PID控制的难点不是编程,而是控制器的参数整定。参数整定的关键是正确地理解各参数的物理意义 -
PID算法控制电机转速.rar
2021-06-07 22:40:34由单片机AT89C51为主控芯片,以LCD1602屏幕为显示屏,通过PID算法控制pwm调节电机转速并显示 内含仿真与程序 实测可用,谢谢, -
PID算法控制电机转速 proteus仿真 v3.1
2019-04-26 17:37:48使用增量式PID算法与位置式PID算法控制电机转速,LCD1602显示控制状态。附带增量式PID的推导过程。 -
PID算法控制电机转速 PROTEUS仿真
2014-08-26 11:37:24位置式PID、增量式PID控制直流电机转速;LCD1602显示控制状态;双NMOS H桥驱动直流电机。 -
基于PID算法的控制电机转速.zip
2019-07-12 11:02:27简洁易懂,适合初学者学习研究,为PID算法进一步理解做铺垫。 -
PID算法电机转速控制仿真与程序
2018-07-16 00:15:02对大神的代码和仿进行了大量修改,为了看都大神的代码真的是花了一个月的时间,相当于是作者的改进版本吧,同时也让代码可读性尽可能的提高。 优化了很多代码,去掉了一个中断服务,添加了不少备注,经过优化大神的... -
STM31F103,PWM电机调速,PID算法,编码器测速,平衡小车资料.zip
2020-03-10 19:02:51简而言之用一个电机的转速和角度传感器来控制另外两个电机的转速和方向。可以用来学习PID,编码器。 压缩包里有详细的文档,介绍编码器的、PID的、平衡小车等。是一份很不错的资料 软件篇: 系统采用外设有:TIM1 ... -
PID算法控制直流电机转速仿真与C程序
2019-05-02 12:24:53内含Protues仿真和C程序,可以带动步进电机做个时钟什么的。。 -
stm32pid算法控制电机转速_电机控制算法探讨ABB
2020-11-26 10:43:27欢迎加入技术交流QQ群(2000人):电力电子技术与新能源905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业...电力电子技术与新能源论坛www.21micro-grid.com小编推荐值得一看的书单电机控制算法...欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 905723370
高可靠新能源行业顶尖自媒体
在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验,欢迎关注我们,搜索微信公众号:电力电子技术与新能源(Micro_Grid),与中国新能源行业共成长!
电力电子技术与新能源论坛
www.21micro-grid.com
小编推荐值得一看的书单
电机控制算法探讨-ABB异步、同步电机的模型及矢量控制图及死区补偿算法
电机控制是指对电机的启动、加速、运转、减速及停止进行的控制。根据不同电机的类型及电机的使用场合有不同的要求及目的。
说明:本文来源网络;文中观点仅供分享交流,不代表本公众号立场,转载请注明出处,如涉及版权等问题,请您告知,我们将及时处理。
重点
如何下载 《电机控制算法探讨-ABB》高清PDF电子书
点击文章底部,访问电力电子技术与新能源论坛(www.21micro-grid.com)下载!
- END -
合作请联系
微信号(QQ号)1768359031
推荐阅读:点击标题阅读
Boost 变换器 PI参数设计举例
开关电源控制环路设计—麦格米特
电力电子控制器 PID 参数的几种调试方法
捷克电子工程师,人称“焊武帝”,想学电子艺术焊的同学有福了
大功率IGBT模块及驱动技术
最通俗的解释,搞懂PID..
看完有收获?请分享给更多人
限于篇幅,已做删减,获取原文,加小编微信号(QQ号)1768359031,文章收集整理于网络,如有侵权,请联系小编删除
公告:
小编对电力电子技术与新能源及微电网的市场发展很看好,对其关键技术很感兴趣,如有技术问题,欢迎加小编微信号(QQ号)1768359031,共同讨论。另,本公众号也有微信群,需要邀请进群,如有需要,可加小编微信号,谢谢!
欢迎大家加入技术交流QQ群:电力电子技术与新能源 905723370
电力电子技术:光伏并网逆变器(PV建模,MPPT,并网控制,LCL滤波,孤岛效应),光伏离网,光伏储能,风电变流器(双馈、直驱),双向变流器PCS,新能源汽车,充电桩,车载电源,数字电源,双向DCDC(LLC,移相全桥,DAB),储能(锂电池、超级电容),低电压穿越(LVRT),高电压穿越,虚拟同步发电机,多智能体,电解水,燃料电池,能量管理系统(直流微网、交流微网)以及APF,SVG ,DVR,UPQC等谐波治理和无功补偿装置等。
PSCAD/MATLABsimulink/Saber/PSPICE/PSIM——软件仿真+DSP+(TI)TMS320F2812,F28335,F28377,(Microchip)dsPIC30F3011,FPGA,ARM,STM32F334——硬件实物。
欢迎技术人员加入,多多交流,共同进步!打广告可以,要么有创意,要么有红包,谢谢。。。。。
更多精彩点下方“阅读原文”!
快来“在看”一下吧!
-
PID算法根据温度PWM控制电机转速
2015-06-15 22:07:16这是一个根据温度进行PID控制PWM调速电机的程序代码 -
stm32pid算法控制电机转速_论文推荐 | 基于全阶状态滑模观测器的混合永磁记忆电机磁链观测...
2020-11-23 22:52:42图6 电机转速突变运行特性曲线 在0.15 s给定增速后, 受弱磁控制影响, 电机转速会很快升速进入高速稳定运行状态, 同时逻辑判断模块根据当前需求做出去磁增速决策。将切换信号发送出去, 使得交轴电流快速变大。控制...点击”公众号首页-论文导读-微刊”或页面下端“阅读原文”可在线浏览文章全文,如果你喜欢本文,请分享到朋友圈。
2020年第28卷第2期
基础研究 基本信息
作者: 姜晓奇1,2 , 刘维亭1, 魏海峰1,2 , 张 懿1,2
单位:1. 江苏科技大学 电子信息学院, 江苏 镇江, 212003; 2. 常熟瑞特电气股份有限公司, 江苏 苏州, 215500
基金项目: 国家自然科学基金项目(51977101); 江苏省省重点研发计划产业前瞻与共性关键技术重点项目(BE2018007); 江苏省研究生科研与实践创新计划项目资助.
摘要由于混合永磁记忆电机(HPMMM)永磁体在线充磁与去磁时转子磁链定向难度大, 针对HPMMM永磁体在线调磁时磁链观测精度不高的问题, 提出了一种基于全阶状态滑模观测器的混合磁链观测方法。该方法采用全阶磁链观测器并结合滑模反馈部分保证电流观测值收敛于真实值, 同时对HPMMM定子电流与转子磁链实时观测,进而获得更高精度的转子磁链观测。全阶状态滑膜观测器应用于HPMMM矢量控制策略中, 优化了系统整体控制复杂程度。最后通过仿真对比分析, 相比传统永磁同步电机而言, HPMMM调速范围更宽, 交直轴电流波动较小, 收敛于实际磁链速度更快, 表明该方法能进一步提高交流脉冲对HPMMM充磁和去磁时磁场定向的准确性, 增加系统参数鲁棒性、稳定性。
近年来, 我国对海洋开发与海洋安全重视程度不断上升, 水下无人智能装置的研究成为当前热点。在水下电力推进装置中, 对水下特种推进电机选择要求更高, 混合永磁记忆电机(hybrid permanent magnet memory machine, HPMMM)采用钕铁硼和铝镍钴混合励磁, 既具有转矩和功率密度高的优点, 又具有永磁磁通在线可调的特点, 可满足水下复杂环境中对水下航行动力的需求[1-3]。HPMMM定子与传统永磁同步电机(permanent magnet synchronous motor, PMSM)相同, 转子利用铝镍钴永磁体的高剩磁、低矫顽力特性。在三相定子电枢绕组中输入一个特定脉冲电流, 使得转子中产生一个能够瞬间改变铝镍钴永磁体磁化水平的强磁场, 达到改变气隙磁场的目的[4-6]。由于海洋环境恶劣, 为保障水下HPMMM在推进与控制系统稳定运行, 对HPMMM精准控制的研究受到越来越多关注。
为了更加精确地控制电机, 实现气隙磁场的调节, 减少电励磁损耗, 简单高效地实现在线调磁, 解决调速范围受限问题, 国内外研究者提出采用具有高矫顽力特性的钕铁硼与具有高剩磁特性的铝镍钴相结合, 作为HPMMM的永磁体, 再施加脉冲电流进行调磁[7-8]。这种特殊结构转子可对永磁体进行在线充去磁, 而且几乎没有励磁损耗。但气隙磁通的检测与调节难度较大, 对HPMMM施加调磁脉冲来控制气隙磁通的关键在于转子磁链定向识别的问题[9-11]。吴文进等[12]在同步旋转坐标系下采用全阶磁链观测器估算电机定子电流和转子磁链, 并采用欧拉法进行离散化分析来克服离散化误差大的缺点, 但该算法在线辨识磁链精度不高。蒋林等[13]提出一种模糊自适应控制全阶磁链观测算法, 仿真结果表明在满足系统自适应性和鲁棒性条件下提高了转速辨识精度, 不过仅限于低速范围稳定运行, 中高速范围运行缺乏进一步验证。针对系统高鲁棒性与宽范围调速, 车海军等[14]引入3阶巴特沃思滤波器并采取改进的模糊比例积分(proportional integral, PI)代替之前的控制器, 消除掉输入信号的杂质, 提高转速在线辨识精度; 韦文祥等[15]将闭环转子磁链观测器(closed loop extended-state-observer, CESO)模型中不确定部分进行状态扩展并反馈补偿, 能在大范围内进行调速, 在线辨识磁链, 但以上2种方案对电机参数要求较高, 系统鲁棒性不高, 不能满足水下复杂条件对推进电机的需求。杨公德等[16]对混合永磁磁通切换记忆电机采用分区控制, 低、高速区采用不同控制方式, 虽拓宽了电机调速范围, 但控制方式过于复杂, 对高、低速没有明确区分, 实用性不强。
文中针对HPMMM分析其调磁原理并推导电磁性数学模型, 提出了一种适用于水下电力推进与控制的新型观测算法。该算法基于观测精度较高的全阶磁链观测器并结合鲁棒性较强的滑模反馈环节, 实现在线调磁, 使电机的磁链观测具有更好的稳态性和收敛性, 优化了HPMMM负载突变时系统动态稳定性。最后, 采用Matlab/ Simulink对磁链观测系统进行仿真研究与分析, 验证了该方法的可行性和实用性。
1 HPMMM调磁原理
HPMMM的永磁体采用6极的V形结构, 如图1所示, 该结构对聚磁有明显作用, 在中间气隙部分可得到较大的磁场。
图1 HPMMM结构
HPMMM永磁体中采用隔磁桥增大了交轴方向磁阻, 减小了交轴方向电感, 使电机运行中直轴方向的气隙磁场受交轴方向电枢反应而被极大削弱。当施加正向调磁脉冲电流时, 铝镍钴和钕铁硼混合永磁体会共同作用, 最终将混合磁通推向三相绕组, 使得产生的气隙主磁通得到加强; 施加反向调磁脉冲电流时, 铝镍钴和钕铁硼混合永磁体会共同作用, 最终将混合磁通推向永磁体内部, 削弱内部磁场, 达到弱磁的目的。
图2为HPMMM驱动控制系统原理框图。根据光电编码器与速度PI环得出电机速度反馈需求, 调磁电流分配控制器与可控调磁电流变量作用于调磁电流控制器。调磁电流控制器与调磁电流变换器共同对调磁电流进行控制与调节, 产生可控调磁电流变量, 实现了在线调磁的目的, 增强了系统灵活性。
图2 HPMMM调磁原理框图
2 HPMMM数学模型 3 全阶状态滑模观测器3.1 全阶状态磁链观测器
3.2 全阶状态滑模磁链观测器
4 仿真结果及分析为了验证文中提出的全阶状态滑模磁链观测器对HPMMM磁链观测精度高, 系统鲁棒性强的控制效果。根据HPMMM的特点构造含有全阶滑模磁链观测器的控制系统。基于Matlab/Simulink仿真搭建了含有全阶状态滑模磁链观测器的控制系统模型, 系统整体仿真模型框图如图4所示。
图4 系统整体仿真模型框图
选择HPMMM与传统PMSM进行对比, 初始参数配置相同, 其定子三相均为Y接, HPMMM设定参数如表1所示。为验证文中提出的采用全阶状态滑模观测器算法的可行性与稳定性, 对传统PMSM与HPMMM系统进行仿真, 并且对结果进行分析比较。
表1 HPMMM设定参数
4.1 仿真结果
传统PMSM初始给定负载设置为0 N·m, 由静止起动到额定转速1 000 r/min后, 在0.2 s时刻给定负载突变为10 N·m 时, 经过约60 ms波动后, 进入稳态运行状态。图5为该电机在0.2 s突加负载后的运行特性曲线。
图5 电机突加负载运行特性曲线
电机转速响应曲线如图5(a)所示, 在0.2 s时, 转速有了小幅度减小, 在极短时间加速后, 转速立刻回到稳态, 由此可知转速运行在稳态无静差状态。交轴电流iq响应曲线如图5(b)所示, 为了保证电机启动时获得最大允许加速, 交轴电流iq会快速增大。在电机达到额定转速后, 电流会立刻减小, 虽短时间内有波动, 但系统会很快进入稳态。突加负载后, 电机交轴电流iq由1 A增至10 A左右, 使得输出转矩和负载所需转矩保持平衡, 系统在短时间内调整后会恢复到稳态。直轴电流id的响应曲线如图5(c)所示。在系统整个运行状态中, 直轴电流id基本保持在±0.5 A范围内波动, 并不会影响到永磁磁场。永磁磁链值观测结果如图5(d)所示, 观测器得出的值靠近实际值, 在一定的范围内上下波动, 在负载发生突变时, 观测磁链出现小幅度波动, 随后在很短时间内永磁体磁链观测值进入稳态。
HPMMM电机设定从静止起动至额定转速1 000 r/min启动负载为2 N·m。稳定运行后, 在0.15 s时转速给定值突变为1 200 r/min, 在系统进入稳态运行后。在0.3 s时, 电机转速给定值再次突变为1 000 r/min, 电机转速立刻下降到额定转速, 系统再次进入稳态运行状态。系统仿真结果如图6所示。
图6 电机转速突变运行特性曲线
在0.15 s给定增速后, 受弱磁控制影响, 电机转速会很快升速进入高速稳定运行状态, 同时逻辑判断模块根据当前需求做出去磁增速决策。将切换信号发送出去, 使得交轴电流快速变大。控制系统判断出去磁控制后, 设定直轴电流id为弱磁所需值, 并且作用极端时间后, 自动恢复到初始值0附近。此时, 观测器观测到磁链值快速变化, 迅速跟踪到实际值附近。观测得到的电机混合永磁磁链值由0.3 Wb迅速减小为 0.27 Wb, 系统此时进入稳定运行状态。在0.3 s增磁减速控制判断后, 系统设置给定转速突变为1 000 r/min额定转速。此时, 系统控制部分会根据当前需求做出增磁减速决策, 发出控制信号。在极端时间内, 直轴电流id起作用, 交轴电流iq迅速减小。直轴电流id迅速增大到增磁控制所需电流值, 并且作用几个毫秒后, 再次恢复到起始值0附近。同时交轴电流iq迅速增大, 保证电磁转矩和负载所需转矩维持平衡。增磁控制完成后, 观测器观测磁链值会快速收敛于磁链给定实际值。观测得到的HPMMM混合磁链值由0.27 Wb增大到 0.3 Wb。
4.2 仿真对比分析
由上述仿真结果可知, 采用全阶状态滑模观测器辨识HPMMM转速、交直轴电流和永磁体磁链参数, 与传统PMSM辨识所得参数进行对比。在电机启动后, HPMMM转速收敛速度更快; 在稳定运行中, 可对其进行突加负载, 由直轴电流方向发出调磁脉冲, 改变永磁体中铝镍钴部分磁化水平, 达到调磁目的, 并且交直轴电流波动更小, 系统更稳定; 在调磁后, 观测器能快速收敛于变化后的磁链, 可得出系统鲁棒性更好。
5 结束语基于混合永磁磁链在线可调特性, 提出了全阶状态滑模观测的控制策略。HPMMM用作水下特种推进电机时, 具有高稳定动力性能、宽范围调速。为了验证所提出策略的有效性, 通过仿真结果分析可知, 该观测器满足永磁体磁链在线调节性能, 具有更高精度的磁链观测, 控制稳定性更好。在水下电力推进与控制中, HPMMM的在线调磁法使电机获得更宽的恒功率速度范围, 并且在调磁过程中几乎没有调磁损耗, 提高了电机运行效率、减小能源消耗。
采用全阶状态滑模观测器, 引入滑模反馈部分, 使电流观测值更快收敛于真实值, 估测结果精度较高, 能在短时间内完成动态响应, 反映出观测器具有较好的抗干扰能力。在线实时观测永磁体磁链, 有利于判断HPMMM的调磁过程。
但是, 文中电机控制局限于仿真, 实际中通过施加脉冲电流调节永磁体磁化水平的策略, 可能会对系统造成明显抖动, 并且会对电机绝缘有所影响, 后续工作中可对其进行深入分析研究。
参考文献[1] 王秀和.永磁电机[M]. 北京: 中国电力出版社, 2011: 18-20.
[2] 张林森, 徐海珠, 王松林. 一种新型水下推进用双转子永磁电机及其研究现状[J]. 鱼雷技术, 2013, 21(6): 445-449.
Zhang Lin-sen, Xu Hai-zhu, Wang Song-lin. The New Type of Dual-rotor Permanent Magnet Motor for Underwater Propulsion: a Review[J]. Torpedo Technology, 2013, 21(6): 445-449.
[3] 李宏, 张鹏举. 双三相电机感应电机矢量控制研究[J]. 鱼雷技术, 2016, 24(5): 351-356.
Li Hong, Zhang Peng-ju. Vector Control of Dual Three-Phase Induction Motor[J]. Torpedo Technology, 2016, 24(5): 351-356.
[4] 周裕斌, 陈阳生. 一种混合永磁记忆电机的设计[J]. 电工技术学报, 2015, 30(14): 51-60.
Zhou Yu-bin, Chen Yang-sheng. Design of a Hybrid Permanent Magnet Memory Motor[J]. Transactions of China Electrotechnical Society, 2015, 30(14): 51-60.
[5] Ostovic V.Memory motors[J]. IEEE Industry Transactions on Industry Applications, 2003, 9(1): 52-61.
[6] 林明耀, 杨公德, 李念. 混合永磁记忆电机系统及其关键技术综述[J]. 中国电机工程学报, 2018, 38(4): 1187-1202.
Lin Ming-yao, Yang Gong-de, Li Nian. Overview of Hybrid Permanent Magnet Memory Machine Systems and Their Key Technologies[J]. Proceedings of the CSEE, 2018, 38(4): 1187-1202.
[7] 壮而行, 阳辉. 磁通切换型记忆电机控制策略研究[J]. 微特电机, 2016, 44(10): 4-10.
Zhuang Er-xing, Yang Hui. Research on Control Strategy of Flux Switching Memory Machine[J]. Micro Motor, 2016, 44(10): 4-10.
[8] 朱孝勇, 程明, 赵文祥. 混合励磁电机技术综述与发展展望[J]. 电工技术学报, 2008, 23(1): 30-39.
Zhu Xiao-yong, Cheng Ming, Zhao Wen-xiang. An Overview of Hybrid Excited Electric Machine Capable of Field Con-trol[J]. Transactions of China Electrotechnical Society, 2008, 23(1): 30-39.
[9] 林鹤云, 刘恒川, 黄允凯. 混合永磁记忆电机特性分析和实验研究[J]. 中国电机工程学报, 2011, 31(36): 71-76.
Lin He-yun, Liu Heng-chuan, Huang Yun-kai. Characteristic Analysis and Experimental Study of a Hybrid Permanent Magnet Variable Flux Memory Motor[J]. Proceedings of the CSEE, 2011, 31(36): 71-76.
[10] 王高林, 陈伟, 杨荣峰. 无速度传感器感应电机改进转子磁链观测器[J]. 电机与控制学报, 2009, 13(5): 638- 642.
Wang Gao-lin, Chen Wei, Yang Rong-feng. Improved Rotor Flux Estimator for Sensor Less Induction Motor[J]. Lectric Machines and Control, 2009, 13(5): 638-642.
[11] 赵武玲, 魏振, 姚广. 永磁同步电动机全阶状态观测器的设计及分析[J]. 微特电机, 2019, 47(1): 20-24.
Zhao Wu-lin,Wei Zhen, Yao Guang. Design and Analysis of Full-Order State Observer on Permanent Magnet Synchronous Motor[J]. Micro Motor, 2019, 47(1): 20-24.
[12] 吴文进, 苏建徽, 刘鹏. 感应电机全阶磁链观测器设计及其控制性能对比分析[J]. 电机与控制学报, 2016, 20(4): 78-83.
Wu Wen-jin, Su Jian-hui, Liu Peng. Design of Full-Order Flux Observer and Comparision Analysis for Its Control Performance[J]. Lectric Machines and Control, 2016, 20(4): 78-83.
[13] 蒋林, 吴俊, 邱存勇. 感应电机模糊自适应全阶磁链观测器研究[J]. 控制工程, 2016, 23(6): 858-863.
Jiang Lin, Wu Jun, Qiu Cun-yong. Study on Fuzzy Adaptive Full-Order Flux Observer for Induction Motor[J]. Control Engineering of China, 2016, 23(6): 858-863.
[14] 车海军, 王亮亮, 霍丽娇. 改进的无功功率模型参考自适应异步电机转速辨识[J]. 电机与控制学报, 2017, 21(10): 40-46, 53.
Che Hai-jun, Wang Liang-liang, Huo Li-jiao. Improved Reactive Power Model Reference Adaptive Speed Identification Applying to Induction Motor[J]. Lectric Machines and Control, 2017, 21(10): 40-46, 53.
[15] 韦文祥, 刘国荣. 基于CESO磁链观测器的模型参考自适应 感应电机转速辨识[J]. 电机与控制学报, 2016, 20(4): 57-63.
Wei Wen-Xiang, Liu Guo-Rong. Speed Identification for Induction Motor Based on CESO Flux Observer and MRAS[J]. Lectric Machines and Control, 2016, 20(4): 57-63.
[16] 杨公德, 林明耀, 李念. 混合永磁轴向磁场磁通切换记忆电机分段弱磁控制[J]. 中国电机工程学报, 2017, 37(22): 116-125, 326.
Yang Gong-de, Lin Ming-yao, Li Nian. Flux-Weakening Stage Control of Hybrid Permanent Magnet Axial Field Flux-Switching Memory Machines[J]. Proceedings of the CSEE, 2017, 37(22): 116-125, 326.
原文刊登于《水下无人系统学报》2020年第28卷第2期
END
水下无人系统学报
通信地址:陕西省西安市锦业路96号
E-mail:bianjibu705@sohu.com
官方网站:www.yljszz.cn
QQ:767358370
电话:029-88327279
-
基于单片机的电机转速PID控制
2020-10-10 00:50:16翻了翻还未填上的坑,发现对PID的理解一直停留在纸面上,不曾在现实中的系统中实际操作过(倒立摆和小四轴这些DIY入门训练都还没完整的做过,实在不甘心),于是从零搭建实验平台,以便深入理解PID算法,最后便有了...0、引言&实验器材
2020的国庆节一个人呆在实验室有点无聊,翻了翻还未填上的坑,发现对PID的理解一直停留在纸面上,不曾在现实中的系统中实际操作过(倒立摆和小四轴这些DIY入门训练都还没完整的做过,实在不甘心),于是从零搭建实验平台,以便深入理解PID算法,最后便有了此篇博客,仅作为记录本人学习之用,如有错误,还望指出,谢谢。
由于使用的串口助手没有曲线绘制功能,故暂无实际效果图(PID参数效果通过时间计算比较)
以下为本次所使用的材料
类目 型号 MCU N76e003 电机驱动 TB6612 电机 单霍尔编码器测速电机 电源 30V2A可调电源(10V) 串口模块 CH340C 示波器 普源 DS5062ME 编译环境 Keil4 1、PID算法
假设已对闭环控制有了最基本的认识(如无,可参考这篇文章),参考下图1可以得知,Setpoint为设定值(你所期望系统能达到的值),设定值和反馈值经过计算后得到当前Error(误差),后Error经过PID算法计算得到U,参考下图2,U经过执行机构(如电机)处理、输出,再通过测量元件(如编码器)得到反馈值,再与设定值进行计算,得到下一轮的误差,如此往复,直到设定值与反馈值一致。(位置型)
由上可知PID算法是一种通过对误差值的计算,控制执行机构达到设定值的一种算法。
其中Kp:比例调节、Ki:积分调节、Kd:微分调节,PID算法的公式如下式1所示
需要注意的是,以下所使用的各个计算公式,均是对PID算法进行离散化处理后得到的。
1.1、Kp:比例调节
比例调节的计算:Kp*Error
由上式可以看出,在比例调节中,输入与输出的信号成比例关系,但如果仅有P调节,系统将可能出现稳态误差。关于稳态误差:控制系统的输出响应在过渡过程结束后的变化形态称为稳态。稳态误差为期望的稳态输出量与实际的稳态输出量之差。
比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。1.2、Ki:积分调节
积分调节的计算:Ki*(Error1+Error2+Error3+…+Error k)
简单来说,积分调节的计算过程就将积分系数*误差的累加值
积分调节是为了对稳态误差进行处理,同时提供系统精度,作用原理和效果可参考上方动图。1.2.1、积分饱和现象:简单来说可理解为Error过大时,积分调节得到的数值过大,所以需要对最大输出值进行限制,防止出现积分饱和的发生。
1.2.2、为方便积分调节原理的理解,可假设系统出现稳态误差时,Error恒定不变,此时Kp与Kd调节均失效,但Ki并不受稳态误差影响,依然累积误差值,从而使PID调节不陷于稳态误差中。
为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用的强弱取决与积分时间常数Ti, Ti越小,积分作用就越强。反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。
1.3、Kd:微分调节
微分调节的计算:Kd*(Erorr2-Erorr1)
其中Erorr1为上次的误差,Erorr2为本次的误差。
微分调节可以理解为对被控对象所产生的“阻尼”,当误差变化过快时,微分调节将出现较大“负值”(与误差变化方向相反值),抑制误差继续上升/下降(拉平曲线,参考动图)。在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。微分调节作用:微分作用反映系统偏差信号的变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。因此,可以改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。此外,微分反应的是变化率,而当输入没有变化时,微分作用输出为零。微分作用不能单独使用,需要与另外两种调节规律相结合,组成PD或PID控制器。
2、运行逻辑
2.1、计算转速
单片机通过使用输入捕获功能(上升沿触发),计算得到电机周期T,再通过T=1/f计算当前电机转动频率。
(备注:其中输入捕获采样6次以消除初值可能不稳的情况,由于串口中断优先级高于输入捕获优先级,所以人为将输入捕获设置为最高优先级,防止系统bug)
有关输入N76E003捕获的博文见此初始化
P00_Input_Mode;//将P00设置为输入模式 P00 = 1; set_ENF0;//打开0通道噪声滤波 TIMER2_CAP0_Capture_Mode;//采用CAP0组捕获信道 // TIMER2_CAP1_Capture_Mode; // TIMER2_CAP2_Capture_Mode; // IC3_P00_CAP0_BothEdge_Capture;//设定P00通过CAP0通道,双边沿触发 // IC3_P00_CAP0_FallingEdge_Capture;//下降沿触发 IC3_P00_CAP0_RisingEdge_Capture;//上升沿触发,得到的是周期T=1/f set_ECAP;//使能输入捕获中断(位于拓展中断中) set_TR2; //定时器2计数使能 set_T2DIV1;//16分频,通过PWM计算、测试(10ms) set_PCAP; set_PCAPH;//设定输入捕获为最高中断优先级
计算频率
while(1) { if(i>=6)//由于周期会发生变化,该方法会造成一定不等延时 { //周期转换,单位us---->ms time=10000/(temp[5]/100);//转换为频率 Send_Data_To_UART0(time);//测试PID参数速度用if i=0; // PID(Ev,time); } }
输入捕获中断
void Capture_ISR (void) interrupt 12 { clr_CAPF0; //清除CAP0 通道中断标志 temp[i]=(C0H*256)+C0L;//将高八位低八位合并 i++; clr_TF2;//清除定时器2溢出标志 }
2.2、数据收发
单片机在收到PC端下发的设定值后,将其放入PID函数中进行计算,后变为PWM占空比的脉宽,通过电机驱动器,调节电机转速。
(备注:为了保证串口中断不被更高优先级的输入捕获打断,所以串口接收中断时会关闭输入捕获,接收完成后再打开输入捕获中断使能。)
初始化
//----------串口1、串口0配置---------------- InitialUART0_Timer1(9600); //在不配置SM1,SM2寄存器的情况下,默认工作在模式0(半双工) IE = 0x90;//允许总中断中断,串口0中断
串口接收中断
/****************串口0中断服务程序***************************/ void Uart0_test() interrupt 4 { if(RI)//串口0接收中断标志(有数据时,硬件置1) { clr_ECAP;//关闭输入捕获中断 RI=0;//软件置0 TI=0;//同时打开,需要对TI也置低 UART0_RX_BUF[UART0_RX_STA]=SBUF-48;//从SBUF缓存中读取接收到的数据 UART0_RX_STA++ ; //计算接收长度 //进行数据校验,通过RX_BUF&RX_STA if(UART0_RX_STA==3) { //收到期望值 Ev=UART0_RX_BUF[0]*100+UART0_RX_BUF[1]*10+UART0_RX_BUF[2]; UART0_RX_STA=0;//清空接收计数器 uFlag=1; } } if(uFlag)//接收完成进入 { // start=1;//测试PID参数速度用 // PID(Ev,time); uFlag=0;//清除接收完成标志位 set_ECAP;//开启输入捕获中断 } }
2.3、PID计算&变频
当串口中断接收到新的设定值后,Err=设定值-当前电机频率,后通过PID算法进行计算,得到的值为PWM高电平的时间(脉宽),再放入PWM中,通过电机驱动器控制电机变频,再通过测量与电机轴同轴转动的霍尔编码器所产生的脉冲信号(输入捕获),计算当前频率,再更新Err,同时将前一个Err进行累积和赋值给Err1,再放入PID计算,如此往复。(待补图)
如需了解PWM中断及在运行中变频,可参考N76E003 PWM中断及设定新的占空比
本程序使用的是位置式PID。初始化PWM
//-----------------------------产生1KHz占空比50%的PWM--------------------------------------------- P03_PushPull_Mode; PWM5_P03_OUTPUT_ENABLE;//使能PWM5,通过P03引脚输出 clr_PWMTYP;//边沿对齐模式 clr_PWMMOD0;//设置为独立输出模式 clr_PWMMOD1; PWM_CLOCK_DIV_8;//8分频模式16MHz/8 PWMPH = 0x07;//1999 PWMPL = 0xcf; set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1 PWM5H = 0x03;//999 PWM5L = 0xe7; clr_SFRPAGE; set_LOAD;//载入周期和占空比 set_PWMRUN;//开始输出PWM
PID函数&重装PWM值
#define Kp 3.0 #define Ki 0.9 #define Kd 4.1 int Err=0,Err1=0;//PID过程中使用的算法 uint Ev=100;//初始期望值 int ErrAdd;//存放误差累积 uint PWM_Value;//需要改变的占空比值 // SHz为设定值,EHz为当前值(time void PID(uint SHz,uint EHz) { Err1=Err;//获得上次的值 Err=SHz-EHz;//计算得到当前差值 if(Err>1||Err<-1)//由于实际系统中存在各类干扰,所以设定阈值为±1,提高系统稳定性 { ErrAdd+=Err;//累积误差值 //PWM_Value为高电平持续脉宽,初值为1000 PWM_Value=1000+((Kp*Err)+(Ki*ErrAdd)+(Kd*(Err-Err1)));//PID计算 //防止积分饱和,由于PWM_Value为无符号整数型,为负值时会大于2000。 if(PWM_Value>2000)PWM_Value=1999; //--------PWM重装初值--------------- clr_LOAD;//关闭载入之前的值 set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1 PWM_Value-=1; PWM5H= PWM_Value/256;//得到高八位 PWM5L= PWM_Value%256;//得到第八位 clr_SFRPAGE; set_LOAD;//设定完成,开始载入 } }
3、程序代码&电路
#include "N76E003.h" #include "Common.h" #include "Delay.h" #include "SFR_Macro.h" #include "Function_define.h" #define uint unsigned int #define uchar unsigned char #define Kp 3.0 #define Ki 0.9 #define Kd 4.1 //#define TH0_INIT 67 uint time;//频率 uint temp[10];//存放输入捕获值 int i=0; uint PWM_Value;//需要改变的占空比值 uchar UART0_RX_BUF[3];//串口0,串口1数据接收缓冲区 uchar UART0_RX_STA=0;//串口0,串口1接收计数器 uchar uFlag=0;//串口中断指令接收完成标志 int Err=0,Err1=0;//PID过程中使用的算法 uint Ev=100;//期望值 int ErrAdd;//存放误差累积 char start=0; /* SHz为设定值,EHz为当前值(time */ void PID(uint SHz,uint EHz) { Err1=Err;//获得上次的值 Err=SHz-EHz;//计算得到当前差值 if(Err>1||Err<-1) // if(SHz!=EHz) { ErrAdd+=Err; PWM_Value=1000+((Kp*Err)+(Ki*ErrAdd)+(Kd*(Err-Err1)));//PID计算 if(PWM_Value>2000)PWM_Value=1999; //--------PWM重装初值--------------- clr_LOAD;//关闭载入之前的值 set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1 PWM_Value-=1; PWM5H= PWM_Value/256;//得到高八位 PWM5L= PWM_Value%256;//得到第八位 clr_SFRPAGE; set_LOAD;//设定完成,开始载入 } } /* 通过输入捕获得到的周期,计算当前频率,采样6次发送中间值 由于串口中断优先级高于输入捕获,所以人为将输入捕获设置为最高优先级,防止系统bug 串口中断中会关闭输入捕获,接收完成后再打开输入捕获 PWM需要在运行中变频。 PID函数是对参数进行设定,使用位置式(直接赋值) 电压10V */ void main (void) { Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式 P03_PushPull_Mode; P00_Input_Mode;//将P00设置为输入模式 P00 = 1; set_ENF0;//打开0通道噪声滤波 TIMER2_CAP0_Capture_Mode;//采用CAP0组捕获信道 // TIMER2_CAP1_Capture_Mode; // TIMER2_CAP2_Capture_Mode; // IC3_P00_CAP0_BothEdge_Capture;//设定P00通过CAP0通道,双边沿触发 // IC3_P00_CAP0_FallingEdge_Capture;//下降沿触发 IC3_P00_CAP0_RisingEdge_Capture;//上升沿触发,得到的是周期T=1/f set_ECAP;//使能输入捕获中断(位于拓展中断中) set_TR2; //定时器2计数使能 set_T2DIV1;//16分频,通过PWM计算、测试(10ms) set_PCAP; set_PCAPH;//设定输入捕获为最高中断优先级 // set_EA; //-----------------------------产生1KHz占空比50%的PWM--------------------------------------------- PWM5_P03_OUTPUT_ENABLE;//使能PWM5,通过P03引脚输出 clr_PWMTYP;//边沿对齐模式 clr_PWMMOD0;//设置为独立输出模式 clr_PWMMOD1; PWM_CLOCK_DIV_8;//16分频模式 PWMPH = 0x07;//00 PWMPL = 0xcf;//0f set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1 PWM5H = 0x03;//00 PWM5L = 0xe7;//08 clr_SFRPAGE; set_LOAD;//载入周期和占空比 set_PWMRUN;//开始输出PWM //----------串口1、串口0配置---------------- InitialUART0_Timer1(9600); //在不配置SM1,SM2寄存器的情况下,默认工作在模式0(半双工) IE = 0x90;//允许总中断中断,串口0中断 //---------输入你自己的代码------------------- while(1) { if(i>=6)//由于周期会发生变化,该方法会造成一定不等延时 { //周期转换,单位us---->ms time=10000/(temp[5]/100);//转换为频率 if(start)Send_Data_To_UART0(time);//测试PID参数速度用if i=0; PID(Ev,time); } } } /****************串口0中断服务程序*****************/ void Uart0_test() interrupt 4 { if(RI)//串口0接收中断标志(有数据时,硬件置1) { clr_ECAP;//关闭输入捕获中断 RI=0;//软件置0 TI=0;//同时打开,需要对TI也置低 UART0_RX_BUF[UART0_RX_STA]=SBUF-48;//从SBUF缓存中读取接收到的数据 UART0_RX_STA++ ; //计算接收长度 //进行数据校验,通过RX_BUF&RX_STA if(UART0_RX_STA==3) { //收到期望值 Ev=UART0_RX_BUF[0]*100+UART0_RX_BUF[1]*10+UART0_RX_BUF[2]; UART0_RX_STA=0;//清空接收计数器 uFlag=1; } } if(uFlag)//接收完成进入 { start=1;//测试PID参数速度用 // PID(Ev,time); uFlag=0;//清除接收完成标志位 set_ECAP;//开启输入捕获中断 } } /****************输入捕获中断服务程序*****************/ void Capture_ISR (void) interrupt 12 { clr_CAPF0; //清除CAP0 通道中断标志 temp[i]=(C0H*256)+C0L; i++; clr_TF2;//清除定时器2溢出标志 }
4、调参思路
5、参考资料
-
STM32 PID电机闭环控制参考代码
2017-11-29 14:54:19采用STM32F103平台,代码包含绝对式和增量式PID 控制, 实现速度电流闭环控制 -
基于STM32的直流电机PID调速系统设计与实现
2021-01-20 01:42:29M3内核的STM32单片机为控制,结合PID控制技术,实现了直流电机范围大、精度高的调速性能。1、系统的总体设计该调速系统能够实现对电机的启动、制动、正反转调速、测速和数据上传等功能,可方便地实现直流电机的四... -
基于PID算法的电机转速控制系统的设计说明.doc
2021-09-24 19:49:44基于PID算法的电机转速控制系统的设计说明.doc -
PID算法电机转速控制(仿真截图)
2018-07-16 00:12:05基于某位大神的程序进行了大量的修改与优化,仿真占用从原来的80%降到了20%~30%(仿真截图) -
PID控制电机转速
2017-10-24 20:49:27转一个PID控制电机的小程序, 被PID困扰好多天了, 知道它的原理但是一直不明白如何将它运用到电机调速中间去, 看了这个程序之后感觉茅塞顿开。原来也并不难^-^ 转载地址:呃,刚刚不小心把网页关掉了(大写的尴尬)... -
stm32直流电机控制—PID算法篇
2020-10-05 00:58:28stm32直流电机控制—PID算法篇 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 **加粗样式* 提示:写完文章后,目录可以自动生成,如何生成可... -
stm32程序(Keil)直流电机算法控制之PID控制
2019-04-16 17:15:27运用Keil软件基于stm32f103系列嵌入式芯片编写的程序,用于对直流电机进行PID可调控制。 -
超声波PID控制电机转速
2015-08-20 02:35:34该程序可以用来根据超声波测距而利用PID控制算法调节电机的转速 -
单片机直流电机转速控制(数码管显示、独立按键控制正反转、停止、开始、PID算法)
2021-02-22 14:48:00单片机直流电机转速控制(数码管显示、独立按键控制正反转、停止、开始、PID算法) -
STM32F103的直流电机转速控制PID算法程序电子设计大赛
2021-06-06 11:59:14STM32F103、电机驱动、PID算法、电子设计大赛、LCD12864毕业设计相关内容 -
51单片机 Proteus仿真 PID 电机转速调节 PWM 风扇转速调节
2020-07-10 19:29:14PID的参数设置可以参照以下来进行: 参数整定找最佳,从小到大顺序查; 先是比例后积分,最后再把微分加; 曲线振荡很频繁,比例度盘要放大; 曲线漂浮绕大湾,比例度盘往小扳; 曲线偏离回复慢,积分时间往... -
电机调速(PID算法)(程序原理图全套资料)
2020-05-27 22:50:09设计一个基于改变PWM信号占空比来实现直流电动机转速控制的系统,满足控制指标要求。 最终设计的成果为:测速使用霍尔传感器,然后霍尔传感器感应的是使用高强度的磁铁(淘宝上面有买) 电机驱动用现成的L9110模块,... -
基于NRF24L01的PID电机转速控制器-电路方案
2021-04-21 07:16:33基于NRF24L01的PID电机转速控制器,采用51单片机控制,有发送端和接收端的完整图纸和程序代码 实物图: 原理图: 项目介绍: 在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节...