直流电机控制系统的设计
摘要 ........................................................................ ? 第一章 绪 论 ............................................................... 1 1.1 .................................................... 1 1.1.1 课题的背景 ........................................................ 1 1.1.2 课题的目的及意义 ................................................... 1 1.2 论文的主要内容 ........................................................ 1 1.3 课题设计的相关理论知识 ................................................. 2 1.3.1 步进式直流电机控制原理 ............................................. 2 1.3.2 串口通信原理 ...................................................... 3
............................................ 5 2.1 单片机的选择 .......................................................... 5 2.2 SPCE06LA的内核特点 .................................................... 5 2.3 整体
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
设计 .......................................................... 6 2.4 小结 .................................................................. 7
.......................................................... 7 3.1 直流电机控制系统设计................................................... 7 3.1.1 驱动芯片的选择..................................................... 7 3.1.2 直流电机的选择..................................................... 8 3.1.3 直流电机驱动电路 ................................................... 9 3.2 显示模块硬件设计 ..................................................... 10 3.3 PC串口通信模块硬件设计 ............................................... 11 3.4 小结 ................................................................. 12
........................................................ 13 4.1 SPCE061A编程语言 ..................................................... 13 4.2 系统子程序设计 ....................................................... 14 4.2.1 功能概述 ......................................................... 14 4.2.2 系统初始化 ....................................................... 15
4.3 直流电机模块程序设计.................................................. 19 4.3.1 电机驱动程序设计 .................................................. 19 4.3.2 电机调速调向程序设计 .............................................. 20 4.3.3 电机调速范围程序设计 .............................................. 22 4.4 显示模块程序设计 ..................................................... 23 4.4.1 显示模块流程图.................................................... 23 4.4.2 显示程序设计 ..................................................... 24 4.5 ................................................... 25 4.5.1 串口通信软件
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
.................................................. 25 4.5.2 串口通信流程图.................................................... 26 4.5.3 串口通信程序设计 .................................................. 27 4.6 小结 ................................................................. 28
............................................................ 29 5.1 系统测试 ............................................................. 29 5.2 数据分析 ............................................................. 29 5.3 小结 ................................................................. 31 结 论 ...................................................................... 32
........................................................................ 33
.................................................................... 33 ABSTRACT ................................................................. 34
直流电机控制系统的设计
摘要直流电动机的优点是起动力矩大,容易改变转速,因此许多大型起重设备、电力机车、电车等都使用直流电动机。直流电动机提供稳定的转速,跟交流电机相比,产生的磁干扰小,可控制性
好。步进式直流电动机的突出优点是可以在宽广的频率范围内,利用改变脉冲频率来实现调速,快
速起停、正反转控制及制动等,由其组成的开环系统简单、廉价、可靠,因此在众多领域有着极其
广泛的应用。本设计重点研究了高性能直流电机驱动器及其控制系统,以微机作为上位机,凌阳
SPCE061A单片机作为下位机。下位机设定电机速度,上位机对下位机的数据信号进行显示和备份。
通过单片机与微机的串口通讯,实现对直流电机的远距离实时监控。使用软件代替环形分配器,完
成了高效、节能的直流电机控制系统设计。软件使用易于维护的模块化设计方法,并采取软、硬件
抗干扰技术,提高了系统稳定性。大量实验表明系统性能达到设计要求,因此具有一定的实用价值。
关键字: 直流电机 控制系统 单片机 串口通信
?
2009届机械设计制造及其自动化专业毕业设计(论文)
第一章 绪 论
1.1 课题背景、目的及意义
随着现代化工业进程的发展,控制系统与数据通信在各领域的运用也日益增加,其主导作用也
逐渐体现,因此通过本次设计与学习一方面可以锻炼自己的动手能力与学习能力,另一方面可以让
我们把握住现代信息社会脉搏,为以后工作和学习确立正确方向与目标。 1.1.1 课题的背景
在电气时代的今天,电动机在工农业生产、人们日常生活中起着十分重要的作用。直流电机是
最常见的一种控制电机、在各领域中得到广泛应用。直流电机作为执行元件,是机电一体化的关键
产品之一, 广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,直流电机的需求
量与日俱增,在各个国民经济领域都有应用。步进式直流电机是一种将电脉冲转化为角位移的执行
机构。当直流驱动器接收到一个脉冲信号,它就驱动直流电机按设定的方向转动一个固定的角度,
它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确
定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
直流电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用
于各种开环控制。研究直流电机的控制和测量方法,对提高控制精度和响应速度、节约能源等都具
有重要意义。
1.1.2 课题的目的及意义
本课题是以SPCE061A单片机为控制核心,实现对直流电机的转速测量和转速调节,为进一步
研究和优化直流电机控制方法提供基础。
设计直流电机控制系统能够充分发挥电机的特性,通过本课题,一方面训练我们在查阅
资料
新概念英语资料下载李居明饿命改运学pdf成本会计期末资料社会工作导论资料工程结算所需资料清单
的
基础上,了解凌阳SPCE061A单片机控制的一些基本技术,掌握其控制系统的分析方法与实现,能
对串口通信进行系统学习与掌握;另一方面通过本次设计,设计出相应的控制系统,以实现对直流
电机转速的测量和转速的调节,且能实现与PC机通信。并以此培养自己的自学和动手能力,从而
今后参加工作或进一步深造打下良好的基础。
1.2 论文的主要内容
本次设计主要是对串口通信原理与直流电机的控制理论学习,结合单片机对工业领域中的控制
系统与数据通信进行模拟,同时也进一步了解并掌握了编程语言的具体应用。
第 1 页 共 34页
杨雄鹰:直流电动机控制系统设计
在设计过程中以整体分析为前提,细分各模块(电机模块、显示模块、串口模块),对各模块
的创建与调试过程都进行了说明,在此期间可以充分了解各模块功能,为下一步整体测试做好充分
准备。
系统调试达到整体功能的实现,通过主程序调用各子程序,使各模块协同运作,并对其中存在
的问题进行分析与修正。
对设计调试过程中的数据进行统计,并进行数据与误差的分析,确定优化方案,从而达到在学
习与实践中不断进步的目的。
1.3 课题设计的相关理论知识
在设计过程中主要学习与设计的是电机控制与串口通信部份,因此先对其了解是非常重要的。
为了更好的实现控制作用,本次设计中所选用的直流电机是步进式直流电机。 1.3.1 步进式直流电机控制原理
直流电动机是依靠直流工作电压运行的电动机,广泛应用于收录机、录像机、影碟机、电动剃
须刀、电吹风、电子表动玩具等。步进式直流电机是直流电机的一种。步进式直流电机是将电脉冲
信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决
于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个
步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、
位置等控制领域用步进电机来控制变得非常的简单。
步进式直流电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。例如:三相异步电机的三拍工作方式,其各相通电顺序为
A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
(2)控制步进式直流电机的转向
如果给定工作方式正序换相通电,步进式直流电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进式直流电机的速度
如果给步进式直流电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉
. 第 2 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文) 冲的间隔越短,步进式直流电机就转得越快。调整单片机发出的脉冲频率,就可以对步进式直流电
机进行调速。
因此在本次设计中根据设计要求可以选用直流永磁二相步进式直流电机,便于步进式直流电机
实现直流调整,直流角便于计算,同样可以选用直流永磁四相直流电机,它是四相八拍,工作原理
[1]和永磁直流电机相同,可以调用二相直流电机的半步和优化半步脉冲程序实现。 1.3.2 串口通信原理
目前, 随着现代信息技术的发展,计算机串口通信技术已日趋成熟。由于微机性能价格比高、
分析处理能力强、处理速度快以及单片机抗干扰能力强、使用灵活等特点,利用PC机作为上位机,单片机作为下位机的主从工作方式在工业控制领域中被广泛采用。
串口叫做串行接口,也称串行通信接口,按电气
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
及协议来分包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不
涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据
传输领域。
RS-232-C:也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的
用于串行通讯的标 准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座。后来的PC上使用简化了的9芯D型插座。现在应用中25芯插头座已很少采用。现在的电脑一般有两个串行口:COM1和COM2,你到计算机后面能看到9针D形接口就是了。现在有很多手机数据线或者物流接收器都采用COM口与计算机相连。同时,串
口通信协议也可以用于获取远程采集设备的数据[2]。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远
距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
PC机与下位机的通信可以采用高级语言编程实现,如Delphi、VC等。Delphi 是新一代面向对象的可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,越来越在构架企业
信息系统方面发挥着重要作用。由于Delphi 这些显著特点,利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而实现系统监测控制和信息处理的关键是解决PC机与单片机之间
第 3 页 共34页
杨雄鹰:直流电动机控制系统设计
的串口通信问题。本次调试选用ComTools V2.06 串口调试工具,因为它是操作方便的串口调试工具, 主要功能如下:
, 可设置各种通讯速率、奇偶校验、数据位和停止位;
, 可分别设置ASCII码(包括中文)或十六进制数据格式的发送模式或接收模式; , 能将接收数据保存成文本文件,便于观察分析;自动保存设置参数,无需每次重新设置; , 可以设置16条定时自动发送的数据,以及每条数据发送后的延时时间; , 可以同时监控2个串口,利用特制电缆可监听2个串口设备之间的通讯过程; , 发送数据时,可自动计算并添加和校验发送;
, DTR自动控制是为了方便RS485通讯测试而添加的功能;
, 方便的查找功能,使你可以轻松搜索接收文本框中的字符;
, 使用快捷键可快速调用最近五次发送的不同数据。
. 第 4 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
2.1 单片机的选择
传统的单片机学习硬件方案是“编程器+开发系统+仿真器”,由于这些设备相互之间各自独立,
使用者在学习或开发项目时,需要反复不停地拔插电缆、芯片、电源等,其繁琐的连线和复杂的操
作,极大的降低了学习和开发的效率,如稍有不慎就有可能造成器件和设备的损坏,给使用者带来
不必要的麻烦或损失。而且备齐这些设备往往需要一笔昂贵的费用,大大提高了单片机学习的门槛。
SPCE061A单片机学习开发系统将开发软件、单片机开发系统(或称“实验板”)、下载线、
编程器、仿真器进行完美的结合。SPCE061A 单片机里面整合了进行在线编程控制的功能模块,试
验过程中无需拔插任何电缆和芯片,也无需切换电源,配合下载线,就可轻松地将编译好的代码下
载到开发系统上进行验证或演示,整个过程只需利用鼠标操作即可。当然也可以使用配套的开发环
境直接对实验板上的资源进行在线仿真。该开发系统摆脱了传统、繁锁的单片机学习方式,将当今
最流行、最经济有效的学习方案完美地整合在了同一个系统中,是一个快捷、高效、灵活的单片机
学习、开发方案。有了这个开发系统就同时拥有了学习实验板、下载线、编程器、仿真器,具有非
凡的性价比,是单片机爱好者快速学习单片机开发的理想工具。 2.2 SPCE06lA的内核特点
随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处
理以及数字信号处理(DSP,Digital Signal Processing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。它的CPU内核采用凌阳最新推出的µ'nSP?(Microcontroller and Signal Processor)
16位微处理器芯片(以下简称µ'nSP?)。围绕µ'nSP?所形成的16位µ'nSP?系列单片机(以下简称µ'nSP?家族)采用的是模块式集成结构,它以µ'nSP?内核为中心集成不同规模的ROM、
[3]RAM和功能丰富的各种外设接口部件, µ'nSP?家族有以下特点:
? 体积小、集成度高、可靠性好且易于扩展
µ'nSP?家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功
能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不
同用户的需求。
? 具有较强的中断处理能力
第 5 页 共34页
杨雄鹰:直流电动机控制系统设计
µ'nSP?家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。
? 高性能价格比
µ'nSP?家族片内带有高寻址能力的ROM、静态RAM和多功能的I/O口。另外,µ'nSP?的指令系统提供具有较高运算速度的16位×16位的乘法运算指令和内积运算指令,为其应用增添了
DSP功能,使得µ'nSP?家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。
? 功能强、效率高的指令系统
µ'nSP?指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这
可以大大缩短产品的开发时间。
? 低功耗、低电压
µ'nSP?家族采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,
极大地降低了其功耗。另外,µ'nSP?家族的工作电压范围大,能在低电压供电时正常工作,且能
用电池供电。这对于其在野外作业等领域中的应用具有特殊的意义。
2.3 整体方案设计
确定选用单片机61之后,就可以根据32位I/O接口对各模块进行合理的控制设计了。
通过对单片机61板的程序设计,实现正转、反转、速度增加、速度降低,同时可以通过两种
方法实现实时测速,一种是通过外围测速电路将测速所得信号返回给单片机;另一种直接通过单片
机给驱动芯片的脉冲计算出直流电机的转速,再把所得的转速值传递给显示电路部份,达到整体功
能的实现。通过对其直流电机特点了解之后认为可以直接对其控速,所以选用脉冲计算控速方案,
并对其转速传回PC机,其设计的原理框图如图2-1所示。
51 直流电机驱动芯片 直流电机
单
片
1机 数码管驱动芯片 数码管 ×3键盘
2-1
. 第 6 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文) 2.4 小结
从以上的了解可知:(了解与学习可知)SPCE061A型单片机是一款16位微处理器,具有体积小、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点,内嵌32K字闪存FLASH,处理速度,能够很方便地完成普通单片机的功能,因此在本次设计中选用61单片机能减少很多外围电路,而且其较大程度上兼容C语言与汇编语言程序,也给编程带来了很多方便。
由单片机控制系统的一般结构和本系统方案特点,本系统的硬件可以分为三个大部份:电机模
块、显示模块和通信模块。
3.1 直流电机控制系统设计
直流电机控制系统主要由电机驱动电路与电机组成,在设计驱动电路时以简便、实用为佳,因
此要对驱动芯片做一定比较之后再选择,而在本次设计中的直流电机我们选用常见的35BYJ46 ,为了达到理想的控制效果就必须对其技术参数、转动原理弄清楚。
3.1.1 驱动芯片的选择
方案一:采用凌阳的SPGT62C19B(DIP_24),它的特点为:双极性电压驱动两相直流电机,驱
动电源电压范围10v~40v,输出电流可达750mA,内置过热保护功能,低电压停止,具有Full Step(整步1.8?),Half Step(半步0.9?),Modified half step(1/4细分)和Microstepping mode(1/8细分)控制方式, 工作温度-20?~85?C。驱动电路如下:
SPGT62C19B的内部由两组完全相同的控制电路组成了两路输出通道。输入控制信号经前级缓
冲后送入片内控制器,然后由控制部分进行处理并驱动晶体管,最后由OUT端口输出驱动信号以控制电机的运行[4]。
PHASE1的逻辑电平值决定了该通道的电流输出方向。PHASE1的逻辑为0时电流输出方向为OUT1B?OUT1A,PHASE1的逻辑为1时电流输出方向为OUT1A?OUT1B。
可见其资料较齐全,也是凌阳模块中常用的芯片,在编写程序时也较容易,但这块芯片在市场
上不易买到。
第 7 页 共34页
杨雄鹰:直流电动机控制系统设计
方案二:采用L298N芯片驱动电机
L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的I/O口提供信号;而且电路简单,使用比较方
便。通过单片机SPCE061A的IOB8~IOB13对L298N的IN1~IN4口和ENA、ENB口发送方波脉冲信号。使用L298N芯片能稳定地驱动直流电机,但价格偏高,同时使用L298N时,可以用L297
来提供时序信号,可以节省单片机I/O口的使用;也可以直接用单片机模拟出时序信号,控制不复
[5]杂。
方案三:采用ULN2803驱动电机
内部由高电压大电流八达林顿晶体管阵列组成,该阵列系列中的八个NPN达林顿连接晶体管是低逻辑电平数字电路(如TTL,CMOS或PMOS/NMOS)和大电流高电压要求的灯、继电器、
打印机和其它类似负载间的接口的理想器件。广泛用于计算机,工业和消费类产品中。所有器件有
集电极开路输出和用于瞬变抑制的续流箝位二极管。ULN2803的设计与标准TTL系列兼容[6]。
用来控制二相直流电机时,选用其1~8脚中的连续4个引脚来与单片机输出脉冲控制端口相连,
再用输出引脚11~18中与先选择的输入相对应的4个输出引脚做放大输出端,与直流电机的两组线
圈相连,9引脚接地,10引脚接直流电源,如果电机是四相的时候可以直接把直流电机的抽线与直
[7]流电源相连,使用ULN2803芯片也能较好的驱动直流电机(功率输出要求不高的情况下),价格
最便宜,市场上基本上都有,而且内部结构简单,便于编写驱动直流电机程序,可以直接通过对脉
冲延时就可以控速,效果明显而且较理想。因此本次设计选用ULN2803作为直流电机驱动芯片,同时外加一个12V直流电源作为电机驱动电源。
3.1.2 直流电机的选择
现在比较常用的直流电机包括反应式直流电机(VR)、永磁式直流电机(PM)、混合式直流电机(HB)和单相式直流电机等。
永磁式直流电机一般为两相,转矩和体积较小,直流角一般为7.5度 或15度。反应式直流电机一般为三相,可实现大转矩输出,直流角一般为1.5度,但噪声和振动都很大。反应式直流电机
的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。混合式直流电机
是指混合了永磁式和反应式的优点[8]。
. 第 8 页 共 34页 12VDC?10% >600Hz 额定电压 空载牵入频率
2009届机械设计制造及其自动化专业毕业设计(论文)
4 >1000Hz 相 数 空载牵出频率
1/64 >39.2mN.m(120Hz) 减速比 牵入转矩
5.625? /64 >34.3mN.m 步距角 自定位转矩
<35K(100Hz) 直流电阻 300Ω?7%(25?) 温 升
>10MΩ(500V) <35dB(100Hz,No load,10cm) 绝缘电阻 噪 声
600VAC/1mA/1s About 40g 介电强度 重 量
A 绝缘等级 综上所述,永磁式直流电机更适合于本次设计。所以本次设计选用慈溪市内九菱电器有限公司
生产的35BYJ46直流电动机,其主要技术参数如表3-1所示。
表3-1 主要技术参数
其相励磁顺序如表3-2所示(从输出轴方向看为逆时方向)。
表3-2 相励磁顺序表
连线导线颜分配顺序
序号 色 1 2 3 4 5 6 7 8 5 + + + + + + + + 红
4 橙 - - - 3 黄 - - -
2 粉 - - - 1 蓝 - - -
3.1.3 直流电机驱动电路
由于本次设计直接选用ULN2803芯片做为驱动电机芯片,所以外围电路少,不用再接光耦(外
围电路对单片机影响不大的情况下)也能达到较好的效果,根据其芯片内部结构,如图3-3所示,可接直接用1-4位与单片机电机控制引脚相连,而15-18为信号放大后连接电机便可直接驱动,当
[8]然9和10要分别接地和高电平。
第 9 页 共34页
杨雄鹰:直流电动机控制系统设计
图3-3 ULN2803内部结构图
用L7805直接把12V变为5V做为单片机电源,这样还可以解决电机电源与单片机共地的问题,
因此其电路如图3-4所示。
U?电机1脚输出U?+5V12INOUT118IOB0电机2脚IN1OUT1217GNDIOB1电机3脚IN2OUT2316IOB2电机4脚C4L7805CVIN3OUT3C3C2C14153IOB3IN4OUT4电机5脚51422uF 0.1uF220uFIN5OUT5 0.1uF 613IN6OUT6712IN7OUT7811IN8OUT8VCC_910GNDK
ULN2803A
图3-4 直流电机驱动电路
3.2 显示模块硬件设计
显示模块是平时常见的模块,其主要由数码管和数码管驱动芯片组成,由于其选择性较大,所
以在选择时根据本次设计特点确实方案。
? 数码管显示,数码管的显示驱动使用74LS164,通过SPCE061A的IOB0和IOB1口对DATA和CLK发送数据。
? 也可以用4位共阴极LED数码管,数码管采用ULN2003A为其提供驱动电流。ULN2003A是7路达林顿三极管阵列,这里用到了其中的4路,分别连接到数码管的4个位选脚G1~G4,选取单片机的8位I/O个为数码管的“段控制”口,连接到数码管的A~H这8个段控制脚;再用4位I/O作为数码管的“位控制”口,连接到驱动苡片ULN2003A的DIG1~DIG4,即可实现数码管显示控制[7]。
第?种方法可以节省I/O端口,在做模块时电路比较复杂;第?种方法对资源要求高,占用I/O
. 第 10 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文) 口并不是很多,综合本次设计实用性考虑选用第?种方案。其电路如图3-5所示。
U3U2
1161211DIG1AG1G1IN1OUT1G1a21597DIG2G2BG2IN2OUT2G2b3144DIG3G3CIN3OUT3c4132DIG4G4DIN4OUT4d5121EIN5OUT5e61110FIN6OUT6f71085GG3IN7OUT7G3g8963HGNDG4GNDCOMG4dp
WD03641AXULN2003A
图3-5显示电路图
3.3 PC串口通信模块硬件设计
硬件电路采用接收数据、发送数据、地线三根信号线实现通讯,可以采用查询的方式实现数据
[3]的接收与发送。数据格式的确定,为简单起见采用一位启动位、8位数据位、无奇偶校位、结束
位,本次设计采用波特率为115200bps.
SPCE061A 有两个串行接口,一个是 SIO,另一个是 UART。
[2]本次设计使用SPCE061A的异步串行端口UART实现与PC通信。SPCE061A的I/O电平和PC不一致,采用一片MAX232进行电平转速。MAX232的RXD1和TXD1分别接SPCE061A的
[3]IOB9(TX)和IOB7(RX), 其通信端口电路如图3-6所示。
VDD
U?C5C4116C1+VCC1043C3C1-C1042104C2+VS+10456C2-VS-C11104111422uFT1INT1OUT107T2INT2OUT51312R1INR1OUT989RXD1R2INR2OUT4815TXD1GND1037MAX232N11261
SUB-D9
图3-6 PC通信端口电路
第 11 页 共34页
杨雄鹰:直流电动机控制系统设计 3.4 小结
在硬件设计过程中由于不能采用凌阳推介的芯片,所以选用功能相当的器件代替,从而在使用
过程中就必须对其调试,根据其内部结构编写其驱动程序,来达到设计要求。由于各个模块单独建
立时其电路并不是太复杂,因此就采用万用板焊接电路,而且这样可以给人很直观的感觉,也能在
设计中使思路更加清晰。
. 第 12 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
4.1 SPCE061A编程语言
是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。
显然,在HLL平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,
便于重复使用从而增加代码的开发效率。HLL中又因C语言的可移植性最佳而成为首选。因此,
支持C语言几乎是所有微控制器设计的一项基本要求。µ'nSP?指令结构的设计就着重考虑了对C语言的支持。同样凌阳单片机也支持汇编以及C语言嵌入式汇编,使其可以方便地进行相互调用,大大提高了编程效率。
程序调用协议中, 由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线( _ )为前缀。模块代码间的调用,是遵循µ'nSP?体系的调用协议(Calling Convention)。所谓调用协议,是指用于标准子程序之间一个模块与另一模块的通讯约
定;即使两个模块是以不同的语言编写而成,亦是如此。
调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一
个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则。
调用协议包括一些相关要素:调用子程序间的参数传递;子程序返回值;调用子程序过程中所用堆
栈;用于暂存数据的中间寄存器。
µ'nSP?体系的调用协议的内容如下[8]:
? 参数传递
参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中被
声明过的数据类型。但如果函数的调用发生在其声明之前,则传递在调用函数里的参数是不会被进
行任何数据类型转换的。
? 堆栈维护及排列
函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。
? 返回值
16位的返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。若要返回结构则需在R1中存放一个指向结构的指针。
? 寄存器数据暂存方式
第 13 页 共34页
杨雄鹰:直流电动机控制系统设计
编译器会产生prolog/epilog过程动作来暂存或恢复PC、SR及BP寄存器。汇编器则通过„CALL?指令可将PC和SR自动压入栈中,而通过„RETF?或„RETI?指令将其自动弹出栈来。
? 指针
编译器所认可的指针是16位的。函数的指针实际上并非指向函数的入口地址,而是一个段地
址向量_function_entry,在该向量里由2个连续的word的数据单元存放的值才是函数的入口地址。
在C中要调用一个汇编编写的函数,需要首先在C语言中声明此函数的函数原型。尽管不作
声明也能通过编译并能执行代码,但是会带来很多的潜在的bug。函数的返回相对简单,在汇编子
函数中,返回时寄存器R1里的内容,就是此函数16位数据宽度的返回值。当要返回一个32位数据宽度的返回值时,则利用的是R1和R2里的内容:R1为低16位内容,R2为高16位的内容[9]。
在汇编函数中要调用C语言的子函数,那么应该根据C的函数原型所要求的参数类型,分别
把参数压入堆栈后,再调用C函数。调用结束后还需再进行弹栈,以恢复调用C函数前的堆栈指
针。此过程很容易产生bug,所以需要细心处理。
为了使C语言程序具有更高的效率和更多的功能,需在C语言程序里嵌入用汇编语言编写的
子程序。一方面是为提高子程序的执行速度和效率;另一方面,可解决某些用C语言程序无法实
现的机器语言操作。而C语言代码与汇编语言代码的接口是任何C编译器毋庸置疑要解决的问题[9]。
通常,有两种方法可将汇编语言代码与C语言代码联合在一起。一种是把独立的汇编语言程
序用C函数连接起来,通过API (Application Program Interface) 的方式调用;另一种就是在线汇编
方法,即将直接插入式汇编指令嵌入到C函数中。
4.2 系统子程序设计
首先对要实现的系统功能与流程进行整体分析,并对系统中的初始化进行描述,在此基础上对
各模块的硬件与软件进行设计。
4.2.1 功能概述
通过单片机61板上自带的3个键(KEY1、KEY2、KEY3)进行电机转速转向及串口通信进
行设定,当运行程序时系统先开始初始化,并调用键盘扫描程序判定是否有按键输入(同时识别),
KEY1键进行速度调整(KEY1键增加,KEY2减小),KEY2键进行方向调节(KEY1键正转,KEY2键反转),按KEY3键返回再次进入功能键选择并给PC机发送数据,如果已设定就继续按KEY3
. 第 14 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文) 进行确定就启动电机。
主程序流程如图4-1所示。其主要功能在于对一些变量的设置,以及对I/O口的初始化设置,当然,最重要的还是用其将各个子程序连接在一起,对各个子程序的调用顺序作出一个好的统筹安
排,以形成一个完整而合理的程序,从而实现直流电机控制及与PC机串口通信。
开始
初始化
Key2 Key1 键盘?
方向控制 速度控制
Key1 Key2 Key3Key1 Key2
3
正转 反转 速度增速度减
加 小 Key3Key3
3 3 速度显示
串口通信
启动电机
返回
图4-1 主程序流程
4.2.2 系统初始化
? 系统子程序初始化
本次设计时可以选用默认时钟,所以在此不再定义它,对子程序中应初始化的程序在此设定,便
于主程序调用子程序,同时全局变量也在此定义,结合本次设计要求与实践调试得出初始化程序如
下:
//==================================================================
// 语法格式: void System_Init(void)
// 实现功能: 系统初始化(时钟、变量等)
第 15 页 共34页
杨雄鹰:直流电动机控制系统设计
//==================================================================
void System_Init(void)
{
Key_Init(); //键盘初始化
DIG_Init(); //显示初始化
F_UART_Initial(); //串口初始化
g_Direction = 1; // 初始设置为正转
g_Speed = 25; //初始速度25度每秒
}
所以要? I/O端口设置
SPCE061A 有两个16 位的通用并行I/O口:A口和B口。这两个端口的每一位都可通过编程单
独定义成输入或输出口。
SPCE061A 提供了位控制结构的I/O 端口,每一位都可以单独用于数据输入或输出。每个独立
的位可通过以下3 种控制向量来作设定:
? 数据向量Data
? 属性向量Attribution
? 方向控制向量Direction
每3个对应的控制向量组合在一起,形成一个控制字,用来定义对应I/O 端口位的输入输出状态和方式。例如,假设需要I/OA0 是下拉输入引脚,则相对应的Data、Attribution和Direction 的值均被设为“0”。如果需要I/OA1是带唤醒功能的悬浮式输入引脚,则Data、Attribution和Direction的值被设为“010”。与其它某些单片机相比,SPCE061A除了每个I/O端口可以单独定义其状态外,每个对应状态下的I/O端口性质电路都是内置的,在实际的电路中不需要再外接
[10]。
在本次设计中,按键使用A低8位I/O端口,A高8位I/O端口用于数码管的段选,B的I/O.0~3
用于直流电机驱动芯片信号引脚,B的I/O.12~15用于数码管的位选,B的I/O.7和I/O.10用于与
PC机串口通信,其中用于键盘,数码管和串口通信的I/O端口可以直接在子程序中锁定引脚,而电机
驱动程序是直接写在主程序文本中,定义其为上拉输出,其程序定义如下:
#define StpMotor_Ctr_PIN 0x000F //直流电机控制引脚
//IOB的相应端口为上拉输出
*P_IOB_Dir |= StpMotor_Ctr_PIN;
*P_IOB_Attrib |= StpMotor_Ctr_PIN;
. 第 16 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
*P_IOB_Data &= ~StpMotor_Ctr_PIN;
在单片机中,中断技术主要用于实时控制。所谓实时控制,就是要求单片机能及时地响应被控
对象提出的分析、计算和控制等请求,使被控对象保持在最佳工作状态,以达到预定的控制效果。
由于这些控制参量的请求都是随机发出的,而且要求单片机必须作出快速响应并及时处理,因此,
必须应用中断编程。
SPCE061A的中断源基本可以分为四大类(图4-2),这四大类在编程时的程序结构基本类似,我
们只要掌握了一个中断源的编程,别的中断程序就可很快掌握。在中断中接受外部中断I/O的数据,一旦有产生中断,改变相应标志位,启动相应D/A,D/A转换完毕后产生中断,在中断中进行处理
[11]。在中断中实现串口通信。
定时器中断源
外部时钟 时基中断源 中断源 中断源
PWM 与UART
中断源
图4-2 SPCE061A包含的中断源
主函数的编程,基本的程序结构是:初始状态的设置;打开中断;主循环中清标志位。根据硬
件电路图设置IO口,设置中断寄存器,包括中断控制寄存器P_INT_Ctrl、清除中断标志控制单元P_INT_Clear、激活和屏蔽中断控制单元P_INT_Ctrl_New,P_INT_Ctrl控制单元具有可读可写属性,
写中断控制寄存器的某位为1时,即允许该位所代表的中断被开放,读中断控制寄存器确定CPU响
应的中断。
即使设置了中断寄存器,打开中断,程序还是不能进入中断,需要使用中断控制指令。
FIQ ON:该指令用来开通FIQ中断
FIQ OFF:该指令用来屏蔽FIQ中断
IRQ ON:该指令用来开放IRQ中断
INT OFF:该指令用来屏蔽IRQ中断
INT:该指令是用来设置允许/禁止FIQ和IRQ中断
在本次设计中,各模块是独立建立,并在系统调试前实现各模块功能,再对其系统调整,因此
第 17 页 共34页
杨雄鹰:直流电动机控制系统设计
必须对中断编程与单一模块编程进行了解是十分必要的。中断编程与单一模块编程首先都要设置初
始状态,对一些寄存器进行设置;中断编程主函数在循环等待中断时要进行清标志位,单一模块编
程在循环查询中也要进行清标志位;中断编程与单一模块编程首先都要设置初始状态,对一些寄存
器进行设置;中断编程主函数在循环等待中断时要进行清标志位,单一模块编程在循环查询中也要
进行清标志位。
中断编程与单一模块编程相比,由于中断编程是CPU对外设的信号作出反应,所以可以节省CPU大量时间,提高执行效率,而单一模块只有一个入口一个出口,程序结构清晰,中断编程程序
复杂。
在主循环里主要进行清标志位操作,可以设置标志位,标志位在中断中改变,循环中如果标志
满足条件,执行相应功能,不符合就等待中断[12]。清除中断标志控制单元主要用于清除中断控制标志位,当CPU响应中断后,会将中断标志置1,当进入中断服务程序后,要将其控制标志清零,否则 CPU总是执行该中断。P_INT_Clear寄存器的每一位均对应一个中断,因此中断服务函数的编程,基本的程序结构是:
? 关闭中断。
? 打开中断。
? 主循环中清标志位。
在此次设计中,用到的键盘中断为IRQ6_TMB2中断(128Hz),当对键盘操作时中断响应,其设
置如下:
_IRQ6:
push r1,r5 to [sp];
r1 = C_IRQ6_TMB2
test r1,[P_INT_Ctrl]
jz ?L_IRQ6_Exit
[P_INT_Clear] = r1
/////----- IRQ6_TMB2 User Code -----/////
call F_Key_Scan
/////----- IRQ6_TMB2 End -----/////
?L_IRQ6_Exit:
pop r1,r5 from [sp]
reti
. 第 18 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
4位共阴数码管显示驱动程序,使用IRQ4_4KHz中断,让它能在转速调整、方向调整、以及电机转动时显示转速,其设置如下:
_IRQ4:
?L_IRQ4_4KHz:
r1 = C_IRQ4_4KHz
test r1,[P_INT_Ctrl]
jz ?L_IRQ4_Exit
[P_INT_Clear] = r1
/////----- IRQ4_4KHz User Code -----/////
call F_DIG_Drive
/////----- IRQ4_4KHz End -----/////
?L_IRQ4_Exit:
pop r1,r5 from [sp]
reti
由于串口的输入输出控制I/O属于特殊功能端口,在对其初化程序时可以直接把中断程序定义
在其中,所以不用从新写中断服务程序。
4.3 直流电机模块程序设计
直流电机的转动是由电机相励磁顺序决定的,对其编程时就必须按时序来写才能让电机正常运
[13]转,而在调速设计时只需对脉冲延时调整即可实现。 4.3.1 电机驱动程序设计
在本次设计中,根据电机相励磁顺序及ULN2803芯片对应位信号放大特点,可以得出电机转动时序控制如表4-3所示。
1 2 3 4 5 6 7 8 分配顺序
0001 0011 0010 0110 0100 1100 1000 1001 应送信号
0x0001 0x0003 0x0002 0x0006 0x0004 0x000C 0x0008 0x0009 锁引脚后
传送信号
表4-3 电机转动时序控制表
第 19 页 共34页
杨雄鹰:直流电动机控制系统设计
由送信号的延时来控制转速,从而达到调速的目的,所以其驱动程序为:
#include"SPCE061V004.h"
#define StpMotor_Ctr_PIN 0x000F //直流电机控制位设定
//IOB的相应端口为上拉输出
*P_IOB_Dir |= StpMotor_Ctr_PIN;
*P_IOB_Attrib |= StpMotor_Ctr_PIN;
*P_IOB_Data &= ~StpMotor_Ctr_PIN;
unsigned int StpMotor_Ctr_Val_corct[8] = {0x0001, 0x0003, 0x0002, 0x0006, 0x0004,
0x000C, 0x0008, 0x0009}; //正转时序
unsigned int StpMotor_Ctr_Val_rever[8] = {0x0009, 0x0008, 0x000C, 0x0004, 0x0006,
0x0002, 0x0003, 0x0001}; //反转时序
unsigned int StpMotor_Ctr_Val_norun[8] = {0x00FF, 0x00FF, 0x00FF, 0x00FF, 0x00FF,
0x00FF, 0x00FF, 0x00FF}; //停止
void StepDelayms(unsigned int t) //延时 t ms
{unsigned int i;
while(t--)
{
for(i=0;i<8;i++);
}
}
4.3.2 电机调速调向程序设计
在电机转动前给电机设定好一个转速(在适当范围内)和方向,就要根据送脉冲时的延时和电
机型号特点进行计算
[14],电机4相8拍,但最后一拍之后回到第一拍,其周期计算时应为7,再算上其64倍减速齿,如果延时时间为t (ms),则电机实际转一圈所用时间为:T=t×7×64,则速度以每秒多少度来表示,先定义一个速度变量g_Speed(度每秒),可以得出g_Speed=360000/(t×7×64),设定速度就相当于反算延时时间,既有t=360000/(g_Speed×7×64),可以得出按设定速度转速程序为:
unsigned int i,t;
for (i = 0; i < 8; i++)
. 第 20 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
{
*P_IOB_Data = StpMotor_Ctr_Val_corct[i];
t=(360000/(g_Speed*64*7));
StepDelayms(t);
*P_Watchdog_Clear = 0x0001; //清标志位
}
在系统调试过程中应该注意,延时计算应该通过增加一个系数来提高电机转速精确度,其算法
为t=360000/(g_Speed×7×64×h),其中h为实验与理论值之间的修正系数。 方向设定只需初始化如设计一个方向标志位,当标志位随KEY2键改变一次时就反向,以此循
环来实现改变方向。其程序编写如下:
if(g_Direction==1) // 确定转动方向
{
for (i = 0; i < 8; i++)
{
*P_IOB_Data = StpMotor_Ctr_Val_corct[i];
StepDelayms(t);
}
*P_Watchdog_Clear = 0x0001; //清标志位
}
else
{
for (i = 0; i < 8; i++)
{
*P_IOB_Data = StpMotor_Ctr_Val_rever[i];
StepDelayms(t);
}
*P_Watchdog_Clear = 0x0001; //清标志位
}
第 21 页 共34页
杨雄鹰:直流电动机控制系统设计
4.3.3 电机调速范围程序设计
本次设计的电机直流角为5.625? /64,先设定两个变量(SPEED_MAX、g_Speed)并根据所选的直流电机特性确实其最大最小速度范围,通过调用SPCE06lA自带的1×3键盘子程序,Key1键使设定值增加,当增加到最大值时跳转到设定最小值,同理Key2键使设定值减小,当减小到最小
[15]值时跳转到设定最大值,使其始终在设定范围之内。
//==============================================================
// 语法格式: void SetSpeed(void)
// 实现功能: 设定转速并确定调速范围
//==============================================================
void SetSpeed(void)
{
unsigned int KeyCode;
while(1)
{
KeyCode = Key_Get();
switch(KeyCode)
{
case KEY_1: // Key1, 设定值增加
g_Speed += SPEED_STEP;
if(g_Speed > SPEED_MAX)g_Speed = SPEED_MIN;
*P_Watchdog_Clear = 0x0001; //清标志位
DispNum(g_Speed);
break;
case KEY_2: // Key2, 设定值减小
g_Speed -= SPEED_STEP;
if(g_Speed < SPEED_MIN)g_Speed = SPEED_MAX;
*P_Watchdog_Clear = 0x0001; //清标志位
DispNum(g_Speed);
break;
case KEY_3: // Key3, 确定
. 第 22 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
return;
default:
}
}
}
4.4 显示模块程序设计
显示模块子程序可以只接选用凌阳给出的程序,在主程序中主要是编写其显示方式。 4.4.1 显示模块流程图
动态显示方式其实是利用了人眼视觉的特性,各LED数码管是经过动态扫描轮流点亮的,但由
于视觉的暂留现象,却好像是一起点亮的,而在实际的过程是控制数码管点亮的位选信号是依次逐
一送出的,每位数码管应该显示的数据信息则与其位选信号同时送出,于是各管将按顺序一一点亮
各自数码,等到各个数码管都轮流到以后,又再从头轮起,如此反复即可[16]。其流程可用图4-4
表示。
第 23 页 共34页
杨雄鹰:直流电动机控制系统设计
开始
送第一位片选 送第三位数据
送第一位数据 调延时程序
调延时程序 送第四位片选
送第二位片选 送第四位数据
送第二位数据 调延时程序
Y
调延时程序 复位?
N
返回 送第三位片选
图4-4 显示程序流程图
4.4.2 显示程序设计
结合本次设计实际内容,在调速时采用延时设定,产生闪烁效果,使界面便于操作者观察,这就
要求先写一个延时程序,当在调速时调用此子程序就可实现此功能,本次设计中设计延时为512ms,
其显示延时子程序为:
//========================================================
// 语法格式: void DelayMS(unsigned ms)
// 实现功能: 延时若干毫秒(不精确)
// 参数: ms - 毫秒数@49MHz
// 返回值: 无
//========================================================
void DelayMS(unsigned ms)
{
unsigned i;
while(ms--)
. 第 24 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
{
for(i = 0; i < 512; i++) //其中512为延时时间(可调)
*P_Watchdog_Clear = 1;
}
}
而在方向设定时要求在数码管中显示出来,这就要求循环显示来表示所设定的方向,因此可以
采用G段控制脚从高位到低位依次显示来表示正转,同样,通过G段控制脚从低位到高位依次显示来表示反向,其程序如下:
/// 在数码管上显示滚动的"-",表示电机转动方向
unsigned int i;
i = 1;
DIG_Clear(); // 清除显示
DIG_Set(i,0x40); //G段显示
DelayMS(20); //延时显示下一位
i += g_Direction;
if(i>4)i=1;
if(i<1)i=4;
4.5 串口通信模块程序设计
串口通信程序最重要的是对串口功能引脚锁定与串口初始化,才能在主程序中唤醒其数据传输
功能。
4.5.1 串口通信软件分析
RS-232是异步串行通信中应用最早,也是目前应用最广泛的串行总线接口之一。RS-232采用
负逻辑电平,在干扰小的情况下,一般只采用发送数据、接收数据、地线三根信号线。串行通信与
并行通信相比节省成本,尤其远距离传输时,优势更加明显,现在串行通讯应用越来越广泛。串行
数据接口标准:RS-232、RS-422、RS485。
UART模块提供了一个全双工标准接口,用于完成SPCE061A与外设之间的串行通讯。借助于I/OB
口的特殊功能和UART IRQ中断,可以同时完成UART接口的接收发送数据的过程。此外,UART还
第 25 页 共34页
杨雄鹰:直流电动机控制系统设计
可以缓冲地接收数据。也就是说,它可以在读取缓存器内当前数据之前接收新的数据。但是,如果
新的数据被接收到缓存器之前一直未从中读取先前的数据,会发生数据丢失。P_UART_Data ($7023H)(读/写)单元可以用于接收和发送数据的缓存,向该单元写入数据,可以将发送的数据送入
缓存器;从该单元读数据,可以从缓存器读出数据字节。UART模块的接收管脚Rx和发送管脚Tx分别与I/OB7和I/OB10共用。
SIO提供了一个1位的串行接口,用于与其它设备进行数据通讯。在 SPCE061A内通过I/OB0和I/OB1这2个端口实现与设备进行串行数据交换功能。其中,I/OB0用来作为时钟端口(SCK),I/OB1则用来作为数据端口(SDA),用于串行数据的接收或发送。
使用UART模块进行通讯时,必须事先分别将管脚Rx(I/OB7)、Tx(I/OB10)设置为输入状态、输出状态。然后,通过设置P_UART_BaudScalarLow($7024H)、P_UART_BaudScalarHigh($7025H)单元指定所需波特率。同时,设置P_UART_Command1($7021H)和P_UART_Command2($7022H)单元以激活UART通讯功能。以上设置完成后,UART将处于激活状态。设置 P_UART_Command1 单元的第 6、7位可以激活UART IRQ中断,并决定中断是由TxRDY或RxRDY信号触发以及由二者共同触发。设
置P_UART_Command2单元的第6、7位可以激活UART的Tx、Rx管脚功能。当SPCE061A接收或发送一个字节数据时,P_UART_Command2 ($7022H)单元的第6、7位被置为“1”且同时触发UART IRQ。无论UART IRQ中断是否被激活,UART接收或发送功能都可以由P_UART_Command2($7022H)单元的第6、7位控制。在任意时刻读出P_UART_Command2($7022H)单元将清除UART IRQ中断标志[17]。
UART IRQ(IRQ7)中断向量存储在0xFFFFH单元,相对于其它IRQ中断来说,该中断的优先级
别最低,UART数据帧的格式如图4-5所示。
Start D0 D1 D2 D3 D4 D5 D6 D7 parity stop
启动位 8位数据 奇偶优先检查位 结束位
图4-5 UART 数据帧的格式
4.5.2 串口通信流程图
每个单一模块的编程,基本的程序结构是:初始状态的设置,主循环中检测状态和进行分析,
清标志位,其流程如图4-6所示。
. 第 26 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
开始
关中断、初始化I/O端
设置波特率
输入输出使能设置
Y
N 数据发送准备好了吗?
Y
N 发送数据标志变量为0吗?
Y
N 有数据发送吗?
发送数据
清标志位
图4-6 串口通信流程图 4.5.3 串口通信程序设计
在此次设计中,主要是让单片机给PC机发送数据,因此可以将UART初始化之后再写一个发送数据程序就可以实现,同时为了以后扩展UART与单片机的通信要求(如电脑给单片机发送信号使单片机响应)可以把读取数据也写在UART子程序里,主程序中不调用即可。由于此部份程序较长[3],所以
在此就不再详例。
上机位对数据进行实时接收,当单片机进行速度及方向改变时,就发送数据传输给电脑,上机
位通过串口调试工具进行显示与备份,能快速有效地接收和处理数据,其操作效果图可见附录2所
示。
第 27 页 共34页
杨雄鹰:直流电动机控制系统设计 4.6 小结
整个系统软件的设计过程中,由于凌阳单片机的编程系统可以不用考虑程序代码在实际物理存
储器中的存储地址,而只是通过伪指令(如“.CODE”、“.TEXT”、“.RAM”等)来通知编译器把程序代码定位在什么类型的存储空间即可,至于具体的存储地址则由编译器管理,对于数据存储器
的管理同样由IDE的编译器来完成。与此同时,凌阳单片机集C语言和汇编语言的优点于一身,所以,程序的设计也容易了许多。但是,在语音识别程序的设计中,由于函数模块中的内核程序因
为涉及许多专利技术并不外漏,因此,在语音识别程序的设计中,仅仅知道各个模块函数的使用方
法和所起的功能,而不清楚他的执行过程。对硬件的设置和操作都是通过往硬件寄存器的地址里写
入或读出数据实的,而UART只是对相应的硬件寄存器进行操作而已。
. 第 28 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
5.1 系统测试
当每个模块做好后,就可以调用凌阳网站上的相关模块程序(直流电机驱动模块程序需自己编
写)来调试其功能,如果能正常运行那就说明模块是做正确了的,相反,如果不能正常实现其功能,
就必须找出其中存在错误的原因,要么是硬件电路错误,要么是软件调用不当或是I/O口设定存在问题,因此在调试过程中就必须仔细,对每一部份加以完善。
每一步的成功都是向终点迈进一步,但各个模块做好之后并不能说明大功告成,而真正困难的
要算对其整体调试,因为此时要对其内部地址进行分配,中断也要集中编写完善,主程序的编写也
相对较复杂,特别是调用各子程序和定义变量,因此在本次设计时,我先把电机驱动弄好之后,让电机转动起来再添加显示速度这一块,当显示模块能用的时候就能直观得观察电机状态,在这基础上再添加键盘程序,使其能设定电机转速和方向,由于在这之前已能实现状态显示,因此在加入键盘调试时也能观察到键盘各键是否正确运用与响应。串口通信,而串口通信程序中就包括中断调用,因
此不用在中断程序中添加UART中断。在电脑上可直接运用串口调试工具(可以选择)ComTools,它是操作方便的串口调试工具,能很好的实现本次实验设计要求。
5.2 数据分析
在本次设计中,最重要的数据统计就是电机速度,因此在电机驱动电路模块做好后,就直用运
用编写好的驱动直接调用,自己开始是对延时程序直接设定,通过对设定的延时再观察电机转速的
变化,其统计数据如表5-1所示。
次数 延时设定值(ms) 第一圈第二圈 第三圈 理论值 误差
(秒) (秒) (秒) (秒) 1 20 8.85 8.98 9.13 8.96 0.31% 2 22 9.65 9.92 10.27 9.86 0.87% 3 25 11.18 10.92 11.36 11.2 0.42% 4 30 12.93 13.59 13.46 13.44 0.84%
表5-1 只调电机驱动时数据表
可以看出,通过直接对电机驱动程程序中的延时修改之后,电机的转动度实际值与理论值非常
接近,其中理论值是通过电机拍数和脉冲每拍延时及减速齿计算出来的,它的公式为:理论值=时序周期×减速比×延时。
第 29 页 共34页
杨雄鹰:直流电动机控制系统设计
通过以上速度计算与分析可以在整体测试时写入设定速度值,由一圈360度及直流电机一圈时间公式(理论值=时序周期×减速比×延时),可以得出由设定速度来确定电机脉冲延时,即其公式
为:延时=角度/(时序周期×减速比×设定速度值),单位为度每秒,由于加入了其它如显示延时、
显示中断、键盘中断等,还有就是外圈电路没有隔离,也有部份外部信号对电机转速延时有影响,
因此相对独立电机转速设定而言,整体测试时其误差要大些,为了解决这个问题就引了一个参数来
修正误差,其公式修正为:延时=角度/(时序周期×减速比×设定速度值×修正系数),修正系数实验数据如表5-2所示。
次数 设计转动角度 应用时间 实用时间 修正系数
(度每秒) (秒) (秒)
1 20 18 23.06 1.28
2 30 12 15.11 1.26
3 40 9 11.63 1.29
4 50 7.2 9.43 1.31
表5-2 修正系数计算
计算得出修正系数后再代入公式,运用于程序延时控制,可以得出其部份统计数据如表5-3所示。 次数 速度设定 第一圈 第二圈 第二圈 理论值 误差
(度/秒) (秒) (秒) (秒) (秒) 1 10 35.10 35.47 35.86 36 1.45% 2 15 24.10 24.25 24.39 24 1.03% 3 20 18.15 18.26 18.38 18 1.46% 4 25 14.52 14.67 14.91 14.4 2.08% 5 30 12.43 12.36 12.51 12 3.61% 6 35 10.63 10.78 10.96 10.29 4.86%
表5-3 整体测试数据表
可以看出电机在一定范围内调速设定时精确度较理想,但在此范围外时误差较大,其主要因为
是内部中断较多,电机本身规格限定等,造成其误差偏大。
串口通信这一块能在电机调速,调向时向PC发送相应数据,电脑通过串口调试工具接收UART发送来的数据,并实时显示,其数据以十六进显示,由于我在程序中设定UART返回方向以字符型数据返回,因此在电脑上会显示其“+”和“-”的地址,以98、96分别表示正反方向,其测试如
表5-4所示。
次数 设定速度 电脑接收到的设定方向 电脑接收到的是否正确?
速度数据 方向数据
1 10 0A + 96 是
2 20 14 _ 98 是
3 25 19 + 96 是
4 30 1E _ 98 是
. 第 30 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文)
5 35 23 + 96 是
表5-4串口测试数据表
串口调试工具是以16进制方式显示数据,只要单片机上速度方向改变之后由KEY3确定之后就会立即向PC端发送相应数据,串口调试工具实时显示出来,并把数据记录在指定位置的记事本上。
5.3 小结
从模块建立到整体调试与编程,可以看出单一模块编程只能完成某一方面的功能,中断编程是
为了满足实时性,单片机对外界情况的快速响应。但是在现实生活中为了能够实现一定功能,需要
很多个单一模块编程,多个中断,这就组成了一个系统,就是所谓的系统编程。首先系统编程需要
确定需要哪些硬件资源,而且要合理的分配这些资源;其次系统编程要将软件任务划分为多个模块,
也就是多个单一模块编程;再次为了完成实时性,需要用到哪些中断,确定中断源。
因此可以看出单一模块实现功能单一,但其稳定性好,对多个模块系统编程难免会出现一些意
想不到的问题出现,所以要不断调试与修改才能达到较理想的实际效果。
由于在本次设计中选用的是精度不是很高的35BJY46直流电机,所以可调速度范围不是很大,
所以如果要提高实验和设计要求时可以选用其它高精度与频带宽的直流电机来实现,同时在驱动电
机电路上可以增加光耦,来隔离外围电机电路对单片机的影响,这样可以大大提高转动速度精度与
稳定性。当然,如果还要提高直流电机的可控性可以选用L298芯片业驱动直流电机,因为L298是电机专用驱动芯片,它同样可以驱动一个四相八拍的直流电机,相关资料及说明较多,便于提高电
机工作效率,其各方面性能都将提高。在UART通信方面,电脑接收数据后可以选用其它串口调试
工具以十进显示,当然,也可直接用UART给单片机发送信号来控制电机,由于本次设计子程序较
多,不易再直接加入此串口控制电机程序,但单片机接收子程序已写入串口程序中,在有时间的情
况下可以单独写一个串口通信控制电机程序。
在系统整体测试的过程中,必须对各模块相当了解的基础上才能对其整体编译,其中主程序是
C语言程序,而子程序(如显示模块程序、键盘模块程序、串口模块程序)都是运用的汇编程序,
就使得调试编写整体程序之前需要对C函数与汇编函数之间相互调用参数时的方式弄清楚明白,通
过学习与实验可知C程序在调用汇编函数时的参数传递是将参数按照从右到左的顺序依次压入堆
栈,然后才将PC和SR寄存器的值压入堆栈,而汇编程序调用C函数时的参数传递也是按照从右到左的顺序需要编程者自己在汇编程序里面将参数入栈,最先入栈的参数是C函数最右边的参数,最
第 31 页 共34页
杨雄鹰:直流电动机控制系统设计
后入栈的参数才是C函数最左边的参数。
当然通过这次设计也可以看出C语言的实用性、可靠性,C语言编程的主要优点有:寄存器分
配、数据类型等由编译器管理;编程及调试的时间减少,大大缩短开发周期;明显增加软件可读性,
便于改进和扩充。对SPCE061A单片机而言IDE直接提供了C语言的开发环境,C函数和汇编函数可以方便地进行相互调用。
结 论
本次设计采用凌阳SPCE061A十六位单片机实现。其内部集成了2K字的RAM、32K字的Flash,因此,不需要外扩程序存储器和RAM。他的软件编程采用C语言和汇编混合编程来实现,集两种语
言之优点于一体,极大限度地简化了编程过程,丰富了编程思想,给使用者带来了很大的方便。如
果采用别的单片机实现所有功能,就软件编程而言,若要实现串口通信功能,串口通信模块外围电
路都要复杂得多,同时在程序的编写也更加困难,至少在可读性方面远远差于SPCE061A的编程。
借助计算机技术、数控技术、电子技术、接口技术、单片机控制技术设计了一个直流电机控制
系统,包括直流电机驱动器、直流电机控制器以及系统控制软件的设计。系统在开发过程中,翻阅
了大量相关中外文最新资料以及厂家的技术资料
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
,借鉴了前人的成熟经验。经过不断的改进设
计、调试,可以得出如下结论:
其主要特点有:
(1) 采用内部时钟方式产生直流电机的驱动脉冲,而没有采用高速脉冲发生器 等外部方式,用软件来实现,从而降低硬件成本。
(2) 硬件设计方面,首先进行了硬件的总体方案设计,尽可能地选择了标准化、 模块化的电路,从而提高了设计的成功率和结构的灵活性,避免出现大返工。
(3) 尽可能选用了功能强、集成度高、通用性好、市场货源充足的电路或芯片。
(4) 理简化硬件设计,软件能实现的功能尽可能由软件来完成。
(5) 系统无论是在硬件还是软件系统中都采用模块化的设计方法。这使得系 统扩展起来比较方便,系统可移植性高,增加了系统的灵活性和可靠性,具有广泛的适应性。
总的来说,在本次设计中,尽管还有诸多不尽如人意的地方,但同样收获了不少东西,在不断
遇到问题和解决问题的过程中提高了自己的动手能力,还提高了查阅资料与收集资料的能力,使自
. 第 32 页 共 34页
2009届机械设计制造及其自动化专业毕业设计(论文) 己从中学会发现问题、分析问题、解决问题,这种学习方法对以后工作及生活都有相当大的好处。
通过本次设计,使我的自学能力方面有所提高,也达到了选择此课题的目的。
感谢谢辉老师在毕业设计过程中给我的支持和提供的资料,以及为我提供讲解的各位同学。
杨雄鹰
[1]王玉琳,王强.直流电机速度调节方法[J].电机与控制应用,2006(1):53-56.
[2]Anon. Control to this - Step motors keep labels in sync[M]Machine Design, v 73, n SUPPL.,
February, 2002:14-26.
[3]雷思孝、李伯成、雷向莉.单片机原理及应用技术—凌阳16位单片机原理及应用[M].西安电子科技大学出版社 2004年1月:68-93,218-219,236-237.
[4]邓星钟,周祖德.机电传动控制[M]华中理工大学出版社.1994 :126-165.
[5]李忠科,赵静.通用直流电机升降速控制器设计[J].微特电机,2006(1):34-41. [6] Balder N. Virtual humans for animation , ergonomics , and simulation [J]. IEEE Workshop
on Non - Rigid and Articulated Motion , Puerto Rico ,1997 :6.
[7]李忠科,赵静.通用直流电机升降速控制器设计[J].微特电机,2006(1):34-41. [8]薛钧义、樊波.凌阳16位单片机原理与应用[M]北京航空航天大学出版社.2006:32-127. [9]周明德.微型计算机系统原理及应用[M]清华大学出版社.2002:63-81.
[10]崔群. 一种保证直流电机在变速运行中不失步的控制方法[J ].机电工程 ,2000 (4) :61- 63. [11]邓星钟,周祖德.机电传动控制[M]华中理工大学出版社.1994 :126-165.
[12]SCOTT Mueller. UPGRADING AND REPAIRING PCs[S].QUE Corporation,2nd Edition,1992:2-4.
[13]刘清. 一种控制直流电机转速的方法[J ]. 微特电机 ,2004 (1) :47.
[14]王宗培.直流电动机及其控制系统[M]哈尔滨工业大学出版社.1986:8-34. [15] Wang ,Chen , A Combined Optimization Method for Solacing the inverse Kinematics
Problem of Mechanical Manipulators[J].IEEE Transactions on Robotics and
第 33 页 共34页
杨雄鹰:直流电动机控制系统设计
Automation ,1991 ,7:4.
[16]崔群. 一种保证直流电机在变速运行中不失步的控制方法[J ].机电工程 ,2000 (4) :61- 63.
[17]Pulle, Duco W. J. HIGH-SPEED PERFORMANCE OF VARIABLE-RELUCTANCE STEPMOTORS. [M]IEEE
Transactions on Industrial Electronics, v 35, n 1, Feb, 1988:36-42.
DC motor control system design
YANG Xiong-ying
Chongqing Three Gorges University, Chongqing 404000,China
Abstract:DC motor is that it can highlight the advantages in a wide frequency range, it can use
to change the pulse frequency to achieve the speed, quick cease, positive control and braking
and so on, and its open-loop system composed of simple, cheap and reliable, so in many fields
have a very wide range of applications. Focused on the design of high-performance DC motor
drive and control system. The system computer as a PC, Sunplus SPCE061A Singlechip-bit
machines as the next. Crew set up under the motor speed and direction for the next PC-bit
machine for display and data signals back up. SCM and computer through the serial port
communications, to achieve the long-distance DC real-time monitoring. The use of software in
place of the annular distributor, completed a highly efficient, energy-efficient DC motor control
system design. Software easier to maintain modular design methods, and to take the software
and hardware anti-jamming technology to improve the system stability. A large number of
experiments show that the system performance to meet the design requirements, the final design
of this analysis and summary.
Keywords: SCM serial communication DC Motor
. 第 34 页 共 34页