多电机同步控制

更新时间:2024-01-30 19:49:01 阅读量: 教育文库 文档下载

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

论文题目:电机同步控制模块设计(软件) 专 业:电气工程及其自动化

指导老师:黄梦涛 (签名) 本 科 生:李大威 (签名)

摘 要

多电机同步控制广泛应用于工业生产中。论文以两台电机的同步为研究对象,采用主从式的控制结构,设计了一个两台小功率低电压直流电机的同步控制系统,两台直流电机采用PWM技术调速。为了提高控制精度,采用了带速度反馈的闭环调速系统,选用单片机C8051F040作为控制器。为了能够根据需要改变电机的转速以及实时显示两台电机的速度,我们还建立了单片机和上位机之间的串行通信。设计的核心是用C语言编程实现了PID控制算法。为了增加PID算法的自适应性,设计中整定了多组控制参数,并给出了控制结果。

关键词:多电机同步,PWM,C语言,PID算法

1

SUBJECT :The software design of Multi-electric motor’s synchronism control module

Specialty :Electrical Engineering and Automation

Instructor:Huang Mentao (Signature) Name :Li Dawei (Signature)

ABSTRACT

Multi-electric motor synchronism control system has been widely used in the industrial manufacture. Taking the synchronization of two engines as research object, a synchronous control system for two DC motors, which work on small power and low voltage, is designed in this paper. It has a Master-slave structure. The speeds of the two DC motors are regulated with the technology of PWM. In order to improve the control precision, a closed loop speed control system with a speed feedback is adopted, while the single chip computer C8051F040 is selected as the controller. We also establish a serial communication between the single chip computer and a PC, so it is easy to set up the motors’ speed you want and show the real-time speeds of them. The core of the design is to realize the PID algorithm, using the C language to program. In order to improve the PID algorithm’s adaptability, several group control parameters are set in the design, and their control effects are given.

KEY WORDS:Multi-electric motor synchronism, PWM, C language, PID

2

目 录

前 言 .................................................................................................................................. 5 第一章 多电机同步控制方案及硬件电路 ...................................................................... 7

1.1 多电机同步控制结构 ........................................................................................ 7

1.1.1 并行控制 .................................................................................................. 7 1.1.2 主从控制 .................................................................................................... 8 1.2 PWM调速原理与发展概况 ................................................................................ 8 1.3 直流电机驱动电路 ......................................................................................... 10 1.4 速度检测电路 ................................................................................................. 13 1.5 控制器 ............................................................................................................. 14 1.6 通信模块 ........................................................................................................... 15 第二章 PID控制方法 ..................................................................................................... 17

2.1 PID控制方法介绍 .......................................................................................... 17 2.2 数字式增量PID控制算法 ............................................................................. 18 2.3 标准PID算法的改进 ..................................................................................... 20 2.4 干扰的抑制 ...................................................................................................... 20 2.5 PID调节器的参数整定 .................................................................................. 21

2.5.1 采样周期的选定 .................................................................................... 21 2.5.2 PID参数的整定 ..................................................................................... 22

第三章 软件实现 ............................................................................................................ 23

3.1 C51语言 .......................................................................................................... 23 3.2 单片机片内的资源配置 ................................................................................. 24

3.2.1 单片机内各功能模块配置 .................................................................... 24 3.2.2 单片机的端口配置 ................................................................................ 25 3.3 程序模块介绍 ................................................................................................. 26

3.3.1 初始化模块 .......................................................................................... 26 3.3.2 测速子程序 .......................................................................................... 28 3.3.3 串口通信子程序 .................................................................................. 30 3.3.4 主程序 .................................................................................................. 32

3

3.4 程序调试 ......................................................................................................... 34 第四章 参数的整定结果 ................................................................................................ 37

4.1 高速段内的参数整定及结果 ........................................................................... 37 4.2中速段内的参数整定及结果 ............................................................................ 38 4.3低速段内的参数整定及结果 ............................................................................ 39 4.4 结果分析 ......................................................................................................... 40 结 论 ................................................................................................................................ 41 致 谢 .............................................................................................................................. 42 参考文献 .......................................................................................................................... 43 附录1 总程序 ........................................................................................................... 44

4

前 言

直流电机是最早出现的电机,也是最早能实现调速的电动机。由于它具有良好的线性调速特性,简单的控制性能,高的效率,优异的动态性能,直流电动机一直占据着调速控制的统治地位,是大多数调速控制电动机的最优选择。PWM是控制数字化的基础,用PWM技术控制直流电机方法简单,能实现宽范围内的速度和位置调整,如今已成为主流的直流电机调速方式。

多电机同步控制问题在工业生产中的许多场合已成为一个突出的难题。在多台电机驱动系统中,采用传统的机械长轴虽然能够准确地保持电机同步,但其缺点日益显著,如各电机的工作状态相互影响,彼此之间存在严重的耦合作用,通过链、齿轮、轴等多级链接机构后含有积累误差,使用范围也受到限制,某些场合已不能满足现代控制的需要。

采用电的方式控制多电机的同步是一种有效的解决手段,人们对这方面已作出了大量的研究。对多电机的同步控制结构有并行控制、主从控制、交叉耦合控制、虚拟总轴控制、偏差耦合控制等多种控制理论,控制方法除了常规的PID外,还有各种现代控制理论,包括神经网络、模糊控制、专家系统等,将它们与PID控制相结合更衍生出多种控制理论。

在本设计中以C8051F040单片机为控制器,设计了一个两台小功率低电压直流电机的主从式同步控制系统,设计任务是从电机能够跟踪主电机的实时速度,主电机的速度可以通过上位机设定,然后传给单片机去调节。设计的目的是尝试用改进的PID控制算法,用C语言编程去实现两台电机的速度同步,并达到一定的控制精度,简单地探讨一下实际应用中对多电机进行同步控制的基本方法。

PID控制是最早发展起来也是应用最广泛的控制规律之一,由于其原理简单、鲁棒性好和可靠性高,被广泛应用于工业过程控制,至今仍有90%左右的控制回路具有PID结构。但其不足之处是对非线性、不确定性系统的控制效果不理想。本设计采用了数字PID算法,为了提高控制精度,对于不同的速度段,整定了多组控制参数,以提高PID算法的自适应性。

软件设计中一个关键的任务是为电机的速度设定一个合适的控制参数,为了方便查看一组控制参数下的控制效果,我们通过中断程序运行,在调试环境下查看实时的电机

5

速度,多次查看并记录下这些数值。通过对这些数据的分析,反复的调整控制参数,直到满意为止。对最终控制结果的分析表明,主电机速度的调整精度和从电机跟踪的精度都能达到期望的水平。

6

第一章 多电机同步控制方案及硬件电路

本章主要对目前多电机同步的两种基本控制结构以及直流电机PWM调速的发展概况和原理做了一些介绍和分析,确定了本系统两台直流电机的主从式同步控制结构,给出了直流电机的驱动电路和速度反馈电路,并对控制器C8051F040单片机的优点作了介绍。

1.1 多电机同步控制结构

在工业生产中,传动控制是机械加工控制系统的基础。一个机械系统通常有多个轴需要传动控制,对这些轴的控制就是控制驱动轴的电动机。在这种传动系统中,目前存在的同步控制技术包括并行控制、主从控制、交叉耦合控制、虚拟总轴控制、偏差耦合控制。这里对并行控制和主从控制这两种基本的控制方式作一下简单的介绍和比较,并选择了主从式的双电机同步控制结构。

1.1.1 并行控制

并行控制是一种基于同一定值控制的并联运行方式,这是一种最简单的同步控制方法。并行式适用于每个单独系统的控制目标基本一致的情况,要求伺服系统具有良好的速度稳定性。调速系统采用同一给定电压,其控制结构图如图1.1所示。采用并行运行方式的同步控制系统其优点在于启动和停止阶段系统的同步性能很好,但是由于整个系统相当于开环控制,当运行过程中某一台电机受到扰动时,电机之间将会产生同步偏差,同步性能很差。

控制器 电机1 控制器 电机2

图1.1 并行控制系统结构图

7

1.1.2 主从控制

主从控制是一种基于跟踪随动原理的串联运行方式。以双电机为例,主从同步控制系统的结构图如图1.2所示。

在这种控制方式中,主电机的输出转速作为从电机的转速参考值。由此可推断,任何加在主电机上的速度命令或是负载扰动都会被从电机反映并且跟随,但是任何从电机上受到的扰动却不会反馈回给主电机,也不会影响到其他的从电机。

主从式特点是从系统跟踪主系统的输出,大大增加了其控制策略的稳定性,但存在跟踪滞后。这种控制方式要求伺服系统具有良好的跟踪性能,主要应用在对速度或者位置的同步精度不是很高的工业生产中。

