您的当前位置:首页正文

毕业设计基于单片机的直流电机调速系统

来源:一二三四网
 摘 要

本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。

文章中采用了专门的芯片组成了PWM信号的发生系统,并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节,从而控制其输入信号波形等均作了详细的阐述。此外,本文中还采用了芯片IR2110作为直流电机正转调速功率放大电路的驱动模块,并且把它与延时电路相结合完成了在主电路中对直流电机的控制。另外,本系统中使用了测速发电机对直流电机的转速进行测量,经过滤波电路后,将测量值送到A/D转换器,并且最终作为反馈值输入到单片机进行PI运算,从而实现了对直流电机速度的控制。在软件方面,文章中详细介绍了PI运算程序,初始化程序等的编写思路和具体的程序实现。

关键词: PWM信号,测速发电机,PI运算 1. 引言 1.1 开发背景

现代工业生产中,电动机是主要的驱动设备,目前在直流电动机拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ—D拖动系统,取代了笨重的发电动一电动机的F—D系统,又伴随着电子技术的高度发展,促使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速技术又进入到一个新的阶段,智能化、高可靠性已成为它发展的趋势。直流电机调速基本原理是比较简单的(相对于交流电机),只要改变电机的电压就可以改变转速了。改变电压的方法很多,最常见的一种PWM脉宽调制,调节电机的输入占空比就可以控制电机的平均电压,控制转速。

PWM控制的基本原理很早就已经提出,但是受电力电子器件发展水平的制约,在上世纪80年代以前一直未能实现。直到进入上世纪80年代,随着全控型电力电子器件的出现和迅速发展,PWM控制技术才真正得到应用。随着电力电子技术、微电子技术和自动控制技术的发展以及各种新的理论方法,如现代控制理论、非线性系统控制思想的应用,PWM控制技术获得了空前的发展,到目前为止,已经出现了多种PWM控制技术。

1.2 选题的目的和意义

直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域中得到了广泛的应用。从控制的角度来看,直流调速还是交流拖动系统的基础。早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能。采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率。

传统的控制系统采用模拟元件,虽在一定程度上满足了生产要求,但是因为元件容易老化和在使用中

易受外界干扰影响,并且线路复杂、通用性差,控制效果受到器件性能、温度等因素的影响,故系统的运行可靠性及准确性得不到保证,甚至出现事故。

目前,直流电动机调速系统数字化已经走向实用化,伴随着电子技术的高度发展,促使直流电机调速逐步从模拟化向数字化转变,特别是单片机技术的应用,使直流电机调速技术又进入到一个新的阶段,智能化、高可靠性已成为它发展的趋势。 1.3 研究方法

本文主要研究了利用MCS-51系列单片机,通过PWM方式控制直流电机调速的方法。PWM控制技术以其控制简单、灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振软开关技术将会成为PWM控制技术发展的主要方向之一。

本文就是利用这种控制方式来改变电压的占空比实现直流电机速度的控制。文章中采用了专门的芯片组成了PWM信号的发生系统,然后通过放大来驱动电机。利用直流测速发电机测得电机速度,经过滤波电路得到直流电压信号,把电压信号输入给A/D转换芯片最后反馈给单片机,在内部进行PI运算,输出控制量完成闭环控制,实现电机的调速控制。 2. 总体设计概述

单片机直流电机调速简介:单片机直流调速系统可实现对直流电动机的平滑调速。PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,PWM又被称为“开关驱动装置”。本系统以89C51单片机为核心,通过单片机控制,C语言编程实现对直流电机的平滑调速。

系统控制方案的分析:本直流电机调速系统以单片机系统为依托,根据PWM调速的基本原理,以直流电机电枢上电压的占空比来改变平均电压的大小,从而控制电动机的转速为依据,实现对直流电动机的平滑调速,并通过单片机控制速度的变化。本文所研究的直流电机调速系统主要是由硬件和软件两大部分组成。硬件部分是前提,是整个系统执行的基础,它主要为软件提供程序运行的平台。而软件部分,是对硬件端口所体现的信号,加以采集、分析、处理,最终实现控制器所要实现的各项功能,达到控制器自动对电机速度的有效控制。 2.1 总体硬件电路设计 2.1.1系统总体设计框图

