美赛整理之理想直流伺服电机的simulink仿真优化
理想直流电机的simulink仿真优化
目录
- 理想直流电机的simulink仿真优化
- 一.simulink背景:
- 二.直流伺服电机的背景:
- 三.直流伺服电机的工作原理:
- 1.直流伺服电机的闭环控制原理:
- 2.直流伺服电机的工作原理:
- 四.PID控制的基本原理:
- 1.PID控制器的结构:
- 2.PID控制器所应用的系统结构如下图所示:
- 3.优化指标:
- 五.simulink模型的建立:
- 六.Matlab优化求解:
- 七.优化得到最合适的响应曲线如图:
一.simulink背景:
simulink的背景资料百度百科是这么定义的:
simulink就是对一般的物理模型进行仿真的一个平台,和大部分的仿真软件不同的是:
1.simulink更容易和matlab实现交互,所以我们可以更加容易的修改simulink的参数,并且在.m文件中调用simulink仿真从而为我们的计算服务。
2.simulink比较强的一点在于它的覆盖面极广,支持我们科学领域几乎所有的基本单元的仿真。
不过呢,缺点也是十分明显的,那就是simulink建立模型得从最底层建立起来。尽管simulink也同样具备很多的专业子系统,比如说噪声处理系统。但是,在大多数的情况下,我们对simulink的仿真都是基于模型的可见性分析,也就是说我们对模型内部运行的机理得做到差不多完全了解才能分析仿真,也就是通常说的白箱模型。这也就决定了simulink建立的仿真可能会与实际的模型有一些偏差。所以,我们在这里研究的就是理想的伺服电机模型,具体的参PID参数的优化,我们得在实验中慢慢改进。
二.直流伺服电机的背景:
一般来说,我们现在研究的直流电机具有电机体积小,重量轻,出力大,响应快,速度高,惯量小,转动平滑,力矩稳定。容易实现智能化,其电子换相方式灵活,可以方波换相或正弦波换相。电机免维护不存在碳刷损耗的情况,效率很高,运行温度低噪音小,电磁辐射很小,长寿命,可用于各种环境的。
因此,直流无刷电机一直被广泛的应用于与单片机相关的硬件设计和驱动当中。可以做机械臂的转轴驱动,驱动机器人云台旋转等等。具体的样子就是下面所示:
三.直流伺服电机的工作原理:
1.直流伺服电机的闭环控制原理:
基本上可以这样理解,伺服电机接收到1个脉冲,就会旋转1个脉冲对应的角度,从而实现位移。因为,伺服电机本身具备发出脉冲的功能,所以伺服电机每旋转一个角度,都会发出对应数量的脉冲,这样,和伺服电机接受的脉冲形成了呼应,或者叫闭环,如此一来,系统就会知道发了多少脉冲给伺服电机,同时又收了多少脉冲回来。这样,就能够很精确的控制电机的转动,从而实现精确的定位。而伺服电机的反馈机制主要是根据内部的测速系统实现的。具体的内容建议百度。
我们在这里的目的就是为了建立一个和电机工作原理相匹配,同时用外部的PID反馈环节对该电机的转速进行闭环调控从而实现精确控制转速的一个simulink优化模型,优化的对象是PID环节的参数。
2.直流伺服电机的工作原理:
直流伺服电机驱动是在电路两端加载电压,电路中的电流流过电感 L 产生磁场力,电机转轴在磁场力的作用下转动,其驱动原理图如下图所示:
规定如下:
L:电感大小,Ea:电动机反电动势θ:电动机轴转角,Bm:机械时间常数Km:电气时间常数,R:电机电枢电阻T:电动机输出转矩,J:电动机输出惯量B:电动机阻尼系数L:电感大小,E_a:电动机反电动势\\ \theta:电动机轴转角,B_m:机械时间常数\\ K_m:电气时间常数,R:电机电枢电阻\\ T:电动机输出转矩,J:电动机输出惯量\\ B:电动机阻尼系数 L:电感大小,Ea:电动机反电动势θ:电动机轴转角,Bm:机械时间常数Km:电气时间常数,R:电机电枢电阻T:电动机输出转矩,J:电动机输出惯量B:电动机阻尼系数
现在,我们对伺服电机的左半部进行分析,由闭合电路的基尔霍夫定律,我们可以得到:
u=Ea+Ri+Ldidtu=E_a+Ri+L\frac{di}{dt} u=Ea+Ri+Ldtdi
同时该电机产生的反电动势与电机的转速成正比:
Ea=kϵdθdtE_a = k_{\epsilon}\frac{d\theta}{dt} Ea=kϵdtdθ
而且,我们知道电机的电磁转矩是与回路中的电流成正比的:
T=ktiT=k_ti T=kti
当电路达到稳定时候,电机的电磁转矩由转动定律可知:
T−Bdθdt=Jd2θdt2T-B\frac{d\theta}{dt}=J\frac{d^2\theta}{dt^2} T−Bdtdθ=Jdt2d2θ
我们工程上对下列参数有一个很具体的定义:
Km=KtRBm=B+KtKϵRK_m = \frac{K_t}{R}\\ B_m = B+\frac{K_tK_\epsilon}{R} Km=RKtBm=B+RKtKϵ
如果我们查表,我们机会发现工业上对具体的伺服电机的电气时间常数和机械时间常数都有说明。而在一般的伺服电机里面,电感同其他参数相比都是极小的,理想情况下,我们对它进行忽略掉。
经过对上面的式子整理,我们可以得到:
Kmu=Jd2θdt2+BmdθdtK_mu=J\frac{d^2\theta}{dt^2}+B_m\frac{d\theta}{dt} Kmu=Jdt2d2θ+Bmdtdθ
经过拉普拉斯变换我们可以得到伺服电机系统的传递函数为:
G1(s)=θ(s)u(s)=KmJs2+BmsG_1(s)=\frac{\theta(s)}{u(s)}=\frac{K_m}{Js^2+B_ms} G1(s)=u(s)θ(s)=Js2+BmsKm
四.PID控制的基本原理:
1.PID控制器的结构:
简单的说,根据给定值和实际输出值构成控制偏差,将偏差按比例,积分和微分通过线性组合构成控制量,对被控对象进行控制。常规PID控制器作为一种线性控制器:
u(t)=Kp(e(t)+1Ti∫0te(t)dt+Tdde(t)dt)G(s)=U(s)E(s)=Kp(1+1Tis+Tds)=Kp+Ki1s+Kdsu(t) = K_p(e(t)+\frac{1}{T_i}\int_0^te(t)dt+T_d\frac{de(t)}{dt})\\ G(s) = \frac{U(s)}{E(s)} = K_p(1+\frac{1}{T_is}+T_ds)=K_p+K_i\frac{1}{s}+K_ds u(t)=Kp(e(t)+Ti1∫0te(t)dt+Tddtde(t))G(s)=E(s)U(s)=Kp(1+Tis1+Tds)=Kp+Kis1+Kds
e(t)e(t)e(t):偏差,u(t)u(t)u(t):输出
2.PID控制器所应用的系统结构如下图所示:
3.优化指标:
我们要对这个电机执行如下操作:
当我们给控制单元(在本题中我们假设是stm32单片机)一个转动的理想角度时,这个控制单元能够将我们输入的理想角度转化成应该施加在伺服电机两端的电压值,假设这个转化是正比的,而且比例系数是K。那么在通过PID环节修正之后,我们的理想电压将会成为实际加载在伺服电机,也就是我们的被控对象两端的电压。此时电机将会输出一个角度,并且通过测量环节,例如电机自带的测量系统等将结果反馈到我们的比较环节,得到误差。周而往复,从而使得误差为0的时候,达到实际的输出环节就是我们想要的理想输出的效果.
而在这个过程当中,我们最为关心的是当稳态误差为0的时候,所经历的时间和总的误差之和。我们要让它达到最小,于是我们引入以下评判指标:
minkp,ki,kdITAE=∫0∞t∣e(t)∣dtmin_{k_p,k_i,k_d}ITAE = \int_0^{\infty}t|e(t)|dt minkp,ki,kdITAE=∫0∞t∣e(t)∣dt
在这里,我们假设转化系数K是10,如果读者想自行研究的话也可以设置一些其他的比例值:
G2(s)=u(s)θideal(s)=KG_2(s)=\frac{u(s)}{\theta_{ideal}(s)}=K G2(s)=θideal(s)u(s)=K
五.simulink模型的建立:
在用simulink求解时候记得修改如下参数,否则会报错:
将建立好的simulink文件命名为’sim2.slx’放入matlab路径下,便于后续用遗传算法工具箱优化参数。
六.Matlab优化求解:
先建立simulink文件的ITAE求解函数:
function value = PID_fun(x)assignin('base','kp',x(1));assignin('base','ki',x(2));assignin('base','kd',x(3));[t x_state,y_out] = sim('sim2.slx',[0 40]);value = y_out(end,1);
end
再用matlab遗传算法工具箱求解:
clc,clear;
options = gaoptimset('PopulationSize',40,'Generations',10,'PlotFcns',@gaplotbestf);
[x fval] = ga(@PID_fun,3,[],[],[],[],[0 0 0],[300 300 300],[],options);
x,fval
求解出来的最合适的kp,ki,kd分别是:10.7712,280.1890,0;
七.优化得到最合适的响应曲线如图:
未经过PID参数优化得到的曲线如下:
经过遗传算法优化后得到的曲线如下:
按最优的参数调PID的话可以发现伺服电机响应的速度几乎就是在0.5s以内,最大超调量也不到25%。可以发现优化得到的效果也是非常好的。
美赛整理之理想直流伺服电机的simulink仿真优化相关推荐
- 美赛整理之Matlab的工程数学计算学习笔记(高等数学)
美赛整理之Matlab的工程数学计算学习笔记(高等数学) 1.极限的定义和判别: 2.绘制特殊曲面 3.求两个空间曲面的交线 4.定积分的计算 5.多重积分的计算 1.截面法: 2.定义法 (1)先画 ...
- 光伏混合储能直流微电网simulink仿真,超级电容仿真模型,蓄电池模型仿真,有双向dcdc电路
光伏混合储能直流微电网simulink仿真,超级电容仿真模型,蓄电池模型仿真,有双向dcdc电路,有能量管理系统和防止soc越线系统,不同光照下能量的传输. 过程详细,有各种参考资料,详细说明 ID: ...
- 美赛整理之偏微分方程的数值求解(一)
两点边值问题的GalerKin方法 1.问题的提出 2.求解方法(试函数法) 3.方法的改进 4.代码实现 1.问题的提出 考虑一个定义在[a,b][a,b][a,b]上的二阶常微分方程边值问题: ...
- 美赛整理之投影寻踪模型及其求解
投影寻踪模型 1.模型的简介和应用 2.基本步骤: 3.遗传算法求解模型的优化问题 1.用MatlabMatlabMatlab的gagaga工具箱求解: 2.遗传算法求解: 3.LINGOLINGOL ...
- 美赛整理之带参数的常微分方程拟合问题研究
带参数的常微分方程拟合问题研究 一.问题的背景: 二.提出一个较为简单,但是很有代表性的一个问题: 三.求解的基本原理: 四.求解的基本算法: 1.利用matlabmatlabmatlab遗传算法求解 ...
- 美赛整理之遗传算法优化BP神经网络的齿轮故障诊断问题
遗传算法优化BP神经网络的齿轮故障诊断问题 一.问题的提出 二.问题的分析 三.结果显示 一.问题的提出 二.问题的分析 这里给出了9组15维的向量,我们的目的就是要根据这9组数据来建立一个BP神 ...
- 美赛整理之Matlab读取全球海洋温度数据并显示干货
Matlab读取全球海洋温度数据并显示干货 Matlab读取全球海洋温度数据并显示干货 Matlab读取全球海洋温度数据并显示干货 一.nc文件的读取 二.画出从1981到2000年的全球温度海洋变化 ...
- 【美赛资料】自己整理的美国大学生数学建模竞赛资料
[资料来源于网络] [仅供学习,请勿商用] [资料已标明出处] 资料目录 1. 历年美赛题目 + 论文 按常用模型整理的美赛论文 2021美赛题目 + O奖论文 2020美赛题目 2018美赛题目 + ...
- 2020美赛赛后感想总结
这次(2020)是我们第一次参加美赛,但我们在2019年参加过国赛,算是有点经验吧.这次之后呢,想记录一下这次比赛的感受以及题目的思路.(国赛A题高压油管的啥都没记录,然后就啥都不记得了,还是有点遗憾 ...
最新文章
- Microbiome:城市海滩和污水中抗生素抗性组研究
- 在Linux下配置TCP/IP
- 【组合数学】递推方程 ( 通解定义 | 无重根下递推方程通解结构定理 )
- linux 文件大小_linux系统中查看目录大小的du命令常
- Paper之IEEERSJ:2009年~2019年机器人技术(IEEE机器人和自动化国际会议RSJ智能机器人与系统国际会议机器人技术:科学与系统机器人学报)历年最佳论文简介及其解读
- java poi excel 导入数据库_java POI 处理excel表格数据并导入数据库示例
- 开篇词:如何轻松获得 Offer
- 大数据笔记11:MapReduce的运行流程
- php倒计时关闭订单,订单倒计时取消,nodejs 辅助实现倒计时任务
- 关于索引我能说的那些事儿
- python白盒测试_白盒测试方法
- 个人计算机的缩写英语,计算机中常用的英语缩写
- ASP.NET Core学习——6
- php同学录网站设计_基于PHP的校友录系统的设计与实现
- 2016蓝桥杯java试题_2016年第七届蓝桥杯JavaB组省赛试题解析
- 蓝桥杯 ALGO-92 算法训练 前缀表达式
- 嵌入式组态软件HMImaker(绿色版人机界面组态软件)
- pycharm中tensorflow代码不能自动补全或import红线问题解决
- 26.MySQL 锁
- 网盘源码php,PHP云盘网盘系统(PHP云盘源码工具)V1.1 免费版
热门文章
- 程序员面试金典——18.12最大和子矩阵
- Rust常用编程概念之变量和可变性
- torch.backends.cudnn.enabled = False会引起CUDA out of memory和CUDA error: an illegal memory access was
- 爬取小说《重生之狂暴火法》 1~140章
- ModelForm操作
- TCP的电话系统比喻
- 【C语言】printf()函数详解
- java mail使用qq邮箱发邮件的配置方法
- ibatis的缓存机制
- ZYNQ 调试遇到的种种问题汇总[转帖]