控制器 电机1 控制器 电机2

图1.2 主从同步控制结构图

本系统设计的电机同步控制为了提高抗干扰能力,在一台电机速度受到外部扰动或人为干扰时两台电机仍能保持速度的同步,采用了带速度反馈的主从式的控制结构,一台电机作为主电机,一台为从电机,主电机的输出即转速作为从电机的输入,主电机的输入根据需要设置。为了提高主从电机的抗干扰能力以及从电机对主电机的跟踪精度,在设计中尽可能地改善了数字控制电路。

1.2 PWM调速原理与发展概况

目前用大功率晶体管控制的PWM永磁式直流伺服电动机驱动装置,是高精度伺服控

制领域应用最为广泛的驱动形式。这种装置能实现宽范围内的速度和位置控制,较常规的驱动方式,如晶体管线性放大驱动,电液驱动或晶闸管驱动,具有无可比拟的优点。随着大功率晶体管的容量和开关速度的不断提高。PWM装置一跃成为现代伺服驱动系统

8

的佼佼者,受到越来越多的控制工程师的重视。

国外于上世纪60年代已开始注意PWM伺服控制技术,起初用于飞行器中小功率伺服系统,70年代中后期较为广泛地应用在中等功率的直流伺服系统上,到了80年代,PWM驱动在直流伺服系统中的应用已经普及。现在从国外引进的高精度伺服系统大都采用PWM伺服系统,各工业先进国家竞相发展PWM伺服机构。

国内一些高校,研究所和工厂在上世纪70年代末相继开展了PWM系统的研究,在一定范围内达到了工业推广水平,应用于数控机床,精密机床的进给,机器人驱动装置及精密速度控制器中,也用于军用雷达天线驱动,火炮和导弹发射架驱动等快速跟踪高精度伺服系统中。但由于受到能制造的大功率晶体管的电流及电压等级的限制,国内仅能做到几十瓦到几十千瓦,电压达到220伏。

PWM驱动原理是就是直流斩波原理,利用大功率晶体管的开关特性来调制固定电压的直流电源。按一个固定的频率来接通和关断,并根据需要改变一个周期内“接通”和“断开”时间的长短,通过改变直流电动机电枢上的占空比来改变平均电压的大小,从而控制电机的转速。因此,这种装置又称为“开关驱动装置”。

PWM输出波形如图1.3所示,周期为T,一个周期内的导通时间为t,则加在电机两端的平均电压为:

U?Vcc*t/T?αVcc (1-1) 其中,α= t /T称为占空比,Vcc为电源电压,本电路中采用12伏。

图1.3 PWM原理图

直流电机的转速与电机两端电压成正比,而电机两端的平均电压与控制波形的占空比成正比,占空比越大,电机转得越快,当占空比为1时,加在电机两端的平均电压最大,电机转速也就最大。

9

1.3 直流电机驱动电路

直流电机PWM驱动电路使用最广泛的就是单极性H型桥式电路,这种驱动电路可以很方便地实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动这四种电机运行状态。

单极性H型桥式驱动电路结构图如图1.4所示,它由4个开关管和4个续流二极管组成,采用单电源供电。当电动机正转时,V1开关管根据PWM控制信号同步导通或关断,而V2开关管则受PWM反向控制信号控制,V3保持常闭,V4保持常开。当电动机反转时,V3开关管根据PWM控制信号同步导通或关断,而V4开关管则受PWM反相控制信号控制,V1保持常闭,V2保持常开。

图1.4 单极性H型桥式驱动电路

当电机在较大负载下正转时,电机两端平均电压U大于感应电动势E。在每个PWM周期的导通区间,V1导通,V2截止,电流经V1、V4从A到B流过电枢绕组。在每个PWM周期的关断区间,V2导通,V1截止,电源断开,在自感应电动势的作用下,经二极管VD2和开关管V4进行续流,使电枢中仍然有电流流过,方向是从A到B,这时,由于二极管VD2的箝位作用,V2实际不能导通。

当电动机在进行减速运行时,平均电压U小于感应电动势E。在每个PWM周期的导通区间,在感应电动势和自感应电动势的共同作用下,电流经二极管VD4、VD1流向电源,方向是从B到A,电动机处于再生制动状态。在每个PWM周期的关断区间,V2导通,V1截止,在感应电动势的作用下,经开关管V2和二极管VD4仍然是从B到A流过绕组,

M 10

电动机处于耗能制动状态。

当电动机轻载或空载运行时,平均电压U等于感应电动势E。在每个PWM周期的导通区间,V2截止,电流先经VD4、VD1流向电源,当减小到零后,V1导通接通电源,电流改变方向,沿V1、V4流动。在每个PWM周期的关断区间,V1截止,电流先是沿VD2、V4续流,当续流电流减小到零后,V2导通,在感应电动势的作用下,电流改变方向,沿开关管V2和二极管VD4流动。因此,在一个PWM周期中,电流交替呈现再生制动、电动、续流电动、耗能制动四种状态。

我们所用的驱动芯片是L298N。L298N是SGS公司的产品,内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的两台电机。且价格便宜,对本电路来说是经济合适之选。本设计中的硬件电路原理框图如图1.5所示。其中驱动部分的原理图如图1.6所示。

图1.5 系统硬件电路原理框图

11

图1.6 驱动电路原理图

图1.7 速度反馈电路

12

1.4 速度检测电路

测速元件是闭环调速系统中的关键元件,为了扩大调速范围,改善电动机的低速平稳性,要求测速元件低速输出稳定,波纹小,线性度好。常用的测速元件有模拟式测速元件和数字式测速元件。模拟式测速元件通常采用测速发电机;数字式测速元件采用光电式脉冲发生器。数字测速元件具有低惯量低噪声高分辨率和高精度的特点,有利于控制直流电机。在现代驱动控制系统中,为了提高速度反馈检测精度,正在摒弃直流测速发电机加A/D转换器的方案,而采用光电码盘直接数字测速的方案。

本系统采用增量式光电旋转编码器测量电机的速度。将光电编码器与电动机相连,当电动机转动时,带动码盘旋转,便发出相应的信号。光电编码器由光源,光电转盘,光敏元件和光电整形放大电路组成。光电转盘与被测轴连接,光源通过光电转盘的透光孔射到光敏元件上,当转盘转动时,光敏元件便发出与转速成正比的脉冲信号,为了判别电机的转向,光电编码器输出两路相隔90度电脉冲角度的正交脉冲。

利用光电编码器进行数字测速的常用方法有两种:M法和T法。

(1)M法测速:M法又叫定时计数法,是用计数器记取规定时间内光电编码器输出的脉冲个数来反映转速值,即在规定的时间间隔T内,测量编码器光栅所产生的脉冲数来获得被测的速度值。设编码器光栅每转一圈发出的脉冲数为Z,且在规定的时间T内,测得的脉冲数为M,则电机每分钟转数为:

n=60M/ZT

(1-2)

将转速实际值和测量值之差与实际值之比定义为测量误差率δ,δ反映了测速方法的准确性,δ越小,准确度越高。M法测速误差率取决于编码器的制造精度,以及编码器输出脉冲前沿和测速时间采样脉冲前沿不齐所造成的误差等,最多可以产生一个脉冲的误差。因此,M法测速误差率的最大值为:

60M60M(?1)?1ZT δ?ZT (1-3) ×100%?60MMZT由上式可知,误差率δ与M成反比,即脉冲数越大,误差越小,故M法测速适用于高速段。

(2)T法测速:T法又叫定数计时法,是用定时器记取光电编码器输出脉冲一个周期内的高频时基个数,然后取其倒数来反应速度值,即测量相邻两个脉冲的时间间隔来

13

确定被测速度。设编码器光栅每转一圈发出的脉冲数为Z,定时器的时基是一已知频率为F的高频脉冲,定时器的起始和终止由编码器光栅脉冲的两个相邻脉冲的起始沿控制。若定时器的读数为M,则电机每分钟的转速为:

n?60F/ZM (1-4)

T法测速的误差产生原因与M法相仿,定时器的计数M最多存在一个脉冲的误差,因此,T法测速误差率的最大值为:

60F6F0?1Z(M?1)ZM (1-5) δ=×100%=60FM?1ZM低速时,编码器相邻脉冲间隔时间长,测得的高频脉冲个数多,误差小,故T法适用于低速段。

我们采用M法测速。所采用的光电编码器光栅每转一圈发出1000个脉冲。设电机工作在额定转速下,即n=500转/分,则在0.1秒的采样间隔内,计数器所应接受到的标准脉冲个数为M=500/60*0.1*1000=833个,可以看出,精度还是较高的。

本设计中速度反馈回路的原理图如图1.7所示。

1.5 控制器

