基于simulink编程的闭环控制小车上位机软件设计 - 图文

更新时间:2023-10-30 02:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

河南科技大学毕业设计(论文)

基于Matlab/simulink编程的闭环控制小车上位机软件设

摘要

随着科学技术的发展,直流电机的应用越来越广泛,驱动与控制直流电机的方式方法也越来越多。计算机软件与单片机技术也高度发展,越发成熟,目前计算机已经能够通过软件实现与单片机的无缝对接。本设计就是一种基于PC软件Matlab/simulink编程的闭环控制小车上位机软件系统,用于控制一辆小车。该小车由两台带有编码器的直流电机驱动,两轮独立驱动。小车在闭环控制系统作用下,能够遵循上位机指令运动:前进,后退,加速,减速,转弯,停止。Matlab/simulink和驱动小车的单片机系统能够通过串口无缝对接,Matlab/simulink模型能够在线监测小车状态,并且可以能够实时整定控制系统参数,对小车的运行状态进行控制。

本设计采用的电机是普通直流电机,两电机各带有一个编码器;采用的单片机为Avr单片机--Arduino Mega2560。单片机接受上位机指令,检测电机编码器脉冲。指令和反馈的实际值比较后,经过PID控制算法的处理得到控制量,最后通过PWM方式,通过L298N控制电机旋转。小车在闭环控制系统作用下,能够遵循指令运动。

关 键 词:Matlab/simulink,直流电机,PWM,PID反馈调节,Arduino Mega2560单片机

河南科技大学毕业设计(论文)

PC PROGRAM DESIGN OF THE CAR WITH PID CONTROLL BASED ON MATLAB/SIMULINK

ABSTRACT

With the development of technology, DC motor?s applications gets more and more extensive, and the ways to drive and control the DC motors become more. PC program and the technology of singlechip highly developed, become more mature, so at the present time PC can connect with singlechip without gap through program. This design is a kind of closed-loop PC program system based on Matlab/simulink, that controls a small car. The car is drive by two DC motor with encoder, and the two DC motor is drive alone. The car can move follow the command of PC under the closed-loop control system: forward, back, speedup, slowdown, turn, and stop. The singlechip system drive the car can connect with Matlab/simulink without gap through USB, and Matlab/simulink can monitor the state of the car online, and can set and control the parameters of system real time to control the move state of the car.

In this design, the normal DC motors is used, two motors each with an encoder, the AVR singlechip is used----Arduino Mega2560. The singlechip achieve the commands of PC, monitor the pulses of encoders. The commands compared with the actual value, then get the control value through PID control, finally, through PWM control the DC motors wheel by L298N. The car can move follow the commands under closed-loop control system.

KEY WORDS: Matlab/simulink, DC motor, PWM, PID feedback control, Arduino Mega2

河南科技大学毕业设计(论文)

目 录

前言 .................................................................................................... 1 第1章

硬件介绍 ............................................................................ 3

§1.1直流电机简介 ........................................................................ 3 §1.2 Arduino Mega2560简介 ........................................................ 4 §1.3编码器简介 ........................................................................... 6 §1.4驱动器L298N简介 ............................................................... 7 第2章

上位机软件环境介绍 ........................................................ 9

§2.1 Matlab简介 ........................................................................... 9 §2.2 Simulink简介 ...................................................................... 10 §2.3 安装Arduino的simulink软件包 ...................................... 11 §2.4 在simulink中建立模型 ..................................................... 11 第3章

系统模型的建立 .............................................................. 13

§3.1系统整体结构设计 .............................................................. 13 §3.2 电机控制系统设计 ............................................................. 14 §3.3 编码器转换系统设计 ......................................................... 16 §3.4 PID控制器及其算法设计 ................................................... 18

§3.4.1 PID控制器的原理及作用 ........................................... 18 §3.4.2 比较器的建立 ............................................................. 20 §3.4.3 PID控制器的构建及参数整定 ................................... 21

第4章

运行调试与结果分析 ...................................................... 23

结论 .................................................................................................. 28 参考文献 .......................................................................................... 29 致谢 .................................................................................................. 30

河南科技大学毕业设计(论文)

前 言

