1、河南机电高等专科学校毕业设计第1章绪论1.1 课题背景直流电机在当今生活的各方面应用越来越广泛,直流电机的调速控制是电机 应用的一个重要技术保障。直流电机具有良好的调速性能、较大的起动转矩和过 载能力强等许多优点,因此在许多行业中仍有应用。为此,本文设计了一个直流电机控制系统,可以实现对直流电机转动速度和 转动方向的高效控制。1.2 毕业设计任务本设计的目的是以单片机为核心设计出一个直流电机控制系统。本系统采用 STC10F04作为控制单元,通过键盘实现对直流电机转动方向及转动速度的控制, 并且将直流电机的转动速度动态显示在 LED数码管上。通过本课题,一方面我在查阅资料的基础上,了解STC1
2、0F04单片机控制的一些基本技术,掌握其控制系统的分析方法与实现方法,能对单片机外围电路设计 进行系统学习与掌握;另一方面,通过设计直流电机控制系统的硬件电路,控制 程序和相应的电路图,培养自己的自学和动手能力,从而为今后参加工作或进一 步深造打下良好的基础。设计的直流电机控制系统有以下功能:1 .直流电机的启停控制2 .直流电机的正反转控制3 .直流电机的加速控制4 .直流电机的减速控制5 .直流电机转速的动态显示1.3 方案的选择直流电机在当今生活的各方面应用越来越广泛,直流电机的调速控制是电机 应用的一个重要技术保障。直流电机具有良好的调速性能、较大的起动转矩和过载能力强等许多优点,因此
3、在许多行业中仍有应用。目前,直流电机调速控制方法很多,随着计算机进入控制领域以及新型的电 力电子功率元器件的不断出现,采用全控型的开关功率元件进行脉宽调制(pulsewidth modulation,简称PWM)已成为直流电动机新的调速方式。这种调速方法具 有开关频率高、低速运行稳定、动态性能优良、效率高等优点,更重要的是这种 调速方式很容易在单片机控制系统中实现,硬件比较简单,运算速度快,精度高, 因此具有很好的发展前景。本设计采用单片机产生PWM脉宽信号来控制直流电机的转速。1.4 系统方案的实现单片机最小系统主要由复位电路和时钟电路组成。复位电路为单片机系统提 供可靠复位,使单片机能正常
4、启动。时钟电路采用外部时钟方式,保证单片机个 功能部件都是以时钟频率为基准,有条不紊地一拍一拍地工作。键盘控制模块包括方向控制键、加速键和减速键、启停键,分别与单片机的 P2.0、p2.1、p2.2和P2.3相连。实现对直流电机的控制。并且键盘上连接有发光 二极管,以指示键盘状态。数码显示模块采用共阴极数码管来动态显示直流电机的实际转动速度。利用I/O 口为数码管的com端提供低电平。二号单片机的P1 口提供数码管的段选信号, P2.6和P2.7控制数码管的位选信号。测速模块采用开关霍尔片对安放在直流电机转盘上的小磁片的磁信号进行检 测,直流电机转盘每次带动小磁片经过霍尔片时,具都将有脉冲信号
5、从霍尔片输 出。单片机外部中断口对信号进行采集。直流电机驱动模块选用驱动芯片 L298,驱动直流电机转动。该模块与单片机 的 P1.0-P1.3相连。电源模块是通过将市电220V转变为直流12V和直流5V分别供给驱动模块 和单片机模块。采用电源模块 LM2576和L780527第2章硬件系统分析与设计2.1 直流电机2.1.1 直流电机的结构由直流电动机和发电机工作原理示意图可以看到,直流电机的结构应由定子和和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁 场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为 转子,其主要作用是产生电磁转
6、矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成控制。2.1.2 直流电机的特性1 .调速性能好所谓“调速性能”,是指电动机在一定负载的条件下,根据需要,人为地改变电动机的转速。直流电动机可以在重负载条件下,实现均匀、平滑的无级调速,而且调速范 围较宽。2 .起动力矩大可以均匀而经济地实现转速调节。因此,凡是在重负载下起动或要求均匀调节转速 的机械,例如大型可逆轧钢机、卷扬机、电力机车、电车等,都用直流电动机拖动。2.1.3 直流电机的种类直流电机的励磁方式是指对励磁绕组如何供电、产生励磁磁通势而建立主磁场的问题。根据励磁方式的不
7、同,直流电机可分为下列几种类型。1 .他励直流电机励磁绕组与电枢绕组无联接关系,而由其他直流电源对励磁绕组供电的直流电机称为他励直流电机,接线如图(a)所示。图中M表示电动机,若为发电机,则用G表示。 永磁直流电机也可看作他励直流电机。2 .并励直流电机并励直流电机的励磁绕组与电枢绕组相并联,接线如图( b)所示。作为并励发电机来 说,是电机本身发出来的端电压为励磁绕组供电; 作为并励电动机来说,励磁绕组与电 枢共用同一电源,从性能上讲与他励直流电动机相同。图2.1直流电机励磁方式3 .申励直流电机申励直流电机的励磁绕组与电枢绕组串联后,再接于直流电源,接线如图( c)所 示。这种直流电机的励
8、磁电流就是电枢电流。4 .复励直流电机复励直流电机有并励和申励两个励磁绕组,接线如图( d)所示。若用励绕组产生 的磁通势与并励绕组产生的磁通势方向相同称为积复励。若两个磁通势方向相反,则称为差复励。不同励磁方式的直流电机有着不同的特性。 一般情况直流电动机的主要励磁方式是 并励式、用励式和复励式,直流发电机的主要励磁方式是他励式、并励式和和复励式2.1.4 直流电动机的工作原理用电动机拖动电枢使之逆时针方向恒速转动,线圈边a b和c d分别切割不同极性磁极下的磁力线,感应产生电动势直流发电机的工作原理就是把电枢线圈中感应产生的交变电动势,靠换向器配合电刷的换向作用,使之从电刷端引出时变为直流
9、电动势因为电刷A通过换向片所引出的电动势始终是切割 N极磁力线的线圈边中的电动势。所以电刷 A始终有正极性, 同样道理,电刷B始终有负极性。所以电刷端能引出方向不变但大小变化的脉动电动 势。结论:线圈内的感应电动势是一种交变电动势, 而在电刷AB端的电动势却是直流 电动势。大致应用了 “通电导体在磁场中受力的作用”的原理,励磁线圈两个端线同有相反方向的电流,使整个线圈产生绕轴的扭力,使线圈转动。要使电枢受到一个方向不变的电磁转矩,关键在于:当线圈边在不同极性的磁极下, 如何将流过线圈中的电流方向及时地加以变换,即进行所谓“换向”。为此必须增添一个叫做换向器的装置,换向器配合电刷可保证每个极下线
10、圈边中电流始终是一个方 向,就可以使电动机能连续的旋转,这就是直流电动机的工作原理2.2 直流电机控制系统的组成直流电机控制系统共分为六个模块: 单片机最小系统模块、键盘控制模块、数码显 示模块、测速模块、直流电机驱动模块和电源模块。单片机最小系统主要由复位电路和时钟电路组成。复位电路为单片机系统提供可靠复位,使单片机能正常启动。时钟电路采用外部时钟方式,保证单片机各个功能部件都 是以时钟频率为基准,有条不紊地一拍一拍地工作。键盘控制模块包括方向控制键、加速键和减速键、启停键,分别与单片机的P2.0、p2.1、p2.2和P2.3相连。实现对直流电机的控制。并且键盘上连接有发光二极管,以指 示键
11、盘状态。数码显示模块采用共阴极数码管来动态显示直流电机的实际转动速度。 利用I/O 口 为数码管的com端提供低电平。二号单片机的 P1 口提供数码管的段选信号,P2.6和 P2.7控制数码管的位选信号。测速模块采用开关霍尔片对安放在直流电机转盘上的小磁片的磁信号进行检测, 直 流电机转盘每次带动小磁片经过霍尔片时, 具都将有脉冲信号从霍尔片输出。 单片机外 部中断口对信号进行采集。直流电机驱动模块选用驱动芯片L298,驱动直流电机转动。该模块与单片机的P1.0 P1.3 相连。电源模块是通过将市电220V转变为直流12V和直流5V分别供给驱动模块和单片 机模块。采用电源模块 LM2576和L
12、78052.2.1 总体设计框图图2.2总体设计框图2.2.2 单片机最小系统1.单片机概述近年,由于CHMOS技术的进步,大大地促进了单片机的 CMOS化。CMOS芯片 除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。 这也是今后以80C51取代8051为标准MCU芯片的原因。因为单片机芯片多数是采用 CMOS (金属栅氧化物)半导体工艺生产。CMOS电路的特点是低功耗、高密度、低速 度、低价格。采用双极型半导体工艺的 TTL电路速度快,但功耗和芯片面积较大。随 着技术和工艺水平的提高,又出现了 HMOS (高密度、高速度MOS)和CHMOS工艺。 CHMOS和H
13、MOS工艺的结合。目前生产的 CHMOS电路已达到LSTTL的速度,传输 延迟时间小于2ns,它的综合优势已在于 TTL电路。因而,在单片机领域 CMOS正在 逐渐取代TTL电路。单片机是通过内部总线把计算机的各主要部件接为一体,其内部总线包括地址总 线、数据总线和控制总线。其中,地址总线的作用是在进行数据交换时提供地址,CPU通过它们将地址输出到存储器或I/O接口;数据总线的作用是在CPU与存储器或I/O接 口之间,或存储器与外设之间交换数据;控制总线包括CPU发出的控制信号线和外部送入CPU的应答信号线等。2.STC10F04 单片机UJPuV;pl.jpl.4P5J 2POWn】7 83
14、J51112JIPOWER!C214LfVCC16pj 717C3十*1riwM如1门FIJ3P0.03?pOC见pO IFU 1PHP02P14PD.3P15PQ.4Pl.6P05P17R06RESTPQ7P3 RsDEAP31/TxlALEP3.疝而PSEHP3.疝而P27P34m)P2 6P3 5/TI_P2 5P3 回P24P3 麻P23XTAL2P22XTAL1P21GNDP2017p02pO :3,f0 434D 1=CU=?RET SENSING EOUTPUT 4OUTPUT 3lbPLfT4ENAB-E 芬小PUT 3LOGIC SUFPLVOLTAGEGNDIt,PUT 2
15、EABE AINPUT 1S jppty VOL-AG= V3OUTPUT 2OUTPUT rCURREhfr SENSING A图2.7 L298引脚图表2.3 L298引脚功能表引脚1A 15B2符号功能SENSING此两端与地连接电流检测电阻,并向驱动芯片反馈检测到的信号SENSINGOUT 1此两脚是全桥式驱动器A的两个输出端,用来连接负载OUT 2Vs电机驱动电源输入端57IN 1IN2输入标准的TTL逻辑电平信号,用来控制全棒式驱动器A的开关611ENABLEAENABLEB使能控制端.输入标准TTL逻辑电平信号;低电平时全桥 式驱动器禁止工作。8 2GND接地端,芯片本身的散热片
16、与 8脚相通9Vss逻辑控制部分的电源输人端口1012IN 3IN 4输入标准的TTL逻辑电平信号,用来控制全棒式驱动器B的开关1314OUT 3OUT 4此两脚是全桥式驱动器B的两个输出端,用来连接负裁2.2.7电源设计此系统中采用LM7805降为5V,简化了电路设计中电路板上存在的大电源干扰问J3CON2LM7K05 1VINOUTPUTQNC100 33uf】J4J5CON2CON2图2.8电源原理图第3章软件系统设计与分析3.1 程序设计前期准备3.1.1 硬件设计1 .总体设计框图图3.1总体设计框图说明如下:1 .单片机接受键盘信息,改变系统内部变量值。2 .单片机输出脉冲信号,控
17、制直流电机转动。3 .单片机根据直流电机实际转动值,控制数码管显示。3.1.2 程序设计平台考虑到程序的易读性和简练,程序设计采用C语言。程序编辑平台采用 Keil|1 nn2 - 2步程屈、心LJ包区t Ri” Jra-jsct 工岫叫 Fljsh F咤iph电trtl* 工。0 gCEH0p-|g| x|葭 *-Ul L-purct Or our 自 STJlfiTUP fi-c#include加ELdE uthat iznsigTisd. ch.-3.t 匕5匕 的mi 眄d intSblt upT士L;提帽sbir domF2*2;sb it. mmdmeZF;川林向Iant spee
18、d-LO;at-atic FOT-Q:区4+ 反attic nine scej-0; 起始注 FJend ditloy (in& i)inhi-lefi-:)ZU 门小透方南(sulLcb(scep)(case 0: FLDJcDl;IkteaI;case 1; HDk 口看;DeebIOI圆门I 步建mitchfk 曲 | (case 口: Pl Dx 鳍jbu*:;case 1: Pl&thciJBjiiE-ii:;HI IjJing- o J , n Size: dlata-15P0 xdata-Q code-760 ig hex file fromError(s)r 0 Warning
19、(s).| Build 二ormand 卜 Frd n -i /IkL ift C:t5Mr图3.2 Keil软件界面3.1.3程序设计思路直流电机控制系统的软件需要同时完成读取键盘、处理键盘、控制直流电机转动、 控制数码管动态显示等任务,这就必须通过中断技术来实现。在本设计中,主程序采用查询方式扫描键盘端口,检测按键动作是否发生,若有按键动作则处理键盘,根据按键值修改相应参数值,实现键盘的实时处理功能。定时器 0 中断服务程序控制直流电机的转动:根据当前显示的速度进行键盘手动改变T0定时时间常数,设置TH0和TL0的值,达到对转速精确控制的目的;根据转动方向控制位的值, 控制脉冲信号循环移动
20、的方向,达到对转动方向控制的目的。3.2程序流程图3.2.1主程序流程图直流电机控制系统的主程序在对整个系统初始化后主要完成读键盘和处理键盘的功能,如图3.3所示:图3.3直流电机控制系统主程序流程图系统上电复位后,先调用初始化子程序,对直流电机各端口,相关参数进行初始化, 设置T0工作方式控制时间常数。初始化完成后,直流电机处于停止状态, T0定时器处 于关闭状态。然后循环调用读键盘子程序和键盘处理子程序, 等待中断,以便实现直流 电机转动控制。3.1.3 读键盘子程序流程图首先初始化实际键值参数为 0FH1然后扫描P2 口,与初始值比较,相等则说明没 有键按下,不相等则软件消抖,以便确认是
21、否真的有键按下。延时10ms后再次扫描P2口,第二次与初始值比较,若相等则表明前一次比较不相等是由抖动产生;如果相等则 表明确实有键按下。执行键盘之程序里的指令,将相应的变量值改变,为键盘处理子程 序做准备。3.1.4 键盘处理子程序流程图按键处理子程序流程图如图3.4所示:是否是否是否是否P2.0按吓P2.3按吓P2.2按吓P2.1按吓TR0取反,用T0启停直流修改速度参数值,减速修改速度参数值,加速取反方向控制,改变电机转动方向退出图3.4键盘处理子程序流程图直流电机的启停控制通过启停定时器 T0来实现,因为定时器T0控制着脉冲信号的 输出,关闭定时器T0也就阻止了脉冲信号的输出。3.1.
22、5 电机控制中断程序流程图定时器0中断服务程序流程图如图3.5所示:图3.5定时器中断0服务程序流程图定时器中断0服务程序的中断时间由当前的转速决定。 进入中断程序后,首先要保 护现场,再根据当前值设置TH0和TL0的值。然后判断转动方向控制位的值,如果是 0 则控制脉冲信号P1.0、P1.2输出,如果是1则控制脉冲信号P1.1、P1.3输出。最后恢 复现场,返回,等待下次中断。通过用当前转速控制中断时间,控制了脉冲的输出频率,也就到达了控制直流电机 转动速度的目的;通过检测方向控制位的电平,选择脉冲信号P1.0、P1.2与P1.1、P1.3 间的切换,控制了直流电机各引出端的接通顺序,也就到
23、实现了直流电机转动方向的控制。详细程序见附录第4章调试与改进在系统完成后测试系统,检查硬件和软件是否能够协调运行, 并对系统出现的情况 进行分析,看是否能够达到系统创作之初所设想的效果, 如达不到则重新修改系统的硬 件结构或者修改软件的程序部分,直到达到设计需要为止。本系统的设计思路为:首先从整体上划分出各功能模块,然后硬件和软件同时进行 依次完成各个功能模块,最后将各个模块联系起来完成整个系统。在硬件调试的过程中,遇到了很多问题。主要有:1 .确定直流电机的使用方法,和控制模式。 此处尤为重要,这是整个系统的基础, 也是确定软件是否能控制直流电机思路的开端。2 .键盘设计完成后,在多次运行过
24、程中发现按键是否按下难以直观准确判断,在此处进行改进设计,为每一个按键接上一个发光二极管,当有键按下时,相对应的发光二极管变亮,使得按键动作形象直观。并以此方法测试直流电机控制程序。3 .向电源插座送入12V直流电源,测量LM7805出脚对地电压,是否为5V左右, 这个电压的测量可以直接在 L7805的OUT却和GN必问完成。软件测试的时候也有些问题,主要有:1 .软件去抖方式,和时间的控制。2 .控制直流电机转动的程序段完成后,调试发现对直流电机速度的控制范围过小, 查阅资料后发现设计思路不太合理, 原先的设计思路是用主程序控制直流电机转动, 采 用延时方式控制直流电机速度,由定时器处理键盘
25、;改进程序,主程序用来处理键盘, 由定时器控制直流电机转动,直流电机转动速度由定时器定时时间决定。 问题得到解决, 不仅扩大了直流电机速度的控制范围,也使得单片机对直流电机速度的控制更加精确。第5章总结经过马老师耐心细致的指导和近一个月的努力,本次毕业设计课题直流电机控制系 统告一段落。直流电机控制系统主要分为硬件设计和软件设计两个部分:硬件设计主要是把单片机最小系统、键盘控制模块、直流电机驱动模块、数码显示 模块、测速模块各个硬件功能模块及其它元件合理搭配并连接起来使其能够为软件运行 提供一个硬件平台。软件设计主要是通过编写程序代码, 实现对整个系统的控制。在系统上电复位后程 序自动运行,通
26、过接受外部的键盘操作修改系统参数值,控制直流电机的启停,以及转速的增减和转动方向的改变;定时器 T0根据系统参数控制直流电机的转动;实现直流 电机转动速度的动态显示。本系统具有相当的实用功能,两片单片机分别实现直流电机控制和测速,能基本符 合实际应用需求,本次设计由于设计时间较短,个人能力以及精力等因素的限制,加之 设计经验的不足,该系统还有许多不尽如人意的地方。该系统未能完全的实现设计的所 有功能。如:利用键盘输入转速值实现转速的控制,动态设置最低转速和最高转速等。通过这次毕业设计,使我从一开始对系统的不太熟悉,到能开发一个简单的系统, 在这整个过程中我学到了很多东西,掌握了一些常用的开发技
27、能,也发现了大量的问题, 有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题, 有更多的难点,但也会有更多的收获。近一个学期的设计,使我受益匪浅。这是我继课程设计以来再次加深了把理论设计 转换成现实实物的整个过程。如:电路设计、分析计算、画电路图、焊接电路、检查调 试、软件流程控制、编写调试软件、烧写软件到整个软硬件系统的调试,最后直到系统 完成。为我以后的设计打下了 一个更加坚实的基础。 而且使我更加熟悉了整个设计的过 程和一些软件及硬件设备的使用。对我以后面对这方面的工作有了很大的帮助。本论文是在马俊龙老师的精心指导下完成的。 在做毕业设计的整个过程中,得到了 马老
28、师的耐心指导,特别是在设计的初始阶段,马老师在需求分析方面给了我很大的帮 助,在老师帮助和指导下,使我能很快地就确定了系统的目的和开发方案,使后来的程 序实现方面使我少走了很多弯路,并提高了我的效率。这对于我以后的工作和学习都有 很大的帮助。经过几周的忙碌和工作,本次毕业设计已经接近尾声,作为一个大专生的毕业设计, 由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。在这里首先要感谢我的辅导老师,其次要感谢我的同学对我无私的帮助,特别是在软件的使用方面,正因为如此 我才能顺利的完成设计,我要感谢我的母校一一河南机电高等专
29、科学校, 是母校给我们 提供了优良的学习环境;另外,我还要感谢那些曾给我授过课的每一位老师,是你们教 会我专业知识。在此,我再说一次谢谢!谢谢大家! !。感谢我的老师,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他 们循循善诱的教导和不拘一格的思路给予我无尽的启迪。参考文献1李庆亮.C语言程序设计实用教程.北京:机械工业出版社,2006年2王新颖.单片机原理及应用设计.北京:北京大学出版社,2008年3张亚华.电子电路计算机辅助分析与辅助设计.北京:航空工业出版社,2004年4莫正康.电力电子应用技术.北京:机械工业出版社,2009年5胡学钢.数据结构算法设计指导.北京:清华大学出
30、版社,2001年6马全喜.电子元器件与电子实习.北京:机械工业出版社,2008年7曾晓宏.数字电子技术.北京:机械工业出版社,2004年8江晓安 董秀峰.模拟机电子技术.陕西:西安电子科技大学出版社,2002年9江力.单片机原理与应用设计.北京:清华大学出版社,2008年10王新颖.电力电子技术.北京:中国铁道出版社,1997年11王志良.电力电子新器件及其应用技术.北京:国防工业出版社,1995年附录附录1直流电机控制系统电路图通过上述对直流电机控制系统设计与分析, 直流电机控制系统总体设计电路 如图12VJS附录2程序清单主控程序:控制程序::#include #define uchar
31、unsigned char#define uint unsigned int#define TH0_M1(65536.10)/256#define TL0_M1(65536.10)%256sbit run=P2A5;sbit stop=P2A6;sbit down=P2A3;sbit up=P2A4;sbit output=P2A7;sbit input1=P2A0;sbit input2=P2A1;sbit FWDREV=P2A2;void Delay(uint k);uint ZKB1,sw;void init(void)input1=1;input2=0;output=0;sw=1;/*
32、定时器初始化*/TMOD=0x01;TH0=TH0_M1;TL0=TL0_M1;TR0=0;IE=0X82;void RS(void)if(!run)Delay(2);if(!run)TR0=1;output=1;if(!stop)Delay(2);if(!stop)TR0=0;output=0;void swerve(void)if(!TR0)if(!FWDREV) Delay(3);if(!FWDREV)+sw;if(sw=3)sw=1;else sw=2;Delay(10);if(sw=1)input1=1;input2=0;elseinput1=0;input2=1;void main
33、 () init();ZKB1=10;while(1)swerve();RS();if (!up)Delay(2);if (!up)ZKB1+;if (!down)Delay(2);if (!down)ZKB1.;if (ZKB121) ZKB1=20;/0.080.8if (ZKB1=26) click=1;if (click0;x.);测速程序:#include#define uchar unsigned charuchar j,k,i,b,a,R,sin,A1,A2,A3,second;uchar code table尸0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d
34、,0x07,0x7f,0x6f;void delay(ucha门)for(j=i;j0;j.)for(k=125;k0;k.);)void display。P0_0=0;P1=tableA1;delay(5);P0_0=1;P0_1=0;P1=tableA2;delay(5);P0_1=1;P0_2=0;P1=tableA3;delay(5);P0_2=1;)void main()TCON=0X11;IE=0X83;TMOD=0X01;while(1)P2=R;A1=R/100;A2=R/10%10;A3=R%10;for(a=2000;a0;a.) for(b=10;b0;b.)display。;)void timer0() interrupt 1static uchar sin=0;TH0=(65535.50000)/255;TL0=(65535.50000)%255;sin+;if(sin=20)sin=0;R=second;second=0;void cesu() interrupt 0second+;