本设计选用手头上的C8051F040单片机为系统的控制器,C8051F040单片机执行效率高,片上可利用资源丰富,为以后系统功能的扩展留有余地。

Silicon Laboratories公司出品的C8051F系单片机是完全集成的混合信号系统级芯片(SOC),具有与MCS-51完全兼容的指令内核。该系单片机采用全新的CIP-51内核,采用流水线处理技术,不再区分时钟周期和机器周期,能在执行指令期间预处理下一条指令,提高了指令执行效率。C8051F040单片机是该系中功能最全最具代表性的一款。具有控制系统所需的所有的模拟和数字外设。 其主要特性如下:

(1)片内看门狗、定时器、VDD监视器和温度传感器; (2) 一个12位、100ksps和一个8位、500ksps的A/D转换器; (3) 两个12位D/A转换器;

(4)4K字节的片内RAM和64KB可在系统编程的FLASH存储器; (5) 5个通用的16位定时器;

14

(6)具有6个捕捉/比较模块的可编程计数器/定时器阵列; (7)硬件实现的SPI、SMBUS和两个UART串行接口; (8)控制器局域网(CAN2.0)控制器, 具有32个消息对象; (9)全速、非侵入式的在线调试接口;

(10)引入交叉开关配置,可灵活地将外围设备配置到P0~P3口。

C8051F040单片机是真正能独立工作的片上系统(SOC)。除具有标准8051的端口外,C8051F040还有4个附加的8位端口,每个端口都可以配置为推挽输出或开路输出。最独特的改进就是引入了数字交叉开关,允许将内部数字资源映射到P0口,P1口,P2口,P3口,这一特性允许用户根据自己的特定应用选择通用端口和所需数字资源的组合。其MCU能有效地管理模拟和数字外设,可以关闭单个或全部外设,所以其功耗很低。

片内JTAG调试支持功能允许对安装在最终应用系统上的产品MCU进行非侵入式(不占用片内资源)、全速、在系统调试。在系统调试比采用标准MCU仿真器要优越的多,因为这一技术能保证精确模拟外设的性能。该调试系统支持观察和修改存储器和寄存器,支持断点,单步,观察点,运行和停机命令。在使用JTAG调试时,所有的模拟和数字外设都可全功能运行,当MCU单步执行或遇到断点而停止运行时,所有的外设都停止运行,以保持同步。

FLASH编程非常方便,可以在Silicon Labs集成开发环境(IDE)下通过JTAG接口进行编程,不需要专用编程器或适配器。每个MCU都可在工业温度范围(-45到+80度)内用2.7~3.6V的电压工作,端口I/O、RST、JTAG引脚都容许5V的输入信号电压。

正是由于这些优点以及极高的模拟和数字集成度,对各种要求小体积,高集成度精确测量的场合而言,C8051F040实为理想选择。

1.6 通信模块

本设计中为了能够人为的设定电机的转速及观察两个电机的实时速度,采用了RS232串行通信方式实现计算机与单片机的通信,通过计算机的操作界面可以很方便地完成这些任务。利用C8051F040单片机内部集成的UART控制器,很容易进行串行通信。

计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯两种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多

15

条线路特性的不一致而被广泛采用。在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号电平和信号内容加以规定。

在RS-232-C中任何一条信号线的电压均为负逻辑关系:逻辑“1”的电平是-5~-15V,逻辑“0”的电平是+5~+15V。噪声容限为2V,即要求接收器能识别低至+3V的信号作为逻辑“0”,高至-3V的信号作为逻辑“1”。

实际上,RS-232-C的25条引线中有很多是很少使用的,在计算机与终端通讯中一般只使用常用的3~9条引线。

PC机上的RS-232串行接口有两个COM1和COM2,一般都是9针的接头,这个接头为公接头。由于RS-232电平和单片机内TTL逻辑电路产生的电平是不一样的,因此,PC机与单片机之间必须经过一定的电路转换逻辑电平。

单片机C8051F040内部有两个增强型全双工UART,一个增强型SPI总线和SMBUS协议,这些串行总线都完全用硬件实现,都能向微处理器申请中断,因此需要很少CPU的干预。我们采用UART0与上位机通信。

16

第二章 PID控制方法

本章分析了PID的控制规律,推出了数字式增量PID控制算法,介绍了两种克服积分饱和的方法以及抑制干扰的措施。重点介绍了PID控制参数的实用的整定方法。

2.1 PID控制方法介绍

PID控制是迄今为止最通用的控制策略,有许多不同的方法以确定合适的控制器参数,根据现代理论的观点,PID调节器具有本质的鲁棒性、符合二次型最优控制选型原则、且具有智能化的专家特色。PID调节器及其改进型是在工业过程控制中最常见的控制器。

PID控制是比例积分微分控制的简称,本身是一种基于对“过去”、“现在”和“未来”信息估计的控制算法,最早出现在模拟控制系统中,通过硬件(电子元件,气动和液压元件)来实现。

控制器系统原理图如图2.1所示。

过 去 现 在 对 象 未 来

图2.1 模拟PID控制系统原理图

PID的三种控制规律可以组成不同的线性控制器。在电力传动控制系统中,常采用的串联校正控制装置有比例微分(PD)控制器、比例积分(PI)控制器及比例积分微分(PID)控制器。由PD控制器构成的超前校正可以提高稳定裕度并获得足够的快速性,但稳态精度可能受到影响;由PI控制器构成的滞后校正,可以保证稳态精度,但快速性不佳;用PID控制器实现的滞后-超前校正兼有二者的优点,可以全面提高系统的控制性能。

17

连续控制系统中的模拟PID控制规律为:

1t? u(t)?K?p(e?)t?Ti0?(e)?tdtde(t?) (2-1) Tddt??式中, u ( t ) 控制器的输出 e ( t ) 控制量的偏差 Kp 比例系数 Ti 积分时间常数 Td 微分时间常数 (1) 比例环节

比例环节对偏差是即时反应的,偏差一旦出现,调节器立即产生控制作用,使输出量朝减小偏差的方向变化,控制作用的强弱取决于比例系数Kp。比例调节器虽然简单快速,但对于系统响应为有限值的控制对象存在静差。加大比例系数Kp可以减小静差,但过大会使系统的动态质量变坏,引起输出量震荡,甚至导致系统不稳定。

(2) 积分环节

为了消除在比例调节中的残余静差,可在比例调节的基础上加入积分调节。积分调节具有累积成分,只要偏差e不为零,它将通过累积作用影响控制量u,从而减小偏差,直到偏差为零。如果积分时间常数Ti大,则积分作用弱,反之为强。增大Ti将减慢消除静差的过程,但可减小超调,提高稳定性。引入积分环节的代价是降低系统的快速性。 (3) 微分环节

为了加快控制过程,有必要在偏差出现或变化的瞬间,按偏差变化的趋势进行控制,使偏差消灭在萌芽状态,这就是微分调节的原理。微分作用的加入将有助于减小超调,克服震荡,使系统趋于稳定,特别对高阶系统非常有利,它加快了系统的跟踪速度,但对噪声非常敏感,使用前需要对输入信号进行滤波。

2.2 数字式增量PID控制算法

计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此,连续PID控制算法不能直接使用,需要采用离散化方法,根据采样时刻的偏差值计算控制量,离散化得:

18

??TkTd u(k)?Kp?e(k)??e(j)??e(k)?e(k?1)?? (2-2)

Tij?0T??式中 k为采样序号,k=0,1,2,3…

如果采样周期足够小,这种离散逼近相当精确。式中u(k)为全量输出,它对应于被控对象的执行机构第k次采样时刻应达到的位置。因此,上式称为PID位置型控制算式。

可以看出,按PID位置型控制算式计算u(k)时,输出值与过去所有状态有关。当执行机构需要的不是控制量的绝对数值,而是其增量时(如步进电机的驱动),可导出下式:

?u(?k 1 ?u(k)?u(k) )