世界上最贵重的,是人的生命。以前科学技术不够发达,许多危险工作都需要人冒着极大地危险亲自去做,这就给人们的生命安全造成了极大的威胁,甚至造成不可弥补的损失。如今科学技术高度发展,许多方面都实现了自动化和远程操作,尤其是机器人技术的高度发展,使得许多危险工作有了机器去替人完成,这就避免了许多不必要的危险,使人们不比承担伤亡的风险,就能完成工作。

本设计便是针对这种需求,设计一种可以控制运动的小车,为一些工作的远程操作提供一个良好的基础。这些工作的应用范围是非常广的,诸如在小车上安装一个摄像头,然后控制小车进入人们难以进入或者非常危险的废墟进行搜救;或者在小车上安装机械手,并通过单片机控制,就可以进行远程防爆拆弹的工作等等??

此类设计国内外早已有大量课题,并且成果丰硕。最高端的便是美国的火星漫游车---勇气号和机遇号了。其余同类相关的课题数不胜数,选用的电机各不相同,驱动的平台也不一而足。本次设计采用Matlab/simulink与单片机实现无缝对接,单片机接上位机指令,读取编码器信号,经过PID反馈调节,最后产生PWM波,通过L298N来驱动两个直流电机转动。Matlab/simulink通过串口来对小车的运动状态进行监控,并且需要能实现够实时对小车的运动状态进行调整和控制,这就必须需要Matlab/simulink与单片机通过串口能够实现无缝对接,来实现实时控制的目的。PID的反馈作用,能够保证运动状态的稳定和可靠,以便适应复杂的外部环境,以保证小车在复杂的环境中依然可以可靠地运行。

本次设计采用的是串口通信,由于是有线的通信方式,所以小车的运行在距离上要受到不小的限制。如果在单片机上加上无线通信模块,并且写入相关程序,可以是小车实现无线操作,比如WIFI控制小车就可以实现无线控制,达到远程控制的目的,这就大大的提高了小车运行的范围,方便了操作。本设计并没有在小车上加装任何附带的模块,比如摄像头机械手等等,仅仅

1

河南科技大学毕业设计(论文)

是对驱动小车运动进行研究。所以,此次设计只是对小车稳定运行的一次研究,是对该课题的一次基础研究,是一次很有益的尝试。

2

河南科技大学毕业设计(论文)

第1章 硬件介绍

§1.1直流电机简介

电动机作为最主要的机电能量转换装置,其应用范围已遍及国民经济的各个领域和人们的日常生活。无论是在工农业生产,交通运输,国防,航空航天,医疗卫生,商务和办公设备中,还是在日常生活的家用电器和消费电子产品(如电冰箱,空调,DVD等)中,都大量使用着各种各样的电动机。据资料显示,在所有动力资源中,百分之九十以上来自电动机。

在可调速传动系统中,按照传动电动机的类型来分,可分为两大类:直流调速系统和交流调速系统。交流电动机直流具有结构简单、价格低廉、维修简便、转动惯量小等优点,但主要缺点为调速较为困难。相比之下,直流电动机虽然存在结构复杂、价格较高、维修麻烦等缺点,但由于具有较大的起动转矩和良好的起、制动性能以及易于在宽范围内实现平滑调速,因此直流调速系统至今仍是自动调速系统的主要形式。

直流电机可以实现平滑而经济地调速,而且不需要其它设备的配合,只要改变输入或励磁电压电流就能实现调速。这是直流电机最大的两条优点。随着计算机,微电子技术的发展以及新型电力电子功率器件的不断涌现,电动机的控制策略也发生了深刻的变化。电动机控制技术的发展得力于微电子技术,电力电子技术,传感器技术,永磁材料技术,微机应用技术的最新发展成就。变频技术和脉宽调制技术已成为电动机控制的主流技术。正是这些技术的进步使电动控制技术在近二十年内发生了很大的变化。功率器件控制条件的变化和微电子技术的使用也使新型的电动机控制方法能够得到实现。其中,脉宽调制(PWM)方法,变频技术在直流调速和交流调速系统中得到了广泛应用。

本次设计就是使用PWM的方式,通过L298N来驱动两台9V的直流电机运

3

河南科技大学毕业设计(论文)

转。以下是直流电机实物图,使用时套上传动齿轮等固定在小车内部。

图1-1 直流电机

§1.2Arduino Mega2560简介

