《基于单片机系统的模拟多电机协同运作系统设计》16000字_第1页
《基于单片机系统的模拟多电机协同运作系统设计》16000字_第2页
《基于单片机系统的模拟多电机协同运作系统设计》16000字_第3页
《基于单片机系统的模拟多电机协同运作系统设计》16000字_第4页
《基于单片机系统的模拟多电机协同运作系统设计》16000字_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录PAGE32基于单片机系统的模拟多电机协同运作系统设计摘要现在我国磁悬浮列车的道岔多使用整体钢梁结构,道岔转辙时由多个转辙机同时运作,若转辙机牵引之间彼此不协调,就会使道岔钢梁发生应力变形,损坏钢梁结构,降低其使用时间,甚至引发行车安全事故。所以保证高速磁浮列车道岔换线过程中多点协同运作,是至关重要的,具有重大的研究意义。本毕业设计是通过单片机系统模拟多电机协同运作过程,对多电机协同运作进行模拟。本论文主要工作如下:(1)设计单个利用单片机控制电机的系统,编写PID控制程序,对单个电机实现PID控制,并制作人机交互界面,实时监控电机转速,并控制对电机进行调节控制。(2)设计双电机控制系统,对双电机进行同时控制,模拟实现对双电机系统的协同控制。关键词:磁浮;道岔;单片机;电机;PID控制目录TOC\h\z\t"标题1,1,二级标题,2,三级标题,3"摘要 iABSTRACT ii目录 iii1引言 11.1课题研究背景 11.1.1研究与应用现状 11.1.2STM32单片机发展现状及应用 21.1.2多机协同控制研究与应用现状 31.2论文主要内容 42单片机电路板及其硬件 62.1微处理器选型 72.2直流电机 82.3编码器 82.4电机驱动模块 103单片机各部分程序及上位机 123.1电机方向控制及转速控制程序 143.2中断服务程序 163.3速度采集程序 183.4PID调节程序 193.5串口通信程序 213.6主程序 233.7上位机程序 233.7.1上位机串口配置及相关信息显示部分 243.7.1上位机直流电机相关信息显示和控制部分 254多机协调 275成果 295.1单机调试效果 295.2双机协同控制效果 295.3对多机协调的反思与建议 296总结 30参考文献 32附录1引言1.1课题研究背景1.1.1研究与应用现状2019年5月,山东正式启动高速磁浮试验线项目,此试验线为当前我国速度最快的磁浮列车试验线,此实验线的启动,使我国高速磁浮技术挺身世界前列,同时完善了我国的交通网,弥补了超高速铁路的空白,对我国经济发展有重大意义。2021年1月,四川成功启动了全球第一个高速高温超导磁悬浮工程试验线,而且此实验线路、技术、车辆完全为自主设计开发,全部设备均由我国制造,设计预计时速将大于每小时600千米。2020年9月,我国首个拥有独立知识产权的时速600千米高速磁浮道岔研制成功并经过检验合格,此道岔为中铁宝桥集团有限公司研制,目前以获得许可实际安装和调试。此高速磁浮道岔为目前全球直向通过速度和侧向通过速度最高的道岔,完美符合了我国超高速列车的通过性要求。此磁浮列车道岔,转折距离可达四米,长度近一百米,宽度大约三米,使用了当前最新的静态整体安装技术,使用安全计算机进行转辙距离计算,最新开发的AI系统进行补偿控制。确保了磁浮道岔转辙时各牵引点因不协调使钢梁受力不均,损坏钢梁寿命。当前世界范围内磁浮道岔共有三种不同的类型。第一种侧壁升降式磁浮道岔,侧壁升降式磁浮道岔为引导式变向道岔,当车辆通过道岔时,由于侧壁的方向的改变来引导车方向的改变。第二种为多关节导轨横移式磁浮道岔,多关节导轨横移式磁浮道岔为分段的形式,将整体道岔尖轨分成多个小段,中间由机械关节相连,在道岔上安装驱动导轨,导轨伸缩带动关节转动,以驱动道岔的转换。第三种为钢梁弹性弯曲式磁浮道岔,钢梁弹性弯曲式磁浮道岔轨道是一段完整的可变性导轨,为可弯曲钢梁,由多个牵引点带动,牵引电机一般为转辙机或液压设备,整体钢梁通过性更加良好顺滑,但多电机驱动问题也同时产生。虽然时速600公里的高速磁浮列车试验线已经建成,但总体来说,世界和中国的高速磁浮技术还处于开始阶段,交叉学科多,技术难度大,很多技术还处于实验阶段。对高速磁浮列车道岔的研究也不是很完善,尤其是多点协同控制,还不完善,很难做到应力完全合适,因此,对此方面的研究和模拟就变得很有意义。1.1.2STM32单片机发展现状及应用当前最新发布的STM32系列芯片均为32位芯片处理器,且均基于Arm®Cortex®-M芯片框架,此系列芯片的发布为广大单片机爱好者提供了新天地。它不仅继承了以前系列单片机的高集成度和开源易开发的优点,且自身性能大大提升,AD转换、时时控制、多电压模式操作、多接口易拓展连接等等,功能一应俱全。型号种类齐全的STM32系列单片机均使用控制器标准内核框架,并免费给予了一系列开发软件和工具,通用性极强,得到了广大微平台和各种规模项目的青睐,为各嵌入式工程及项目的首选。STM32系列主流32位微控制器有非常广泛的应用,可以满足来自不同领域和不同应用的大多数需求。STM32微控制器主流三个系列一般都支持实时控制及应用,例如电机控制,复杂的数字功率设计转换等等。当前意法半导体公司微控制器产品主要包括STM32ARMCortex32位微控制器,STM32ArmCortex微处理器,STM88位微控制单元和经典微控制单元。STM32ARMCortex32位微控制器中又包括STM32主流MCU,STM32无线MCU,STM32超低功耗MCU,STM32高性能MCU。其中最为广泛使用的几位STM32主流MCU,它包括STM32F0系列、STM32F1系列、STM32F3系列、STM32G0系列、STM32G4系列。意法半导体公司凭借STM32F1系列主流产品,在工用,民用,军用等各个领域开疆拓土,满足了各个行业的需求,使微控制器技术的应用水平上升了一个明显的阶梯。为嵌入式应用领域树立进了新的丰碑。该系列产品AD转换、时时控制、多电压模式操作、多接口易拓展连接等等,功能一应俱全,同时还拥有使普遍大众欣喜的价格。STM32F1产品系列包括5个分支系列,它们的软件、外设和引脚均是向上兼容的。STM32F105/107同样使用Cortex-M3架构,CPU最高运行速度为每秒72MHz。它们主要针对需要时时控制的应用项目和使用连接功能的项目,像安全控制人机交互界面、时时音乐播放设备、自动控制领域等等。本设计中正是使用的STM32F103系列产品。STM32单片机因其强大的外界设备能力,超低的能量消耗,简单方便的编程工具,易于学习的代码逻辑等优点在各个行业备受青睐,几乎成为了嵌入式领域必不可少的用具,而本毕业设计经综合考虑和选择,最终选定了STM32F103ZC为本设计使用微处理器。1.1.2铁路多电机协调控制研究与应用现状近年来,我国铁路事业迅速发展,为适应更现代化交通的发展,我国铁路迅速提速,普速铁路,高速铁路的运行速度都有了较大幅度的提升。以及近年来我国重点研究的磁悬浮铁路,也是以交通提速为主要目的。更高的列车行驶速度,就要求了铁路道岔更高的通过速度,即更大道号,更高质量的道岔。越大道号的道岔,就需要更多的电机去牵引其转换。所以道岔电机的多机协同控制问题也应运而生。根据中国轨道有关条例规定,当列车时速大于120千米每小时时,铁路道岔一定要采取外锁闭锁定。在转辙机带动道岔转换的过程中,电机协调运动就至关重要,由于各个牵引电机放置的位置不同,道岔转换过程中各牵引电机的转动幅度不同,就要求了拥有大量的转辙机种类和型号,对各牵引电机的动作次序也会带来更多的要求,对实际施工和故障维修也会带来很大障碍。因此,减少电机运作步骤、减小协同控制的误差因素,精简多机系统的系统结构,才能从根源上解决这个问题。本世纪前十年初期,我国已经开始研制大号道岔。2007年,随着我国铁路政策的支持和大量投资,客运轨道交通的飞速发展完善。由于我国铁路系统的普遍提速,对大号道岔的研制也有了突破性进展,例如客运轨道的42号大号道岔,道岔共有六个转辙机带动。初次下线,前三个转辙机使用了220毫米运动路程,后三个转辙机采用了15毫米运动路程。结果却很不理想,道岔各部分的协调性仍然不太乐观。对于普速铁路和高速铁路,大号道岔研制至今,多点转辙机的协同仍做的不好。对于磁悬浮列车的道岔,磁悬浮列车的道岔是整体一段可弯曲的弹性钢梁。钢梁弹性弯曲式磁浮道岔使用多个驱动点,多个转辙机带动弹性钢梁道岔转辙弯曲,使之转换。例如珠江三角洲的磁悬浮试验线,每个道岔钢梁由三到四个转辙机带动,各个电机转动速度,位置,均由安全计算机提前计算出,整个换线过程分步完成,安全计算机时刻检测各牵引电机的运动状态,当驱动电机受到一些干扰或者阻力而使之没有按照给定计划运作时,安全计算机对其进行输出补偿。但在道岔换线过程中,多个转辙机被钢梁相互连接,因此各个电机运行状态仍会互相干扰,仍会使钢梁产生不同程度的应力变型,减少道岔的使用时间,甚至造成列车安全事故。如下图1-1,钢梁变形图例。图1-1驱动电机位置不协同使钢梁变形目前上海磁悬浮列车示范线已运行了15年,但它的道岔电机的协调控制并未做的很好,抗干扰能力差,驱动点误错误数据叠加,在试用期间也出现过因协同控制问题而导致的螺丝脱落、梁体应力变形等状况,大大减少道岔使用时间。因此对多机协同控制的研究还有待更加的深入。1.2论文主要内容本设计主要目的为模拟多机协同运作过程,研究了解磁浮道岔多机协同运作原理,利用单片机实现对电机的多机控制,并根据模拟对多电机协同提出一些自己的见解。如果有机会,以后会继续深入研究此课题,希望能在此方面做出一些贡献。正文主要分四个部分:第一章是对此设计的背景,相关知识及意义的介绍;第二章是对所使用的单片机电路板及其硬件设备的说明介绍;第三章是对单电机运作各部分代码和上位机设计进行介绍;第四章是对多机协同的实现和介绍;第五章是对本设计的成果展示;第六章是对本设计论文的总结。并说明其不足之处。