? ?Kp?(ek)??T(e?k1?)TiTde(?k)?T ) ?e(k)?2e(?k1?)e( k 2????TTd2TdTd?? ?Kp?(1??)e(k?)?(1e)?k(?1)e?k?( 2 )

TiTTT???Kp?A1e(k)?A2e(k?1)?A3e(k?2)? (2-3)

TTd? TiT2Td? A2??(1 )TTd A3?

T其中, A1?1?此式称为增量型PID控制算式,增量型PID控制算式具有以下优点:

1. 计算机只输出控制增量,即执行机构位置的变化部分,因而误动作影响小。 2. 在k时刻的输出u(k),只需要用到此时刻的偏差,及前两次的偏差和前一次的输出值,这大大节约了内存的计算时间。

3. 在手动-自动切换时,控制量冲击小,能够较平滑地过渡。 位置式控制算法可通过增量式控制算法推出递推计算公式:

?u(?k 1) u(k)??u(k) ?u(k?1)?K?pA1e(k)?A2e(?k1)?A3e??( k 2 ) (2-4)

这就是目前在计算机控制中广泛应用的数字递推PID控制算式。

19

2.3 标准PID算法的改进

在实际过程中,控制变量因受到执行元件机械和物理性能的约束而限制在有限范围内,即Umin

若给定值w从0突变到w0,且根据PID位置算法算出的控制量超出限制范围,那么实际上控制量只能取上界值Umax,而不是计算值。此时系统输出y虽不断上升,但由于控制量受到限制,其增长要比没有限制时慢。偏差e将比正常情况下持续更长的时间保持在正值,而使PID位置算式中的积分项有较大的累积值。当输出超过给定值w0后,开始出现负偏差,但由于积分项的累积值很大,还要经过相当一段时间后控制变量u才能脱离饱和区,这样,就使系统出现了明显的超调。

显然,在PID位置算法中“饱和作用”主要是由积分项引起的,故称为”积分饱和”。克服积分饱和的方法有:

1.遇限削弱积分法。这一修正算法的基本思想是,一旦控制变量进入饱和区,将只执行削弱积分项的运算而停止进行增大积分项的运算。具体说,在计算ui时,将判断上一时刻的控制量ui-1是否已超出限制范围,如果已超出,那么将根据偏差的符号,判断系统输出是否在超调区域,由此决定是否将相应偏差计入积分项。

2.积分分离法。减小积分饱和的关键在于不能使积分项累积过大。上面的方法是一开始就积分,但进入限制范围后即停止累积。积分分离法与其相反,它在开始时不积分,直到偏差达到一定阀值后才进行积分累积。这样,一方面防止一开始有过大的控制量,另一方面即使进入饱和后,因积分累积小,也能较快退出,减少了超调。

2.4 干扰的抑制

PID控制算法的输入量是偏差e,也就是给定值与系统输出的差。在进入正常调节后,由于输出已接近给定,e的值不会太大。所以相对而言,干扰对调节有较大的影响,除了从系统硬件及环境方面采取措施外,在控制算法上也可采取一定的措施,以抑制干扰的影响。

20

对于作用时间较为短暂的快速干扰,例如采样器,A/D转换器的偶然出错等,我们可以简单地采用连续多次采样求平均值的办法予以滤除。例如围绕着采样时刻ti连续采样N次,可得到ei1、ei2、… 、eiN。由于快速干扰往往比较强烈,只要有一个采样数据受到快速随机干扰,即使对它们求平均值,干扰的影响也会反映出来。因此,应剔除其中的最大最小值,对其余的N-2次采样求平均值。由于在N次中连续偶然出错的可能很小,故这样做已足以消除这类快速随机干扰的影响。

2.5 PID调节器的参数整定

PID调节器的设计一般来说可分为两个部分,首先是选择调节器的结构,以保证闭环系统的稳定,并尽可能消除稳态误差。如要求系统稳态误差为零,则应选择包含积分环节的调节器如PI,PID等。对于有滞后性质的对象,往往引入微分环节等。另外,根据对象和对控制性能的要求,还可采用一些改进的PID算法。一旦调节器的结构确定下来,下一步的任务就是调节器参数的整定。

2.5.1 采样周期的选定

进行数字PID控制器参数整定时,首先应该解决的一个问题是确定合理的采样周期T。采样周期T必须足够短,才能保证有足够的精度。但采样周期短则会加重计算机的任务,影响工作效率,因此应合理选择采样周期。

采样周期T应远远小于系统中其它的时间常数,否则可能会由于采样的频带宽度不够而无法反映系统的动态过程。一般来说,采样周期T的最大值受系统稳定性条件和香农采样定理的限制而不能太大。T的最小值则受到计算机在一个采样周期内能完成的计算工作量的限制,实际中常选2PAI/T为系统有用信号最高频率的4~10倍。系统的给定频率较高时,采样周期T相应减少,以使给定的变化得到反映。采样周期还与所采用的控制算法和执行机构的类型有关。当采用数字PID控制算法时,积分作用和微分作用都与采样周期有关。选择T太小时,e(k)变化就很小,积分和微分作用将都不明显。此外,通常执行机构惯性较大,采样周期T应能与之相适应。如果系统的干扰是高频的,则要适当的选择采样周期,使得干扰信号的频率处入采样器频带之外,从而使系统具有足够的抗干扰能力。如果干扰是频率已知低频干扰,为了能够采用滤波的方法排除干扰信号,采样频率应该与干扰信号的频率成整数倍的关系。

21

2.5.2 PID参数的整定

采样周期T通常远远小于系统的时间常数,因此,PID参数的整定可以按模拟调节器的方法来进行。参数整定通常有两种:理论设计法和实验确定法。前者需要有被控对象的精确模型,然后采用最优化的方法确定PID的各参数。被控对象的模型可通过物理建模或系统辨识方法得到,但这样通常只能得到近似的模型。因此,通过实验确定法(如试凑法,工程整定法)来选择PID参数是经常采用又行之有效的方法。本方案采用了试

凑法。试凑前先要知道PID各调节参数对系统响应的影响。

试凑法是通过计算机仿真或实际运行,观察系统对典型输入作用的响应曲线,根据各调节参数(Kp,Ti,Td)对系统的影响,反复调节试凑,直到满意为止,从而确定PID参数。

增大比例系数Kp将加快系统响应并减小系统稳态误差,但过大会产生较大的超调量,产生震荡,破坏系统的稳定性。

增大积分时间常数Ti可使减小超调,提高系统稳定性,但系统误差的消除将随之变慢。

增大微分时间常数Td可加速系统的响应,使超调量减小,增加系统的稳定性,但系统抗干扰能力下降。

试凑时,可参考以上参数对控制系统性能的影响趋势,实行先比例,后积分,再微分的反复调整。

(1)首先只调比例系数,将Kp由小到大,使响应曲线略有超调。此时系统若无稳态误差或稳态误差已小到允许范围内,并且认为响应曲线已属满意,那么,只须用比例调节器即可。

(2)若在比例调节的基础上,系统稳态误差太大,则必须加入积分环节。整定时先将第一步所整定的比例系数略为缩小(如0.8倍),再将积分时间常数Ti置为一较大值并连续减小,使得在保持良好动态性能的前提下消除稳态误差。这一步可反复进行。

(3)若使用PI调节器消除了稳态误差,但系统动态响应经反复调整后仍不能令人满意,则加入微分环节,构成PID控制器。在整定时先将微分时间常数Td设定为零,再逐步增加Td并同时进行前面两步的调整,以获得满意的调节效果和控制参数。

需要指出,PID调节器的参数对控制系统性能的影响通常并不十分敏感,参数整定结果可以不唯一。

22

第三章 软件实现

本章是整个设计中的重点,电机的同步需要一个合理的数字控制器来实现,就要将前面介绍的PID控制算法用软件来实现。以下首先介绍了用C51语言给单片机编程的优点,接着对所用到的单片机内部资源作了介绍,这是编程过程中前期要做的工作。对主体程序各模块子程序的功能以及设计思想作了描述。调试是程序设计中一个重要的组成部分,用C语言给单片机编程序,且单片机功能相对也比较多,程序是在多次调试中完善的。具体程序部分见附录2。

3.1 C51语言

在单片机的开发和应用中,汇编语言曾是单片机工程师进行软件开发的惟一选择。汇编是一种面向机器的程序语言,可以直接控制硬件,指令执行速度快,效率很高。但其语言形式晦涩,可读性差,难于编写和调试,也不便于移植。目前,C语言已渐成为国内外开发单片机的主流语言。C语言是一种通用的编译型结构化程序设计语言,兼顾了多种高级语言的特点,并具备汇编语言的功能。它支持当前程序设计中广泛采用的由顶向下的结构化程序设计方法。一般的高级语言难以实现汇编语言对于计算机硬件直接进行操作的功能,而C语言既有一般高级语言的特点,又能直接对硬件进行操作。C语言有功能丰富的库函数,运行速度快,编译效率高,并且便于在不同类型计算机之间进行移植。因此,C语言应用范围广,是单片机开发和应用的必然趋势。

C语言在单片机开发中有以下突出优点:

1.语言简洁,使用方便灵活。C语言是现有程序设计语言中规模最小的语言之一,关键字少,ANSI C标准一共只有32个关键字,9种控制语句。C语言书写形式自由,表达方式简洁,使用一些简单的方法就可以构造出相当复杂的数据类型和程序结构。

2.可移植性好,不同公司开发的C语言都必须符合ANSI C的标准真正存在差异的是非ANSI C的扩展部分。

3.表达能力强。C语言具有丰富的数据结构类型来实现各种复杂数据结构的运算,C还具有多种运算符,增强了程序处理能力。对于直接与单片机相关的中断服务程序的现场保护和恢复,中断向量表的填写问题,都由C编译器代办。

4.可进行结构化程序设计。C以函数作为程序基本设计单元,一个函数即相当于一个程序模块。

23

5.可直接操作计算机硬件。C语言可直接访问片内外存储器,还可进行位操作,提供auto、static、register、const等和data、idata、pdata、xdata、code等存储类,自动为变量合理分配地址。针对8051的派生芯片,还提供等small、compact、large编译模式以适应存储器的大小。

3.2 单片机片内的资源配置 3.2.1 单片机内各功能模块配置

程序设计中所需要的单片机内部各功能模块如表3.1,包括5个定时计数器,PCA0以及串口控制器UART0。其中,Timer0和Timer1与传统MCS-51的设计是一样的,可按传统51用法使用,这里就不介绍了,具体工作方式见初始化程序模块。T2、T3和T4是增强型16位自重载和捕捉定时/计数器,可用作定时ADC采样、DAC波形生成、方波输出和通常用途。PCA0为可编程计数器阵列,提供了增强型计数器功能,使得MPU软件干预更少,更易于信号生成和处理。UART0为增强型串行通信总线,C8051F040的UART0与传统MSC-51的相比增加了帧错误检验和通讯地址识别功能。以下具体地对这些功能模块作一些介绍。

表3.1 单片机内部功能模块使用情况说明表

Timer0:PCA0定时/计数器时基 定时器 PCA0 UART0 Timer2:计主电机的速度脉冲 PCA0:产生主电机PWM波 Timer1:UART0使用 Timer3:计从电机的速度脉冲 PCA1:产生从电机PWM波 Timer4:25ms定时器,循环4次构成采样时间和计算时间 单片机与上位机串行通信控制器 T2、T3和T4的功能是相同的,不能作为8位定时/计数器,只能工作在16位模式下,可自动重载、捕捉和产生50%占空比的频率可调脉冲方波,且可以控制计数的方向。它们的时钟源可以是系统时钟及其分频、外部时钟或它们输入引脚的脉冲。这些都是通过特殊功能寄存器TMRnCN和TMRnCF设置的。双向计数模式对电机速度控制很方便,可计电机的正反转。捕捉模式常用来测量脉宽。方波输出模式可产生50%占空比的频率可调脉冲方波。

PCA0提供了一个16位定时/计数器和6个捕捉/比较模块。每个捕捉/比较模块都有独立的I./O口,可通过交叉开关配置到CEXn。PCA定时/计数器时钟源可为系统时钟、系统时钟4分频、系统时钟12分频、外部时钟8分频、T0溢出和ECI。ECI可配置到P口上,作为PCA时钟的一个扩展。6个模块共用一个时钟,可分别独立工作在以下6

24

中模式:①边沿触发捕捉;②软件定时;③高速输出;④频率输出;⑤8位PWM脉宽调制;⑥16位PWM脉宽调制。其中在8位PWM脉宽调制模式下的输出波形频率为PCA时钟频率的256分频,8位PWM占空比公式为:

256?PCACPHn0 DutyCycle? (3-1)

256此时,只要将PCA0开启,为PCA配置一个时钟源,将相应模块设在8为PWM模式下,并将PWM输出开启,再将该模块配置到一个I/O口上,则不再需要处理器的干预,PCA会自动地向外端口输出PWM波,只有当需要改变占空比的时候,修改一下该模块的捕捉比较寄存器PCA0CPHn即可。

UART0有同步(半双工)和异步(全双工)模式,同步模式下MPU只能处于主机模式,无法作为从机模式,因此,双MPU不能直接通信。同步模式常用来作为移位寄存器的接口。异步模式有三种,这里仅介绍模式1。

模式1为标准的异步全双工通信,用10位表示一字节信息:1个起始位、1个停止位和8位数据信息。数据由TX0发送,RX0接收,总线上不带时钟,靠主从机预先指定的波特率进行通信。向SBUF0写数据即启动UART0发送数据,当数据帧停止位发送完毕,TI0自动置1。接收数据时当接收到停止位时将数据载入SBUF0,同时将RI0自动置1。模式1波特率时钟靠定时器溢出产生,系统可根据需要选择T1~T4之间的任一个定时器作为UART0波特率发生器。其中,T1作为波特率发生器时工作在8位自动重载模式下。波特率计算公式如下:

2SMODBAUDRATE??FT1 (3-2)

323.2.2 单片机的端口配置

单片机的外部输入输出端口配置如表3.2。C8051F040单片机由于体积小,不可能把每一个功能都设计成一个关口,而是采用交叉开关的设计方法,通过优先级解码,将各个功能按优先级顺序配置到P0~P3口上。P0~P3口既可作为普通通用输入/输出口,又可作为特殊功能口,比如UART、PWM、定时器输入输出口及外部事件中断等,由交叉开关寄存器XBR0,XBR1,XBR2和XBR3配置决定。优先级高的模块会自动分配到前面的端口上。大部分被交叉开关配置的端口其输出模式仍受PnMDOUT控制,有推挽和开漏两种输出模式。

25

表3.2. 单片机I/O端口配置表

资源 P0.0:TX0发送数据端 I/O管脚 P0.2:CEX0,PWM0输出 P0.4:T2主电机速度脉冲输入 分配 P0.1:RX0接收数据端 P0.3:CEX1,PWM1输出 P0.5:T3从电机速度脉冲输入 3.3 程序模块介绍

软件是控制器的灵魂,在数字控制系统中,主从式控制结构以及PID控制算法都要有相应的软件才能够实现。在本设计中,软件需要完成以下任务:(1)各功能模块初始化;(2)测量并计算主从电机速度;(3)按偏差信号进行PID计算,得出主从电机的控制量并依次改变两路PWM的占空比;(4)建立与上位PC机的通信,能按上位机的命令调整主电机的速度设定值并反馈主从电机实际速度值。因此,总的程序可分为以下程序段:①初始化模块;②测速子程序;③串口通信子程序;④主程序。下面分别予以介绍。

3.3.1 初始化模块

初始化子程序段是通过在主程序中调用来完成初始化功能的。由于本系统使用的是片上系统(SOC)单片机,与其他类型的单片机相比,其内部有着更多的数字资源,工作方式多样,对所用到的内部资源必须一一进行初始化以保证正常工作,所以初始化是非常重要的一环。初始化流程图如图3.1所示。 各数字模块设置的工作方式如下:

(1)端口配置情况如表2。其中P0.0口,P0.2口和P0.3口均设为推挽输出,P0.1口、P0.4口和P0.5口均设为开漏输出。系统时钟采用内部晶振1分频,即24.5MHZ,精度高达±2%;

(2)PCA定时/计数器时钟源采用T0溢出率,模块CEX0、CEX1工作8位PWM输出模式下,在本设计中,控制直流电机的两路PWM波频率设在1KHZ;

(3)UART0工作在模式1下,即为标准异步全双工通信,其波特率时钟为Timer1溢出率的16分频,采用115200HZ。当接收中断标志位RI=1或发送中断标志位TI=1时,程序进入UART0中断执行接收或发送数据的指令;

(4)Timer0工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T0的溢出率作为PWM0和PWM1的时基,

24500000?160?0XA0 (3-3) TH0?256?256?1000

26

开 始 端口配置和晶振设置 PCA0初始化 UART0初始化 定时器0初始化 定时器1初始化 定时器2初始化 定时器3初始化 定时器4初始化 图3.1 初始化流程图

(5)Timer1工作在定时器模式2下即8位自动重载模式下,以系统时钟作为自己的时钟源,在程序中T1作为UART0的波特率发生器,

24500000?243?0XF3 (3-4) TH1?256?115200?16(6)Timer2工作在计数模式下,通过查询可得到与主电机相连接的光电编码器在25ms内发出的脉冲数;

(7)Timer3工作方式与 Timer2相同,计量从电机的速度脉冲;

(8)Timer4工作在自动重载定时方式下,以系统时钟的12分频作为自己的时钟源,定时25ms, 定时时间一到发出中断信号,程序开始响应T4中断。

24500000?0X389E (3-5) RCAP4?0XFFFF?12?40 27

3.3.2 测速子程序

测速子程序是通过调用Timer4中断来完成的。Timer4中断子程序流程图如图3.2所示。

T4循环定时,定时时间是25ms,作为速度采样的基本周期。T4定时时间一到,程序就进入中断,分别读取一次主从电机的速度。在T4中断子程序中,变量i作为T4定时循环标志,当循环4次达到0.1秒,变量j被置1,变量j是主程序运算标志,当j等于1时,主程序进入if语句进行一次控制计算。因此,本程序的控制周期为0.1秒。电机的速度是每25ms采样一次,在0.1秒内,每个电机的速度脉冲都计了4次,分别依次保存在两个4维数组CS1[]和CS2[]中,4个数值相加就是0.1秒内电机的实测脉冲数。本程序在计算中采用了一定的抗干扰措施,即舍去四个脉冲数据中的最大最小值,由剩余两数相加乘2作为整个时间段(0.1s)内应计的脉冲个数,这能很好地克服瞬时性的干扰。

值得说明的是,主从电机在0.1秒内所计的速度脉冲数值cesu1和cesu2,它与电机以分钟为单位的实际转速是不同的,它们之间成一个正比的关系,设主从电机的实际速度分别是speed1和speed2,它们之间的换算关系如下:

3 speed1?cesu1? (3-6)

53 speed2?cesu2? (3-7)

5由于本设计中所采用的直流电机额定速度达到500转/分,已经超出了一个字节的范围,用这个数值进行偏差计算仍然需要定义一个16位的整形变量来表示,并不能简化计算量。在500转/分的额定转速下能测到的脉冲个数能达到834,输出控制量是8位PWM的占空比,其范围是0到255,为了提高控制精度,在计算主电机速度偏差时采用了测量脉冲数,这就要求将主电机的设定速度转化成0.1秒下单片机应计的标准脉冲个数shd进行偏差计算。例如要求电机的转速为shj,

其转化公式为:

5 shd?shj? (3-8)

3 28

开始 i 自加1 将T2计数值存入数组 CS1并将T2清0 将T3计数值存入数组 CS2并将T3清0 TF4清0 i>=4 选出CS1中最大最小值 计算cesu1 选出CS2中最大最小值 计算cesu2 将i清0,j置1 中断返回

图3.2 测速子程序流程图

29

3.3.3 串口通信子程序

与上位PC机通信是通过UART0中断子程序中完成的。UART0通信可用查询TI0和RI0或通过中断来控制通信,这里采用了中断的方式。该子程序包括两部分功能:一是接收由上位机给出的主电机速度设定值,并根据设定值选择相应的控制参数;一是将主从电机的实际速度传给上位机。其程序流程图如图3.3所示。

串口中断有两个中断标志位,分别是接收中断标志位RI和发送中断标志位TI,因此在程序中需要对它们进行判断。当RI等于1时,说明收到一个8位数据,执行一次读SBUF0的指令,把数据保存在数组js[]中,并将RI清0;当TI等于1时,说明发送完一个8位数据,可以接着继续发送数据,也可以不发,在中断中将TI清0,向SBUF0写数据就自动启动UART0发送数据。

在串口通信中断程序中,规定单片机一次连续接收3个8位数据,保存在三维数组js[]中,第一个数据是主电机速度给定值16进制的高8位,第二个是其低8位,第三个数据是控制位,当第三个数据为1时才开始更新主电机的速度设定值,并判断这个设定的速度所处的速度段,选择控制参数Kp、Ti和Td。当第三个数据为0时不改变主电机速度设定值,此时开始上传主从电机实际速度。规定一次连续上传6 个8位数据,在程序中即为6维字符型数组fs[],其中第一位数据是主电机实际速度16进制形式的低8位,第二位数据是其高8位,第三位数据是0,第四位数据是从电机实际速度16进制形式的低8位,第五位数据是其高8位,第六位数据是0。

因此,在上位机的操作界面上,发送数据的格式要与之对应。一次性发三个数据,假设要求主电机的速度为shj,当Shj大于255时,则发送的第一个数据为1,第二个数据为(shj-256),第三个数据为1;当shj小于255时,则发送的第一个数据为0,第二个数据为shj,第三个数据为1。

30

开始 RI=1 将数据存入数组js 接收完毕 js[2]=1 修改主电机设定速度shd js[2]=0 开始上传主从电机实际速度 RI清0 TI=1 发送主从电机实际速度 TI清0 中断返回

图3.3 与上位机通信子程序流程图

31

3.3.4 主程序

PID控制算法是在主程序中完成的。在主程序中不断地以0.1秒的周期循环计算控制量,即主从电机PWM的占空比,通过改变占空比来调节电机的速度。其流程图如图3.4所示。

j作为主程序的循环标志,每当Timer4循环4次计时0.1秒时在T4中断中被置1,在主程序中进入if语句执行一次控制算法,并被清0。下一次主程序循环过来时if语句就不会再执行了,直到过了0.1秒后j再次被置1,这样就保证了0.1秒内只计算一次。

在主程序的初始化阶段,为主电机设定了一个300转/分钟的转速,即shj=300,并设置了一组控制参数,若要改变电机的速度,可通过UART0通信接口在上位机界面上修改。

在主程序中,主电机的设定速度转化成的标准脉冲数减去其实测脉冲数,其结果作为当前时刻主电机的速度偏差值,从电机把主电机的实测脉冲数作为自己的设定速度值,用其减去从电机的实测脉冲数,结果作为其当前时刻的速度偏差值,以实现跟踪主电机。

改进的PID算法采用了遇限削弱积分法和积分分离法。主电机积分饱和的条件为:e13>300或u1=255且e13>0, 即当主电机速度偏差达到300或主电机控制量已达到上限且偏差为正时,除去主电机控制算法中的积分项。从电机积分饱和的条件为:e23>300或u2=255且e23>0,即当从电机速度偏差达到200或从电机控制量已达到上限且偏差为正时,除去从电机控制算法中的积分项。

为了避免主从电机稳定情况下频繁地修改控制量并减小计算工作量,主程序采用了带死区的控制算法,当主从电机的速度偏差满足以下条件|ei3|<2且|ei3-ei2|<2时,认为主从电机速度处在稳定域内,不执行修改控制量的指令。

32

开 始 主电机速度初始值设定 控制参数初始设置 J=1 计算主电机近三次速度偏差 计算从电机近三次速度偏差 主电机积分饱和 K1=0去除主电机积分项 从电机积分饱和 K2=0去除从电机积分项 主电机偏差稳定域内 计算主电机控制量u1 从电机偏差稳定域内 计算从电机控制量u2

图3.4 主程序流程图

33

3.4 程序调试

程序的编辑及调试是在C8051F单片机的专用配套集成开发环境(IDE)中完成的,IDE支持硬件环境下的调试。IDE支持运行,停止,断点,查看等操作,十分方便。本程序是在硬件环境下进行调试的。IDE操作界面如图3.5所示。

调试是程序设计中非常重要的一环。程序设计是一项系统的工程,要做到一次性正确是困难的,一经调试,总会发现这样那样的错误。在程序调试时,首先要保证硬件接线正确,因为我们是在硬件环境下进行调试的。

程序是在一边编写一边调试中完成的。我们先编写了初始化段、测速段和主程序,这是一个完整的控制程序,调试无误后,又编写了串口通信程序,这是一个相对独立的程序段。在程序排错时,最有效的方法是模块化的调试排错方法。先按最小单元一个模块一个模块的调试,无误后,再按一个功能一个功能模块的调试。

图3.5 IDE编辑和调试环境

34

需要说明的是,上位机上的通信界面我们采用的是串口调试精灵。它是一个仿真串口通信软件。用它能够实现PC机与单片机的通信。其操作界面如图3.6所示。

图3.6 串口调试精灵调试界面

调试通信程序的时候,在串口调试精灵界面上先将串口设置为如图3.6中的参数,波特率为115200,接收和发送数据都采用16进制,再将串口打开。在主程序中设定速度初始化为每分钟300转。若要改为每分钟200转,则在串口调试精灵中的发送数据区输入以下三个数据:00,c8,01,十六进制数c8即是十进制数200,在主程序运行的情况下按一下手动发送即可,发送后电机的速度马上调整。发送结果可在IDE中查询,如图3.7所示。

35

图3.7 设定速度为200时的一组控制结果

图3.8 设定速度为300时的一组控制结果

36

第四章 参数的整定结果

在IDE中,能在进行中断或停止操作后,实时地查询主从电机的实测速度,实时速度偏差及控制量的大小,我们可据此调整主从电机的控制参数,直到满意为止。其查询界面如图3.7、3.8所示。

从电机要精确地跟踪主电机稳定地工作在设定速度上,且速度的响应过程,稳态误差,超调量等指标都能达到良好的性能,关键是对控制参数Kp、Ti、Td的整定。由于在不同的设定速度下,同一组参数难以取得理想的控制效果,因此,本程序将速度调整范围大致分了三个数据段,分别为:低于120转/分的低速段,120转/分到250转/分的中速段,高于250转/分的高速段,在各个速度段内,分别选出100转/分、200转/分、300转/分作为各个段内调整控制参数的设定速度,把这个控制参数作为整个速度段内的控制参数。

4.1 高速段内的参数整定及结果

转速要求达到每分钟250转以上时,参数整定结果如下: T1=T2=8, Ti1=Ti2=32, Td1=2, Td2=1, Kp1=Kp2=0.3

其中,T1,T2为分别主从电机的采样控制周期,Ti1,Ti2分别为主从电机调整的积分时间常数,Td1,Td2分别为主从电机调整的微分时间常数。

在本程序中采样控制周期T1、T2为100ms,为了计算简便,将其与Ti1、Ti2、Td1、Td2同比例约成简单形式。同时在不同的参数中,固定T1与T2,调整其他时间常数。

调整时,先启动程序,在电机达到稳定转速的情况下停止运行程序,通过查询可分别得到主从电机的实时速度。然后再启动程序,如此多次查询,我们可得到在该组控制参数下的不同时刻的主从电机速度值。然后根据这些数值调整控制参数,直到得出令人满意的主从电机速度值为止。

当主电机设定速度为300转时,在以上控制参数下所记录的一组主从电机实时速度如表4.1所示,其中speed1是主电机的实测速度,speed2是从电机的实测速度。

37

表4.1 设定速度为300转/分时的主从电机实测速度

speed1 297 speed2 302 speed1 302 speed2 300 speed1 302 speed2 300 297 300 299 301 302 300 301 300 299 297 300 300 301 300 301 300 300 298 300 300 300 299 300 302 298 300 302 300 300 302 300 300 302 301 299 300 302 299 498 297 298 300 299 302 498 302 300 298 301 301 301 299 300 300 由表4.1中数据可以看出,控制系统在设定速度为300转时的控制精度是很高的。主电机的速度变化范围是[297,302],其中有60%的速度值集中在[299,301]内;从电机的速度变化范围也是[297,302],其中有70%的速度值集中在[299,301]内。主从电机的最大跟踪偏差值为5。

4.2中速段内的参数整定及结果

当转速要求介入120转到250转之间时,参数整定结果如下: T1=T2=8, Ti1=Ti2=48, Td1=2, Td2=1, Kp1=0.3, Kp2=0.2

在该组参数下,记下主电机设定速度为200转/分时,不同时刻下的主从电机速度如表4.2所示。

表4.2 设定速度为200转/分时的主从电机实测速度

speed1 199 speed2 206 speed1 201 speed2 201 speed1 199 speed2 202

196 202 201 201 199 196 200 202 201 202 201 188 200 196 198 202 199 190 202 204 199 204 199 189 200 199 199 202 200 193 38

199 190 201 199 200 194 200 195 200 207 198 199 199 201 200 193 201 202 202 204 201 190 198 196 由表4.2数据统计,主电机的速度变化范围是[196,202],其中有97%的数据集中在[198,202]内;从电机的速度变化范围是[188,206],其中 有63%的数据集中在[195,205]内。

4.3低速段内的参数整定及结果

当转速要求低于100转/分时,参数整定结果如下: T1=T2=8, Ti1=Ti2=32, Td1=1, Td2=2, Kp1= Kp2=0.3

在该组参数下,记下主电机设定速度为100转/分时,不同时刻下的主从电机速度如表4.3所示。

表4.3 设定速度为100转/分时的主从电机实测速度

speed1 104 speed2 108 speed1 102 speed2 106 speed1 speed2 96 94 105 98 97 106 100 91 99 90 105 91 102 97 97 93 104 100 99 96 96 99 98 99 96 104 106 100 97 104 99 93 98 100 98 109 100 88 97 96 102 103 97 102 98 103 99 99 98 89 94 104 96 108 100 109 由表4.3中的数据统计可知,主电机的速度变化范围是[94,105],其中有60%的数据集中在[97,103]内;从电机的速度变化范围是[88,109],其中有43%的数据集中在[95,105]内。

39

4.4 结果分析

由以上三组数据可以看出,不同速度段内的主从电机速度偏差基本上都能控制在每分钟10转以内。在第一组数据中,速度偏差甚至控制在每分钟3转以内。三组数据的趋势是速度越高,控制精度也越高。说明速度越高,越好控制,电机运行得越稳定。原因可能有以下几个:

1.采用的是M法测速,即定时计数法,这种方法适用于高转速时的测速,在转速低时测速精度也低。

2.低速下的控制参数有待进一步完善。

3.电机在低转速时不易控制,常规的PID控制方法达不到更高的控制精度。

40

结 论

在本设计中,通过软件编程的方式实现了双直流电机的主从式同步控制,并整定了三组PID控制参数,由记录的主从电机的实时速度来看,三个速度段内的控制效果都是令人满意的。尤其是在高速段内,从电机能够很好地跟踪主电机工作在设定速度上,偏差值很小。

程序的实现体现了C51语言编程的优越性。相对于传统的汇编语言,C51语言更接近人的自然语言和思维,编程效率明显加快,排错也更容易。

在该题目设计中,我们采用的是最基本的同步控制结构和常规的PID算法,虽然控制的只是两台小功率低电压的直流电机,控制结果仍然令人欣喜,这证明了这种基本控制方法的有效性。

本论文只是初步探讨了一下实现多电机同步控制的基本方法,在电机的低速段内控制效果不如高速段的控制精度高,还有待提高。在实际中,为了满足工业控制的精度,人们已研制出了各种控制策略,其中将现代控制理论同传统的PID控制相结合,即现代PID控制器,已成为新一代控制器的另一个方向,它包括3类:基于专家系统的智能PID控制器,基于模糊逻辑的智能PID控制器和基于神经网络的智能PID控制器。随着这些控制理论的不断完善,我们相信,电机同步控制技术将成为电机驱动控制中的热门技术,多电机同步也将更加广泛地被采用。

41

致 谢

经过大半个学期的努力,在指导老师和周围同学的帮助下,我终于顺利地完成了设计任务,时间没有白费,我对自己的设计成果感到满意,更为学到书本上学不到的东西感到高兴。我的收获离不开我的指导老师黄梦涛老师 、师姐康方方和同学郑涌的指点和帮忙,在此我要向他们一一致谢。

在论文设计的各个阶段,黄梦涛老师都为我们作了积极的引导和细心的指点。一开始导师就给我们介绍了师姐康方方,并让师姐给我们推荐了一些与论文相关的资料让我们学习。在以后每周都督促我们,我们出现的问题,黄老师都能为我们做出分析,指出可以怎么做。黄老师的平易近人和诲人不倦都让我深深难忘。在此我向黄老师表达最真诚的谢意。

师姐康方方给了我们很多实际上的帮助,遇到问题时和我们一起讨论。师姐康方方是在设计中给了我们最多帮助的人,我在此表示深深的感谢。

郑涌和我一起做这个毕业设计题目,他做出了他力所能及的事情,我们的合作非常愉快,在此我向他也表示感谢。

42

参考文献

[1].张贵强.无轴传动技术同步控制的研究[J].东北大学论文,2005

[2].卢金铎,刘锦波. 双电机传动机械系统的同步控制[J] .控制工程,2005,4 [3].王国亮.基于模糊PID补偿器的多电机同步控制策略研究[J].东北大学,2006 [4].秦继荣,沈安俊.现代直流伺服控制技术及其系统设计[M].机械工业出版社,1999 [5].王树青.先进控制技术及应用[M].北京工业出版社,2002

[6].孙立志.PWM与数字化电动机控制技术应用[M].中国电力出版社,2001 [7].沈安俊.直流PWM技术的发展[M].电气传动,1987

[8].刘福才,张学莲.多电动机传动系统控制理论与应用研究[J].控制工程,2002 [9].周兴华.单片机智能化产品C语言设计实例详解[M].

[10].张桂香,王辉.计算机控制技术.电子科技大学出版社[M],2001 [11].余永权.单片机在自动控制系统中的应用[M].电子工业出版社,1999

[12].童长飞.C8051F系列单片机开发与C语言编程[M].北京航空航天大学出版社,2005 [13].马忠梅,籍顺心,张凯.单片机的C语言应用程序设计[M].北京航空航天大学出版

社,2001

[14].余永权,汪明慧,黄英.单片机在控制系统中的应用[M].电子工业出版社,2002 [15].曲金玉,任桂周,侯树展,刘大叔.基于C8051F单片机的发动机转速测量[J]. 拖拉机与农用运输车,2007

[16].杨云龙.电动自行车调速系统研究[J].西安科技大学论文,2007

43

附录1 总程序

#include \头文件程序不附 typedef unsigned int uint; typedef unsigned char uchar; typedef unsigned long ulong;

uint cesu1=0,cesu2=0; //0.1秒所测主从电机的脉冲个数 uchar temppage;

uchar i=0,j=0; //i为T4循环标志,j为主程序运算标志 uchar m=0,n=0; //m为通信接收位数,n为发送位数 uchar cs1[4],cs2[4]; //cs1,cs2保存主从电机的速度脉冲 uchar js[3],fs[6]; //发送和接收数据数组

uint shd,shj; //主电机设定速度及对应的标准脉冲值 uint speed1=0,speed2=0; //主从电机实际速度

xdata float T1,T2,Ti1,Ti2,Td1,Td2; //采样积分微分时间常数 xdata float A11,A12,A13,A21,A22,A23,Kp1,Kp2; //PID运算系数

void t4ISR(); //T4中断程序说明

void Uart_ISR(); //串口通信中断程序说明

void pwm_set() //PCA0初始化 {

SFRPAGE=0x00; //PCA0特殊功能寄存器所在分页

PCA0MD=0X04; //禁止PCA定时器中断,时基为Timer0 PCA0CPM0=0X42; //模块0:8为PWM模式,禁止中断 PCA0CPL0=0XFF; //PWM0赋初值 PCA0CPH0=0XFF;

PCA0CPM1=0X42; //模块1:8位PWM,禁止中断 PCA0CPL1=0XFF; //PWM1赋初值 PCA0CPH1=0XFF;

PCA0CN=0X40; }

