L297+L298步进电机控制_第1页
L297+L298步进电机控制_第2页
L297+L298步进电机控制_第3页
L297+L298步进电机控制_第4页
L297+L298步进电机控制_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要本文介绍了计算机通过单片机控制步进电机的系统。在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。步进电机是机电控制中一种常用的执行机构,其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。步进电动机的突出优点是它可以在宽广的频率范围内,可以利用改变脉冲频率来实现调速,快速起停、正反转控制及制动等,并且由其组成的开环系统简单、廉价、可靠,因此在众多领域有着极其广泛的应用。本设计重点研究了高性能步进电机驱动器及其控制系统。该系统以微机作为上位机,AT89C 51单片机作为下位机。下位机设定电机速度和方向,上位机对下位机的数据信号进行控制和备份。通过单片机与微机的串口通讯,实现对步进电机的远距离实时监控。使用软件代替环形分配器,完成了高效、节能的步进电机控制系统设计。软件使用易于维护的模块化设计方法,并采取软、硬件抗干扰技术,提高了系统稳定性。大量实验表明系统性能达到设计要求,最后对本次设计做出分析和总结。经系统调试,能够很好的控制步进电机的正反转、加减速,从而达到预期目的。整个系统具有结构简单、可靠性高、成本低和实用性强等特点,具有较高的通用性和应用推广价值。关键词:计算机串行口MSComm51单片机步进电机AbstractThispaper,weintroducesasteppermotorsystemwhichcontrolledbySCM.IntheElectricaleratoday,Motorhasbeenplayingaveryimportantroleinthemodernizationofproductionandlife.Steppermotorisacommonusedimplementingagencyinmotorcontrol.Theprincipleisbyswitchingthecoilcurrentandtheorderinitseachphasetomakeastep-by-steprotarymotor.Theoutstandingadvantagesofstepmotorarethatitcanrealizespeedregulation,quickstartupandstop,positive-reversecontrol,brakeandsoonbychangingthefrequencyofpulse.Inaddition,theopen-loopsystemthatconsistedofthestepmotorissimple,cheapandreliability.Thereforeitsapplicationisveryextensiveinmanyfields.Thoughsystemtesting,itcanbeveryconvenienttocontrolthesteppermotor,suchasacceleration,deceleration,exigencystopsoastoachievethedesiredobjectives.Thewholesystemissimpleinstructurewithcharacteristicsofhighreliability,lowcostandpracticalitywhichhasahigheruniversalcharacteristicandthepromotionalandappliedvalue.Keywords:computerMSCommSingle-chipmicroprocessorSteppermoto目录摘要 IVAbstract IV第1章绪论 IV1.1技术概述 IV1.2课题的背景及意义 IV第2章步进电机控制系统的总体设计 V2.1整体方案设计 V2.2上位机软件介绍 V2.3上位机任务 V第3章系统硬件设计 V3.1单片机的选择 V3.1.1驱动芯片的选择 V3.1.2步进电机的选择 V3.2PC串口通信模块硬件设计 V3.2.1PC串口描述 V3.2.2上下位机通信电路设计 V3.3小结 V第4章上位机软件设计 V4.1上位机界面实现步骤 V4.2串口通信模块程序设计 V串口通信原理 V串口通信流程图 V串口通信程序设计 V4.3AT89C51程序分析 V第5章系统测试 V5.1系统测试 V结论 V致谢 V参考文献 V附录1:下位机程序 V附录2:科技文摘译 V绪论1.1技术概述在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。无论是在工农业生产还是在日常生活中的家用电器,都大量地使用着各种各样的电动机。因此对电动机的控制变得越来越重要了。电动机的控制技术的发展得力于微电子技术、电力电子技术、传感器技术、永磁材料技术、自动控制技术、微机应用技术的最新发展成就。正是这些技术的进步使电动机控制技术化。步进电机是机电控制中一种常用的执行机构,其原理是通过对它每相线圈中的电流和顺序切换来使电机作步进式旋转。驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。通俗地说:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的。同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的,现在比较常用的步进电机包括反应式步进电机(VR)、永磁式步进电机(PM),混合式步进电机(HB)和单相式步进电机等。永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7。50;反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1。50,但噪声和振动都很大。反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。混合式步进电机是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1。8“而五相步进角一般为0。720。这种步进电机的应用最为广泛。步进电机的一些基本参数:电机固有步距角:它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如86BYG250A型电机给出的值为0。90/1。80(表示半步工作时为0。90、整步工作时为1。80),这个步距角可以称之为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。步进电机的相数:是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0。90/1。80、三相的为0。750/1。50、五相的为0。360/0。720。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。保持转矩:是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成为衡量步进电机最重要的参数之一。比如,当人们说2Nm的步进电机,在没有特殊说明的情况下是指保持转矩为2Nm的步进电机。步进电机的一些特点:⑴一般步进电机的精度为步进角的3%--5%,且不累积。⑵步进电机外表允许的最高温度。⑶步进电机温度过高首先会使电机的磁性材料退磁,从而导致力矩下降乃于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在130C以上,有的甚至高达200C以上,所以步进电机外表温度80C-90C完全正常。⑷步进电机的力矩会随转速的升高而下降。⑸当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。⑹步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。介绍步进电机的一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。⑺步进电动机以其显著的特点,在数字化制造时代发挥着重大的用途。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。本文以永磁式步进电机为例,来介绍如何用计算机通过上位机mscomm控件来指示MCS-51系列单片机控制步进电机。1.2课题的背景及意义步进电机可以对旋转角度和转动速度进行高精度控制。步进电机作为控制执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统和精密机械等领域。例如,在仪器仪表,机床设备以及计算机的外围设备中(如打印机和绘图仪等),凡需要对转角进行精确控制的情况下,使用步进电机最为理想。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区别,也是依靠气隙磁导的变化来产生电磁转矩。在本世纪初,由于资本主义列强争夺殖民地,造船工业发展很快,同时也使得步进电动机的技术得到了长足的进步。到了80年代后,由于廉价的微型计算机以多功能的姿态出现,步进电动机的控制方式更加灵活多样。原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。计算机则通过软件来控制步进电机,更好地挖掘出电动机的潜力。因此,用计算机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。第2章步进电机控制系统的总体设计随着材料科学、工艺技术、计算机技术的发展与进步,电路系统向着集成度极高的方向发展。CPU的生产制造技术,也朝着综合性、技术性、实用性发展。如CPU的运算位数从4位、8位……到32位机的发展,运算速度从8MHz、32MHz……到1.6GHz。可以说是日新月异的发展着。其中单片机在控制系统中的应用是越来越普遍了。单片机控制系统是以单片机(CPU)为核心部件,扩展一些外部接口和设备,组成单片机工业控制机,主要用于工业过程控制。要进行单片机系统设计首先必须具有一定的硬件基础知识;其次,需要具有一定的软件设计能力,能够根据系统的要求,灵活地设计出所需要的程序;第三,具有综合运用知识的能力。最后,还必须掌握生产过程的工艺性能及被测参数的测量方法,以及被控对象的动、静态特性,有时甚至要求给出被控对象的数学模型。MAX232MAX232计算机51单片机L297NL298N步进电机图2-1总体框图2.1整体方案设计使用、控制步进电机必须由环形脉冲源、功率放大电路等部分组成控制系统,脉冲信号一般由单片机或CPU产生,一般脉冲信号的占空比为0.3-0.4左右,电机转速越高,占空比则越大。功率放大是驱动系统最为重要的部分。步进电机在一定转速下的转矩取决于它的动态平均电流而非静态电流,平均电流越大,电机力矩越大,要达到平均电流大,这就需要驱动系统尽量克服电机的反电势。因而不同的场合采取不同的驱动方式。到目前为止,驱动方式一般有以下几种:恒压、恒压串电阻、高低压驱动、恒流等。此控制系统的硬件主要组成:计算机,MAX232,51系列单片机,L297N,L298N、步进电机等。整体结构如图2-1所示本系统总体设计思路是:由计算机发出电平信号,通过电平转换芯片MAX232把命令给单片机。单片机接受并转换成控制信号发送给L297,L298N。L297主要作用那个是控制步进电机,使编程简单,L298N主要作用连接步进电机从而驱动步进电机。2.2上位机软件介绍由于本设计上位机的界面是用VC++6.0实现的,因此有必要先对VC++6.0做简单介绍,使读者对该软件有初步了解。VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(MicrosoftFoundationClass)类库。MFC中封装了大部分WindowsAPI函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。谈到vc++6.0就不得不提到它的调试功能,这是devcpp比不上的。调试重要的几个键:F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点。F5调试状态运行程序,程序执行到有断点的地方会停下来。F10单步执行程序。CTRL+F10运行到光标所在行。F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面.SHIFT+F11跳出当前所在函数。调试的步骤:1,保存为c或c++文件。2,根据断点调试找到错误处。3,采用F10或F11单步调试找到精确的错误处。其中f10是跳过函数调用,F11是进入函数体调试。一般是先用F10,确定函数输入输出是否正确(与自己想的一样),如不一样,则用F11进入函数体一步一步调试。4,在调试过程中,肯定得监视程序中的变量。在vc++6.0的右下角有一个watch窗口,专门用来设置监视变量。具体怎样设置自己体会吧。在调试过程中,鼠标轻轻放在变量上也会显示该变量的值5,vc6.0专门为调试设置了工具箱以方便调试的进行,打开的方法如下。右键-->在debug(或调试)选择项的勾勾上。我们就暂时告别一下这些令人敬畏的源代码,来看看VC6的工程设置选项。不过,虽然讲座中不谈及源代码,心铃还是建议大家有空就多读读程序,因为这是一条能够迅速增加编程知识,提高编程能力的有效途径。打开或新建一个包含至少一个工程的Workspace后,VC6的Project菜单中的“Settings…”命令就变为有效,选择它或者按下热键Alt+F7后,便可调出工程设置对话框,这里面的选项将影响整个工程的建立和调试过程,因此很重要,虽然在一般情况下,其中的大多数选项都不用改变,但了解一下它们的含义能够消除我们心中存在的神秘感,并加深我们对VC工程的理解。在这个对话框中,左上方的下拉列表框用于选择一种工程配置,包括有Win32Debug、Win32Release和AllConfigurations(指前两种配置一起),某些选项在不同的工程配置中有不同的缺省值。左边的树形视图给出了当前工程所有的文件及分类情况。如果我们把工程“Schedule”置为高亮显示,对话框的右边就会出现总共十个选项卡,其中列出了与工程有关的各种选项,不少选项卡中有一个Reset按钮,按下它后可以把选项卡内的各项设置恢复到生成工程时的初始值。如果我们在树形视图中选择一个文件类或一个文件,那么对话框右边的选项卡会自动减少到一个或两个,其中列出的都是与选中的文件类或文件有关的选项。下面我们就以Win32Debug为例来看看与工程有关的十个选项卡各自的功能与含义,与文件有关的选项卡则请大家自己琢磨一下。General这个选项卡比较简单,从上向下的第一个选项用于更改使用MFC类库的方式,大家是否还记得我们曾在AppWizard的第五步指定以DLL的方式来使用MFC类库?但现在我们可以在两种方式之间随意进行切换。第二个选项用于指定在编译连接过程中生成的中间文件和输出文件的存放目录,对于调试版本来说,缺省的目录是工程下面的“Debug”子目录。在General类别中,我们可以指定要调试的可执行文件名,如果正在编写的程序是一个DLL,那么应在此处指定一个用来调试该DLL的EXE文件。另外三个选项可以指定用于调试的工作目录,开始调试时给程序传送的命令行参数,以及进行远程调试时可执行文件的路径。把类别切换到AdditionalDLLs后,我们可以指定在开始调试时是否为一些额外的DLL装载调试符号信息,只有装载了符号信息后才能跟踪进DLL。C/C++选项卡控制着VC6的编译器,其中的选项比较多,也比较复杂,心铃要重点介绍一下它。最下面有一个ProjectOptions编辑框,里面列出的各种命令开关将会在开始编译时作为命令行参数传送给VC6的编译器,以便对编译过程进行控制。这些命令开关会跟随其它选项改变而改变,另外,如果我们知道某些命令开关,也可以直接在这个编辑框中输入,开关所对应的选项会自动改变。在General类别中,Warninglevel用于指定编译器显示警告的级别,None表示不显示任何警告,L1表示只显示严重的警告,L2表示显示比L1次严重的警告,L3表示显示比L2次严重的警告,L4则表示显示出所有的警告,包括那些安全忽略的警告,如果选中了Warningsaserrors,那么显示的每一个警告都将会引起一个错误,这样在编译完毕后就无法启动连接器来进行连接。C/C++语言的语法相当复杂和严格,尽管编辑器在产生了警告后并不会中断工程的建立过程,但警告信息往往表示程序在某些地方存在着潜在的问题,所以心铃建议大家今后把警告等级设置成L3,并尽量排除掉编译过程中产生的警告。Optimizations用于设置代码优化方式,优化的目的主要有提高运行速度和减小程序体积两种,但有时候这两种目的是相互矛盾的。Debuginfo用于指定编译器产生的调试信息的类型,第一讲中心铃曾介绍过VC6支持即编即调功能,为了使用这一项功能,必须在这里选择生成“ProgramDatabaseforEditandContinue”类型的调试信息,而不能生成与老版本编译器兼容的调试信息。Preprocessordefinitions是一些预先定义的宏名,MFC类库和Windows的头文件中大量使用了这些宏来设置条件编译。2.3上位机任务本设计中上位机的任务是利用VC++6.0软件,编写出基于对话框的应该用程序,该对话框中包括“启动,停止,正转,反转,加速,减速”六个按钮,一个“静态文本框”,一个“下拉组合框”和一个“MSComm控件”。要想利用该对话框的按钮向单片机发送指令从而间接控制步进电机转动,必须利用VC++提供的MSComm控件。上位机和下位机的约定是:01H代表启动,02H代表停止,03H代表正转,04H代表反转,05H代表加速,06H代表减速。当操作人员按了六个按钮中的任何一个按钮时,上位机应该应用MSComm控件的功能把相应的指令代号准确的传送给单片机。上位机不直接对计算机的硬件进行操作,而是利用VC++6.0来把串口当做文件来处理。本设计要达到的目的是,当按下相应按钮时,计算机把相应指令代号传送给单片机,单片机根据指令代号跳向单片机内的相应程序。由于转动完全受上位机控制,单片机内没有改变电机运行状态的程序代码所以上位机必须能够实现准确快速的把指令代码传给单片机。总之上位机要实现一个人机互动的界面,并具有实际功能。第3章系统硬件设计步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:(1)控制换相顺序通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相图3-1AT89C51的引脚图通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。(2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。(3)控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。3.1单片机的选择MCS-51是标准的40脚双列直插式集成电路芯片,引脚排列请参见图3-1VCC:电源电压;GND:地;P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用。P1口:P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。0作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。P3口:P3口是一个带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。P3口除了作为一般的I/O口线外,更重要的用途是他的第二个功能,如表3-1所示:表3-1P3口特殊功能端口引脚功能特性P3.0RXD(串行口输入)P3.1TXD(并行口输入)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时计数外部输入0)P3.5T1(定时计数外部输入0)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)P3口还接收一些用于FLASH闪速存储器编程和程序效验的控制信号。RST:复位输入。其引脚一旦变成两个机器周期以上的高电平,所有的I/O口都将复位到1状态,当振荡器正在工作时,持续两个机器周期以上高电平便可完成复位,每个机器周期为12个振荡时钟周期。EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(0000H—FFFFH),EA端必须保持低电平接地,需注意的是:如果加密位LB1被编程,复位是内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器输出端。AT89C51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈器件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图3-2。外接石英晶体或陶瓷振荡器及电容C1,C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1,C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低,振荡器工作的稳定性,起振得难易程度及温度稳定性,如果使用石英晶体,推荐电容使用30PF±10PF,而如使用陶瓷振荡器建议选择40PF±10PF。图3-2时钟振荡电路3.1基于L297/298驱动芯片的两相双极性混合式步进电机驱动器,采用恒流斩波

