步进电机的单片机控制

合集下载

单片机控制步进电机系统(C语言源代码)

单片机控制步进电机系统(C语言源代码)

题目:单片机控制步进电机系统摘要很多工业控制设备对位移和角度的控制精度要求较高, 一般电机很难实现, 而步进电机可精确实现所设定的角度和转数。

本设计主要是运用51 单片机控制六线4相步进电机系统, 由单片机产生驱动脉冲信号, 控制步进电机以一定的转速向某一方向产生一定的转动角度。

同时能够利用单片机实现电机的正、反转及速度控制,并能在数码管上显示出相应的速度。

本文中给出了该系统设计的硬件电路,软件设计,人机交互等。

并对各个功能模块进行了详细的说明。

主要内容包括以下几个方面:单片机控制步进电机的一般原理。

电机驱动及控制的实现。

控制系统整体设计以及模块划分说明。

原理图。

代码。

关键词:单片机;步进电机;系统;驱动AbstractMany Industrial control equipment have a highly requirement in displacement and angle with control accuracy, the most motor can't carry out .but the step motor can carry out the displacement and angle that you enactmented in accuracy. This design mainly used SCM to control step motor system.The step motor is formed six lines and four phasic.Through SCM generate the drive pulse signal.Control stepper motor through a certain speed in a direction to get a certain degree of rotation angle.At the same time, It can use SCM to realization of the motor is , reverse and speed control. and showed the speed in the digital tube.In this paper, given the design of the system hardware circuit,software design, human-computer interaction and so on.and it given the details description of each functional module.the main contents include the following:(1) The general principles of signal_chip controlling step motor.(2) The realization of motor driving and controlling(3) Control system overall design and description module division(4) Schematic Diagram(5) CodeKey Words:SCM; stepper motor; system; drive目录引言41 单片机控制步进电机的一般原理41.1 步进电机41.1.1 步进电机介绍41.1.2 步进电机分类51.1.3 技术指标51.1.4 步进电机工作原理51.2 单片机72 步进电机驱动实现82.1简介82.2驱动选择83 系统硬件设计93. 1 单片机控制电机93.2 键盘93.3 显示部分10程序流程图11总结12致谢13参考文献13附录13C代码13引言目前,在工业控制生产以及仪器上应用十分广泛。

单片机与步进电机细分控制

单片机与步进电机细分控制

单片机与步进电机细分控制
1
步进是纯粹的数字控制电动机,它将电脉冲信号改变为角位移,即给一个脉冲,步进电机就转一个角度,因此十分合适控制,在非超载的状况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变幻的影响,电机则转过一个步距角,同时步进电机惟独周期性的无累积误差,精度高。

步进电动机有如下特点:
1)步进电动机的角位移与输入脉冲数严格成正比。

因此,当它转一圈后,没有累计误差,具有良好的尾随性。

2)由步进电动机与驱动组成的开环数控系统,既容易、便宜,又十分牢靠,同时,它也可以与角度反馈环节组成高性能的闭环数控系统。

3)步进电动机的动态响应快,易于启停、正反转及变速。

4)速度可在相当宽的范围内平稳调节,低速下仍能获得较大转距,因此普通可以不用减速器而挺直驱动负载。

5)步进电机只能通过脉冲电源供电才干运行,不能挺直用法沟通电源和直流电源。

6)步进电机存在振荡和失步现象,必需对控制系统和机械负载实行相应措施。

步进电机具有和机械结构容易的优点,图1是四相六线制步进电机原理图,这类步进电机既可作为四相电机用法,也可以做为两相电机用法,用法灵便,因此应用广泛。

步进电机有两种工作方式:整步方式和半步方式。

以步进角1.8度四相混合式步进电机为例,在整步方式下,步进电机每接收一个脉冲,旋转1.8度,旋转一周,则需要200个脉冲,在半步方式下,步进电机每接收一个脉冲,旋转0.9度,旋转一周,则需要400个脉冲。

控制步进电机旋转必需按一定时序对步进电机引线输入脉冲,以上述四
第1页共4页。