Arduino,是一个基于开放原始码的软硬体平台,构建于开放原始码simple I/O介面版,并且具有使用类似Java,C语言的Processing/Wiring开发环境。Arduino能接收来自各种各样的传感器的数据,也能控制LED、电机和其他的各种装置。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, Matlab)来实现。

Arduino Mega2560便是Arduino系列中的一款8位单片机,他采用AVR处理器核心Atmega2560,功能强大,价格低廉。其主要参数如下: 类别:集成电路 (IC)

芯体尺寸:8-位 速度:16MHz 输入/输出数:86

程序存储器容量:256KB (256K x 8) 程序存储器类型:FLASH EEPROM 大小:4K x 8

4

河南科技大学毕业设计(论文)

RAM 容量:8K x 8

电压 - 电源 (Vcc/Vdd):4.5 V ~ 5.5 V 数据转换器:A/D 16x10b 振荡器型:内部

Arduino Mega2560是采用USB接口的核心电路板,具有一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。不过其最大的优点在于,他具有54路数字输入/输出口,16路模拟输入,4路UART接口,非常适合需要大量I/O接口的程序和设计。而这54路数字输入/输出口中的16路可作为PWM输出,直接采用analogWrite(pin,n)指令即可在该口输出占空比为n/255的PWM波,使用起来十分方便。而16路模拟输入,每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限,功能也是非常强大的。 电源方面的选择也很灵活,Arduino Mega2560可以通过3种方式供电,而且能自动选择供电方式:外部直流电源通过电源插座供电,电池连接电源连接器的GND和VIN引脚或是USB接口直接供电。通信接口方面,Arduino Mega2560内置4路UART可以与外界串口实现通信。

图1-2 Arduino Mega2560实物

5

河南科技大学毕业设计(论文)

§1.3编码器简介

编码器是把角位移或直线位移转换成电信号的一种装置。按照工作原理编码器可分为增量式和绝对式两类。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,绝对式编码器的每一个位置对应一个确定的数字码,因此它的示值只与测量的起始和终止位置有关,而与测量的中间过程无关。由于本次设计使用编码器是为了测定电机转速,只需测量一定时间内的位移即可,所以选用了增量式编码器。

由于是要求电机的转速,所以需要测量角位移而非线位移,所以选择带有码盘的旋转式编码器。按照读出方式编码器可以分为接触式和非接触式两种.接触式采用电刷输出,电刷接触导电区或绝缘区来表示代码的状态是“1”还是“0”;非接触式的接受敏感元件是光敏元件或磁敏元件,采用光敏元件时以透光区和不透光区来表示代码的状态是“1”还是“0”。由于电机转速较快,选用无接触式的光敏编码器。

综上所述,本次设计采用增量式旋转光电编码器。其工作原理为在一个码盘的边缘上开有相等角度的缝隙(分为透明和不透明部分),在开缝码盘两边分别安装光源及光敏元件。当码盘随工作轴一起转动时,每转过一个透光缝隙就产生一个脉冲信号,并将这个脉冲信号输出,编码器轴转一圈会输出固定的脉冲,脉冲数由编码器光栅的线数决定。

图1-3 编码器实物图

6

河南科技大学毕业设计(论文)

图1-4 编码器原理图

§1.4驱动器L298N简介

L298是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。

一个L298N芯片可同时通过PWM波方式驱动两台直流电机运转,外接9V电源为两台电机以及298N自身供电。芯片上的OUTl、OUT2 和OUT3、OUT4 之间分别接2 个直流电机;input1~input4 输入控制电位来控制电机的正反转;Enable 则输出PWM波对转速进行控制。

7

河南科技大学毕业设计(论文)

第3章 系统模型的建立

§3.1系统整体结构设计

本模型的目的为由simulink与Arduino实现无缝对接,控制两边车轮的转速。两边车轮各有一台直流电机通过齿轮组成的传动系统来驱动。那么控制车轮的转速就相当于控制两台直流电机的转速。直流电机的调速方式主要有改变电枢电压,改变励磁,串接电阻等。而通过L298N来驱动直流电机的调速,相当于是改变电压实现调速。PWM周期性的控制电源通断,通过改变占空比的方式来改变电机两端的平均电压,以此来达到改变速度的目的。

