步进电机是一种将脉冲信号转换成角位移的伺服执行器件。其特点是结构简单、运行可靠、控制方便。尤其是步距值不受电压、温度的变化的影响、误差不会长期积累,这给实际的应用带来了很大的方便。它广泛用于消费类产品(打印机、照相机)、工业控制(数控机床、工业机器人)、医疗器械等机电产品中。
通常的步进电机控制方法是采用CPU(PC机、单片机等)配合专用的步进电机驱动控制器来实现,这存在成本较高、各个环节搭配不便(不同类的电机必须要相应的驱动控制器与之配对)等问题。
CPLD器件具有速度快、功耗低、保密性好、程序设计灵活、抗干扰能力强、与外围电路接口方便等特点,越来越多的应用于各种工控、测量、仪器仪表等方面。同时单片机非常适合应用于需要复杂的控制算法的场合。因此本设计采用的方法是:用单片机采集现场信号后计算出步进电机运转所需的控制信息后,再传给CPLD,CPLD把接收到的信息转换成步进电机实际的控制信号(运转方向、运转速度)输出给电机的驱动电路。这样的好处是单片机与CPLD各行其是。单片机可以专注于处理输入信号与输出信息之间的转换等复杂的算法.不必占用过多的CPU资源去直接控制电机,也减小了由此引入干扰的可能性;CPLD只需把单片机传送过来的信息转换成电机的控制信号。这样就发挥了单片机和CPLD两者的优点。
1 步进电机原理简介
通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。
我们使用的单极四相步进电机为例。其结构如图1:
四个绕组引出四相(相A1相A2相B1相B2)和两个公共线(接到电源的正机)。把绕组的某一相接到电源的地线。这样该绕组就会受到激励。我们采用四相八拍的控制方式,即1相与2相交替导通,这样可提高分辨率。每一步可转0.9°控制电机正转的励磁顺序如下表:
若要求电机反转,将励磁信号倒过来传送即可。
2 步进电机控制方案
控制系统的框图如下:
本方案采用AT89S51作为主控制器件。它与AT89C51兼容,同时还增加了SPI接口和看门狗模块,这不但使程序调试变得方便而且也使程序运行更加稳定。在方案中该单片机主要实现现场信号的采集并计算出步进电机运转的方向和速度信息。然后传送给CPLD。
CPLD采用EPM7128SLC84-15,EPM7128是可编程的大规模逻辑器件,为ALTERA公司的MAX7000系列产品。具有高阻抗、电可擦等特点,可用单元为2500个,工作电压为+5V。CPLD接收到单片机发送过来的信息后,转换成对应的控制信号输出给步进电机驱动器。驱动器则把控制信号处理后输入电机绕组,实现了电机的有效控制。
2.1 电机驱动器硬件结构
电机的驱动器采用如下电路:
其中R1-R8的电阻值为320Ω。R9-R12的电阻值为2.2KΩ。Q1-Q4为达林顿管D401A,Q5-Q8为S8550。J1、J2与步进电机的六条引线相连
2.2 CPLD硬件电路的设计
使用CPLD器件使电路的设计变得十分简洁。我们只需要把CPLD的I/O脚引出来, 接上相应的外围器件就可以了。CPLD与专用数字芯片(如74SC164等)的一个重要区别是其I/O 口的功能可任意在软件上设定,这样在硬件设计中便可只用考虑电源线与地线的分布。以减小高频电流噪声对数据传输的影响。
在设计CPLD电路时,电源、时钟以及I/O与目标芯片都可通过接插件进行连接。最后在管脚锁定的时候把CPLD的I/O分别与单片机和电机电路部分相连就可以了,这样使电路的安装调试变得更加简便。
2.3 控制的实现
由于篇幅的限制。在此只讨论单片机与CPLD逻辑接口部分以及CPLD中控制信号的产生部分。
首先说明单片机和CPLD逻辑接口的问题。AT89S51与EPM7128SLC84的I/O电压都为5V。所以它们的I/O可以直接连接。无需增加额外的电路。如果使用的是I/O电压为3.3V的可编程逻辑器件,则需要考虑逻辑接口这个问题。
同时通过时序分析. 我们可以知道该系统中EPM7128SLC84的输入信号建立时间Ts=8ns。也就是说输入CPLD的信号必须持续8ns以上才能够被CPLD识别。单片机如采用12MHZ的晶振,则信号的改变时间为微秒级,完全满足这个条件。
当单片机根据实际情况计算出控制信息(电机的速度和方向)后就要"联络"CPLD以便及时的把信息传给它。单片机和CPLD交换数据可以选用并行传送或者串行传送的方式。考虑到单片机和CPLD的引脚都比较丰富。而且并行传送的接口相对简单,因此选用并行的方式交换数据。规定传送数据的协议如下图所示:
由图可知,单片机每次用P0口发送3个字节的数据(N1、N2分别为速度和方向控制字,N3为和校验字节),当CPLD检测到EN从高到低的跳变表示传进数据开始。每个字节的有效数据出现在CLK的上升沿。ACK为CPLD的应答信号。当CPLD接收完数据后进行和校验.如果不对则把ACK拉高。单片机若检测到ACK为高电平则重新开始送数的过程。CPLD接收到正确的数据后就把它转换成步进电机的物理运动。直到接收到新的控制信息。我们用VHDL语言编程,并选择EPM7128SLC84-15作为目标器件进行时序仿真和硬件测试。程序的框图如下:
EN:系统使能信号。
CPLD_CLK:系统时钟信号。
N1:速度控制信号。
N2:方向控制信号。
系统时钟CPLD_CLK在速度控制信号N1的控制下得到脉冲分配器(状态机)的输入时钟,此时钟的频率决定控制逻辑输出的频率从而(在允许的范围内)控制电机的转速。EN为高电平时系统使能开始正常运转。N1为01H代表电机正转,00H代表电机反转。
程序的脉冲分配器部分采用状态机的方法编写。状态机是纯硬件数字系统中的顺序控制电路,在状态机的运行方式上类似于控制灵活方便的CPU,而在运行速度和工作可靠性方面都优于CPU。
状态机部分的VHDL代码如下:
- PROCESS(C_ST,EN,N1,BCLK)
- BEGIN
- IF RISING_EDGE(BCLK) THEN C_ST<=N_ST;
- IF EN='1' THEN
- CASE C_ST IS
- WHEN ST0=> IF N1="00000000" THEN
- N_ST<=ST1; ELSE N_ST<=ST7;END IF;
- CON_OUT<="1000";
- WHEN ST1=> IF N1="00000000" THEN
- N_ST<=ST2; ELSE N_ST<=ST0;END IF;
- CON_OUT<="1100";
- WHEN ST2=> IF N1="00000000" THEN
- N_ST<=ST3;ELSE N_ST<=ST1;END IF;
- CON_OUT<="0100";
- WHEN ST3=> IF N1="00000000" THEN
- N_ST<=ST4;ELSE N_ST<=ST2;END IF;
- CON_OUT<;"0110";
- WHEN ST4=> IF N1="00000000" THEN
- N_ST<=ST5;ELSE N_ST<=ST3;END IF;
- CON_OUT<="0010";
- WHEN ST5=> IF N1="00000000" THEN
- N_ST<=ST6; ELSE N_ST<=ST4;END IF;
- CON_OUT<="0011";
- WHEN ST6=> IF N1="00000000" THEN
- N_ST<=ST7;ELSE N_ST<=ST5;END IF;
- CON_OUT<="0001";
- WHEN ST7=> IF N1="00000000" THEN
- N_ST<=ST0; ELSE N_ST<=ST6;END IF;
- CON_OUT<="1001";
- WHEN OTHERS=> N_ST<=ST0;
- CON_OUT<="0000";
- END CASE;
- END IF;
- END IF;
- END PROGESS;
2.4 结论
实践表明.这样的控制方法切实可行。在整个工作过程中,单片机运行稳定.电机能够根据情况完成正常的正转反转,加速减速。
3 结语
单片机是一种非常传统的智能控制器件,无论是智能家电还是消费类产品都有它的身影。CPLD器件在各种场合的应用也越来越广泛。两者有各自的优缺点。单片机控制功能很强,能完成复杂的数学运算.但是稳定性稍差。CPLD运行速度快。程序不会跑飞。适合产生各种复杂组合逻辑和时序逻辑。可以灵活的定义各个引脚的与外围电路连接的电气特性等。使用单片机和CPLD联合控制步进电机只是不同类型的器件协同完成同一任务在实际应用中的一个例子。实践证明这种方法是可取的。