本系统采用89C51控制输出数据,由PWM信号发生电路产生PWM信号,送到直流电机,直流电机通过测速电路,滤波电路,和A/D转换电路交数据重新送回单片机,进行PI运算,从而实现对电机速度和转向的控制,达到直流电机调速的目的。

1

PWM信号的产生与放大 直流电机 主控芯片 A/D 转换 滤波 电路 测速 发电机 图2-1系统总体设计图

2.1.2 8051单片机简介

1.8051单片机的基本组成

8051单片机由CPU和8个部件组成,它们都通过片内单一总线连接,其基本结构依然是通用CPU加上外围芯片的结构模式,但在功能单元的控制上采用了特殊功能寄存器的集中控制方法。其基本组成如下图所示:

图2-2 8051基本结构图

2.CPU及部分部件的作用功能介绍如下

中央处理器CPU:它是单片机的核心,完成运算和控制功能。

内部数据存储器:8051芯片中共有256个RAM单元,能作为存储器使用的只是前128个单元,其地址为00H—7FH。通常说的内部数据存储器就是指这前128个单元,简称内部RAM。

内部程序存储器:8051芯片内部共有4K个单元,用于存储程序、原始数据或表格,简称内部ROM。 定时器:8051片内有2个16位的定时器,用来实现定时或者计数功能,并且以其定时或计数结果对

2

计算机进行控制。

中断控制系统:该芯片共有5个中断源,即外部中断2个,定时/计数中断2个和串行中断1个。 3.8051单片机引脚图

图2-3 8051单片机引脚图

2.1.3 单片机系统中所用其他芯片选型

1. 地址锁存器

地址锁存器可以选择多种,有地址锁存功能的器件有74LS373、8282、74LS273等,8282是地址锁存器,功能与74LS373类似,但本系统选用74LS373作为地址锁存器,考虑到其应用的广泛性以及具有良好的性价比,成为目前在单片机系统中应该较广泛的地址锁存器。74LS373片内是8个输出带三态门的D锁存器。

当使能端呈高电平时,锁存器中的内容可以更新,而在返回低电平的瞬间实现锁存。如果此时芯片的输出控制端为低,也即是输出三态门打开,锁存器中的地址信息便可以通过三态门输出。其引脚图如图2-4所示:

3

图2-4 74L373引脚图

2.程序存储器

存储器是单片机的又一个重要组成部分,其中程序存储器是单片机中非常重要的存储器,但由于其存储空间不足,常常需要对单片机的存储器空间进行扩展,扩展程序存储器常用芯片有EPROM(紫外线可擦除型),如2716(2KB)、2732(4KB)、2764(8KB)、27128(16KB)、27256(32KB)等,另外还有+5V电擦除E2PROM,如2816(2KB)、2864(8KB)等等。考虑到系统功能的可扩展性以及程序功能的扩展,本系统采用16KB的27128作为程序存储器扩展芯片,在满足系统要求的前提下还存有一定的扩展空间,是本系统最合适的程序存储器扩展芯片。27128的引脚图如图2-5所示:

图2-5 27128结构图

3.数据存储器

8051单片机有128B RAM,当数据量超过128B也需要把数据存储区进一步扩展。常用RAM芯片分静态和动态两种。静态RAM有6116(2KB)、6264(8KB)等,动态DRAM2164(8KB)等,另外还有集成IRAM和E2PROM。使用E2PROM作数据存储器有断电保护数据的优点。

4

数据存储器扩展常使用随机存储器芯片,用的较多的是Intel公司的6116容量为2KB和6264容量为8KB。本系统采用容量8KB的6264作为数据存储器扩展芯片。其引脚图如图2-6所示:

图2-6 6264引脚图

2.1.4 8051单片机扩展电路及分析

图2-7 8051单片机扩展电路及分析

接线分析:

P0.7---P0.0:这8个引脚共有两种不同的功能,分别使用于两种不同的情况。第一种情况是8051不带片外存储器,P0口可以作为通用I/O口使用,P0.7---P0.0用于传送CPU的I/O数据。第二种情况是8051带片外存储器,P0.7---P0.0在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送5