两台编码器测得的脉冲经过一定的处理可以转换成为速度信号,反馈回单片机对系统实现闭环的PID控制调节。系统的整体结构设计如下图所示:

图3-1 系统总体结构设计

simulink 无缝 对接 Arduino Mega 2560 PWM L298N 直流电机 传 动 系 统 车轮 编码器

13

河南科技大学毕业设计(论文)

§3.2 电机控制系统设计

由于电机是由L298N驱动,由L298N的工作原理可知,每一个电机的驱动需要输入三个信号:IN1和IN2分别输入1个高电平,1个低电平,用来控制直流电机转动的方向,ENA输入一个PWM波信号来控制转速。同理,驱动另一个电机的IN3、IN4以及ENB也需要同类的信号。

本设计要求小车能够遵照指令加速,减速,转弯或者停止,所以两个电机的转速可能是不同的,我们要对两个电机的速度信号分别做出控制。如果我们采用两个速度信号分别作为两个电机的输入信号的话,可以实现转弯的功能,不过在simulink环境的实时控制下,无法同时对两个信号做出改变,那么在加速或者减速是无法使两电机同时改变速度,那么小车则会有一段时间的转弯,不符合设计要求。根据这一设计要求,采用一个速度信号一个转弯信号,采用两个加减运算器的设计,如下图所示:

图3-2 速度信号输入设计

右轮的输入信号为:速度信号+转弯信号; 左轮的输入信号为:速度信号-转弯信号。

在直行时,转弯速度为零,两轮速度信号一致,转弯时只需设置一个转弯信号,两轮的输入便会产生两倍转弯信号的差值,使两轮出现转速差,实现转弯。由系统可知,正的转弯信号为左转,负的转弯信号为右转。

14

河南科技大学毕业设计(论文)

由于系统需要PID反馈调节的控制,而这个速度信号作为整个系统的输入量,则需要经过比较器和PID控制器的计算后才能够通过单片机产生响应的PWM波对电机进行驱动。

图3-3 输入信号处理

由于这个速度信号通过PID控制器后要作为产生PWM波的参数,而PWM波参数有一个0~255的取值范围,所以我们要对这个速度信号做一下范围的限制,其实现方法为采用饱和输出模块,该模块的作为为设定一个最小值和一个最大值,所有在这个范围内的输入量均可正常输出,而当输入小于这个最小值时,则输出这个设定的最小值;当输入大于设定的最大值时,则输出设定的这个最大值。那么饱和模块的效果就是使得不管输入什么值,输出总是在这个最小值和最大值之间。我们把最小值设置为0,最大值设置为255即可符合PWM的要求。最后产生的速度信号输入到Arduino硬件模块库中的PWM中即可通过单片机产生PWM波了。而高低电平的四个输入选用Digital Output模块即可。则电机控制系统的最后设计即如下图所示:

15

河南科技大学毕业设计(论文)

图3-4 电机控制系统设计

§3.3 编码器转换系统设计

正如上文编码器简介中所说,编码器输出的是脉冲信号,并不直接就是速度信号,所以我们需要通过一定方法将输入的脉冲信号转换成速度信号才能反馈回系统进行反馈控制。

通过了解光电增量旋转编码器的原理我们可以知道,只要我们能够得知码盘的步数(即码盘转一圈所产生的脉冲数),以及两个脉冲之间的时间,那我们就可以利用公式: 式中:

ω为角速度,θ为角度,t为时间。求出车轮的角速度。而已知编码器的步数,则可利用公式: 式中:

n为编码器的步数。

利用3-1求出的转速单位为°/s,若想得到r/min的转速则:

1°/s=1/60r/min

16

ω=θ/t (3-1)

θ=360°/n (3-2)

(3-3)

河南科技大学毕业设计(论文)

将3-1、3-2、3-3三式联立,即可得到: 式中:

ω的单位即为r/min。

本次设计中,利用Arduino的开发平台编写了简单的统计脉冲数量的程序,然后手动转动车轮一圈,得到车轮转动一圈的脉冲数,即可得到编码器的步数。本次设计所使用的编码器步数为100,即n=100。

将n=100代入式3-4中,得:

ω=0.6/t

(3-5)

ω=60/nt

(3-4)

