1、诚 信 承 诺我谨在此承诺:本人所写的毕业论文基于STM32的远程电机调速系统设计均系本人独立完成,没有抄袭行为,凡涉及其他作者的观点和材料,均作了注释,若有不实,后果由本人承担。 承诺人(签名): 年 月 日基于STM32的远程电机调速系统设计摘要:在各类机电设备中,直流电动机以其良好的调速特性、启动和制动性能优越操纵方便,响应速度快,输出转矩稳定一直来都处于主要地位,随着数字技术的发展和算法的突破,模拟控制正在退出舞台,而且直流电机的控制与调速更加多样化,如目前主流的PID算法和PI算法,通过单片机的高速运算和算法的结合,达到模拟控制的要求,并且可以通过外部传感器来修正参数提高稳定性,而且
2、整定也更加方便。由于现在更重视系统协调所以也可以利用单片机的易交互性来实现各个系统之间的交互,使控制更加合理,大大提高系统的工作效率。本设计基于STM32C8T6处理器,结合PI算法来实现无差闭环调速,并且通过485总线与上位机交互,上位机配备一块1602液晶和矩阵键盘,可以实时进行转速显示和转速调节,下位机方面使用的是TB6612进行PWM脉宽调制,和霍尔传感器进行转速测量,该系统控制精确度高,具有高的稳定性和较强的交互性。关键词:485通信;PWM脉冲;STM32;无差调节;PI算法Based on the STM32 remote motor speed control system d
3、esignAbstract:In all kinds of electromechanical equipment, DC motor is in the main status ,because of the good speed regulation characteristic, excellent starting and braking performance , simple operation , fast speed of response and stability of output torque. With the development of digital techn
4、ique and breakthrough of the algorithm, analog control is quitting the stage, the dc motor control and speed regulate are becoming diversified, such as the PID algorithm and PI algorithm, through the combination of MCU high speed computing and algorithm, to achieve the requirement of the analog cont
5、rol, and improve the stability by external sensors adjusting parameters, and setting become more convenient. Because system coordination is more important than before ,we can also use the easy interactivity of single chip to realize the interaction between various systems, make the control more reas
6、onable, improve the work efficiency of the system greatly. This design based on STM32C8T6 digital processor ,use the PI algorithm to realize closed loop speed regulation, interact through 485 bus and PC, PC equipped with a matrix keyboard and 1602 LCD , can achieve speed display and speed adjustment
7、 at the time, lower machine uses the TB6612 for pulse width modulation, and hall sensor for speed measurement, and this system has high accuracy of control, high stability and strong interactivity.Key words:485communication;PWM pulse;STM32;No difference to adjust目 录1 引言11.1 设计背景11.2 设计思路12 系统的设计与结构2
8、2.1 系统的方案与论证 22.2 系统方案的实现22.3 各模块结构与原理32.3.1 STM32模块32.3.2 编码器模块32.3.3 电机驱动模块42.3.4 485通信模块52.3.5 上位机模块63电机驱动与PI算法63.1 电机驱动63.1.1 PWM脉宽调制技术 63.1.2 电机驱动电路83.2 电机调速PI算法 93.2.1 PID算法分析 103.2.2数字PI算法实现114 程序和算法说明 114.1 下位机程序流程114.1.1 系统初始化114.1.2 PI算法的实现124.1.3 电机调速134.1.4 通讯部分134.2 上位机部分135 系统调试14参考文献1
9、5附录A17附录B22致谢321 绪论1.1 设计背景 电机在现代的工业系统中,是最主要的驱动设备和控制设备。尤其是直流电动机,由于它的调速平滑和结构简单稳定1,使其成为许多电器的驱动和控制单元 。目前对于直流电机的调节,主流调控方法是使用脉冲宽度调制,即PWM调制,不用复杂的电压控制电路只需要控制晶闸管的开断即调节占空比就能实现电枢电压的调节。而控制系统也由最开始电动机发电机的控制系统转变成如今的使用单片机控制晶闸管组成的桥式电路,能快速实现启动和停止,不用变换电路也能实现正反转的切换。单片机与电力电子的结合是未来电力拖动发展的总方向。随着社会的发展用户对其性能提出了越来越高的要求,老式的控
10、制电路已经无法满足需求。而PID控制策略是电机调速最为重要和稳定的策略,从其诞生到如今已经过去七十年,实现手段也从原始的模拟电路到现在的由单片机控制的数字算法。1.2 设计思路 虽然电力电子的进步大大提高了电机控制的效果,但是前提是建立在有一个好的控制策略为依靠,在这里我们采用的是无差调节也就是PI调节器。通过下层传感器传回的数据和我们所设定的转速要求在MCU层面的转速环进行比例和积分运算,产生运算结果之后作用于STM32的PWM生成定时器通过改变PWM信号达到改变转速的目的【2】, PI调节器可以通过积分项达到无差调节,积分项取决时间的积分,所以在运行的过程中随着积分项会随着误差和时间改变,
11、推动驱动器使被控量达到预定值。同时调节速度又由于比例项而得到保证,相对于PID控制虽然响应速度不够快,但是效果基本可以达到,而且在小型项目中可靠性更高。同时在设计中考虑到了如今系统与系统之间更强调交互性加入了485通信,相对于一般的232通信和无线通信,485通信距离更长,更加稳定更符合现在工业要求。同时在下位机控制方面选用了速度更快的STM32,与一般单片机相比这款芯片速度更快,接口丰富,价格低廉,可靠稳定,并且早已被应用在航天航空,汽车制造,医疗产品等各个行业之中,所以配套资源更加丰富。在对直流电机控制方面采用比较基础的H桥电路,可以实现正反转,由于电子行业的发展,小型的H桥电路已经可以实
12、现集成电路形态,热量产生更低更加稳定,在转速采集方面采用比较稳定和经济的霍尔编码器策略。在上位机添加了LCD模块来进行转速的反馈和矩阵键盘。来实现人机交互。在运行过程中可以通过液晶屏和键盘可以显示转速和转速的改变,代码部分使用C语言来进行编写。在下位机部分使用寄存器和库函数交叉编译。代码易读性强。同时保留串口调制可以进行参数修改。2 系统的设计与结构2.1 系统方案的论证 本设计想要达到远程的无差转速调节,我们面临的问题首先是电机驱动和反馈之后便是远程通信和上位机显示和交互。在下位机方面这里我们有51和STM32两种方案,但是如果使用51的话对速度的反馈的准确度将会降低而且要进行数字滤波这样将
13、会大大增加难度,而STM32内置编码器功能可以满足对速度的采集并且可靠性高,同时有多组定时器可以满足外部扩展。在行进对于通信手段时有两种选择一个是无线通信二是有线通信,但是为了满足工业对于稳定性的需求舍弃了无线通信而选取了更符合工业需求的485通信,上位机方面由于对速度的需求度不高,可以选择价格更低的51单片机,同时在显示方面选择l602液晶,相对于表现效果更好的彩屏,1602基本能满足我们的需求,而且代码更好编写同时可以实现更快的刷新速度。人机交互方面选择2*4矩阵键盘。2.2 系统方案的实现 在确定系统的方案之后我们就要制定具体的实现方法了,首先我们要对STM32的定时器进行设置,激活编码
14、器和PWM生成功能,通过对编码器的定时采样来确定电机的转速,得到转速之后进入PI算法部分然后生成所需要的PWM的占空比,之后写入CCR寄存器单元来控制占空比。同时要定时通过485模块向上位机发送数据,上位机要不断监视端口来获取键盘值,并且把下位机产生的转速值显示到1602液晶上。大致的结构图如图2.1 图 2.1 系统示意图2.3 各模块结构与原理2.3.1 STM32模块本设计的的下位机模块的主体使用的是STM32F103C8T6,这是一款ST公司研发的Ccrte-M3内核的32位处理器其主频可以达到72M3,而我们选用的C8T6是其103系列下面的一款小容量的产品,其外部有48个引脚基本可
15、以满足本设计的要求,其内部含有32KB的闪存和两个高级定时器和6个普通定时器,两个串口。我们要用到一个高级定时器产生PWM脉冲,一个通用定时器来充当编码器还有一通用定时器来产生定时中断,在本设计中我们使用库函数和寄存器同时编译,大大提高工作效率。核心板与各个模块接口如图2.2所示 图 2.2 核心板与各模块连接图2.3.2 编码器模块在对转速进行测速的时候我们使用的是AB相增量式霍尔传感器,是接在电机主轴上的通过电磁感应,每当主轴上的强磁珠靠近霍尔传感器便能产生感应同时输出脉冲,而我们的能生成两组相差90的矩形脉冲,由于编码器内置上拉整形功能所以我们不用外加整形电路。电机内部带30倍减速编码器
16、是13线的也就是内部每转30圈输出390个脉冲。所以我们在STM32内部定时采集编码器的数值,通过对脉冲个数的计数我们就能得到转速因此转速的表达式为: (3.1)其中N为固定时常T中编码器的计数值,为没转一圈产生的脉冲个数,对我们的编码器也就是390。这种方法就是我们所说的M法测速4,如图2.3所示。编码器AB相分别接在单片机的PB6和PB7为TIM4的输入通道,而我们在上位机的编码器计数模式选择的为边沿计数,这样脉冲序列能正确反映转速的高低,同时也能对方向进行鉴别,同时也能进行毛刺的剔除如图2.4所示。 图2.3 M测速法示意图 图2.4 STM32编码器模式示意图2.3.3 电机驱动模块本
17、设计在驱动模块选择的是东芝集团生产的TB6612FNG芯片,这是一款集成H桥芯片内部原理如图2.5,这样的H桥有两路所以能提供两路的电机驱动输出,它的最大输出电压V可以满足我们额定电压为12v的直流电机,最大输出电流为3.2A完全可以满足一般小负载。同时可以直接在外部端口来控制正反转,十分方面不需要人工的去改变驱动电路和人工的死区加入。这意味着我们可以在两个方向控制电机的旋转并且配合PWM的输入来控制转速。这大大降低了我们的工做成本提高了工作效率,而且这款芯片的产热也很低不用额外的添加散热设备降低了硬件投入,提高了可靠性。原理图和接线图如2.6所示,我们的PWM1输入接到PA8,同时上位机的T
18、M1定时器要挂载PWM输出通道,PB15和PB14来控制正反转。同时Stand By端要接高电平,这样STM32输出的PWM信号直接被TB6612转换成模拟信号,模拟信号的大小与加在TB6612的电压大小和占空比有关,所以我们要保持驱动电压的稳定。通过这个芯片我们就能实现电机正反转控制了。 图 2.5 内部原理图72.3.4 485通信模块本设计使用的RS-485通信协议,在工业控制场合,RS485总线因其接口简单,组网方便,传输距离远等特点而得到广泛应用5,在传输距离上RS-485接口的最大传输距离实际上可达1219米,远远超过了232总线。RS-232接口在总线上只能单点通信,也就是一主机
19、一从机,但是485总线可以挂载最多128个收发器。同时支持Profibus,FF之类的总线协议,这样的话利于我们进行工业联网更利于工业化得投入。相对于232通信485通信使用的是AB两根线上的差分负逻辑来进行传输,当两根线的电平处于+2+6时为0,处于-2-6时为0,由此可见哦、0与1之间相差极大在一般的干扰或毛刺并不会影响判断大大提高稳定性。 于STM32没有485通信接口我们要自己添加模块,我们选用的是MAX1348这是一款+5V供电、半双工、具有15kV ESD保护的RS-485收发器,这是一款TTL转485协议的芯片,通过这个芯片我们来实现上下位机的交互。模块原理图如图3.6所示。我们
20、在代码部分主要解决的是冲撞问题具体在代码部分详解。 图 2.6 485模块原理图2.3.5 上位机部分 上位机部分使用的是STC89C51结合1602液晶和矩阵键盘,在上位机部分我们主要是要进行键盘扫描和数据接收之后显示出来的任务,通过串口转485模块和下位机进行通信,并且监测键盘的数据并及时向下位机发送令牌达到交互。显示部分使用的是1602液晶可以显示若干个字符,每个字符位之间都有距离有利于人眼识别。所以基本可以满足我们的需求同时对机器的负担也很小。3 电机驱动与PI算法3.1 电机驱动直流电机的启动特性强于异步电机,而且调速的平滑性更高更利于现代控制技术,同时正反转的切换不需要复杂的硬件电
21、路,现代拖动技术的基础就是直流拖动系统,由此可见直流系统的重要。而直流拖动系统的主要执行单元就是直流单元而直流电机的稳态转速可以表示为: K=U-IRKe【6】(3-1)由公式可以看出直流电机的转速和电枢电压,电流,磁通量,电磁常数有关。而电枢电流与转矩有关也就是直接取决于负载。所以我们有三种调速方法1)调节电枢电压U ,2)调节励磁磁通,3)改变电枢回路电阻R。但是相对于1其他两种方法的可实现性与易操控性不高所以一般都是采用方法一。但是如果直接采用调节电源电压的方法或者使用电子电压变换器的话成本较高而且可靠性不高,调节速度也不高,并不能满足现代控制系统的要求,所以这时候我们就要采用PWM脉冲
22、宽度调制技术。3.1.1 PWM脉冲宽度调制PWM技术(Pulse Width Modulation)是对产生的脉冲进行调制控制的技术【7】。来等效产生所需要的脉冲电压。随着电力电子技术的成熟PWM技术成为DC-AC DC-DC电路的主流方法,基本上所有的逆变都离不开这项技术,在运动控制系统中更是这样。在目前电气传动的发展方向就是高集成微机化,而PWM技术更适合未来的发展,通过更好的算法就能取得低硬件投入得到的利润,这对于企业来说是无比诱人的。下面就主要介绍PWM技术的原理和算法。众所周知我们的电动机是一个感性负载,感性负载的特性就行电压跳变时电流无法跳变也就是这样就给我们实现电枢电压调节有了
23、可能性,这时我们就要通过一个重要结论实现控制也就是冲量等效原则:对于不同的形状的等冲量脉冲加在同一惯性环节时响应相同。 冲量指的是窄脉冲的有效量,响应则是指感性负载两端的电压或者电流大小与变化。例如下图3.1中的三个窄脉冲虽然他们的形状不同,但是他们的面积相同所以三者的冲量相同,所以将他们分别加到相同的惯性环节时,他们就会有相同的响应,但是如果响应变为3.1的d时系统响应就会变为该环节的脉冲过度函数。 图3.1 形状不同而冲量相同的各种窄脉冲 如图3.2b。图中为窄脉冲e(t),其形状还有面积分别如图3.1的a,b,c,d所示,为输入脉冲。该输入加在如图3.2的惯性环节中,假设输出电流为i(t
24、),图3.2b给出了不同窄波时的i(t)的响应波形。从图3.2 b可以看出在i(t)的上升阶段,脉冲输入的形状不同的i(t)的形状略有差异,但是在下降段几乎完全相同因此我们可以看出当脉冲越窄各个i(t)的波形差异也越小。如果在电路上周期性加上述脉冲, 也能得到周期性响应i(t)。 图 3.2 冲量相同时的各种窄脉冲的响应波形 在电源电压不变的情况下电枢端电压的平均值取决于占空比的大小【8】如何对应PWM脉冲与直流电压的大小就要用到等效原则了 首先我们假设一个周期T然后在这个周期中有一个长为的脉冲幅值为U,从图3.3可以求得此脉冲的等效直流电压了,首先设U0=t0UT,然后假设占空比为=t0T,
25、则的表达式可以简化为 (3.2)所以在产生PWM脉冲时,如果在一段时间内产生n个脉冲,而且占空比都为,这时直流等效电压可以简化为 U0=nt0UnT=U (3.3)所以从上式我们可以看出,如果我们想改变电枢两端的等效电压,我们只需要改变产生脉冲的占空比就可以了,这为我们控制电机提供了理论基础。我们只需要保持电源电压的稳定,之后改变占空比就能实现电压从0到电源电压的变化从而达到对直流电机转速进行调节。 图 3.3 PWM脉冲波形3.1.2 电机驱动电路想要进行电机的驱动首先要有一个合适的电路,在进行直流电机的调速而且想要有正反转功能的话,这时候传统的调节电路已经不能满足现代电机控制的要求,而伴随
26、着电力电子技术的发展,MOSFET成为小电机控制的绝对主力,由4个MOSFET组成的H桥电路就能实现上述要求。通过这个电路我们就能实现四象限运行。此电路的优点是1)电流一定连续,2)电机可以进行四象限运行,3)可以消除静摩擦死区,4)低速时也能有较好的平稳性,下面我们对H桥电路进行简要分析如图3.4,如果我们要让电机正转我们要导通Q1,Q3,如果要让他反转的话要导通Q4,Q2通过控制晶闸管我们就能控制电机正反转了 图3.4 H桥驱动电路32 电机调速PI算法 在本设计中我们使用的时PID算法的简化算法PI算法,由于我们是小电机系统加入微分环节并没有多大的性能提高,并且调制环节的难度也加大,所以
27、采用PI算法以实现无差调速3.2.1 PID算法分析我们在模拟控制系统中常用的是PID算法,所谓的PID算法与常规的比例调节系统的不同在于添加了积分和微分环节,通过这两个环节的加入我们可以提高响应速度,并且达到无差调节,常规的PID调节原理框图如3.5所示。 图3.5 PID调节系统原理框图通过上图可以看出PID控制是在比例调节的基础上对误差进行积分。同时对误差项取微分来获得变化趋势来进行相应速度的加快,所以在实际应用的过程通过对P, I,D 参数的调节就能获得有效的控制目的,例如我们使用的PI控制器就能实现无差调节。模拟PID的控制公式为: 9 (3.4)上式中的为比例积分的比例系数,为积分
28、环节的时间常数,为微分时间常数,但是在本设计中不使用微分环节。通过式3.4我们看出PID环节的工作原理,我们首先分析比例环节,比例环节的作用是用来使误差 e(t)能及时反映出来,通过比例环节的作用误差能被瞬时减小但是依然有误差存在。积分环节的作用主要是用来消除比例环节无法消除的误差也就是静态误差,积分作用的强弱取决于积分时间常数积分效果与积分常数成反比。而微分系数可以在本次响应中利用前两次的数据来提供一个大致变化趋势以此达到提高响应速度。2.2.2 数字PI算法的实现在DDC系统中实现了用计算机取代模拟器件,通过对测量传感器的不断采样来得到被控量的数值,由于处理器只能识别二进制数码,即使处理速
29、度再快也达不到对连续的控制变量进行处理,所以在进行数字PI计算的时候需要对控制规律进行离散化的算法设计,接下来我们要研究怎么将连续性公式变为离散型,首先再变为离散型时式3.4的结构并不能发生变化只是变量变为离散,由图1.5可知我们需要把 , , ,变成离散型也就是由当前次采样得到的数据,第n次数据用n表示,这是上述四个变量的离散型为,.这时候误差变量变为: (3.5)由于我们的变量是离散型的,所以传统的积分并不适用我们的PID算法,这时候我们要对积分步骤进行离散化,如果采样周期T很短而且固定这时候我们可以用T来替代,这时候积分运算就可以简化为求和运算,如下式: (3.6)这时候PI算法就可离散
30、为以下公式: 10 (3.7) 这样我们就得到了离散的PI算法的初步公式上式中的是偏差为0时的初始值,上式中的第一项起到比例作用也就是比例项: (3.8)第二项为积分项,对误差起到积分作用也就是即: = (3.9)但是我们如果对每一次的误差都要进行保存的话将要占用大量的内存,对于我们小容量的单片机来说是十分吃力的,所以这时候我们就要对算法进一步调整我们可以只保存上一次的偏差,这样的话十分节省内存而且在代码的编写方面也是比较省力的,所以我们这里引入增量式PI算法,也就是使用和这里我们可以通过式3.7得到的方程式: (3.10)增量式PI算法的重点就是要得到所以由式1.7和1.10可知: (3.1
31、1)从而,所以我们只需要求出每一次的偏差值,之后对每次的偏差值进行累加就能得到所要求的输出结果。4 程序和算法说明4.1下位机程序流程流程图如图4.1 图 4.1 下位机工作流程4.1.1 系统初始化 由于STM32不同于51在初始阶段比较复杂,各个部分都要进行初始化与设置所以我们要分步进行初始化 (1)我们首先要对时钟进行初始化,因为STM32有一个完整的时钟树,并且支持不同的主频,而我们需要运行在72M主频所以我们要调用官方固件库的初始化函数,并且设置PPL倍频系数为9这样主频就能稳定在72M。同时打开端口和定时器等外设的时钟。 (2)我们的485总线要借助串口通信,我们要对串口进行初始化
32、,这里我们也使用官方固件库,串口的模式为接收和发送,波特率设置为9600,无校验位。 (3)接下来是对定时器进行设置,我们要使用三组定时器分别用来产生固定时基,充当编码计数器,充当PWM产生器,虽然用途不同但是初始化的时候分频系数都要设置为99,定时器三充当计时功能阈值设定为7199,由式4.1可知这样就能稳定产生10ms定时器中断,定时器四设置为编码器模式,首先要挂载输入通道CH1CH2,并且不反相,模式选择为模式三即上升下降沿都有效。定时器一设置为PWM模式,占空比上限为7199,之后对各个定时器进行使能激活功能。 T=(ARR+1PSC+1)/TCLK (4.1)4.1.2 PI算法的实
33、现这部分算法是我们的重点,我们首先要获得电机的转速所以我们在TIM3的定时中断中查询TIM4的计数器数据,这样我们就能得到电机的转速了,在得到转速以后我们就要带入我们PI算法部分了,在PI算法部分我们要做的是得到误差数据,因为我们采用的是增量式的PI算法,所以我们有一个给定的目标转速N,我们测得速度是n我们要用到的两者之间的差值,由式1.11可知我们的算法的方法是用累加替换积分,同时我们输出的是PWM的参数所以我们的核心公式为4.1 PWM+= (4.2)根据这个公式我们要求出每一次的偏差之后与上一次的偏差之间进行运算,然后把这一次的偏差取代为上一次偏差,这样在下一运算的时候我们的这次偏差也就
34、成为上次的偏差具体过程如图4.2所示 图 4.2 PI算法工作流程4.1.3 电机调速 在TIM3定时器产生中断的时候,我们通过调用PI函数来获得需要写入PWM定时器的的参数值,但是在此之前要进行限幅操作,因为我们占空比上限是7199所以写入值不能大于7199,然后将数值写入CCR寄存器当CNT寄存器中的数值大于CCR的数值时输出脉冲发生反转也就是如此来控制占空比。由此可以知道占空比=CCR7199。而我们点击的空载转速为85,所以由式1.3可知n=85CCR7199,所以我们通过PI算法最终能得到我们需要的转速。4.1.4 通讯部分我们与上位机通讯依靠的是串口转485芯片,直接通过串口一发送
35、数据就行了,芯片自动执行TTL转485电平,但是由于485为半双工所以要软件处理防冲撞,我们采用令牌方式,上位机向下位机发送不同的令牌来进行交互,上位机先发送命令令牌下位机才能反馈,这就是我们软件防冲撞的原理。如图4.3所示图 4.3 通讯原理图4.2 上位机部分上位机使用的是51单片机,相对于STM32的库函数51单片机的代码比较简单流程也比较简单,主要就是串口的初始化,我们设置串口时也要设置为波特率为9600半双工模式,这样才能与下位机通讯,在键盘监测的时候我们由于键盘个数比较少直接使用查询法,不断监测端口状态来确定键盘是否按下,如果按下先判断按下键的功能,如果是改变转速则改变标志位使下一
36、次定时中断时能传送给下位机相应令牌让其改变转速,同时我们对于转速的获取也是要在上位机给下位机传输一个信号之后,下位机才把数据传输回来,这样可以有利于防止冲撞,在LCD方面我们每当转速改变的时候才去改写LCD的值这样可以节省资源,由于LCD的使用的核心芯片相同我们使用的都是公司提供的接口函数,大大的降低了操作的难度,,上位机改变转速的具体方法如图4.4所示,我们设置每按一下改变5,改变值也能通过键盘调整。 图 4.4 改变转速流程图5 系统调试本系统我们主要要进行PI参数的调制,但理论计算法设计调节器要先获得物理模型的数学模型,但是由于参数比较难以测量。因此还是以工程整定法为主。由于不用测量参数
37、这种方法更加简易可行,相当实用可以解决一般问题。在这里我们使用的是经验法整定这种方法是通过对系统的不断调整通过经验来选择参数,在进行参数的调制的时候我们有一段口诀可以进行参考。参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,曲线震荡很频繁,比例系数要加大,曲线漂浮绕大弯,比例系数要缩小,曲线偏离回复慢,积分系数要加大,曲线波动周期长,积分时间再加长。根据以上的口诀我们就能进行PI参数的整定了。首先我们要让积分系数=0使系统处于开环状态,让转速进行阶跃变化观察响应。然后增加比例系数直到获得满意的响应,之后对乘以0.83作为然后由小到大增大,直到得到满意的控制结果,之后以以上两步得
38、到的进行调整得到满意的结果,部分调制数据如下表。 组数设定转速调节时间/S超调量/%19595254.8224210090256.52203100120255.52204100100254.4220511099254721561101102545224712099254.72245 结束语本设计的目的在于使用STM32运行PI算法产生PWM波控制直流电机,在本设计中主要运用了DXP进行原题图的绘制,但是由于硬件要求比较高只能选择模块式拼装,在代码方面主要使用的KEIL5进行编写代码部分详见附录一,由于电机的参数受外界影响较大所以参数的整定并不做的很完美,在本次的设计中我主要进行了PI算法与电机
39、结合,STM32代码搭建与在线调试,利用串口软件快速调节PI参数,硬件平台的搭建与测试,代码的编写与调试等工作。通过本次的学习我初步掌握了系统的设计还有软件编程,把大学四年学到的理论知识运用到实际中并且得到了实践的检验受益匪浅。参考文献 1 朱贵国,汪党.基于 STM32 单片机的直流电机调速系统设计J.数字技术与应用,2013,5(2) 2 曾伟钦, 徐东升, 冉志勇.基于串口通信的直流电机PID调速系统设计J.电子设计工程,2012,20(19) 3 ST.STM32中文参考手册EB/OL.2016-01-20. 4 阮毅,陈维钧.运动控制系统M.1版.北京:清华大学出版社,2006:65
40、-66 5 林丹,王楠楠.基于STM32与RS485网络的直流电机驱动模块设计J.制造业自动化,2015,3(28) 6 阮毅,陈伯时.电力拖动自动控制系统M.4版.北京:机械工业出版社2009:7-8. 7 王兆安,刘进军.电力电子技术M.5版.北京:机械工业出版社:2009:163-164 8 王苏.直流电机PWM调速研究及单片机控制实现J,机电工程:2008:37(11) 9 SUNPLUS.PID调节做电机速度控制EB/OL. 2016-01-20. 10 TOSHIBA.TB6612FNGEB/OL.2016-01-20. 附录A下位机代码 主函数部分:#include sys.h#
41、include usart1.h#include usmart.hint Encoder=0; int Moto1=0; int Target_velocity=25;int flag =0;unsigned char date =0;unsigned char i; unsigned char Send_Count;int main(void) int key=0; Stm32_Clock_Init(9); setzero();delay_init(72); LED_Init(); uart_init(128000); MiniBalance_PWM_Init(7199,0); Encoder_Init_TIM4(); Timer3_Init(99,7199);