摘要:TA8435H是东芝公司推出的一款单片步进电机专用驱动芯片。文中介绍了该芯片的特点、引脚功能和工作原理,给出了采用89C51和82C53作为控制核心驱动步进电机的具体电路和相关程序代码。
关键词:步进电机;TA8435H;细分驱动;82C53;89C51
1 主要特点
TA8435H是东芝公司生产的单片正弦细分二相步进电机驱动专用芯片,TA8435H可以驱动二相步进电机,且电路简单,工作可靠。该芯片还具有以下特点:
●工作电压范围宽(10V~40V);
●输出电流可达1.5A?平均?和2.5A?峰值?;
●具有整步、半步、1/4细分、1/8细分运行方式可供选择;
●采用脉宽调制式斩波驱动方式;
●具有正/反转控制功能;
●带有复位和使能引脚?
●可选择使用单时钟输入或双时钟输入。
2 引脚功能
TA8435H采用ZIP25封装形式,图1为其引脚排列图。各引脚功能如下:
脚1(S-GND):信号地;
脚2(RESET):复位端,低电平有效,当该端有效时,电路复位到起始状态,此时在任何激励方式下,输出各相都置于它们的原点;
引脚3(ENABLE):使能端,低电平有效;当该端为高电平时电路处于维持状态,此时各相输出被强制关闭;
引脚4(OSC):该脚外接电容的典型值可决定芯片内部驱动级的斩波频率(15kHz~80kHz),计算公式为:
fosc=1/?5.15×COSC?
式中,COSC的单位为μF?fOSC的单位为kHz。
脚5(CW/CCW):正、反转控制引脚;
脚6、7(CK2、CK1):时钟输入端,可选择单时钟输入或双时钟输入,最大时钟输入频率为5kHz;
脚8、9(M1、M2):选择激励方式,00表示步进电机工作在整步方式,10为半步方式,01为1/4细分方式,11为1/8细分方式;
脚10(REF IN):VNF输入控制,接高电平时VNF为0.8V,接低电平时VNF为0.5V;
脚11(MO):输出监视,用于监视输出电流峰值位置;
脚13(VCC):逻辑电路供电引脚,一般为5V;
脚15、24(VMB、VMA):B相和A相负载电源端;
脚16、19( B、B):B相输出引脚;
脚17、22(PG-B、PG-A):B相和A相负载地;
脚18、21(NFB、NFA):B相和A相电流检测端,由该引脚外接电阻和REF-IN引脚控制的输出电流为:IO=VNF/RNF
脚20、23( A、A):A相输出引脚。
3 实际应用电路
笔者为省重点科研项目《智能化大气污染系统的研究》所设计的电路共需驱动三个二相步进电机,以分别完成进样、采样和阀门控制。
图2是TA8435H的一个典型应用电路,该电路用一片TA8435H来驱动一个步进电机,输入信号有使能控制、正反转控制和时钟输入,通过光耦可将驱动器与输入级进行电隔离,以起到逻辑电平隔离和保护作用;该电路工作在1/8细分模式(M1、M1接高电平),可减小低速时的振动,R8和C1组成复位电路,D1~D4快恢复二极管可用来泄放绕组电流?由于REF IN引脚接高电平,因此VNF为0.8V,输出级斩波电流为VNF/RNF=0.8/0.8=1A,选用不同的二相步进电机时,应根据其电流大小选择合适的R13和R14。
图3是步进电机核心控制电路,该电路能够控制如图2所示的三个步进电机驱动器。本设计采用外部定时/计数器82C53来给TA8435H提供步进脉冲。因为82C53有三个定时/计数器,可以驱动三个步进电机控制器,因而能满足设计要求;另外,82C53的工作方式3是一种方波速率发生器。在这种方式下,当CPU设置控制字后,输出将为高电平,在写完计数值后就自动开始计数,输出保持高电平;而当计到一半计数值时,输出变低直到计数到0,此后输出又变高以重新开始计数。在计数期间写入新的计数值并不影响现行的计数过程。但是若在方波半周期结束前和新计数值写入后收到GATE脉冲,那么计数器将在下一个CLK脉冲时装入新的计数值并以这个计数值开始计数。否则,新的计数值将在现行半周期结束时装入计数值。因此,只要写入不同的计数初值,就能控制步进电机的转速而不需要用软件来控制高低电平的转换,因而编程比较容易。本设计将82C53的GATE端全部接高电平,新的计数值将在现行半周期结束时起作用。
由于采用了定时/计数器82C53作为步进脉冲产生电路,因此系统编程十分简单,以下语句为控制一个步进电机的相应程序代码。
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define A8253A XBYTE[0xB000] //计数器0地址
#define A8253B XBYTE[0xB100] //计数器1地址
#define A8253C XBYTE[0xB200] //计数器2地址
#define A8253D XBYTE[0xB300] //控制字口地址
#define uchar unsigned char
#define uint unsigned int
uint time1; //电机1运行时间
uchar speed1;//电机1运转速度
sbit en1=P1^0; //电机1使能控制
sbit dir1=P1^1; ///电机1方向控制
uint sum1;
uchar code sdtab[16]={0x30,0x35,0x40,0x45,0x50,0x55,0x60,0x65,0x70,
0x75,0x80,0x85,0x90,0x95,0xa0,0xa5};
图2
//16个计数初值,对应16种转速,初值大小应根据电机的转速要求和82C53计数器CLK端输入的时钟频率决定
main()
{
A8253D=0x16; //计数器0方式3,只读写高位字节
A8253D=0x56; //计数器1方式3,只读写高位字节
A8253D=0x96; //计数器2方式3,只读写高位字节
dir1=1; //运转方向
time1=200; //运转200秒
speed1=3; //速度等级3
//以上是电机1的运行参数,实际应用中?一般先用上位机通过串口将数据送入89C51单片机存储器,然后由单片机按照上位机送入的数据来控制步进电机的运行速度、方向和时间。
sum1=time1*20;
//sum1为89C51定时器T0中断次数,因为定时间隔为0.05秒
A8253A=sdtab[speed1];
//向82C53计数器0送初值,OUT0脚输出方波
en1=1;//电机1开始运转
TMOD=0x01;
TL0=-46080%256;
TH0=-46080/256;
ET0=1;
EA=1;
TR0=1;
//89C51的计数器0用于定时器,定时间隔0.05秒,方式1,中断方式,晶振11.0592M
while(10);?
}
void T0_srv(void) interrupt 1 using 1
{//中断服务程序,执行完后,电机停止运行
TL0=-46080%256;
TH0=-46080/256;
sum1--;
if(sum1==0)
{
en1=0?// 电机停止运行
}
}
图3
4 结论
采用TA8435H构成步进电机驱动器,利用82C53输出步进脉冲的设计方案具有占用CPU时间短、编程容易、结构简单、成本低、可靠性好、抗干扰能力强等优点,因此可在控制和测量领域中得到广泛应用。