由此可得,只需求出两次脉冲之间的时间,即可通过式3-5求出车轮的转速。这需要通过一个上升沿触发子系统来实现这个目的。

在子系统中我们需要一个Digital Clock模块来产生一个准确的时间。在一个上升沿到来时,即编码器的一个脉冲到来,子系统触发,利用时钟记录下来一个时间,待到下一个上升沿到来时,再记录下一个时间,利用加减器模块计算出来时间的差,即为两个脉冲之间的时间。且第二个时间会代替第一个时间,等待下一次脉冲触发,下一个时间到来,再次求差,被替换,如此循环。而使子系统触发的编码器脉冲则应当从Arduino Mega2560的I/O口中读入,如下图所示:

图3-5 子系统脉冲输入

求两脉冲之间时间差值的系统如下图所示:

17

河南科技大学毕业设计(论文)

结 论

本次设计通过Matlab/simulink实现了AVR单片机与PC机的无缝对接,通过L298N,编码器这些最简单的元件很好地驱动和控制了直流电机的运动。本设计最大的特点在于,充分利用了simulink强大的模型建立和数据处理功能,通过simulink的外部模式,与Arduino在程序运行时采用串口通信,实现了对控制系统参数的实时整定和小车运动状态的实时监控。

本设计采用了PID闭环控制控制系统,很大程度上提高了小车运动的瞬态性能和稳态性能,使小车能更快得响应速度信号的变化,更准确得按照给定的速度运转,而且具有良好的抗干扰能力,在出现外界干扰时能够迅速调节回正常状态。

虽然本次设计基本完成,不过由于硬件原因,时间有限还有个人水平有限的问题,本设计还有许多不够令人满意,能够提高和完善的地方。比如由于不清楚直流电机及其传动系统的具体参数,无法求出传递函数。如果求出系统的传递函数,那么则可采用simulink对该系统进行仿真,研究其对单位阶跃信号的时间响应,然后利用边界法等方法整定PID参数,可以获得更合适的PID参数,使PID的作用达到更好的效果。

还有就是在外表模式下单片机串口数据读取过于频繁,处理器负担过大,即“overrun”的问题没有得到很好地解决,使得系统的运转不够理想,可能还有许多其他没有注意到的不完善的地方,希望老师同学能能够见谅并帮忙改正。本人在以后的学习生活中也一定会积极思考这些问题的解决方法。

最后,在本次设计过程中,充分的利用和温习了大学四年来我所学到的知识,并且极大的锻炼了我分析问题,解决问题的能力。虽然本次设计尚有许多不尽人意之处,不过它为后续的研究和设计打下了坚实的基础,提供了一些经验,是一次极为有益的尝试。其中存在的问题我会在以后的学习和研究中继续积极思考,积极解决。

28

河南科技大学毕业设计(论文)

参考文献

[1] 余锡存,单片机原理及接口技术,西安电子科技大学 [2] Simon Monk,基于Arduino的趣味电子制作,科学出版社 [3] Sanjaya Maniktala,精通开关电源设计,人民邮电出版社

[4] Jnathan Oxer,Practical Arduino: Cool Projects for Open Source Hardware, Apress,2009

[5] 沈继红,matlab统计分析与应用:40个案例的分析北京航空航天大学出版社 2010

[6] 杨建玺徐莉萍等编著,控制工程基础,科学出版社,2008 [7] 朱仁峰,精通MATLAB 7,清华大学出版社

[8] Michael McRoberts,Beginning Arduino,Apress,2010

[9] 周润景、袁伟亭、张鹏飞,cadence高速电路板设计与仿真(第三版),电子工业出版社,2009

[10] 吴建强,PSpice仿真实践,哈尔滨工业大学出版社,2001 [11] 赖寿宏,微型计算机控制技术,机械工程出版社,2000

[12] 周志敏、周纪海、纪爱华,开关电源实用电路,中国电力出版社,2005 [13] 周志敏、周纪海、纪爱华,便携式电子设备电源设计与应用,人民邮电出版社,2007

[14] 王伟,电源技术教程,电子工业出版社,2007

[15] 吉林大学学报(信息科学版),2010,第28卷,第1期

[16] 赵亮、侯国锐,单片机C语言编程与实例,人民邮电出版社,2003 [17] 徐士良、葛兵,计算机软件技术基础(第二版),北京:清华大学出版社,2007.7