图:L297/298驱动器方式驱动,每相电流可达2A。其中L297是步进电机控制器,适用于双极性两相步进电机或单极性四相步进电机的控制。用L297输出信号可控制L298双桥驱动集成电路,用来驱动电

压最高为46V,总电流为4A以下的步进电机。L297也可用来控制由达林顿管组成的分立电路,以驱动更高电压,更大电流的步进电机。L297只需要时钟、方向和模式输入信号,相位由内部产生,从而减轻了微处理器和程序设计的负担。L297采用固定斩波频率的PWM恒流斩波方式工作。L297主要由译码器,两个固定斩波频率的PWM恒流斩波器以及输出控制逻辑组成[2]。L298是用来驱动步进电机的集成电路,采用双全桥接方式驱动,由于是双极性驱动,步进电机的定子励磁绕组线圈可以完全利用,使步进电机达到最佳的驱动。基于L297/298驱动器的混合式步进电机有三种不同的工作模式:即半步模式,见图3-3,整步两相励磁模式,见图3-4整步一项励磁模式,见图3-5。步进电机工作于半步模式时,其内部定子绕组的励磁是一相与两相相间的,此时步进电机每接受一个脉冲,只转过半个步距角。步进电机工作于半步模式时,步进电机所获得的转距较常规值偏小。步进电机工作于整步一相励磁模式时,其内部定子绕组的励磁在任何一个时刻都是一相的,此时步进电机每接受一个脉冲,转过一个步距角。步进电机工作于整步一相励磁模式时,步进电机获得常规转距。步进电机工作于整步两相励磁模式时,其内部定子绕组的励磁在任何一个时刻都是两相的,此时步进电机每接受一个脉冲,转过一个步距角。步进电机工作于整步两相励磁模式时,步进电机获得的转距相对前两种而言是最大的。L297的核心是其内部的译码器,通过译码器L297产生三种相序信号,以对应三种不同的工作模式。译码器受L297的方向输入引脚信号和半步方式/整步方式输入引脚信号所控制。译码器内部是一个3BIT的计数器,加上一些组合逻辑,产生每周期8步的格雷码时序信号(见图3-6即半步模式的时序信号,此时L297的输入引脚信号取高电平。若引脚取低电平,则得到整步工作模式。如果引脚是在译码器的八步格雷码时序信号的奇数状态位时取图3-3和图3-4低电平的,则得到整步两相励磁模式;如果引脚是在译码器的八步格雷码时序信号的偶数状态位时取低电平的,则得到整步一相励磁模式。图3-5和图3-63.1步进电机可以对旋转角度和转动速度进行高精度控制。步进电机作为控制行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统和精密等领域。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。现阶段,反应式步进电机获得最多的应用。步进电机和普通电机的区别主要在于其脉冲驱动的形式,是这个特点,步进电机可以和现代的数字控制技术相结合。不过步进电机在控制的精度度变化范围、低速性能方面都不如传统的闭环控制的直流伺服电动机。在精度不是需要特别高的场合就可以使用步进电机,步进电机可以发挥其结简单、可靠性高和成本低的特点。使用恰当的时候,甚至可以和直流伺服电动机性能相媲美。每当步进电机被激励一次,它的轴就转动一个精确的角度。一般按国际标准的话,可分为大角度步进器和小角度步进器两大类。大角度步进器每步移动7.5。、15。、45。和90o;小角度步进器的标准步幅为1.80和5。。这种不连续的步进器输出方式的优点是,只要算一算计算机驱动电机多少步,便可知道电机轴的具体位置即实际控制设备的位置就可以知道。与步进电机的接口是比较复杂的问题,各种接口在不同的设备中有一些不同的处理方式,但基本上大同小异,但有些接口可能比我们这里分析输液泵接口的情况有差别,它可能比这里出现的情况要复杂的多,应该说接口电路在实际应用中有着重要的价值。步进电机有4个组。1、2、3和4,按适当顺序加上脉冲电流,电机就能步进。有如下三种顺序:(1)低功耗顺序;(2)正常顺序;(3)半步顺序。低功耗顺序是把电流脉冲送到绕组1,然后是绕组2,绕组3,绕组4,再返回到绕组1,如此循环,在同一时刻不会有两个绕组接通,这时电机将步进一步。正常顺序下列顺序一次激励两个绕组1和2。2和3,3和4,4和1等等。这样做的结果是运转平稳,但需要较大的功率。半步方式允许在每个步之间走半个角步。其顺序号:1和2;2;2和3;3;3和4;4;4和1;1。电机绕组的电阻相当低,其典型值是0.2Q姆,因此需要电流源来激励,同时还由于绕组的电感很大,需要特殊的设计方法,以防止因电感反冲而损坏开关管或滤波电容器。如果注意到真值表中由两个0和两个1组成的半字节是如何循环移位的,则程序就变得十分简单了,我们所应当做的就是以8位环形方式使数值00110011循环移位,在每次循环到PIA之前便输出。下面举例说明。步进电机2个相邻磁极之间的夹角为60°。线圈绕过相对的2个磁极,构成一相(A-A′,B-B′,C-C′)。磁极上有5个均匀分布的矩形小齿,转子上没有绕组,而有40个小齿均匀分布在其圆周上,且相邻2个齿之间的夹角为9°。当某组绕组通电时,相应的2个磁极就分别形成N-S极,产生磁场,并与转子形成磁路。如果这时定子的小齿与转子没有对齐,则在磁场的作用下转子将转动一定的角度,使转子齿与定子齿对齐,从而使步进电机向前“走”一步。211步进电机的控制方式如果通过单片机按顺序给绕组施加有序的脉冲电流,就可以控制电机的转动,从而实现数字→角度的转换。转动的角度大小与施加的脉冲数成正比,转动的速度与脉冲频率成正比,而转动方向则与脉冲的顺序有关。以三相步进电机为例,电流脉冲的施加共有3种方式。(1)单相三拍方式(按单相绕组施加电流脉冲):→A→B→C→正转;→A→C→B→反转。(2)双相三拍方式(按双相绕组施加电流脉冲):→AB→BC→CA→正转;→AC→CB→AB→反转。(3)三相六拍方式(单相绕组和双相绕组交替施加电流脉冲):→A→AB→B→BC→C→CA→正转;→A→AC→C→CB→B→BA→反转。单相三拍方式的每一拍步进角为3°,三相六拍的步进角则为1.5°,因此,在三相六拍下,步进电机的运行反转平稳柔和,但在同样的运行角度与速度下,三相六拍驱动脉冲的频率需提高1倍,对驱动开关管的开关特性要求较高。步进电机的驱动方式如下:步进电机常用的驱动方式是全电压驱动,即在电机移步与锁步时都加载额定电压。为了防止电机过流及改善驱动特性,需加限流电阻。由于步进电机锁步时,限流电阻要消耗掉大量的功率,故限流电阻要有较大的功率容量,并且开关管也要有较高的负载能力。步进电机的另一种驱动方式是高低压驱动,即在电机移步时,加额定或超过额定值的电压,以便在较大的电流驱动下,使电机快速移步;而在锁步时,则加低于额定值的电压,只让电机绕组流过锁步所需的电流值。这样,既可以减少限流电阻的功率消耗,又可以提高电机的运行速度,但这种驱动方式的电路要复杂一些。驱动脉冲的分配可以使用硬件方法,即用脉冲分配器实现。现在,脉冲分配器已经标准化、芯片化,市场上可以买到。但硬件方法结构复杂,成本也较高。步进电机控制(包括控制脉冲的产生和分配)也可以使用软件方法,即用单片机实现。L297产生四相驱动信号,用以控制双极性两相步进电机或四相单极性步进电机,可以采用半步、两相励磁、单相励磁三种工作方式控制步进电机,并且控制电机的片内PWM斩波电路允许三种工作方式的切换。使用L297突出的特点是外部只需时钟、方向和工作方式三个输入信号,同时L297自动产生电机励磁相序减轻了微处理器控制及编程的负担。L297具有DIP20和SO20两种封装形式,可用于控制集成桥式驱动电路或分立元件组成的驱动电路。因此本设计选用双极性二项步进电机35BY48S03。SGS公司的L297单片步进电机控制集成电路适用于双极性两相步进电机或四相单极性步进电机的控制,与两片H桥式驱动芯片L298组合,组成完整的步进电机固定斩波频率的PWM恒流斩波驱动器。L297产生四相驱动信号,用以控制双极性两相步进电机或四相单极性步进电机,可以采用半步、两相励磁、单相励磁三种工作方式控制步进电机,并且控制电机的片内PWM斩波电路允许三种工作方式的切换。使用L297突出的特点是外部只需时钟、方向和工作方式三个输入信号,同时L297自动产生电机励磁相序减轻了微处理器控制及编程的负担。L297具有DIP20和SO20两种封装形式,可用于控制集成桥式驱动电路或分立元件组成的驱动电路。L297主要由译码器、两个固定斩波频率的PWM恒流斩波器以及输出逻辑控制组成。L297另一重要组成是PWM斩波器控制相绕组电流,实现恒流斩波控制,以获得良好的转矩-频率特性。每个斩波器由一个比较器、一个RS触发器以及外接采样电阻组成内部设有一公共振荡器,向两个斩波器提供触发脉冲信号,脉冲频率是由外接的RC网络决定,当时振荡器脉冲使触发器置“1”,电机绕组相电流上升,采样电阻RS的电压上升到基准电压Vref时,比较器翻转,使触发器复位,功率晶体管关断,电流下降,等待下一个振荡器脉冲的到来。这样,触发器输出是恒频的PWM信号,调制L297的输出信号,绕组相电流峰值由Vref决定。图3-7L297和L298的步进电机驱动电路图SGS公司的L298芯片是一种高电压、大电流双H桥功率集成电路,可用来驱动继电器、线圈、直流电机和步进电机等感性负载。它具有两抑制输入来使器件不受输入信号影响。每桥的三极管的射级是连接在一起的,相应的外接线端可用来连接外设传感电阻。可安置另一输入电源,使逻辑能在低电压下工作。采用L297和L298实现的步进电机驱动电路见图3-7,该电路为固定斩波频率的PWM恒流斩波驱动方式,适用两相双极性步进电机,最高电压46V,每相电流可达2A。用两片L298和一片297配合使用,可驱动更大功率的两相步进电机。3.2PC串口通信模块硬件设计随着计算机应用技术和微机网络技术的发展,计算机与其外部设备之间的数据通信越发显得重要,在很多实际应用中通常用单片机来采集数据,用微机来处理得到的数据。数据通信方式可分为两种:并行传送和串行传送。并行传送速度快、效率高,但传送可靠性差,不适合远距离传送;串行传送数据按位顺序移动,速度较慢、效率偏低,但传送可靠,可以节省通信子系统的硬件投资。本文给出了MCS251单片机与微机的串行通信方法,它具有使用方便、数据传输可靠、适用于远距离通信的特点,在工业监控、数据采集、检测等系统中有着广泛的应用。通信协议是指通信双方共同遵守的交换数据的格式和意义的一组规则。计算机网络的协议包括了从物理线路的电气特性到各计算机的进程之间共享资源的全面内容。我们的通信协议只需制订信息在线路中的传输规则,它涉及信息格式、顺序控制、流量控制、信息的成帧与拆帧、差错控制及传输过程中的管理等方面。为了保证通信的正常进行,必须将通信协议规定的尽量详尽和周到,考虑到可能发生的各种情况。为了便于理解,通信协议的功能可以归纳如下:1信号的传送与接收应规定信息传送的格式、接口标准以及启动控制、结束控制、超时控制等。2差错控制使构成传输数据的源码或源码组具有一定的逻辑性,接收端根据收到的数据进行相应的检测和纠错操作。3顺序控制对发送方的数据进行编号,以免重复接收或丢失。4透明性指对用户终端所使用的数据代码无任何约束性的限制,即对用户使用的代码保证编码的独立性与传输的透明性。5链路控制与管理在全双工、半双工等多种线路中,确定哪个站发送、哪个站接收,主要用于分布式控制系统中。6流量控制为保证数据接收方与发送方在速率上的匹配而采用的方法。由于串行通信是计算机运行时进程的一个组成部分,其协议的设计应考虑能较为方便地与数据存储、输入输出等操作协调工作。本文采用基于帧的协议设计思想,即在向RS-232串行口发送命令信号、应答信号及数据信号时,信号是一帧一帧发送的。通信链路中所有的内容都将包含在这样的一个帧中,无论它是控制命令还是传送的数据。为了使数据可靠的传输,将每一帧信号唯一对应一个命令帧,具体如下:1在PC读数据时,遵循“读命令--等数据--报告”,即PC下达一条命令,等待接收数据,再根据所接收数据的正误向应用程序报告此命令的执行情况。2在PC写数据时,遵循“写命令--等回应--报告”,即PC’下达一条写命令(此时所要写的数据含于此命令中),等待单片机发来的“已正确接收”的回应信号,并向应用程序报告此命令执行完毕。3如果在传输的过程中,PC或MCU所接收任何一帧信号出现错误时,均会向对方发送重发此帧信号的请求,连续三次失败,则退出通信。一般说来,计算机都有一个或多个串行端口,它们依次为Com1,Com2,⋯这些串口还提供了外部设备与PC进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。本文选用的是微机的Com1。单片机串口输入输出电平为TTL电平,而计算机串口符合RS232C串行总线标准,采用的是负逻辑,逻辑“1”为-5图3-8串行通信硬件电路V~-15V,逻辑“0”为+5V~+15V。这两种电平是不一样的,因此不能直接连在一起。在本设计中,通过电平转换芯片MAX232来转换这两种电平。电路原理图如图3-8所示。PC串口计算机串行接口采用RS232标准:规定逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,常用的信号有8个(接口为DB9M插座时,引脚号如表3-2所示),其中RXD、TXD为收、发数据,可与RS232串行口设备直接进行通讯,RTS、DTR、CD、DSR、CTS、BELL为控制与检测MODEM的信号,在通讯过程中起联络与控制作用。数据格式有5、6、7、8位几种,1位起始位(逻辑0),1、1.5或2位停止位(逻辑1),可以选择奇校验、偶校验和无校验,常用波特率为2400、4800、7200、9600bps等。串行口编程方法主要有三种:硬件编程法、文件操作法、串口控件法。表3-2DB9常用信号引脚针号功能说明缩写1数据载波检测DCD2接受数据RXD3发送数据TXD4数据终端准备DTR5信号地GND6数据设备准备好DSR7请求发送RTS8清除发送CTS9振铃指示DHL随着单片机和微机技术的不断发展,特别是网络技术在测控领域的广泛应用,由PC机和多台单片机构成的多机网络测控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,windows环境下后台微机在数据库管理上具有明显的优势。二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了以网络为核心的分布式多点系统发展的趋势。单片机和PC机的串行通信一般采用RS-232、RS-422或RS-485总线标准接口。本文针对PC机常用的RS-232方式,图3-9计算机与MAX232接口电路主要探讨通过VB610建立界面,采用RS-232接口与单片机通信的方法。RS-232是早期为公用电话网络数据通信而制定的标准,其逻辑电平与TTL\CMOS几乎完全不同。逻辑“0”规定为+3~+15V之间,逻辑“1”,规定为-3~-15V之间。由于RS-232发送和接收之间有公共地,传输采用非平衡模式,因此,共模噪声会耦合到信号系统中,其标准建议的最大通信距离为15米。PC机COM1与COM2口的9针串口的引脚功能如表2。RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换,实现逻辑电平转换。MCl488和MCl489芯片为RS-232至TTL逻辑电平。上下位机通信电路设计计算机通过MAX232和单片机的硬件电路如图3-9。3.3小结本文设计出的步进电机控制系统,可以实现对步进电机的基本控制及运行状态的实时显示。该系统实用性强,操作方便,经测试取得了良好效果。经过一定的技术改进后,可以应用于包装机械的物料计量、包装膜供送、横封等过程中,精确控制执行机构的运行速度和运行位置。利用步进电机替代传统的机械或其它方式,不仅能使包装机械结构变得简单、调节方便、可靠性增加,而且精度会得到很大提高。在Windows环境下,一般不允许用户直接对各类接口进行操作,因此如何在Windows环境下开发微机的低层资源一针对控制串行口的各类寄存器已成为当今工业控制软件的一大热点。WindowsAPI提供了一系列标准函数,可以支持Windows系统下的串行通信编程。但由于Windows本身的复杂性,对这些标准函数及其参数的理解和应用也是比较复杂的。VisualC++6.0提供了一个ActiveX控件MicrosoftCommControl,简称M~.omm控件,可以较为方便地进行计算机串口的管理与控制。步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算机等许多专业知识。本设计通过采用MAX232把计算机的字符命令转换为单片机的脉冲序列,实现了电平转换和合杰斯命令的作用。采用L297和L298联合驱动步进电机的硬件电路,L297是步进电机的控制器,采用该控制器可以很方便的实现步进电机的正转反转不同工作状态下的转换,大大减小了程序设计的难度。而L298是步进电机的驱动器件,L298可是输出46V电压单项2A电流,实现步进电机最后的运转。第4章上位机软件设计步进电机是将电脉冲信号变换成相应的角位移或直线位移的机电执行元件。因为步进电机具有快速起停、精确步进以及能直接接收数字量的特点,所以在工业系统中广泛应用。本章主要介绍一种基于微机和单片机的步进电机控制系统。本系统主要由上位PC机,MCS-51单片机,驱动电路和步进电机组成。其中,上位机是PC机,可由VC++实现用户界面,并将用户输入的控制命令通过串行口输出到下位的MCS-51单片机,单片机按照上位PC机的命令产生相应的控制信号,通过驱动电路来驱动步进电机。在本系统中,上位机与下位机之间采用串行通信方式。由于PC机串口电平逻辑是RS-232C电平,而MCS-51串口电平逻辑是TTL电平,因此二者不能直接相连接,故需要进行电平转换。在本系统中,我们选用了MAX232。软件部分分为上位机程序和单片机程序两部分。其中上位机程序主要是使用VC++语言实现了用户界面和串口通信功能;单片机程序除了串口编程,更重要的是产生步进电机控制信号,使步进电机实现正反转和加减速控制。软件部分分为上位机程序和单片机程序两部分。图4-1创建工程4.1上位机界面实现步骤⑴,创建工程:在IDE中依次选择“File”→“New”菜单命令,在New”菜单中单击“Project”选项卡,在列表中选择“MFCAppWizard(.exe)”选项,在“Projectname”文本框中输入“MSComm”,其他使用默认值,如图4-1。图4-2step1图4-3控件对话框单击“OK”按钮,弹出“MFCAppWizard-Step1”对话框。在“MFCAppWizard-Step1”对话框中,选择“Dialogbased”单选按钮,其他默认值,单击“Finish”按钮,如图4-2。在弹出的“NewProjectInformation”中,单击“OK”按钮,就以完成工程的创建。⑵,添加MSComm控件:依次单击菜单栏的“Project”→“AddToProject”→“ComponentandControl”,弹出添加控件对话框,如图4-3。然后打开“RegisteredActiveXControls”控件夹,选中“MicrosoftCommunicationsControl,,vison6.0”控件,如图4-4,将其添加到工程中。图4-4具体控件接着编辑对话框界面,删除原有的静态文本和“确认”“取消”按钮,并为对话框添加六个“按钮”控件,分别是“启动,停止,正转,反转,加速,减速”,一个静态文本框“选择串口”。最后添加一个“下拉组合框”,用于选择串口号。调整他们的大小和位置,使其美观,如图4-5。图4-5界面图⑶,修改控件属性:添加完各个控件后我们将对各个空间的属性进行修改,具体步骤如下。将鼠标光标移动到对话框中需要编辑的空间上,然后单击鼠标右键打开弹出式菜单,选择“Properities”属性,打开各控件的属性对话框,对控件的属性进行如表4-1的修改:表4-1控件的属性控件ID控件属性MSComm控件IDC_MSCOMM默认启动按钮IDC_BUTTON1Caption:启动停止按钮IDC_BUTTON2Caption:停止正转按钮IDC_BUTTON3Caption:正转反转按钮IDC_BUTTON4Caption:反转加速按钮IDC_BUTTON5Caption:加速减速按钮IDC_BUTTON6Caption:减速选择串口下拉列表IDC_COMBOLISTGroup:选中,Caption:时间如图4-6为串行通信控件MSComm的属性。图4-6MSComm属性对话框⑷,添加控制成员变量:选择“View”→“ClassWizard”菜单项,在弹出的“MFCClassWizard”对话框中单击“MemberVariables”选项卡,进入编辑对话框空间成员变量的界面。如图4-7。图4-7添加变量对话框这个界面用于设置为控件关联变量,使得在程序中通过这些变量可以访问空间的属性。在“Project”列表栏中选择“MSComm”,在“Classname”列表框中选择“CMSCommDlg”,再在“ControlIDs”选项栏中选择需要添加变量的ID,单击“AddVariable”按钮来添加变量,如图4-7。需要添加的变量如表4-2所示。表4-2各控件ID及其对应变量ID变量属性变量类型变量名IDC_MSCOMMContrlCMSCmmm_commIDC_BUTTON1无无无IDC_BUTTON1无无无IDC_BUTTON1无无无IDC_BUTTON1无无无IDC_BUTTON1无无无IDC_BUTTON1无无无IDC_COMBOLISTValueIntM_port完成变量添加的“MemberVariables”界面如图4-8。图4-8添加完变量后界面⑸,为控件添加响应函数:添加完变量后,就应该对前面添加的每个控件设置一个响应的函数。在IDE主菜单中依次选择“View”→“ClassWizard”,打开ClassWizard对话框,选择“MemberMaps”选项卡,在“Project”下拉列表框中选择“MSComm”,在“Classname”下拉列表框中选择“CMSCommDlg”。在“ObjectIDs”下拉列表框中选择要添加响应控件的ID,在Message项中选中需要添加的消息,通过时对话框的下部出现响应的提示。单击“AddFunction…”按钮,单击“OK”按钮就可以创建一个消息的处理函数,如图4-9。单击“EditCode”按钮退出“ClassWizard”对话框,并自动定位在添加的函数上。图4-9添加函数界面⑹,添加代码:在文件“MSCommDlg.h”的头部加入语句#include“mscomm1.h”,然后为对话框类加入成员函数voidInitComm(),来出初始化MSComm控件,其各部分代码见本章第二节。4.2串口是常用的计算机与外部串行设备之间的数据传输通道。由于串行通信方便易行,所以应用广泛。依据不同的条件实现对串口的灵活编程控制是我们所需要的。Windows下串行通信与以往串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。串行口在Windows中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Windows提供了相应的文件I/O函数与通信函数。通过了解这些函数的使用,可以编制出符合不同需要的通信程序。与通信设备相关的结构有COMMCONFIG、COMMPROP、COMMTIME2OUTS、COMSTAT、DCB、MODEMDEVCAPS、MODEMSETTINGS共7个,与通信有关的WindowsAPI函数共有26个。在很多情况下,远程监控和自动化领域系统常见的通信编程多为串口通信编程。计算机串口编程在通信软件中有着十分广泛的应用。在VisualC++、Ddphi、VisualRasis、TC、BC等开发工具之间,VisualC++由于功能强大和应用灵活,同时也得到Miscrosoft系统的最好支持,因此涉及硬件操作的通信编程,一般采用VisualC++。

在VC++中有两种方法可以进行串口通讯。一种是直接用VC++访问串口。另一种是利用Microsoft公司提供的ActiveX控件MicrosoftCommunicationsControl。本文将主要介绍第二种方法。利用ActiveX控件MicrosoftCommunicationsCon—trol访问串口

ActiveX是Windows下进行应用程序开发的崭新技术,它的核心内容是组件对象模型CDM(ComponentObjectModel)。ActiveX控件包括一系列的属性、方法和事件,使用ActiveX控件的应用程序和ActiveX控件之间的工作方式是客户/服务器方式,即应用程序通过ActiveX控件提供的接口来访问ActiveX控件的功能。

MicrosoftConununicationsControl(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询方法。

⑴事件驱动法

事件驱动通信是处理串行端口交互作用的一种非常有效的方法。在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件的OnComm事件捕获并处理这些通信事件。而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。

⑵查询法

这种方法适合于较小的应用程序。在这种情况下,每当应用程序执行完某~串行口操作后,将不断检查MSComm控件的ConunEvent属性以检查执行结果或者检查某一事件是否发生。如果应用程序较小,并且是自成一体,这种方法可能是更可取的。

MSComm控件有许多重要的属性,其中首要的几个如下所示Settings以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。PortOpen设置并返回通信端口的状态,也可以打开和关闭端口。Input从接收缓冲区返回和删除字符。Output向发送缓冲区写一个字符串。InputLen设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。InBufferCount返回接收缓冲区中已接收到的字符数,将其置为0可以清除接收缓冲区。InputMode定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。RThreshold和SThreshold属性,表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。编程实现打开VisualC+十6.0集成开发环境,创建一个基于对话框的MFC应用程序项目,命名为MyCOM,记住在设置项目选项时必须选上ActiveXControls,其他的按照缺省设置。完成这一步后,选择菜单项Project/AddtoProiect/Compo—nentsandControls……,将弹出一个对话框以选择系统中已有的组件(Components)和控件(Controls)。选择RegisteredActiveXControls文件夹下的MicrosoftCommunicationsControl项并按下Insert按钮,将MSComm控件支持加入到本项目中。这时将生成一个名为CMSComm的C++类,并且在对话框编辑器里的工具栏将出现MSComm控件图标。CM一SComm类是由MSComm控件导出的一系列接口函数构成的,利用它将可以访问MSComm控件的属性(Property)和方法(Method)。

我们假设先利用计算机CDMl口上,那么打开资源编辑器,在程序主对话框(资源ID为IDD_MYCDM_DIALOG)上面放置一个MSComm控件,并用ClassWizard为该对话框类添加对应该控件的成员变量m_wndCOMl。我们假设外接口与计算机进行串行通信时采用7个数据位、1个停止位、偶校验方式,并且波特率为2400/4800/9600可选,这里采用9600波特率,在对话框编辑器中设置MSComm控件的属性。随着单片机和微机技术的不断发展,特别是网络技术在测控领域的广泛应用,由PC机和多台单片机构成的多机网络测控系统已成为单片机技术发展的一个方向。它结合了单片机在实时数据采集和微机对图形处理、显示的优点。同时,windows环境下后台微机在数据库管理上具有明显的优势。二者结合,使得单片机的应用已不仅仅局限于传统意义上的自动监测或控制,而形成了以网络为核心的分布式多点系统发展的趋势。单片机和PC机的串行通信一般采用RS-232、RS-422或RS-485总线标准接口。本文针对PC机常用的RS-232方式,主要探讨通过VB610建立界面,采用RS-232接口与单片机通信的方法。RS-232是早期为公用电话网络数据通信而制定的标准,其逻辑电平与TTL\CMOS几乎完全不同。逻辑“0”规定为+3~+15V之间,逻辑“1”,规定为-3~-15V之间。由于RS-232发送和接收之间有公共地,传输采用非平衡模式,因此,共模噪声会耦合到信号系统中,其标准建议的最大通信距离为15米。RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换,实现逻辑电平转换。RS-232规定的电平和一般微处理器的逻辑电平不一致,必须进行电平转换,实现逻辑电平转换MCl488和MCl489芯片为RS-232至TTL逻辑电平的转换芯片,。该电路需要±12V电压。图中TXD、RXD分别接单片机的发送和接收端MCS-51系列单片机对串口的控制是通过对串行控制寄存器SCON和电源控制寄存器PCON的设置来实现的。SCON是一个可位寻址的特殊功能寄存器,通过设置SCON的SM0和SM1,可以使单片机有四种不同的工作方式。在用于和PC机实现串行通信时,一般设置为方式1或方式3,主要区别是方式1的数据格式为8位,只用于双机通信;方式3的数据格式为9位,其中第9位SM2为多机通信位,可实现单片机的多点通信,即既适用于双机通信,又适用于多机通信。电源控制寄存器PCON的SMOD为串行口波特率倍增控制位。单片机和PC机通信时,其通信速率由定时器T1或定时器T2产生(52系列),在T1工作在方式2时的通信速率的计算公式为:波特率=(2SMOD×Fosc)/(32×12×[256-TH1])。其中Fosc晶振频率,为获得准确的通信速率,Fosc通常为11。0592MHZ。采用T1定时器通信的系统,速率不可能过高,一般情况下最高为19200bit/s。如为了获得更高的通信速率可利用52系列单片机的定时器T2,最高速率可达115200bit/s。单片机通信程序一般采用中断方式与微机通信,微机为主控方。当单片机收到微机发送的地址信号时,便转入中断服务程序,向微机发送数据。其中断服务于程序流程见图2,该中断服务于程序也适用于多机通信的系统。单片机的晶振为1110592MHZ,通信速率为9600bit/s,帧格式为N1811。打开VisualC+十6.0集成开发环境,创建一个基于对话框的MFC应用程序项目,命名为MyCOM,记住在设置项目选项时必须选上ActiveXControls,其他的按照缺省设置。完成这一步后,选择菜单项Project/AddtoProiect/Compo—nentsandControls……,将弹出一个对话框以选择系统中已有的组件(Components)和控件(Controls)。选择RegisteredActiveXControls文件夹下的MicrosoftCommunicationsControl项并按下Insert按钮,将MSComm控件支持加入到本项目中。这时将生成一个名为CMSComm的C++类,并且在对话框编辑器里的工具栏将出现MSComm控件图标。CM一SComm类是由MSComm控件导出的一系列接口函数构成的,利用它将可以访问MSComm控件的属性(Property)和方法(Method)。我们假设先利用计算机CDMl口上,那么打开资源编辑器,在程序主对话框(资源ID为IDD_MYCDM_DIALOG)上面放置一个MSComm控件,并用ClassWizard为该对话框类添加对应该控件的成员变量m_wndCOMl。我们假设外接口与计算机进行串行通信时采用7个数据位、1个停止位、偶校验方式,并且波特率为2400/4800/9600可选,这里采用9600波特率,在对话框编辑器中设置MSComm控件的属性如表4-3所示:表4-3MSComm控件属性属性说明IDIDC_COM1(资源ID)CommPort1(COM1)Settings9600,e,7.,1(波特率9600,偶校验,7个数据位,1个停止位)RThreshold0(不触发接受换成区空事件)SThreshold1(没接受到一个字符就触发一个发送数据事件)Inputlen0(不从接受缓存区读取数据)4.开始开始串口初始化发送命令帧延时60s事件驱动?接收数据校验和正确?结束NN图4-10PC机通信流程图本设计采用事件驱动方式来对pc机和单片机的通信进行编程,是实时性高,节省cpu资源,别且编程比才用查询方式简单。计算机和单片机通信时,上位机程序并没有给出控制步进电机如何加速如何减速如何正转和反转的程序。而是通过和单片机来约定指令代码:01h表示启动,02h表示停止,03h表示正转,04h表示反转,05h表示加速,06h表示减速。单片机接受到指令代码后,通过判断来执行相应的程序。上位机的程序主要包括串口初始化程序和传送指令代码程序两部分。4.以下是串行口的初始化程序:m_ComPort.SetCommPort(1);//指定串口号

m_ComPort.SetInBufferSize(1024);//设置输入缓冲区的

大小,Bytes

m_ComPort.SetOutBufferSize(512);//设置输出缓冲区的

Bytes,

if(!m_ComPort.GetPortOpen());//打开串口

m_ComPort.SetPortOpen(TRUE);//打开通信口

m_ComPort.SetInputMode(1);//设置输入方式为二进制

方式

m_ComPort.SetSettings(“9600,n,8,1”);//设置波特率等

参数

m_ComPort.SetRThreshold(1);//为1表示有一个字符引

发一个事件

m_ComPort.SetInputLen(0);以下是串行口传输指令代码的程序:⑴“启动按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”01h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑵“停止按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”02h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑶“正转按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”03h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑷“反转按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”04h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑸“加速按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”05h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑹“减速按钮”代码:VoidCMSCommDlg::onSend(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);Buffer=”06h”;m_ComPort.SetOutput(Buffer);UpdateData(FALSE);}⑺“选择串口下拉列表”代码:VoidCMSCommDlg::onSend(){//TODO:Addyourcontrolnot

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论