CPU对片外存储器的读写数据。

P2.7---P2.0:这组引脚的第一功能可以作为通用的I/O使用。它的第二功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但是并不能像P0口那样还可以传送存储器的读写数据。

P3.7---P3.0:这组引脚的第一功能为传送用户的输入/输出数据。它的第二功能作为控制用,每个引脚不尽相同。

VCC为+5V电源线,VSS为接地线。

ALE/PROG:地址锁存允许/编程线,配合P0口引脚的第二功能使用,在访问片外存储器时,8051CPU在P0.7---P0.0引脚线上输出片外存储器低8位地址的同时还在ALE/PROG线上输出一个高电位脉冲,其下降沿用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出P0.7---P0.0引脚线去传送随后而来的片外存储器的读写数据。

__________________________EA/V

PP

:允许访问片外存储器/编程电源线,可以控制8051使用片内ROM还是片外ROM。如果EA=1,

____那么允许使用片内ROM;如果EA=0,那么允许使用片外ROM。

XTAL1和XTAL2:片内振荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接8051片内OSC的定时反馈电路。石英晶振起振后,应能在XTAL2线上输出一个3V左右的正弦波,以便于8051片内的OSC电路按石英晶振相同频率自激振荡,电容C1、C2可以帮助起振,调节它们可以达到微调fOSC的目的。

2.2 PWM信号发生电路设计

2.2.1 PWM的基本原理

PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”。如图2-8所示:

图2-8 PWM方波

设电机始终接通电源时,电机转速最大为Vmax,设占空比为D= t1 / T,则电机的平均速度为Va = Vmax *

6

D,其中Va指的是电机的平均速度;Vmax 是指电机在全通电时的最大速度;D = t1 / T是指占空比。

由上面的公式可见,当我们改变占空比D = t1 / T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。严格来说,平均速度Vd 与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。 2.2.2 PWM信号发生电路设计

图2-9PWM信号发生电路

PWM波可以由具有PWM输出的单片机通过编程来得以产生,也可以采用PWM专用芯片来实现。当PWM波的频率太高时,它对直流电机驱动的功率管要求太高,而当它的频率太低时,其产生的电磁噪声就比较大,在实际应用中,当PWM波的频率在18KHz左右时,效果最好。在本系统内,采用了两片4位数值比较器4585和一片12位串行计数器4040组成了PWM信号发生电路。

两片数值比较器4585,即图上U2、U3的A组接12位串行4040计数输出端Q2—Q9,而U2、U3的B组接到单片机的P1端口。只要改变P1端口的输出值,那么就可以使得PWM信号的占空比发生变化,从而进行调速控制。

12位串行计数器4040的计数输入端CLK接到单片机C51晶振的振荡输出XTAL2。计数器4040每来8个脉冲,其输出Q2—Q9加1,当计数值小于或者等于单片机P1端口输出值X时,图中U2的(A>B)输出端保持为低电平,而当计数值大于单片机P1端口输出值X时,图中U2的(A>B)输出端为高电平。随着计数值的增加,Q2—Q9由全“1”变为全“0”时,图中U2的(A>B)输出端又变为低电平,这样就在U2的(A>B)端得到了PWM的信号,它的占空比为(255 -X / 255)*100%,那么只要改变X的数值,就可以相应的改变PWM信号的占空比,从而进行直流电机的转速控制。

7

使用这个方法时,单片机只需要根据调整量输出X的值,而PWM信号由三片通用数字电路生成,这样可以使得软件大大简化,同时也有利于单片机系统的正常工作。由于单片机上电复位时P1端口输出全为“1”,使用数值比较器4585的B组与P1端口相连,升速时P0端口输出X按一定规律减少,而降速时按一定规律增大。

2.2.3 PWM发生电路主要芯片的工作原理

1.数据比较器

具有数据比较功能的芯片有74LS6828,74LS6838等8位数值比较器,4位数值比较器4585等。本PWM发生电路通过两片4位数值比较器4585就可实现PWM信号的产生,因此选用4585作为信号发生电路。芯片4585的引脚图:

2.串行计数器