29

河南科技大学毕业设计(论文)

致 谢

毕业设计已经接近尾声,四年来的大学学习生活也即将画上一个完满的句号了。在此,我要为四年来教过我的老师,一起学习合作过的同学致上我最诚挚的感谢。

首先,感谢母校,四年来为我提供了良好的学习资源,学习环境,让我在这里度过了充实而愉快的四年。然后感谢所有教过我的老师,在他们孜孜不倦的教导下,我学到了大量的专业知识,也正是这些专业知识的保障,才能让我顺利得完成毕业设计。然后还要感谢我的同学们,我们一起学习,一起实验,一起讨论解决问题,给我了许许多多的帮助。

在此我尤其要感谢我的毕业设计指导老师仲志丹老师。四个月来,他不厌其烦得帮我解答并讲解了毕业设计相关的所有问题,给了我极大的帮助。仲老师为人谦和,对待学术的问题却认真而严肃。他对我们的设计要求严格,但对我们做的不好的地方却总是能够悉心指导,并给与热情的鼓励。在设计即将结束的几天里,老师依然耐心得为我解决问题,没有催促,只有鼓励。仲老师渊博的知识,勤奋的工作态度,和无私的教导,是我终身学习的楷模。

印象最深的一件事,由于我个人的问题,仲老师专门抽时间来教研室单独对我进行指导,整整一上午教我解决程序的问题,午饭时间过了都没有发觉,老师的家人打电话来催,老师也没有回去,直到帮我解决了问题才回家,这件事深深的感动了我,真的庆幸能有如此好的指导老师来指导我完成设计。

还有在解决问题方面,仲老师教导我,问题要一个一个解决,不要这个问题还没有解决就又去考虑下面的事,这样做只会事倍功半。这些教导在我以后的学习和生活中,会使我受益终生。

最后感谢和我同组的李文博同学,和我一起讨论解决问题,在设计中相互帮助,一起克服困难,解决问题。

最后,感谢四年来所有教过我的老师,正是这些知识,才是我完成设计最根本的保障。感谢全体老师四年来对我的辛勤栽培。

30

河南科技大学毕业设计(论文)

图3-6 时间差值计算系统

两脉冲之间的时间t求出来了,那么就可以利用简单除法计算即可求得车轮的转速了,其完整子程序如下图所示:

图3-7 子系统内部设计

输出的转速即可反馈回比较器,对系统进行反馈调节了,当然,这个输出也可以直接连接一个示波器来监控车轮的转速状态。

§3.4 PID控制器及其算法设计

§3.4.1 PID控制器的原理及作用

PID(Proportional,Integral and Differemial)控制器是一种的简单的反馈调节控制算法。常规PID控制系统原理框图如下图所示,系统主要由PID控制器和被控对象组成。作为一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制偏差e(t),将偏差按比例、积分、和微分通过线性组合构成控

18

河南科技大学毕业设计(论文)

制量u(t),对被控对象进行控制。

图3-8 PID原理图

PID 控制器的数学描述为:

其传递函数可表示为:

使用PID控制器的意义在于,PID反馈调节可以使系统具有更好的时间响应和更小的稳态误差,即使系统获得更好的瞬态性能和稳态性能,以及更好的抗干扰能力。

本系统的PID反馈原理如下图所示:

图3-9 系统反馈原理

一般情况下,直流电机的转速作为被控量时可以看作一个惯性环节。而本次设计的被控量是车轮的转速,由于传动系统是齿轮组成,基本上只是一

19

河南科技大学毕业设计(论文)

个比例作用,所以本次设计,车轮的转速作为被控量也可以看作是一个惯性环节,其传递函数为:

k1

T1s?1

每一次速度信号的改变,比如启动,加速,减速,转弯等等,都是一次速度信号的阶跃变化。通常一个惯性环节对于单位阶跃信号的时间响应如图所示:

图3-10 一阶惯性系统单位阶跃时间响应

PID控制器的目的就是使得被控对象,即车轮的转速能够获得更快的响应速度和更准确的稳态状态。也就是说使得车轮能够更迅速的响应速度信号的变化,按照速度信号要求的速度转动,而且转速准确,并且能够在有干扰的状态下依然保持准确而稳定的速度。 §3.4.2 比较器的建立