2单片机电路板及其硬件本设计中单片机电路板及硬件主要分为:STM32芯片,供电模块,电机驱动模块,直流电机,编码器,及与上位机连接的串口。STM32单片机用于发送电机驱动信号(包括受否允许发送信号,电机转速信息和电机转动方向信息)、接受编码器返回的脉冲信号及与上位之间传送信息;电源模块用于向STM32单片机和电机驱动模块提供3.3V和12V电源;电机驱动模块用于接受STM32单片机发送的电机驱动信号并将其发送给直流电机和为直流电机提供电源;直流电机即为控制对象,接受控制信息及通过编码器返回脉冲信号;编码器用于对直流电机返回的脉冲信号编码并发送给STM32单片机,使STM32单片机计算出直流电机转速;上位机软件即人机交互界面,用于直流电机使用者向STM32发送使用者想要为电机设定的转速、时时显示STM32单片机发送来的转速信息、时时显示直流电机转速和信息储存等。其中STM32单片机,电源模块位于开发板上。其系统整体框图2-1如下:图2-1单片机电路板系统整体框图2.1微处理器选型此设计选择的微处理器根据设计要求及功能应具有至少一路UART(用于同上位机通信和下载程序)和三个以上定时器(结合程序实现考虑)。综合考虑本毕业设计具体选择了STM32F103xC,STM32F103xD和STM32F103xE性能线家族中的STM32F103ZC,此芯片有用于销售的旗舰开发板,以及大量实用例程,以用来参考及学习,且更加稳定,有利于多次擦除和复写操作。本设计的STM32F103ZC载体为正点原子的精英STM32F103嵌入式开发板,此开发板资源丰富,接口多,版载USB-TTL串口,代码下载烧录,串口连接调试,通信三种功能均可在一个串口中实现,代码烧录及调试非常方便,方便连接各类模块开发测试。本设计初始使用的为实验室设计焊接的单片机电路板,但由于质量一般,不稳定,因此改为使用开发板。2.2直流电机电机使用的为用于平衡小车的底盘电机,型号为MG513P20-12V。此电机常用于平衡小车、四驱车、倒立摆及其他相关工训类比赛等等,有良好的稳定性,且极少故障出错等。此电机有一个电刷,额定电压为12V。直流电机尾部装有一个霍尔编码器,编码器正常使用时电压为5V,此编码器还带有上拉电阻和比较整形等功能,能够直接从端口发出方形脉冲信号,供STM32单片机读取分析计算转速。需要特别注意的一点是,编码器的电源端接口和接地端接口不能相反连接,不然大概率会使之永久损坏。电机的接线说明如下图:图2-2电机接线说明2.3编码器编码器(encoder)是一种有信号转换功能的小芯片,能够把一定形式脉冲信号(通常指的是电机转速)通过编制、采集,变成为可以能够储存和传输的数据的的设备或装置。编码器一般分类如下:以采集方式分类:(1)接触式(2)非接触式以工作原理分类:(1)光电式编码器(2)磁电式编码器(3)触点电刷式编码器以计数方式不同分类:(1)增量式编码器(2)绝对式编码器光电式编码器的码盘刻孔可以通过采集光通过时产生的脉冲信号的频率进行转换,磁电式编码器可以通过霍尔元件时时感应电机转动的时候产生的磁场的变化进行信号转换,磁场信号转换为电信号;触点电刷式编码器可以直接采集它的触点在码盘上的位置,以此进行信号的转换;增量式编码器的转化功能能够将位移信号转换为电信号,然后转换为脉冲信号,用脉冲的多少表示直流电机转动圈数,用脉冲频率表示直流电机转动的速率。绝对式编码器的测量数值更绝对,它测量结果只与它的开始和结束位置有关,它每一个刻度码对应这一个确定的地方,与它的测量过程没有关系。本设计中使用的编码器正是磁电式霍尔编码器。霍尔编码器的转轴在磁场中转动,会切割磁感线,进而产生电信号,再通过编码器输出,它相当于一种电磁传感器。那么它如何来判定旋转方向呢,编码器只输出一路脉冲信号,即可计算其电机旋转速度,但是无法判断它的旋转方向,此实验用到的直流电机,会从编码器返回两路脉冲信号(也有的编码器有A、B、Z的三相输出),这两个脉冲信号之间有一定的相位差。STM32单片机在接收到A相和B相信号输入之后,根据收到的相位的先后顺序不同,可以确定电机的转向。可以根据脉冲序列的频率来确定电机的转速,这种解码的方式叫做正交解码。如图2-3编码器输出A相和B相的波形如下:图2-3编码器输出波形在测量转速的时候,一般通过一路脉冲信号就可计算得到所测电机的转速,而对于输出两个脉冲信号的编码器,我们可以通过编码,设置单片机接收信号端口的接受方式,将其设定为四倍频接受。这样单片机就不会只处理一路脉冲信号,会同时测量两路信号的上升沿和下降沿,即上图中的1、2、3、4,这样,在相同的周期内,它的计数值就会是单脉冲的四倍,因此被称为四倍频计数。此编码器的输出脉冲为方波信号,所以直接将其用引线接到相信的接收端口即可让单片机读取。而且强大的STM32的接口支持四倍频接收的模式,所以只需简单的设置,就可让其接收编码器信号。本实验所使用的直流电机是带有霍尔编码器的,它的工作电压为12V,工作功率为4.32W,减速比为30:1,编码器精度为390,空载转速为366rpm,所以电机旋转一圈时编码器单相输出的为390个。以此方法即可获得直流电机的转速。2.4电机驱动模块众所周知,单片机的IO端口输出电压一般只有几伏,驱动负载能力不是很强,尤其当单片机芯片与实际机械电路相连接时,常常会出现电压电流不匹配等问题,而直流电机是典型的大电流感性机械装置。因此在用单片机控制直流电机的时候,经常需使用额外的电机驱动电路,使电压电流匹配。因为考虑到本设计所使用的直流电机的工作电压为12V,工作功率为4.32W,因此电机驱动芯片选择TB6612FNG。TB6612FNG为一款专门用来驱动直流电机的芯片,他有12个控制输出端口,为每个直流电机提供6个接口,可以同时控制两个电机,因此用它来做双电机协同控制的驱动芯片非常合适。其引脚图如下图2-4所示:图2-4TB6612FNG芯片引脚及内部结构图TB6612FNG的主要引脚功能如下:AINl/AIN2:A控制通道使能控制BIN1/BIN2:B控制通道使能控制PWMA/PWMB:PWM控制信号输入端口AO1/A02:为A路电机控制输出端BO1/BO2:为B路电机控制输出端STBY:高电平为正常工作状态,低电平为待机状态VM(4.5~15V):为电机驱动电压输入引脚VCC(2.7~5.5V):为逻辑电平输入端TB6612FNG使用的典型应用连线示意图如2-5所示:图2-5TB6612FNG典型应用图例3单片机各部分程序及上位机单片机程序的主要分为:电机方向控制及转速控制程序,中断服务程序,速度采集程序,PID调节程序,串口通信,多电机协调控制程序以及主程序。上位机是使用VisualStudio制作的软件。此程序的设计思路是首先对要使用的微控制单元外设进行初始化配置,依据外设的功能不同,可将其分为:电机转动速度和方向初始化、编码器初始化、PID调节程序初始化以及串口的初始化。初始化完成后,程序将进入一个无线循环,等待中断请求,中断发生后将进入中断服务程序,在中断服务程序中,完成采集电机速度、对电机进行PID调节、双电机协同控制调节、设置调节PWM信号占空比以及通过串口将数据发送给上位机。上位机与STM32单片机通过串口连接。打开串口,上位机接收到STM32发送来的信息并将其显示出来。并且上位机可以时时显示当前直流电机转速,和时时绘制时间-转速曲线及两电机转速差曲线。在上位机界面上同时可以改变电机转速以及PID参数。其整体系统流程图(左为STM32程序的整体流程图,右为上位机程序流程图)如图3-1所示:图3-1STM32程序整体流程图3.1电机方向控制及转速控制程序电机驱动程序包括转动方向设置和PWM输出程序。电机方向控制程序中,想要电机转动方向为正向,只需设置直流电机控制芯片TB6612FNG的AIN1和AIN2引脚分别为高电平和低电平即可,对于另一个电机,只需设置BIN1和BIN2引脚分别为高电平和低电平即可。以A电机为例,即设定STM32单片机的PB5=0,PB4=1。需要注意的一点,B4可以控制电机的正反转那,但是由于PB4默认为SWJ下载端口,使用前必须先禁用SWJ和SWJ-JTAG,然后设置PB4=0。电机的转速控制由脉宽调制实现。脉冲宽度调制使用非常广泛,电机控制,LED灯循坏控制等实验中经常使用到,此实验中只需学会用PWM的方法控制电压,以控制电机转速即可。PWM控制电压的原理为等效原理,与交流电转直流电整流原理类似。一般PWM会输出一个10KHz到100KHz的脉冲信号,若此有信号的高压为A,其信号占空比为δB%,经过整流稳定电路,其输出的脉冲信号就等效为一个A×B%大小的直流电压,因此,通过代码设置PWM的占空比,就可以控制直流的转速了。STM32有八个定时器,TIM1、TIM2、TIM3、TIM4、TIM5、TIM6、TIM7、TIM8,其中TIM2、TIM3、TIM4、TIM5为通用定时器,为高级定时器,TIM2、TIM3、TIM4、TIM5,每个都可产生同时产生4个PWM信号,TIM1、TIM8每个可产生7个PWM信号,如此而来,强大的STM32可在同一时间内发出三十四个PWM信号。下面说明如何通过STM32高级定时器TIM1输出PWM波来调整其占空比。使用STM32的通用定时器TIM1产生PWM波输出,需要用到以下5个关键寄存器。下面进行介绍。(1)捕获/比较模式寄存器(TIMx_CCMR1/2),对于通用定时器,一般有2个,如下图3-2所示。这两个定时器可以分别控制CH1、CH2和CH3、CH4。对于这个寄存器,要关注且会用到的设置位OCxM,此位可以设定寄存器的输出模式,此设置位有三个二进制数字,这三位二进制数共可设置7种模式,在此需要将其设定为110或111,110和111的差别在于他们输出的电压极性相反,其余方面均相同。图3-2捕获/比较模式寄存器各位描述(2)捕获/比较使能寄存器(TIMx_CCER),这个寄存器决定是否允许各个通道启动,此寄存器相对简洁,这里只需关注CC2E位即可,此位高电平表示允许输出,低电平表示不允许输出,当我们想使用此寄存器时,需将此为设置为高电平。如图3-3所示。图3-3捕获/比较使能寄存器(TIMx_CCER)各位描述(3)捕获/比较寄存器(TIMx_CCR),这个寄存器是一个数值储存寄存器,此设计中,也是改变PWM输出的关键,此设计中,编码器传来的脉冲计算后将储存到CNT寄存器中,将CCR中的值与CNT中的值相比较,根据需求产生不同的动作。因此对这个寄存器进行修改,就可以改变PWM的输出了。如图3-4所示。图3-4捕获/比较寄存器(TIMx_CCR)各位描述通过配置TIM1的ARR和PSC寄存器,便可确定PWM的频率。PWM信号波的频率计算公式如下:频率=PCLK/(ARR+1)(PSC+1)对此设计所使用的电机,采用10-15KHz的PWM信号波比较合适。TIM1的时钟为72MHz,设PSC=8,ARR=799,即可设置PWM信号波的频率为10KHz。通过更改CCR寄存器的内容,就能够控制PWM脉冲信号的占空比,PWM占空比的计算公式为:占空比=CCR/ARR由上式可知,通过设置CCR寄存器的数值就可以来调整占空比,但其最大数值不得超过ARR的值。最后需要注意的一点,因为TIM1的引脚没有接在PB5上,所以要用到,强大的STM32具有重映射功能,应用此功能将TIM1映射到PB5上。3.2中断服务程序中断服务程序可通过STM32的定时器实现。STM32定时器的分辨力很强,通过分频,可以将其输出的脉冲达到10K到100KHz,它不仅能够发出脉冲信号,也能够测量输入信号的频率,并且它的各个定时器之间互不关联,彼此独立。STM32F1的通用定时器TIM2、TIM3、TIM4和TIM5功能如下包括:(1)自动装载16位计数器CNT。(2)具有16位可以时时更改的预分频器,它的可设置为1~65535之间的任何整数值。(3)定时器TIM2、TIM3、TIM4和TIM5都有4个互不关联的通道,每个通道都可以做如下事情:a.输入捕获b.输出比较c.PWM生成(边缘或中间对齐模式)d.单脉冲模式输出(4)允许外部信号输入,用外部信号作为定时器的时钟和多个定时器相连接,用定时器的输出信号控制作为一个定时器的输入脉冲。(5)以下事件发生时会产生中断或DMA:a.当寄存器计数值超出最大范围,或通过硬件、软件将计数器初始化时b.计数器由硬件或软件重置,开始和停止计数c.输入捕获d.输出比较e.支持四倍频计数方式,支持霍尔编码器使用定时器时,需要先对以下寄存器做些了解。(1)控制寄存器CR。控制寄存器CR共16位,其主要位功能如下:CEN:使能位,高电平使能DIR:计数方式CMS[1:0]:设置计数对齐方式CKD[1:0]:设置分频因子需要关注的是最低为CEN,此位是使能位,将其设置位高电平,定时器方可开始计数。控制寄存器CR的各位描述如下图3-5所示:图3-5控制寄存器1(TIMx_CR1)各位描述(2)DMA/中断使能寄存器DIER,此寄存器也是一个16位的,同样较为简单,这里只需关心它的第0位就行了。此为决定定时器是否允许更新中断,本设计单片机在处理和发送数据时,需要使用中断功能,每100秒中断一次。因此需要将此为设定为高电平,以让其允许产生定期中断。其寄存器如下图3-6所示。图3-6DMA/中断使能寄存器(TIMx_DIER)各位描述(3)预分频寄存器PSC。为16位寄存器,用于存放分频的数值,将其时钟的频率除以此寄存器中的值,这个新频率的时钟即做为计数器时钟。该寄存器的各位描述如图3-7所示。图3-7预分频寄存器(TIMx_PSC)各位描述(4)CNT寄存器,为16位,此寄存器也为数值储存器,用于暂时存放定时器当前的计数值。(5)状态寄存器SR,状态寄存器用来储存一些事件或状态,比如定时器的种种状态,或者中断有没有发生等等事件。使用STM32定时器的中断功能的时候,按照以下步骤即可对定时器初始化:(1)TIM3时钟使能。(2)初始化其参数,例如自动重装数值,计数方式,分频系数等(在STM32库函数中,其初始化参数通过调用初始化函数TIM_TimeBaseInit来进行的)。(3)设置TIM3_DIER允许更新中断。(4)TIM3中断优先级设置。(5)允许TIM3工作,即使能TIM3。(6)编写中断服务函数。中断服务函数需要进行编码器脉冲数的读取、PID调节、设置PWM占空比、向上位机发送速度信息等操作,设定中断周期为100ms,即每100ms对电机速度进行一次调节。此部分程序首先是对TIM3进行初始化,设定TIM3的计数器最大值,分频值,采用向上计数的计数方式(即只计数时钟脉冲的上升沿),设定中断请求使能,允许更新中断和捕获中断,最后开启定时器3,完成对TIM3的初始化。在中断程序中,将依次进行,接受串口传来上位机发送过来的信息,读取直流电机转速,将转速信息发送给上位机,进行PID计算,重新设定PWM占空比,最后清空CNT。此过程即为系统开始运作后的主要过程。3.3速度采集程序速度采集程序同样使用STM32的定时器实现,此设计中利用STM32的定时器4实现(TIM4)。具体STM如何利用定时器产生和处理中断的原理上文已经介绍过。上文中介绍过STM32的通用定时器在发生以下事件发生时会产生中断或DMA:a.通过硬件或软件初始化或更新计数器时,或定时器的数值超过能够储存数字的最大值b.通过软件或硬件使计数器开始或暂停计数时c.输入捕获d.输出比较e.支持四倍频计数,支持直接连接霍尔编码器中断服务程序正是满足以上中的a,硬件更新产生的中断,而速度采集程序中为产生中断的e条件,支持四倍频计数,支持直接连接霍尔编码器。如硬件部分的介绍中,将编码器的接口B1A(A电机的霍尔A方波信号)、B1B(A电机的霍尔B方波信号)、B2A(B电机的霍尔方波信号)、B2B(B电机的霍尔A方波信号)接入STM32的相应接收端即可。初始化TIM4的步骤如下:(1)TIM4时钟使能。(2)使能PB端口时钟。(3)初始化设定参数,如自动重装数值,计数方式,分频系数等(在STM32库函数中,初始化参数是使用初始化函数TIM_TimeBaseInit来进行的)。(4)设定TIM4为编码器模式三,双极性四倍频计数。(5)输入滤波器。(6)清除TIM的更新标志位。(7)设定时器初值为0。(8)允许TIM4工作,即使能TIM4。与中断不同的是,速度采集程序无需编写中断服务程序,编码器输出的A相和B相波形接入STM32的TIM4接口,需要读取直流电机转速时,直接读取TIM4的CNT寄存器就可得到当前转速。3.4PID调节程序PID算法是自动控制领域中最经常使用的一个算法,也可以说是万能算法。在经典控制理论中,就学过PID算法,PID算法可谓经典中的经典。但它却并不复杂,反而是一种很简单的算法,能够充分的体现反馈控制的思想。PID算法的经典形式如下图3-8所示:图3-8PID算法经典形式PID控制主要思想是通过反馈和误差信号,补偿控制输入信号,以做到闭环控制输出量。PID控制器可分为积分、微分、比例三个部分。当偏差为零时,比例环节只是存在,但不会有任何调节作用,如果输出结果存在误差,其误差乘以比例系数不为零,比例环节方可起到调节作用。积分环节对抑制静态误差有显著作用,当系统启动一定时间稳定下来后,输入值和输出值可能会存在偏差,这个偏差就是静态误差稳定时,积分环节是一个误差累计器,它会慢慢积累误差,然后将积累的误差值加到本来系统上,来抑制因系统自身因素的静态误差。微分信号则有些像一个提前感应器,它会总结信号的变化规律和趋势,预知信号变化的走向,来实现超前调节,以使信号更快的到达稳定状态,且减小信号误差,使系统反应更加迅速。通常,连续状态下的公式如下:(2-1)(2-1)eer(t)为误差量,由电机的实际转速减去电机的预定转速值得到。其中Kp,Ki,Kd三个参数,一般使用试凑法确定。确定比例系数Kp时,可以先忽略PID的积分常数与微分常数,使之均等于零,让其系统变成比例调节系统。输入从小到大变化,先设为最大值的二分之一左右,再开始慢慢变大,使比例系数作为自变量,慢慢增大它,观察输出波形,等待系统输出发生振荡,反之,从这个时候记录的数值开始,慢慢变小,观察波形,等待系统振荡消失,这时的比例系数,乘以0.6到0.7即可作为系统的比例系数。确定整个式子比例系数之后,在设定一个比较大的时间常数,再慢慢减小这个时间常数,观察系统输出,等待系统输出发生振荡,反之,再从数值开始,慢慢变小,观察波形,等待系统振荡消失,将此时的时间常数乘以1.5到1.8,即可设定为此系统的时间常数。微分时间常数正常情况下先不设定,将其为零,当需要设定时,同以上寻找比例系数的方式相同,最终确定为振荡消失的时候的数值的0.3倍左右。最后进行空载调节和带负载调节,直到看到自己想要的输出曲线,参数即全部确定。编写PID算法时,为了方便编程过程中的引用的,首先自己设定一个全局变量的结构体,如下typedefstruct{ floatSv; floatPv; floatKp; floatKd; floatKi; floatT; floatTi; floatTd; floatEk; floatEk_1; floatSEk; floatIout; floatPout; floatDout; floatOUT0; intOUT; u16C100ms; u16pwmmax; }PID;以方便调用PID的各种参数。其次编写PID的初始化程序,初始化设定温度,比例常数,积分常数,微分常数,及最大占空比等等。PID计算程序中,按照上面(2-1)公式,首先计算当前偏差,计算比例输出,计算历史偏差总和,计算积分输出,计算微分输出,然后计算三者之和,当此和小于最大占空比,大于零时,将其最为新的PWM输出值。再通过定时器,在中断时输出给直流电机。3.5串口通信程序STM32单片机的外接设备能力非常强大,STM32单片机不言而喻也有我们经常使用的串口功能,串口功能已在单片机中广泛使用,正点原子的精英STM32开发板所使用的STM32F103ZEC芯片有5路的串口设备。STM32的串口可以当作频率发生器,支持单步,单线,半双工通信,我们能想到的串口所应该具有的功能,STM32均为我们配备到位。精英STM32开发板上板载了1个USB串口和1个RS232串口,此实验中选择使用的是通过USB串口和电脑通信。串口的程序中,我们也需要使用到端口复用功能。STM32为了将它的IO端口设置能力更加强大,加入了端口复用功能,简单调用函数库中自带的函数,就可以将它的一些端口映射其他不同的引脚上,使端口的配备能力更加强大方便,为我们的使用带来了更多的可能性。STM32通过重映射它的寄存器,达到映射端口,复用端口的目的。通过函数库中简单的函数调用即可使用此功能。调用方法如下:(1)使能GPIOB时钟(2)使能串口相应时钟(3)使能AFIO时钟(4)开启重映射他们所使用的函数都是STM32函数库中定义的函数,查询使用即可。串口使用时,需要首先知道几个关键的寄存器。(1)数据寄存器DR,这是一个双寄存器,分为两个部分,RDR和TDR。RDR为接收寄存器,当串口收到来自外界的数据时,会自动暂存在这个寄存器中,TDR为发送寄存器,当我们想发送数据时,直接写入该寄存器,就可自动发送出去。(2)串口状态寄存器SR,它的寄存器的各位描述如下图3-9所示。比较关键的有两位。第一个是RXNE,这一位可以查看数据寄存器是不是空的,如果这一位为高电平,表示数据寄存器中已经收到了数据,此时要做的就快读取数据寄存器中的内容,否则,当下一次数据传来的时候,上个数据将被覆盖。读取完数据寄存器中的数据,RXNE将被自动置为低电平,也可以通过代码直接将此位写成低电平。第二个是TC,可以显示数据寄存器中的数据发送成功,当此位位高电平时,说明数据发送成功,如果设定了这个位的中断,也会产生中断,和RXNE一样,读取完数据寄存器中的数据,TC将被自动置为低电平,也可以通过代码直接将此位写成低电平。图3-9串口状态寄存器USART_SR各位描述若想使用STM32的端口复用功能,第一要先使能GPIO时钟,然后复用它,接下来设置GPIO的模式,将其设置为复用模式。之后,就要设定串口的初始化数据,例如波特率,校验位,停止位,奇偶校验等,在这些设置完成之后,接下来就是使能串口,在中断部分的介绍中已经介绍过。如果使用了串口中断,同样也进行中断设定,设置串口的中断优先级别。串口的设置和使用步骤方法如下。(1)允许串口使用,允许GPIO使用。(2)重置串口(单片机系统刚开始运行时,为消除之前使用残余状态和数据,一般会先进行复位操作,代码中使用USART_DeInit()函数即可完成重置操作。同样当单片机初始工作或发生意外故障时,也可以使用硬件进行复位操作)。(3)设定GPIO模式,复用功能模式。(4)初始化串口设定串口(简单调用USART_Init()函数即可进行,在这里可以设置字长,串口接受或发送数据,奇校验还是偶校验,是否存在停止位)。(5)打开中断。(6)NVIC初始化(当自己的实验需要启用中断时,才有这一步)。(6)使能串口。(7)编写中断处理函数。此设计中的串口中断函数非常简单,只有一个判断是否接受到中断,当判断接受到中断时利用读取数据函数读取接受到的数据,并将其放到指定数组中即可。其读取的数据真正发挥作用是在中断处理函数中,中断处理函数会将其中的转速控制,pid参数等信息进行处理。3.6主程序此程序的主程序及其简单,由各种串口,中断等的初始化程序和循环执行程序组成。其中初始化程序依次为:(1)延时函数初始化(2)PID参数初始化(3)设置电机转动方向初始化(4)脉冲宽度调制(PWM)初始化(5)串口初始化(6)编码器初始化(7)中断函数初始化循环执行程序中没有内容,为一个空白的死循环。因为此程序从上位机信息的的程序在串口中断程序中完成,其他向上位机发送信息,处理上位机发送来的信息,PID计算等程序均在中断函数中实现。主程序的循环执行程序就是一个无限循环等待中断的过程。3.7上位机程序本设计中上位机使用VisualStudio制作,简称VS,是美国微软公司开发的一个产品,它的功能完善,工具丰富,软件开发的全过程以及后期软件维护所需的绝大多数工具。它的功能强大,而且适用于C#、C++、VisualBasic、Python、JavaScript、F#等多种编程语言的使用。此设计中的上位机软件,主要分为两部分,一是串口配置及相关信息显示部分,二是直流电机相关信息显示和控制部分。3.7.1上位机串口配置及相关信息显示部分如图4-1,为上位机串口配置及相关信息显示部分图例,此部分可选择要与之连接的串口的端口号,数据传输的波特率,是否选择停止位,是否存在校验位,每次传输多少位数据。未启动状态下,打开串口按键下方显示串口已关闭及一个红色圆点,串口打开时,“打开串口”按键变为“关闭串口”按键,其下方显示串口一打开及一个绿色圆点。此部分下方在串口打开时还会显示当前占空。右上角可以显示接受到的来自单片机的原始数据,以方便查看数据传输是否正确,原始数据可以选择十六进制显示和字符显示两种显示模式。此部分下方还可选择是否保存数据及选择时间间隔和显示当前时间。其中比较重要的功能实现如下:图4-1上位机串口配置及相关信息显示部分(1)串口配置串口配置主要利用Windows窗体应用程序的SerialPort控件,然后利用SerialPort类的相关属性来完成串口配置。SerialPort类主要具有的属性如下:串口号、波特率、停止位、校验位和数据位。在配置过程中,ComboBox提供串口各属性的数据选项,每个ComboBox的Item都可设置所用到的串口属性值,在各属性旁边以Label控件标明属性名称。串口配置主要步骤为:启动系统后,通过ComboBox提供的下拉框选择与下位机通信匹配的串口属性,随后点击开启串口按钮即可与下位机通信。(2)数据接收为了能够准确接收到下位机传送过来的数据,在上位机与下位机通信过程中采用字节数组进行接收数据,字节数组发送5个字节,前两位做校验用,第三位和第四位代表转速信息,最后一位做末尾校验。接收到的数据经过校验之后存于缓冲区中,同时将传送过来的数据在TextBox中显示(16进制显示或字符显示),实时速度显示在实时速度TextBox中。在数据接收过程中,可利用定时器设置不同的时间间隔用于保存数据,数据最终以TXT文件形式保存。(3)时时显示当前时间利用VS中自带的timer定时器,调用时时显示当前时间函数,并利用timer定时器每秒更新一次即可。3.7.1上位机直流电机相关信息显示和控制部分如图4-2,为上位机直流电机相关信息显示和控制部分图例。其中转速曲线显示部分在串口打开时会时时绘制两个直流电机的转速和两个直流电机转速之差的转速-时间曲线。下方转速控制区也会时时显示两直流电机当前转速,及转速差,也可以更改设定转速,更改设定转速时只需设定其中一个直流电机转速即可,另一个直流电机的转速会根据磁浮道岔的转动角度自动计算给出。PID参数区可以更改Kp,Ki和Kd,原程序初始化中的比例系数Kp,积分系数Ki和微分系数Kd值是由试凑法和多次测试得出的值。曲线时间间隔区可以选择转速-时间曲线的横坐标时间间隔。其中比较重要的功能实现如下:图4-2上位机直流电机相关信息显示和控制部分(1)转速时时显示本模块利用Windows窗体应用程序的Chart控件,调用Chart控件,可以在界面上直接显示出一个坐标系,然后向坐标系设置其他参数及坐标即可,纵坐标为转速,横坐标为时间,横坐标均可以通过对Chart控件进行设置从而改变坐标刻度间隔。动态显示通过不断改变刻度条的相对坐标位置实现动态变化效果。(2)转速控制模块转速控制模块用于设定目标转速并将目标转速发送至下位机。目标转速值通过改变目标转速TextBox的值来确定。数据发送通过串口发送至下位机,与接收数据类似,发送数据以数组形式传送,其中包含校验字节和数据字节。转速单位为rpm,目标转速为0~366rpm,超出目标转速值范围会发出警告。PID参数改变的原理和速度控制相同,写在TextBox中,然后以数组的形式传送,其中包含校验字节和数据字节。3.7.2上位机参数流图(1)上位机按键表3-1上位机按键名称标签功能打开串口btnOpen打开上位机串口清空接收btnClRev清空数据接收框内容保存数据butsave将数据保存为文件确定btnconfirm确定保存时间间隔确定btnctrolv确定设定转速确定button1PID参数确定确定btndisplayint曲线时间间隔确定(2)

