在医学检验中经常用到微孔板作为测量载体,为提高测量的定位准确度和运行的平稳性,需要进行Y方向及X方向顺序运动,采用步进电机进行驱动是很好的选择。
     AT89C55和GAL16V8简介
     AT89C55是Atmel公司的低电压、高性能8位单片机,兼容标准MCS-51指令系统,引脚兼容工业标准89C51和89C52芯 片。AT89C55有40个引脚,32个外部双向I/O端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,2个读写口线, 片内时钟电路。AT89C55采用两种软件控制其进入省电睡眠模式的静态逻辑工作闲置方式设计,可以用RAM、定时/计数器、串行口和外部中断唤醒睡眠状 态而继续工作,在睡眠模式下,RAM被冻结,其他功能全部停止,直至下个外中断触发或硬件复位方可开始运行。特别是可反复擦写的Flash存储器可有效地 降低开发成本。
通用阵列逻辑GAL(Generic Array Logic)是美国Lattice公司研制的一种电可擦除的PLD器件,可以用来构成译码器、优先级编码器、多路开关、比较器、移位寄存器、计数器、总线 仲裁器等。采用GAL16V8器件对两相和四相混和式步进电机进行控制,不仅简化了系统的结构,降低了成本,而且编程灵活方便,提高了系统的可靠性,使系 统具有更强的适应性。
硬件设计
     本设计选用GALl6V8为环形脉冲分配器,ULN2003(国产型号为5G1413)是七路达林顿驱动器阵列,是个集电极开路(OC)输 出的反向器.最大驱动电流可以达到500mA。通常应用时是把负载步进电机的一端接到VDD(12V)上,另一端接到输出引脚上,如16脚。为了防止程序 进入死循环,增加了外部的硬件看门狗定时器MAX813L,其内部的看门狗定时器监控UP/UC的工作。如果在1.6s内未检测到其工作,内部的定时器将 使看门狗输出WDO处于低电平状态,WDO将保持低电平直到在WDI检测到UP/UC的工作。将WR和WDO连接可使看门狗超时产生复位。采用两片 ULN2003分别驱动X、Y方向的步进电机。具体硬件电路如图1所示。
 

软件设计
步进电机的脉冲控制通常是由逻辑电路实现的。在计算机控制的系统中,也可以通过编制程序,由扩展I/O口输出脉冲来决定电机的运行方式、方 向及转速,但这种方式占用CPU的时间过多。GAL器件有多种型号,根据设计的需要,同时从经济的角度考虑,选用GALl6V8来实现四相混和式步进电机 进行控制。使用ABEL语言编程,源码如下。
 module motor
 title
 Operation of the simulator on devices with motor
 DATA I/O Corp.  21 10 2002
 FB1  device ‘P16V8R‘;
 D1,D2,D3,D4  pin 2,3,4,5;
 F1,F2,F3,F4,F5,F6,F7,F8  pin 19,18,17,16,15,14,13,12;
 equations
 F8 = D1&D2&D3&D4;
 F7 = D1&D2&D3&!D4;
 F6 = D1&D2&!D3&D4;
 F5 = D1&D2&!D3&!D4;
 F4 = D1&!D2&D3&D4;
 F3 = D1&!D2&D3&!D4;
 F2 = D1&!D2&!D3&D4;
 F1 = D1&!D2&!D3&!D4;
 end motor。
设置软件陷阱
     当程序进入到非程序区,只要在非程序区设置拦截措施,使程序进入陷阱,然后强迫程序回到初始状态。如对CPU的RST指令对应的字节码为 0FFH,如果不用的程序存储区预先写入0FFH,则当程序因干扰而“飞”到该区域执行代码时,就相当于执行1条RST指令,从 而达到系统复位的目的。程序流程如图2所示。
 

汇编原码如下
 MOV120: MOV     R3,#51H
 MOV121: LCALL   MOV124 ;12行前进程序1
 DJNZ R3,MOV121
 MOV P1,#0H ;电机失电
 MOV R0,#100
 RD08: LCALL  DELY
 DJNZ R0,RD08
 MOV80: MOV     R3,#13H
 MOV 2CH,#7 ;8列前进程序1
 MOV81: LCALL   MOV84
 DJNZ R3,MOV81
 MOV P1,#0H ;电机失电
 MOV  R0,#10H
 RD09:   LCALL  DELY;测量单孔程序
 DJNZ R0,RD09
 SETB ET0;开定时器0
 LCALL COTP; 单孔测量程序
 CLR ET0 ;关定时器0
 LCALL QUIT
 INC 2DH
 LCALL D10MS;延时1ms
 LCALL D10MS;延时1ms
 MOV85: MOV  R4,#0CH;8列前进程序2
 MOV83: LCALL MOV86
 DJNZ R4, MOV83
 MOV P1,#0H
 MOV R0,#10H
 RD03: LCALL  DELY
 DJNZ R0,RD03
 SETB ET0;开定时器0
 LCALL COTP;单孔测量程序
 CLR  ET0 ;关定时器0
 LCALL  QUIT
 INC  2DH
 LCALL D10MS;延时1ms
 LCALL  D10MS
 DJNZ  2CH,MOV85;测量,循环7次,
 CJNE  R7,#1,RD02 ;判断测量是否完毕
 POP  07H
 SETB P3.3 ;P3.3=1 high voltage = 450V
 LCALL BK080 ;测量行列完毕,返回初始位置程序
 LCALL  BK120
 LCALL  LOCKOFF
 RD02: LCALL  BK080;8列后退程序
 MOV  R0,#250
 RD0A: LCALL  DELY
 LCALL  DELY
 DJNZ  R0,RD0A
 RD01: MOV R5,#0BH
 MOV123: LCALL MOV125 ;12行前进程序2
 DJNZ  R5,MOV123
 MOV  P1,#0H;电机矢电
 MOV  A,R7
 MOV  2DH,#0
 INC  2EH
 DJNZ R7,MOV80;循环行数次
结论
     采用此设计的步进电机驱动系统具有运动平稳、速度快、控制精度高等优点,已应用于单光子分析计数仪的驱动系统。
 