由于正反馈比较容易使系统失控,所以本设计中PID调节采用负反馈调节。这样采用一个加减法器即可

图3-11 比较器

20

河南科技大学毕业设计(论文)

正的一端接电机控制系统的速度信号,是理想速度;负的一端接编码器反馈回来的速度信号,是实际速度。输出端接入PID控制器。 §3.4.3 PID控制器的构建及参数整定

有上文所述PID原理可知,PID是由比例,积分,微分三个环节构成的。比例环节由一个比例增益运算模块(Gain)即可实现;积分环节由一个比例增益运算模块和和一个输入信号积分(Integrator)串联即可实现;同理,微分环节由一个比例增益运算模块和一个输入信号微分模块(Derivative)串联即可实现。最后将三者的输出累加到一个加减法器上即可。如下图所示:

图3-12 PID控制器设计

控制系统的整定就是在控制系统的结构已经确定、控制仪表和控制对象等处在正常状态的情况下, 适当选择控制器的参数使控制仪表的特性和控制对象的特性相配合, 从而使控制系统的运行达到最佳状态, 取得最好的控制效果。

由于具体的传递函数难以确定,所以本次设计的PID参数整定采用试凑法来进行整定。

比例环节参数Kp的整定:

比例环节就是成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减少偏差。一般情况下,增大比例系数KP会加快系统的响应速度,有利于减少静差,但无法完全消除静差。但过大的比例系

21

河南科技大学毕业设计(论文)

数会使系统有较大的超调,并产生振荡使稳定性变差。

由于本次设计的被控量为车轮转速,自然希望获得很小的静差和很快的响应,而且系统是一个一阶系统,所以Kp可以考虑取得大一点。

首先,将Td和1/Ti设置为0,即消除积分环节和微分环节的作用,使系统仅在比例环节的作用下运行,然后改变Kp的值并观察系统的运行情况。用此方法来找出一个合适的Kp的值。

经过几次尝试初选Kp的值为25。 积分环节参数Ti的整定:

积分控制的一个明显作用便是使系统增加一阶,这样使没有积分控制的系统稳态误差得到了一级改善。也就是说,如果原系统对于给定输入稳态误差是一个常数,那么加了积分控制将使其减小至0。也就是说积分环节主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之越强。在整定时将积分系数Ti由小逐渐增加,积分作用就逐渐增强,观察输出会发现,系统的静差会逐渐减少直至消除。反复试验几次,直到消除静差的速度满意为止。但是积分系统的引入会使系统变为二阶,这便引入了超调量,而过大的比例系数会使超调量变大,降低系统稳定性,所以应适当的降低一点比例系数Kp。

此时保持微分环节的Td仍然等于0,不让微分环节起作用。经过一番尝试,感觉系统静差本来就不算大,所以并没有选择太大的1/Ti,取了1/Ti的值为0.005,Kp也降至20。 微分环节参数Td整定:

微分环节反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。也就是说微分控制实质上是一种预见型控制,另外也可以发现,只有当误差随时间变化时微分控制才会对系统起作用,也就是说,如果系统的误差控制对时间而言是一常数,那么微分控制对系统也就不起作用,换句话说,微分环节对于消除静差没有任何作用。

试凑时,从0开始逐渐增大,观察系统响应。最后选择的Td的值为4。

22

河南科技大学毕业设计(论文)

第4章 运行调试与结果分析

至此,整个PID直流电机控制系统已经构建完全,如下图所示:

图4-1 系统整体结构

下面便是根据系统中所选择的接口对硬件进行接线,接线图如下图所示:

图4-2 最后接线图

23

河南科技大学毕业设计(论文)

下面就要开始进行运行与调试了,首先要将系统从simulink环境中写入

Arduino单片机中,其方法如下。

先将Arduino Mega2560通过串口连接到电脑上,然后在simulink环境中点击Tools选项卡,在下拉菜单中选择Run on Target Hardware,然后点击prepare to run。在弹出的菜单中选择Arduino Mega2560,不要错选成Uno。然后点击OK,之后会弹出下面的选项卡:

图4-3 simulink串口连接硬件设置

Set host COM ports首次选择可以尝试选择自动,其他选项都没有改动,比特率默认为9600,如果有需要可以改动。选择OK。

