.3 环形分配器
步进电动机的各相绕组必须按一定的顺序通电才能正常工作。这种使电动机按一定规律变化的部分称为脉冲分配器。实现环形脉冲分配器功能有两种:一种是纯软件方法,即完全用软件来实现相序的分配,直接输出各相导通或截止的信号;其电路图如图
8031 A相驱动 B相驱动 C相驱动 D相驱动 D相驱动 E相驱动 E相驱动
本设计以五相十拍电机为控制对象,它的通电方式为AB-ABC-BC-BCD-CD-CDE-DE-DEA-EA-EAB,共有10个通电状态。如果P1口输出的控制信号中,0代表绕组通电,1代表使绕组断电,则可用10个控制字来对应这10个通电状态。这10个控制字如下表
通电状态 AB ABC BC BCD CD CDE DE DEA EA EAB (E) 1 1 1 1 1 0 0 0 0 0 (D) 1 1 1 0 0 0 0 0 1 1 (C) 1 0 0 0 0 0 0 1 1 1 (B) 0 0 0 0 1 1 1 1 1 0 (A) 0 0 1 1 1 1 1 1 0 0 控制字 FCH F8H F9H F1H F3H E3H E7H E6H EEH ECH
在程序中,只要依次将这10个控制字送到P1口,步进电动机就会转动一个齿距角。每送一个空子就完成一拍,步进电动机转过一个步距角。程序就是根据这个原理进行设计的。
.4 功率放大器
R1 L 80v
R2
从计算机输出口或从环形分配器输出的信号脉冲电流一般只有几个毫安,不能直接驱动步进电动机,必须采用功率放大器将脉冲电流进行放大,使其增大到几至十几安培,从而驱动电动机运转。由于电动机各相绕组都是绕在铁心上的铁圈。所以电感较大,绕组通电时,电流上升受到限制,因而影响电动机各相绕组电流的大小。绕组断电时,电感中磁场的储能元件将维持绕组中已经有的电流不能突变。在绕组断电时会产生反电动势。为使电流尽快衰减并释放反电动势必须增加适当的续流回路。本设计采用单电压功率放大电路,如图
T Tq
步进电动机的距频特性
步进电动机的输出转距随频率升高而下降的原因可以这样接受:由于有绕组电感的一向,绕组中电流的波形如上所示,电流上升需要一定的时间,电流上升的驱动电流的时间常数τa为
f
τa =L/Ra
Ra——通电回路的总电阻,包括绕组线圈电阻,限流电阻R1和晶体管
L-----绕组的电感; 结电阻。
电流下降时放电回路的时间常数τb
τb =L/Rb
L-----绕组的电感
Rb——通电回路的总电阻,包括绕组线圈电阻,耗能电阻R2晶体管结电阻。
本设计考虑的精度原因,选取R1=R2=10Ω
.5 程序
流程图:
键盘子程序:
KEY: LCALL KS2 检查有闭合键否 JNZ MK1 A非0,有键闭合则转 LJMP MK7 无键闭合转返回 MK1: LCALL DIR 有键闭合,则延时12ms LCALL DIR 消抖
LCALL KS2 再次检查有键闭合 JNZ MK2 若无键闭合则转 LJMP MK7 若无键闭合则转返回 MK2: MOV P1,#F0H 发行线全扫描信号,列线全1 MOV A,P1 读入列状态 ANL A,#F0H 保留高4位
中断时间到响应中断,停止脉冲输出 循环产生脉冲 计算程序,算出 步进电机的步数 等待键盘输入 记录输入的数据 键盘扫描 CJNE A,#FOH ,MK3 有键按下则转 LJMP MK7 无闭合键转返回 MK3: MOV R2,A 保存列值
ORL A,#0FH 列线信号保留,行线全1 MOV P1,A 从列先输出 MOV A,P1 读入P1口状态 ANL A,#0FH 保留行线值
ADD A,R2 将行线值和列线值合并 MOV R2,A 暂存与R2中 MOV R3,#00H R3存简直 MOV DPTR,#TRBE 指向键值表首地址 MOV R4,#10H 查找次数送R4 MK4: CLR A
MOVC A,@A+DPTR 表中值送入A MOV 70H,A 暂存与70H单元中 MOV A,R2 键特征值送入A CJNE A,70H,MK6 未查到则转 MK5: LCALL DIR 扫描1遍显示器
LCALL KS2 还有键闭合否 JNZ MK5 若键未释放,则等待 LCALL DIR 若键已释放,则延时12ms LCALL DIR 消抖
MOV A,R3 将键值存入A中 RET 返主 MK6: INC R3 键值加一
INC DPTR 表地址加1 DJNE R4,MK4 未查到,反复查找 MK7: MOV A,#FFH 无闭合键标志存入A中
RET 返主
KS2: MOV P1,#FOH 闭合键判断子程序
MOV A,P1 发全扫描信号,读入列线值 ANL A,#FOH 保留列线值
CPL A 取反,无键按下全0 RET 返主
TRBE: DB 01H,02H,03H,04H,05H,06H,07H,08H
DB 09H,00H,FFH,FFH,FFH,FFH,FFH,FFH
把输入的数字转换成字节数:
MOV A,30H MOV B,#64H MUL AB MOV R6,A MOV R7,AMOV A,#31HMOV B,#OAHMUL ABADD A,R6MOV A,#32HMOV R6,A 计算程序:
MOV R5,#00H MOV R4,#4BHDIV MOV A,R5 JNZ BEGIN MOV A,R4 JZ OVER BEGIN: MOV A,R7 JNZ BEGIN1 MOV A,R6 JNZ BEGIN1 RET BEGIN1: CLR A MOV R2,A MOV R3,A MOV R1,#10H DIV1: CLR C MOV A,R6 RLC A R6 MOV R6,A
这样高位在R7中,低位在R6中除数高8位送A
除数非零则转BEGIN 除数底8位送A 除数为零置益出标志
被除数高8位送A 被除数非零则转BEGIN1 被除数低8位送A 被除数非零则转BEGIN1 被除数为零则返回 清余数单元 双字节除法计数器置16 开始R3R2R7R6左移 被除数低8位送A 循环左移一位 左移结果送回