void Uart0init() //串口通信中断程序 {SFRPAGE=0X00;

SADEN0=0X00; SADDR0=0X00;

44

SSTA0=0X10; //2分频开启,波特率为T1溢出率的16分频

SCON0=0X50; //工作在模式1,为8位可变波特率通信,允许接收 SCON0&=0XF0; //将TI0和RI0清0 IE|=0X10; //UART0中断开启

PS=1; //UART0中断优先级为高 }

void timer0() //Timer0{

SFRPAGE=0X00;

TMOD=0X02; //T0 CKCON=0X08; //T0 TH0=0XA0; //T0 TL0=TH0; ET0=0;

TR0=1; //}

void timer1() //T0{SFRPAGE=0X00;

TMOD|=0X20; // CKCON|=0X10; // TH1=0XF3; TL1=TH1; TR1=1; }

void timer2() //Timer2{

SFRPAGE=0X00;

TMR2CF=0X00; // RCAP2=0X0000; // TMR2=0X0000;

TMR2CN=0X06; // T2}

void timer3() //Timer3{

SFRPAGE=0X01; TMR3CF=0X00;

初始化 为模式2,8位自动重载 时钟为系统时钟 赋计数初值 启动T0 作为UART0波特率发生器 模式2,8位自动重载 采用系统时钟 初始化,T2计主电机脉冲 自增模式 计数初值清0 工作在计数模式,启动T2 初始化与T2相同,T2计主电机脉冲45