c语言实现单片机控制步进电机加减速源程序

c语言实现单片机控制步进电机加减速源程序

C 语言实现单片机控制步进电机加减速源程序1. 引言在现代工业控制系统中,步进电机作为一种常见的执行元件,广泛应用于各种自动化设备中。

而作为一种常见的嵌入式软件开发语言,C 语言在单片机控制步进电机的加减速过程中具有重要的作用。

本文将从单片机控制步进电机的加减速原理入手,结合 C 语言的编程技巧,介绍如何实现单片机控制步进电机的加减速源程序。

2. 单片机控制步进电机的加减速原理步进电机是一种能够精确控制角度的电机,它通过控制每个步骤的脉冲数来实现旋转。

在单片机控制步进电机的加减速过程中,需要考虑步进电机的加速阶段、匀速阶段和减速阶段。

在加速阶段,需要逐渐增加脉冲的频率,使步进电机的转速逐渐增加;在匀速阶段,需要保持恒定的脉冲频率,使步进电机以匀速旋转;在减速阶段,需要逐渐减小脉冲的频率,使步进电机的转速逐渐减小。

这一过程需要通过单片机的定时器和输出控制来实现。

3. C 语言实现步进电机加减速的源程序在 C 语言中,可以通过操作单片机的 GPIO 来控制步进电机的旋转。

在编写源程序时,需要使用单片机的定时器模块来生成脉冲信号,以控制步进电机的旋转角度和速度。

以下是一个简单的 C 语言源程序,用于实现步进电机的加减速控制:```c#include <reg52.h>void main() {// 初始化定时器// 设置脉冲频率,控制步进电机的加减速过程// 控制步进电机的方向// 控制步进电机的启停}```4. 总结与回顾通过本文的介绍,我们了解了单片机控制步进电机的加减速原理和 C 语言实现步进电机加减速源程序的基本思路。

掌握这些知识之后,我们可以更灵活地应用在实际的嵌入式系统开发中。

在实际项目中,我们还可以根据具体的步进电机型号和控制要求,进一步优化 C 语言源程序,实现更加精准和稳定的步进电机控制。

希望本文能为读者在单片机控制步进电机方面的学习和应用提供一定的帮助。

5. 个人观点与理解在我看来,掌握 C 语言实现单片机控制步进电机加减速源程序的技术是非常重要的。

单片机控制步进电机

单片机控制步进电机

单片机控制步进电机单片机控制步进电机-线路连接说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机控制步进电机的功能。

后续会分别讲解单片机程序,S曲线生成方法,上位机等相关内容。

硬件清单:1、单片机最小系统(本案例使用Atmega16芯片)2、步进电机(二相四线)3、稳压电源(24V)4、步进电机驱动器(TB6600)整体连接图:原理图:控制原理:1、单片机最小系统作用:①输出脉冲到步进电机驱动器,从而控制步进电机的速度大小②控制步进电机的使能③控制步进电机的转动方向2、步进电机作用:①提供机械动力3、稳压电源作用:①为步进电机提供电源4、步进电机驱动器作用:①将单片机脉冲信号转化为步进电机的驱动信号,简化控制过程硬件连接图:实物连接图与原理图如上图所示。

Atmega16单片机最小系统(其他单片系统接线原理类同)与步进电机驱动器(TB6600)采用共阴极接法(驱动器的ENA-、DIR-、PUL-与单片机的GND连接)。

单片机PA0口控制ENA+,PA0高电位的时,步进电机掉电,步进电机自由状态,用手可以转动;PA0低电位的时,步进电机上电,根据输入的脉冲信号进行转动,无脉冲信号时处于自锁状态;单片机PA1口控制DIR+,PA1高电位与低点位分别对应步进电机的正转与反转;单片机PA2口控制PUL+,通过PA2口高低电位的切换形成脉冲,单片机输出一个脉冲(一个高电位加一个低电位即为一个脉冲),步进电机就会走一步。