图2-10 4585引脚图 系统PWM信号发生电路中还使用到一片串行计数器,有串行计数功能的芯片有4024、4040等,它们具有相同的电路结构和逻辑功能,但4024是7位二进制串行计数器,而芯片4040是一个12位的二进制串行计数器,所有计数器位为主从触发器,计数器在时钟下降沿进行计数。当CR为高电平时,它对计数器进行清零,由于在时钟输入端使用施密特触发器,故对脉冲上升和下降时间没有限制,所有的输入和输出均经过缓冲。本系统使用4040作为串行计数器,芯片4040的引脚图如图2-11所示:

图2-11 4040引脚图

8

2.3 功率放大驱动电路设计

功率放大驱动芯片有多种,其中较常用的芯片有IR2110和EXB841,但由于IR2110具有双通道驱动特性,且电路简单,使用方便,价格相对EXB841便宜,具有较高的性价比,且对于直流电机调速使用起来更加简便,因此该驱动电路采用了IR2110集成芯片,使得该集成电路具有较强的驱动能力和保护功能。 2.3.1 芯片IR2110性能及特点

IR2110是美国国际整流器公司利用自身独有的高压集成电路以及无闩锁CMOS技术,于1990年前后开发并且投放市场的,IR2110是一种双通道高压、高速的功率器件栅极驱动的单片式集成驱动器。它把驱动高压侧和低压侧MOSFET或IGBT所需的绝大部分功能集成在一个高性能的封装内,外接很少的分立元件就能提供极快的功耗,它的特点在于,将输入逻辑信号转换成同相低阻输出驱动信号,可以驱动同一桥臂的两路输出,驱动能力强,响应速度快,工作电压比较高,可以达到600V,其内设欠压封锁,成本低、易于调试。高压侧驱动采用外部自举电容上电,与其他驱动电路相比,它在设计上大大减少了驱动变压器和电容的数目,使得MOSFET和IGBT的驱动电路设计大为简化,而且它可以实现对MOSFET和IGBT的最优驱动,还具有快速完整的保护功能。与此同时,IR2110的研制成功并且投入应用可以极大地提高控制系统的可靠性。降低了产品成本和减少体积。 2.3.2 IR2110的引脚图以及功能

IR2110将输入逻辑信号转换成同相低阻输出驱动信号,可以驱动同一桥臂的两路输出,驱动能力强,响应速度快,工作电压比较高,是目前功率放大驱动电路中使用最多的驱动芯片。其结构也比较简单,芯片引脚图如下所示:

图2-12 IR2110引脚图

2.4 主电路设计 2.4.1 延时保护电路

9

利用IR2110芯片的完善设计可以实现延时保护电路。

IR2110使它自身可对输入的两个通道信号之间产生合适的延时,保证了加到被驱动的逆变桥中同桥臂上的两个功率MOS器件的驱动信号之间有一互琐时间间隔,因而防止了被驱动的逆变桥中两个功率MOS器件同时导通而发生直流电源直通路的危险。 2.4.2 主电路

从上面的原理可以看出,产生高压侧门极驱动电压的前提是低压侧必须有开关的动作,在高压侧截止期间低压侧必须导通,才能够给自举电容提供充电的通路。因此在这个电路中,Q1、Q4或者Q2、Q3是不可能持续、不间断的导通的。我们可以采取双PWM信号来控制直流电机的正转以及它的速度。

将IC1的HIN端与IC2的LIN端相连,而把IC1的LIN端与IC2的HIN端相连,这样就使得两片芯片所输出的信号恰好相反。

在HIN为高电平期间,Q1、Q4导通,在直流电机上加正向的工作电压。其具体的操作步骤如下: 当IC1的LO为低电平而HO为高电平的时候,Q2截止,C1上的电压经过VB、IC内部电路和HO端加在Q1的栅极上,从而使得Q1导通。同理,此时IC2的HO为低电平而LO为高电平,Q3截止,C3上的电压经过VB、IC内部电路和HO端加在Q4的栅极上,从而使得Q4导通。

电源经Q1至电动机的正极经过整个直流电机后再通过Q4到达零电位,完成整个的回路。此时直流电机正转。

