步进电机驱动芯片“L297/298”和“ULN2003”有什么区别?

核心提示说得通俗uln2003相当于继电器的作用,例如7个继电器的一端连某电压[也即uln2003电源电压](<50)在一起,而另一端作为则作为输出,又好如一个二极管,只不过因电路集成功能的因素,输出的电压等同于uln2003的电压罢了,常用于步进

说得通俗uln2003相当于继电器的作用,例如7个继电器的一端连某电压[也即uln2003电源电压](<50)在一起,而另一端作为则作为输出,又好如一个二极管,只不过因电路集成功能的因素,输出的电压等同于uln2003的电压罢了,常用于步进电机。

l298/7可以为负载提供双向的电流。适合驱动2相或4相的步进电机和直流电机,特是当驱动电机的方向要改变时,只须把原来电机方向的电位置反即可(如下图port1/port2电平一高一低控制电机B;port3/port4电平一高一低控制电机A,电平改变时电机的方向也随即改变,而A?pwm/B?pwm?则分别控制电机AB的速度),而uln2003则须要重新改变电图上的接线或外加器件接成h桥电路才行。

#include <reg52.h>

#define c(x) (x*110592/120000)

sbit Ir_Pin=P2^2;

unsigned char Ir_Buf[4];

unsigned char code fangxiang[]={0xA0,0X14,0XB4,0X6C,0X60,0X0C,0X00};

unsigned int Ir_Get_Low()

{

TL1=0;

TH1=0;

TR1=1;

while(!Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

//=============================================================

unsigned int Ir_Get_High()

{

TL1=0;

TH1=0;

TR1=1;

while(Ir_Pin && (TH1&0x80)==0);

TR1=0;

return TH1*256+TL1;

}

//==============================================================

main()

{

unsigned int temp;

unsigned char i,j;

TMOD=0x11;

EA=1;

do{

restart:

while(Ir_Pin);

temp=Ir_Get_Low();

if(temp<c(8500) || temp>c(9500)) continue;//9000

temp=Ir_Get_High();

if(temp<c(4000) || temp>c(5000)) continue;//4500

for(i=0;i<4;i++) //4

for(j=0;j<8;j++) //8?

{

temp=Ir_Get_Low();

if(temp<c(200) || temp>c(800)) goto restart;

temp=Ir_Get_High();

if(temp<c(200) || temp>c(2000)) goto restart;

Ir_Buf[i]>>=1;

if(temp>c(1120)) Ir_Buf[i]|=0x80;

}

switch(Ir_Buf[3])

{

case 0x53:P1=fangxiang[0];break;

case 0x43:P1=fangxiang[1];break;

case 0x4f:P1=fangxiang[2];break;

case 0x5f:P1=fangxiang[3];break;

case 0x63:P1=fangxiang[4];break;

case 0x3f:P1=fangxiang[5];break;

case 0x3b:P1=fangxiang[6];break;

default:break;

}

}

while(1);

}

已发请查收

 
友情链接
鄂ICP备19019357号-22