对于二相四线步进电机而言,在驱动器无细分的情况下,单片机一个脉冲对应步进电机一个步距角1.8°;驱动器如果是2细分状态,单片机一个脉冲对应步进电机转动角度为1.8°/2=0.9°;驱动器如果是4细分状态,单片机一个脉冲对应步进电机转动角度为1.8°/4=0.45°;其他细分依次类推。

TB6600驱动器上的SW1、SW2、SW3三个拨码开关控制细分数(1细分、2细分、4细分、8细分、16细分、32细分),细分数越大,步进电机转动过程中越平稳。

单片机控制步进电机调速实验

单片机控制步进电机调速实验

51系列单片机控制步进电机调速实验实验目的及要求:1、熟悉步进电机的工作原理2、熟悉51系列单片机的工作原理及调试方法3、设计基于51系列单片机控制的步进电机调速原理图(要求实现电机的速度反馈测量,测量方式:数字测量)4、实现51系列单片机对步进电机的速度控制(步进电机由实验中心提供,具体型号42BYG )由按钮控制步进电机的启动与停止;实现加速、匀速、和减速控制。

速度设定由键盘设定,步进电机的反馈速度由LED数码管显示。

实验原理:步进电机控制原理一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。

步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。

因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。

步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。

由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。

随着数字控制系统的发展,步进电动机的应用将逐渐扩大。

步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

步进电机的驱动电路根据控制信号工作,控制信号可以由单片机产生。

电机转子均匀分布着很多小齿,定子齿有三个励磁绕阻,其几何轴线依次分别与转子齿轴线错开。

0、1/3て、2/3て,(相邻两转子齿轴线间的距离为齿距以て表示),即A与齿1相对齐,B与齿2向右错开1/3て,C与齿3向右错开2/3て,A'与齿5相对齐,(A'就是A,齿5就是齿1)下面是定转子的展开图:(图2所示)图1 是反应式步进电动机结构示意图,它的定子具有均匀分布的六个磁极,磁极上绕有绕组。

步进电机的单片机控制

步进电机的单片机控制

步进电机的单片机控制本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO 口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。

摘要: 本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。

关键词: 步进电机 单片机 数码管一、 方案论证与比较1、 本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V)方案一:使用多个功率放大器件驱动电机通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。

但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。

方案二:使用L298N芯片驱动电机L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

图1-1通过比较,使用L298N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。

而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。

步进电机的控制原理及其单片机控制实现

步进电机的控制原理及其单片机控制实现

步进电机的控制原理及其单片机控制实现摘要:采用8051单片机来控制步进电机,给出了步进电机的控制原理及其单片机控制的具体实现方法。

关键词:步进电机;单片机;控制步进电机可以对旋转角度和转动速度进行高精度控制。

步进电机作为控制执行元件,是机电一体化的关键产品之一, 广泛应用在各种自动化控制系统和精密机械等领域。

例如,在仪器仪表,机床设备以及计算机的外围设备中(如打印机和绘图仪等),凡需要对转角进行精确控制的情况下,使用步进电机最为理想。

随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。

上个世纪就出现了步进电动机,它是一种可以自由回转的电磁铁,动作原理和今天的反应式步进电动机没有什么区别,也是依靠气隙磁导的变化来产生电磁转矩。

在本世纪初,由于资本主义列强争夺殖民地,造船工业发展很快,同时也使得步进电动机的技术得到了长足的进步。

到了80年代后,由于廉价的微型计算机以多功能的姿态出现,步进电动机的控制方式更加灵活多样。

原来的步进电机控制系统采用分立元件或者集成电路组成的控制回路,不仅调试安装复杂,要消耗大量元器件,而且一旦定型之后,要改变控制方案就一定要重新设计电路。

计算机则通过软件来控制步进电机,更好地挖掘出电动机的潜力。

因此,用计算机控制步进电机已经成为了一种必然的趋势,也符合数字化的时代趋势。

步进电机和普通电动机不同之处是步进电机接受脉冲信号的控制。

步进电机靠一种叫环形分配器的电子开关器件,通过功率放大器使励磁绕组按照顺序轮流接通直流电源。