在HIN为低电平期间,LIN端输入高电平,Q2、Q3导通,在直流电机上加反向工作电压。其具体的操作步骤如下:

当IC1的LO为高电平而HO为低电平的时候,Q2导通且Q1截止。此时Q2的漏极近乎于零电平,Vcc通过D1向C1充电,为Q1的又一次导通作准备。同理可知,IC2的HO为高电平而LO为低电平,Q3导通且Q4截止,Q3的漏极近乎于零电平,此时Vcc通过D2向C3充电,为Q4的又一次导通作准备。

电源经Q3至电动机的负极经过整个直流电机后再通过Q2到达零电位,完成整个的回路。此时,直流电机反转。

因此电枢上的工作电压是双极性矩形脉冲波形,由于存在着机械惯性的缘故,电动机转向和转速是由矩形脉冲电压的平均值来决定的。

设PWM波的周期为T,HIN为高电平的时间为t1,这里忽略死区时间,那么LIN为高电平的时间就为T-t1。HIN信号的占空比为D=t1/T。设电源电压为V,那么电枢电压的平均值为:

Vout= [ t1 - ( T - t1 ) ] V / T = ( 2 t1 – T ) V / T = ( 2D – 1 )V

定义负载电压系数为λ,λ= Vout / V, 那么 λ= 2D – 1 ;当T为常数时,改变HIN为高电平的时间t1,也就改变了占空比D,从而达到了改变Vout的目的。D在0—1之间变化,因此λ在±1之间变化。如果我们联系改变λ,那么便可以实现电机正向的无级调速。

当λ=0.5时,Vout=0,此时电机的转速为0;

10

当0.5<λ<1时,Vout为正,电机正转; 当λ=1时,Vout=V,电机正转全速运行。

图2-13 系统主电路

2.4.3 输出电压波形

系统电路经过单片机控制的PWM信号产生电路送来的PWM信号,经过功率放大电路,形成输出电压的波形图如下图如示:

图2-14 输出电压波形 11

2.4.4 系统总体电路图

直流电机调速系统总体电路设计由单片机产生控制PWM信号发生电路产生PWM信号的数据,控制直流电机调速电路对电机进行调速。

图2-15 系统总休电路图

12

2.5 测速发电机

测速发电机是一种测量转速的微型发电机,他把输入的机械转速变换为电压信号输出,并要求输出的电压信号与转速成正比,分为直流与交流两种。其绕组和磁路经过精确设计,输出电动势E和转速n成线性关系,即E=kn,其中k是常数。改变旋转方向时,输出电动势的极性即相应改变。

当被测机构与测速发电机同轴连接时,只要检测出输出电动势,即可以获得被测机构的转速,所以测速发电机又称速度传感器。测速发电机广泛应用于各种速度或者位置控制系统,在自动控制系统中作为检测速度的元件,以调节电动机转速或者通过反馈来提高系统稳定性和精度。 2.6 滤波电路

经整流后的单向直流或单向脉动直流电,都是由强度不变的直流成分和一个以上的交流成分叠加形成的。为了使脉动直流电变得较为平稳,把其中的交流成分滤掉,叫做滤波。滤波有电容滤波、电感滤波等。本系统中对直流电采用电容滤波的方式,使得直流电压变得更加平稳,调速更加精确。电路图如图2-15所示:

图2-16 滤波电路 2.7 A/D转换 2.7.1芯片选型

能够进行A/D转换的芯片很多,其中AD系列的有8位A/D转换器ADC0809、AD570、AD670、AD673、AD7574等,TLC系列的有TLC545等,其中较为常用的是ADC0809和TLC545,TLC545是美国TEXAS仪器公司新推出的一种开关电容结构逐次逼近式8位A/D转换器,具有19个模拟输入端。而ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,具有地址锁存控制的8路模拟开关,应用单一的+5V电源,其模拟量输入电压的范围为0V---+5V,其对应的数字量输出为00H---FFH,转换时间为100μs,无须调零或者调整满量程。因此本系统采用ADC0809作为A/D转换芯片。 2.7.2 ADC0809的引脚及其功能

13