RCAP3=0X0000; TMR3=0X0000; TMR3CN=0X06; }

void timer4() //T4初始化,定时25ms {

SFRPAGE=0X02;

TMR4CN=0X84; //溢出位清0,启动T4

TMR4CF=0X00; //T4重载计数,采用系统时钟12分频 RCAP4=0X389E; //设定时初值 TMR4=0x389e; SFRPAGE=0X00;

EIE2|=0X04; //允许T4中断 }

void config() {

WDTCN=0X07; //看门狗禁止,便于系统调试 WDTCN=0XDE; WDTCN=0XAD;

SFRPAGE=0X0F; //交叉开关配置

XBR0=0X14; //将CEX0和CEX1,UART0配置到端口 XBR1=0X20; //将T2配置到端口 XBR2=0X40; //开启交叉开关配置 XBR3=0X01; //将T3配置到端口

SFRPAGE=0X0F;

P0MDOUT=0X0D; //P0口输出配置 P0=0X32;

SFRPAGE=0X0F;

CLKSEL=0X00; //采用内部晶振

OSCXCN=0X00; //关闭外部晶振电路

OSCICN=0X83; //开启内部晶振,系统时钟为内部晶振1分频 }

void main()

{uchar k1=1,k2=1; //积分项系数

int e11,e12,e13; //主电机近三次速度偏差

46

int e21,e22,e23; //从电机近三次速度偏差 int eu1,u1,eu2,u2; //主从电机的控制量

u1=u2=0;

e11=e12=e13=0; e21=e22=e23=0;

shj=300; // shd=shj*5/3;

T1=8; //300 T2=8; Td1=2; Td2=1;

Ti1=Ti2=32; Kp1=0.3; Kp2=0.3;

A12=-1-2*Td1/T1; // A22=-1-2*Td2/T2; A13=Td1/T1; A23=Td2/T2;

config(); // pwm_set(); Uart0init(); timer0(); timer1(); timer2(); timer3(); timer4();

EA=1; //

while(1) // {

if(j==1) // {j=0;

e11=e12; // e12=e13; e13=shd-cesu1;

将主电机速度设定为300 转时的控制参数 运算系数 初始化 开启中断 主循环 判断是否运算 计算主电机的最近三次偏差47

e21=e22; //计算主电机的最近三次偏差 e22=e23;

e23=cesu1-cesu2;

if((e13>300)||(u1==255)&&(e13>0)) k1=0; //判断主电机运算是否积分饱和 else k1=1;

if((e23>200)||(u2==255)&&(e23>0)) k2=0; //判断主电机运算是否积分饱和 else k2=1;

if((e13>2)||(e13<-2)||(e13-e12>2)||(e12-e13>2)) //计算主电机控制量 { A11=1+k1*T1/Ti1+Td1/T1;

eu1=(A11*e13+A12*e12+A13*e11)*Kp1; u1+=eu1;

if(u1>255) u1=255; if(u1<0) u1=0; SFRPAGE=0X00;

PCA0CPH0=~u1; }

if((e23>2)||(e23<-2)||(e13-e12>2)||(e12-e13>2)) //计算主电机控制量 { A21=1+k2*T2/Ti2+Td2/T2;

eu2=(A21*e23+A22*e22+A23*e21)*Kp2; u2+=eu2;

if(u2>255) u2=255; if(u2<0) u2=0; SFRPAGE=0X00;

PCA0CPH1=~u2; } } } }