由于励磁绕组在空间中按一定的规律排列,轮流和直流电源接通后,就会在空间形成一种阶跃变化的旋转磁场,使转子步进式的转动,随着脉冲频率的增高,转速就会增大。

步进电机的旋转同时与相数、分配数、转子齿轮数有关。

现在比较常用的步进电机包括反应式步进电机、永磁式步进电机、混合式步进电机和单相式步进电机等。

其中反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。

基于单片机的步进电机控制电路设计

基于单片机的步进电机控制电路设计

基于单片机的步进电机控制电路设计
步进电机是一种应用广泛的电机,它的控制方式是通过逐步改变电流来驱动电机转动。

基于单片机的步进电机控制电路设计可以使步进电机的控制更加精确、方便和自动化。

下面将介绍一下如何设计一台基于单片机的步进电机控制电路。

首先,我们需要选择合适的单片机。

对于步进电机控制,需要一个I/O口数目足够的单片机,并且要求计算速度快、性能稳定。

常用的单片机有AT89C51、AVR、PIC、STM32等,其
中STM32拥有强大的计算能力和外设支持,非常适合用于步
进电机控制电路的设计。

接下来,我们需要考虑步进电机的驱动方式。

步进电机可以采用全步进或半步进两种方式驱动。

全步进控制方式会让电机一步步转动,步距为180度,转速慢但精确度高,而半步进控制方式可以让电机先半步,再进入全步进控制,提高了转速同时又保持了较高的精度。

最后,我们需要设计电路连接和代码编写。

在电路连接方面,需要将单片机输出引脚和驱动芯片的控制引脚相连,同时将驱动芯片输出端和电机的相应引脚相连。

在代码编写方面,需要根据所选单片机的指令集来编写步进电机控制引脚输出的程序,实现步进电机转速和方向的控制。

综上所述,基于单片机的步进电机控制电路设计需要选取合适的单片机,选择合适的步进电机驱动方式,并根据电路连接和
代码编写来实现电机的精确控制。

这样设计出的步进电机控制电路可以应用于各种机械设备控制,使之更加智能化和自动化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本设计采用凌阳16 位单片机SPCE061A对步00进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。

步进电机的单片机控制作者:李通刘志垠摘要:本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74L S164作为4位单个数码管的显示驱动,从单片机输入信号;利用凌阳单片机的语音功能播报电机的转速。

关键词:步进电机单片机数码管一、方案论证与比较1、本设计的重点在于对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V)方案一:使用多个功率放大器件驱动电机通过使用不同的放大电路和不同参数的器件,可以达到不同的放大的要求,放大后能够得到较大的功率。

但是由于使用的是四相的步进电机,就需要对四路信号分别进行放大,由于放大电路很难做到完全一致,当电机的功率较大时运行起来会不稳定,而且电路的制作也比较复杂。

方案二:使用L298N芯片驱动电机L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

图1-1通过比较,使用L298N芯片充分发挥了它的功能,能稳定地驱动步进电机,且价格不高,故选用L298N驱动电机。

而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。

2、数码管显示电路的设计方案一:串行接法设计中要显示4位数字,用74LS164作为显示驱动,其中带锁存,使用串行接法可以节约IO口资源,但要使用SIO,发送数据时容易控制。

方案二:并行接法使用并行接法时要对每个数码管用IO口单独输入数据,占用资源较多。

由于设计中用一块单片机进行控制,资源有限,选择了方案一。

另外,使用锁存也起到节约资源的作用。

二、步进电机控制原理步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。

步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。

步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。

其基本原理作用如下:(1)控制换相顺序通电换相这一过程称为脉冲分配。

例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。