ADC0809有28个引脚,其中IN0---IN7接8路模拟量输入。ALE是地址锁存允许,VREF、VREF接基准电源,在精度要求不太高的情况下,供电电源就可以作为基准电源。START是芯片的启动引脚,其上脉冲的下降沿起动一次新的A/D转换。EOC是转换结束信号,可以用于向单片机申请中断或者供单片机查询。OE是输出允许端。CLK是时钟端。DB0---DB7是数字量的输出。ADDA、ADDB、ADDC接地址线用以选定8路输入中的一路,引脚详见图2-16。



图2-17 ADC0809引脚图

3. 系统软件部分的设计

3.1 PI 转速调节器原理图及参数计算

按照典型II型系统的参数选择方法,转速调节器参数和电阻电容值关系如下: 图 3-1 PI 转速调节器Kn = Rn/ R0 Γn = Rn/ Cn Ton = 1/4 R0 * Con

参数求法: 电动机 P=10KW U=220V I=55A n=1000转/分 电枢电阻R=0.5欧姆 取滤波电路中Ro=40千欧 Rn=470千欧 Cn=0.2uF Con=1uF 则:

Umax=220V

Umin=(220/0.9)*0.5=122V Yi-1=0 W=1000转/分 P=Kp=Rn/Ro=11.7

14

I=Kp*T/Ti=125 3.2 系统中的部分程序设计

软件由1个主程序、1个中断子程序和1个PI控制算法子程序组成。 3.2.1 主程序设计

主程序主程序是一个循环程序,其主要思路是,先设定好速度初始值,这个初始值与测速电路送来的值相比较得到一个误差值,然后用PI算法输出控制系数给PWM发生电路改变波形的占空比,进而控制电机的转速。其程序流程图如图所示。软件由1个主程序、1个中断子程序和1个PI控制算法子程序组成。主程序主程序是一个循环程序,其主要思路是由单片机P1口生数据送到PWM信号发生电路,然后用PI算法输出控制系数给PWM发生电路改变波形的占空比进而控制电机的转速。 主程序流程图如图3-2所示:

图3-2 主程序流程图

15

3.2.2 PI控制算法子程序设计