/*void t4ISR() interrupt 16 { //T4中断程序,与下面一个T4中断程序 temppage=SFRPAGE; //功能相同 i++; if(i>=4) {i=0; j=1;

SFRPAGE=0X00; TR2=0;

cesu1=TMR2; TMR2=0X0000;

48

TR2=1;

SFRPAGE=0X01; TR3=0;

cesu2=TMR3; TMR3=0X0000; TR3=1; }

SFRPAGE=0X02; TF4=0;

SFRPAGE=temppage; }*/

void t4ISR() interrupt 16{ //T4中断程序 SFRPAGE=0X00;

TR2=0; //停止T2计数

cs1[i]=TMR2; //读主电机25ms的脉冲数 TMR2=0X0000; //T2计数初值清0 TR2=1; //T2计数开启 SFRPAGE=0X01;

TR3=0; //停止T3计数

cs2[i]=TMR3; //读从电机25的脉冲数 TMR3=0X0000; //T3计数初值清0 TR3=1; //T3计数开启 SFRPAGE=0X02;

TF4=0; //清除T4中断标志位 i++;

if(i>=4) //计时1ms {cesu1=j=cs1[0]; for(i=1;i<=3;i++)

{if(jcs1[i]) cesu1=cs1[i]; //找出cs1中最小值赋给cesu1 }

i=cesu1;

cesu1=(cs1[0]+cs1[1]+cs1[2]+cs1[3]-i-j)*2; //中值滤波 cesu2=j=cs2[0]; for(i=1;i<=3;i++)

{if(jcs2[i]) cesu2=cs2[i]; } i=cesu2;

49

cesu2=(cs2[0]+cs2[1]+cs2[2]+cs2[3]-i-j)*2;

i=0; //循环标志清0 j=1; //主程序启动运算 } }

void Uart0_ISR() interrupt 4{ //串口通信程序 SFRPAGE=0X00;

if(RI0) //接收数据 {if(m<=2)

{js[m]=SBUF0; m++; }

if(m>=3) //已接收到三个数据 {m=0;

if(js[2]==1) //修改主电机设定速度 {shj=256*js[0]+js[1]; shd=shj*5/3;

if(shj<=120) //设定速度低于120时的控制参数 {Ti1=Ti2=32; Td1=1; Td2=2;

Kp1=Kp2=0.3; }

else if(shj<=250) //设定速度介于120和250之间的控制参数 {Ti1=Ti2=48; Td1=2; Td2=1; Kp1=0.3; Kp2=0.2; }

else //设定速度大于250时的控制参数 {Ti1=Ti2=32; Td1=2; Td2=1; Kp1=0.3; Kp2=0.3; }

A12=-1-2*Td1/T1; //计算运算系数 A22=-1-2*Td2/T2; A13=Td1/T1;

50

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

Top