(2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。

(3)控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。

两个脉冲的间隔越短,步进电机就转得越快。

调整单片机发出的脉冲频率,就可以对步进电机进行调速。

三、理论设计综和以上选取的方案,总的流程如图3-2所示。

图3-11、步进电机驱动电路通过L298N构成步进电机的驱动电路,电路图如图3-2所示。

通过单片机SPCE061A的IOB8~IOB13对L298N的IN1~IN4口和ENA、ENB口发送方波脉冲信号,起时序图如图3-3所示。

图3-2图3-32、数码管显示电路的设计数码管的显示驱动使用74LS164,通过SPCE061A的IOB0和IOB1口对DATA和CL K发送数据。

图3-43、4x4键盘电路在设计中,使用了标准的4x4键盘,其电路图如图3-5所示。

单片机的A口低8位为键盘的接口。

尽管设计要求中只需要4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,我们使用了4x4的键盘。

图3-5四、程序设计在进行程序设计的过程中,主要分为五个部分:双机通讯、语音报数、数字显示、步进电机驱动、键盘;其中双机通讯的实现和语音报时比较有特点,将其流程简要介绍如下,其他部分见附的程序。

1、双机通讯图4-1我们在实现双机通讯的过程中使用了“三次握手”的方式,这是Intle网中成用的数据通讯确认协议,其流程图如图4-1所示。

2、语音报数程序设计中语音报数使用的是SACM-A2000,考虑到程序比较简单,首先使用了自动报数方式,但发现不能进行连续报数,于是使用了非自动方式,流程图如图4-2所示。

图4-2五、结果分析与总结应该说这次课程设计还是基本达到了设计的要求,但是也存在着未能解决的问题,由于在执行语音程序时对资源的消耗比较大,在语音报数的时候会中断步进电机驱动信号的输出,导致电机停转。

为此,我们修改了方案,使用了两块单片机,通过双机通讯来传递信号,遗憾的是问题仍然没有得到解决。

这次步进电机的综合实验我们学到了步进电机、数码管、4*4键盘、语音报数和双机通讯的使用,更重要的是学会了程序出问题时调试的方法,并养成了Debug的习惯,学到了程序出问题后怎样去解决的基本方法。

参考文献:[1]谢自美《电子线路设计、实验、测试(第二版)》[M]武汉:华中理工大学出版社,2000.[2]薛钧义,张彦斌,樊波等《凌阳十六位单片机原理及应用》[M]北京:北京航空航天大学出版社,2003HH204步进电机驱动电路在复费率计度器上的应用The application of HH204 (step motor drive circuit) to multiple-expenses power meter上海华晖自控设备有限公司陈辉随着复费率电表在全国电网的大面积普及,对复费率计度器的性价比提出越来越高的要求。

低价格的步进电机驱动芯片HH204能够可靠的应用于复费率计度器的电机驱动。

在驱动力矩、控制信号的灵活性上优于市场上的其他芯片。

一块HH204电路内含四路H桥可以同时驱动一个四相步进电机或者二个二相步进电机,所以一块HH204电路可以完成复费率电机的二个步进电机的驱动电路。

With the widely use of multiple-expenses power meter, users have put much higher requirements on its performance and price. HH204, low price chip for step motor drive, can be applied to the multiple-expenses power meter with high reliability. The drive moment and the agility of controlling signal of HH204 overmatched any other chips being launched in the market.One HH204 circuit, including 4 H bridges, is able to drive one four-phase step motor ortwo two-phase step motors, so one HH204 can perform the function of two step motors’drive circuit.HH204用作复费率电表二相四拍步进电机驱动芯片时,每个步进电机仅需要CPU 提供三个I/O口,二个步进电机共需CPU提供六个I/O口,但可以利用HH204——1、7与11、17脚使能输入端的控制,将二电机的相同绕组的输入端分别并联(见图1),这样仅用四根MCU的I/O端口就可控制二只步进电机的分别运转。

以市场上大量销售的TJD-1计度器为例,当二组方向输入端口的状态每改变四次,刻度就走进0.01度电量。

这方案比带高价专用IC芯片的计度器仅多用了一根MCU的I/O口线,但价格上最起码下降了30%以上,对电表厂家来说,这是一个非常重要的选择。

下面给出用C51编写的复费率计度器驱动程序。

电表常数选用了3200p/kwh,用T0计数方式,T0对电能计量芯片的CF脚进行计数,满32只脉冲时,使计度器前进0.01度。

当计数器溢出时,响应中断。

用户只需根据硬件情况,稍加修改就可移植到PIC、TI等其它公司的单片机上。

When HH204 is used as the chip for two-phase four steps stepper motor in multiple-expenses power meter, each stepper motor only needs three I/O ports. However, if we paralleled connect two groups of direction input ports to control EN pin 1,7 and EN pin 11, 17, we are only need 4 MCU I/O ports to control two stepper motors respectively. Take the TJD-1 as instance, when the state of the two groups of direction ports are changed four times, the scale will forward 0.01. This plan uses one more MCU I/O line but with cost drop at least 30% than uses specialized IC chip.The following is the drive program of multiple-expenses power meter in C51 language.#include "reg51.h"sbit EN1=P1^7;//P1^7使能平电机控制 peak period motor controlsbit EN2=P1^6;//P1^6使能谷电机控制 valley period motor controlsbit D1= P1^5;//电机数字码 motor digital codesbit D2= P1^4;//电机数字码 motor digital codeunsigned int tnum;void turn_step(bit tim,bit backflag);//函数定义 function definitionvoid turn(bit tim,bit backflag); //函数定义 function definitionvoid tint() interrupt 1 // time0计数中断服务程序 count interrupt service routine{TR0=0;turn_step(0,1);turn_step(0,1);turn_step(0,1);turn_step(0,1); //使平电机反转0.01度 enable motor which controls peakperiod to reverse 0.01 degreeTH0=0xff;TL0=0xe0; //32个脉冲中断一次 32 pulses interrupt onceTR0=1;}//-----------------------------------------void turn_step(bit tim,bit backflag) // 电机走一拍,计度器走4拍等于0.01度电{ //tim 表示电机的选择 tim=1表示平motor forwards one step andcounter forwards 4 steps, thenrepresents 0.01 watttim represents the choice of motor tim=1represents the flatunsigned int i; //backflag=1表示反转 represents reverseunsigned char ka;if(D1==1 && D2==0) ka=1;else if(D1==1 && D2==1) ka=2;else if(D1==0 && D2==1) ka=3;else if(D1==0 && D2==0) ka=4; //判断电机电极位置 judge the electrodeposition of motorif(tim==1) EN1=0;else EN2=0; //判断平谷 judge rush-hour or flat-hourperiodif(backflag==1){switch(ka){case 1: D1=1; D2=1; for(i=0;i<1000;i++); break;//2case 2: D1=0; D2=1; for(i=0;i<1000;i++); break;//3case 3: D1=0; D2=0; for(i=0;i<1000;i++); break;//4case 4: D1=1; D2=0; for(i=0;i<1000;i++); break;//1}}else{switch(ka){case 1: D1=0; D2=0; for(i=0;i<1000;i++); break; //4case 2: D1=1; D2=0; for(i=0;i<1000;i++); break; //1case 3: D1=1; D2=1; for(i=0;i<1000;i++); break; //2case 4: D1=0; D2=1; for(i=0;i<1000;i++); break; //3}}EN1=1; EN2=1;}//************************************void turn(bit pin,bit backflag ) //全速转 full speed turning {unsigned int i;if(pin==1) EN1=0;else EN2=0;if(backflag==1){D1=1; D2=0; for(i=0;i<tnum;i++);D1=1; D2=1; for(i=0;i<tnum;i++);D1=0; D2=1; for(i=0;i<tnum;i++);D1=0; D2=0; for(i=0;i<tnum;i++);}else{D1=0; D2=0; for(i=0;i<tnum;i++);D1=0; D2=1; for(i=0;i<tnum;i++);D1=1; D2=1; for(i=0;i<tnum;i++);D1=1; D2=0; for(i=0;i<tnum;i++);}EN1=1; EN2=1;}//***************************************main(){EN1=1;EN2=1;D1=1; D2=1; //管脚初始化 pin initializationTMOD=0x05; //定时器0设置为计数器 timer 0 is set to be the counterTH0=0xff;TL0=0xe0; //置初值 set initial valueTR0=1;ET0=1; //定时器中断使能 timer interrupts the ENEA=1; // 总中断使能 global interrupts the ENtnum=5500;while(1);}。

相关文档
最新文档