4多机协调目前我国磁浮列车的多机协调系统,多是用的补偿控制的方法,通过冗余模块设计和安全计算机模块与各个驱动电机的控制单元组成控制网络,并且有特殊装置负责时时采集各个驱动电机的状态,实现对多机控制的协调。安全计算机向各电机下达协同动作指令,道岔转辙过程中,安全计算机时刻检测各牵引电机的运动状态,当驱动电机受到一些干扰或者阻力而使之没有按照给定计划运作时,安全计算机对其进行输出补偿。此设计中多机协调同样用的是补偿控制的方法,主要意在探究补偿控制是否能够对多机协调起到预期的效果。多机协调程序没有初始化等内容,篇幅上来说比较短,其主要的思想就是故障导向安全和补偿控制。因为磁浮道岔的钢梁整体转动一定的角度时,每个牵引点的电机转速是不一样的。上位机会时时显示两直流电机的转速和转速差曲线,STM32也会时时计算两电机的转速差,当转速差与设定的转速差差别很小(转速差小于0.2rpm)时,不予补偿,使之可以由PID程序自动补偿恢复;当转速差与设定的转速差差别较大(转速差在0.2rpm到1.0rpm之间)时,使用补偿程序进行补偿,对转速与设定转速差较大的电机进行补偿,补偿范围在0.05rpm到1.0rpm之间不等,根据转速差与设定转速差的差值大小确定;当转速差与设定的转速差差别很大(转速差在1.0rpm到1.5rpm之间)时,使用最大程度的补偿,在不损坏梁体的情况下,尽快使电机转动到位,并且锁定梁体和电机,尽快检查转速差与设定的转速差差别过大的原因并修复电机;当转速差与设定的转速差差别过大(转速差大于1.5rpm)时,就有直接损坏梁体的可能性,此时要立刻停止电机转动,检修电机系统,并向铁路系统报告

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论