再次点开Tools选项卡,Run on Target Hardware,Run。

系统错误提示,说找不到硬件。这时因为simulink没能自动通过串口找到Arduino的原因。这时采用Arduino开发平台工具软件,检测到当前单片机连接电脑的串口号为8。再次点开Tools选项卡,Run on Target Hardware,Options?在Set host COM ports选项中选择手动,然后COM port number中键入8。重新尝试运行程序,点击Run之后,程序成功的写入了

24

河南科技大学毕业设计(论文)

Arduino单片机,小车成功的转了起来。在PID反馈控制程序下运行基本稳定,两轮速度一致,走的很直。

之后尝试改变输入的速度信号和转向信号,每次改变都要重新将程序写入单片机,不过经过数据的多次改动,发现小车的速度可调,可以转弯。

这说明了整个系统基本正确,小车能够在控制下正确运转。Matlab/simulink和单片机系统的无缝对接,控制模型直接下载到单片机内运行功能实现。

下面要继续尝试对小车运动的实时控制。再次进入Run on Hardware configuration的设置选项中,勾选Enable External Mode,开启外部模式。在外部模式下,simulink和Arduino Mega2560会经过串口进行实时通信,允许在simulink环境中在程序运行过程中对程序中的数据进行实时整定,并对系统进行实时监控。

在simulink环境下,将运行模式改变为External,不再是Normal,如图所示:

图4-4 选择外部模式

运行时间选择inf,即在点停止按钮之前无限时运行。Tools,Run on Target Hardware,Run。

程序成功的写入Arduino,小车运转正常,这时尝试改变速度信号,转向信号等,小车均能够正确作出响应,比如加速,减速,转弯等等。小车能够遵照指令正确运行,且能实时整定参数功能实现。

最后尝试实时监控小车状态,在传感器输出的速度信号后加一个示波器或者to workspace模块,对小车实时速度进行监控。如下图所示:

25

河南科技大学毕业设计(论文)

图4-5 通过示波器读取车轮转速

通过示波器即可观察到小车车轮转速随时间变化的波形。再次运行程序,这次却出现了问题。小车车轮几乎停转,运行十分不理想。运行不理想,示波器监视到的波形自然也很不理想。

查阅资料后,得知这种情况是由于在simulink的外部模式下,各个参数的取样周期过小,simulink与Arduino通过串口的数据传输太过频繁,给Arduino的处理器造成了太大的负担,使其产生了“overrun”现象,即处理延时,无法保证正常工作,使得小车的运转异常。

其解决办法为尽量调高各个参数的取样周期,即sample time。在将所有参数的取样周期从0.001s改为0.1s,编码器脉冲输入口取样周期改为0.004s后,再次尝试运行程序,

小车成功运转,不过还是存在一定的“overrun”现象,运转不是很理想,在输入的速度信号为100,转向信号为0时,示波器读出的右轮转速信号波形如图所示:

8070605040302010001234567

图4-6 车轮转速波形图

26

河南科技大学毕业设计(论文)

发现实际输出的速度与输入值存在较大差异。分析后推断一部分原因是因为单片机的“overrun”问题造成了系统输出的不稳定,还有很大一部分原因是编码器脉冲的取样周期取得过大,可能造成脉冲的漏取,这就造成了测量出的速度信号不准确。

而考虑到之前没有采用示波器检测编码器转速时,系统程序稳定性良好的现象,可以基本确定,“overrun”问题是由于串口数据的大量传输引起的,即过于频繁的串口通讯给单片机处理器造成了过大的负担,使其无法正常工作。

编码器原理如第一章所述,这次设计所选用的编码器码盘为100步,在小车转速为100r/min时,两个脉冲之间的时间差为0.006s,这时编码器脉冲读入的取样周期选取为0.004s显然是不合适的,而如果取更小的取样周期,单片机的overrun现象会更加严重。

换一台步数少一些的编码器,可使得同等速度的时候,两个脉冲之间的时间间隔会大一些,那么编码器脉冲输入信号的取样周期就可以取得大一些,串口输入的数据相对就会少一些,可以减轻一些单片机处理器的负担,或许可以解决这一问题。

27

本文来源:https://www.bwwdw.com/article/wzj2.html

Top