/*PI控制算法子程序*/ void PID_work() {

negsum=0;possum=0; if(BJ==0) {

possum+=k1;

temp[2]=temp[2]+temp[0];}

else

{

negsum+=k1;

temp[2]=temp[2]-temp[0];

}

k3=temp[2]/10; if(possum>negsum) {

k2=possum-negsum; //存储结果

CY=0;

temp[1]=k3+k1; //误差积累,

{

if(CY==1) //16位判断。

UK=0xfe; else UK=k1+k3;

}

else

UK=1; P3=UK;

}

16

4.系统调试 4.1软件调试

在程序编写的过程中,出现了很多问题,包括键盘扫描处理、PWM信号发生电路的控制、以及单片机控制直流电机的转动方向等问题,虽然问题不是很大,但是也让我研究了好长时间,在解决这些问题的时候,我不断向老师和同学请教,希望能通过大家一块的努力把软件编写的更完整,让系统的功能更完备。经过多天的努力探索,也经过老师的指导,大部分问题都已经解决,就是程序还是不能实现应该实现的功能,这让我很着急。后来经过一点一点的调试,并认真总结,发现了问题其实在编写中断处理程序时出现了错误,修改后即可实现直流电机调速的目的。总结这次软件调试,让我认识到了做软件调试的基本方法与流程:

(1)认真检查源代码,看是否有文字或语法错误

(2)逐段子程序进行设计,找出错误出现的部分,重点排查 (3)找到合适的方法,仔细检查程序,分步调试直到运行成功 4.2系统仿真

仿真软件选择Proteus ,在Proteus中画出系统电路图,当程序在Keil C中调试通过后,会生成以hex为扩展名的文件,这就是使系统能够在Proteus中成功进行仿真的文件。将些文件加载到单片机仿真系统中,验证是否能完成对直流电机的速度调节。若不成功,则重新回到软件调试步骤,进行软件调试。找出错误所在,更正后重新运行系统。硬件仿真电路的设计完全按照论文设计方案进行。在仿真的过程中也遇到了很多问题,比如元件选择、电路设计等,在元件选择方面,有的芯片是我以前学习的时候所没有遇到过的,所以在寻找和使用的过程中也遇到很多麻烦,但经过自己的努力,并借鉴从互联网上找到的资料,我逐渐掌握这些元件的使用方法和原理,为系统设计和仿真提供了良出的基础。另外,在进行仿真的时候,也经常出现程序没有错误了,但是仿真通不过的情况,这些大部分原因是在管脚定义上,很多系统仿真的问题都出在这。经过这段时间的努力,使我对仿真软件以及系统设计电路有了更深一步的认识,也为系统的成功奠定了基础。

17

参考文献

[1]张友德等,单片机原理应用与实验[M],复旦大学出版社1992.

[2]张毅刚,彭喜源,谭晓钧,曲春波.MCS-51单片机应用设计[M].哈尔滨工业大学出版社2001.1. [3]宋庆环,才卫国,高志,89C51单片机在直流电动机调速系统中的应用[M]。唐山学院,2008.4 [4]陈 锟 危立辉,基于单片机的直流电机调速器控制电路[J],中南民族大学学报(自然科学版),2003.9.

[5]李维军 韩小刚 李 晋,基于单片机用软件实现直流电机PWM调速系统[J],维普资讯,2007.9 [6]曹巧媛.单片机原理及应用[M].北京,电子工业出版社,1997.

[7]刘大茂,严飞.单片机应用系统监控主程序的设计方法[J].福州大学学报(自然科学福建农林大学硕士论文版),1998.2.

[8]http://hi.baidu.com/wolfwhite/blog/item/1e23bf09e83e16256b60fbf8.html

[9]朱定华,戴汝平编著.单片机原理与应用[M].清华大学出版社北方交通大学出版社,2003.8. [10]http://www.dianzi9.cn/danpianji/200808/10-846.html

[11]薛钧义 张彦斌编著. MCS—51/96系列单片微型计算[M].西安交通大学出版社,1997.8 [12]陈国呈 编著.PWM逆变技术及应用[M].中国电力出版社.2007年7月

[13]马忠梅 等编著.单片机的C语言应用程序设计(第4版)[M],北京航天航空大学出版社.2007. 4

[14]刘昌华,易逵编著.8051单片机的C语言应用程序设计与实践[M].国防工业出版社2007.9

18

附录

1.详细电路设计图

19

2.程序 (1)延时程序 void dealy() { uchar i;

for(i=0;i<100;i++); }

void t0(void) interrupt 1 using 0 //定时T0中断服务函数 { tcnt++;

//每过250ust tcnt 加一

if(tcnt==40) //计满40 次(1/100 秒)时 {

tcnt=0; //重新再计 sec++;

if(sec==10) //定时0.1 秒,在从零开始计时 {

sec=0;

TH0=0x06; //对TH0 TL0 赋值 TL0=0x06;

miaoshu=count;

count=0; }

}

}

(2)PID运算子程序

void PID_work() {

negsum=0;possum=0; if(BJ==0) {

possum+=k1;

temp[2]=temp[2]+temp[0];}

else

{

20

negsum+=k1;

}

k3=temp[2]/10; if(possum>negsum) {

k2=possum-negsum; //存储结果

CY=0;

temp[1]=k3+k1; //误差积累, {

if(CY==1) //16位判断。

}

UK=0xfe; else UK=k1+k3;

temp[2]=temp[2]-temp[0];

else

UK=1; P3=UK;

} (3)主程序

void main()

{

P1=0x00; P3=0x00;

TMOD=0x01; /*定时器0方式1*/ TH0=0xfc; /*定时器装载初值*/ TL0=0x18; ET0=1;

/*开定时器0中断*/

TR0=1; /*启动定时器0*/ while(1) {

if(P1_0==1)

P1=0xff;

if(P1_1==1)

21

EA=0; /*关CPU中断*/

if(P1_2==1) { dir=~dir; /*转向控制*/

while(P1_2!=0) {};

}

if(P1_3==1) {

high++; if(high==30) high=0; while(P1_3!=0) {};

}

} }

22

因篇幅问题不能全部显示,请点此查看更多更全内容

Top