L297+L298步进电机驱动控制板,L297+L298 Stepper motor driver
关键字:L297,L298,步进电机驱动电路图
一、板子跳线器说明:所有跳线都在左边,则由单片机控制。
1、靠近光偶的短路冒打在CLK-555方向时有板上的555提供时钟给驱动器;打在CLK-CPU时右用户CPU提供时钟给驱动器。
2、JT5打在右边:297的HALF/FULL(全速/半速)脚接GND了 默认为FULL模式了;JT5打在左边:297的HALF/FULL脚空了 电机模式用户自己控制。
3、JT6打在右边:297的CW/CCW脚(方向)接GND了 默认为顺时针转动模式了;JT6打在左边:297的CW/CCW脚空了 电机正反转模式用户自己控制。
二、按键说明:
板子使用全新的L297作为控制芯片 L298作为驱动芯片 板载NE555时钟电路为L297提供CLK因此 该版在不需要外部控制的情况下就可以工作 板载3个控制按键
EN - 使能
CW - 反向旋转
HF - 半速旋转
通过按键就可以直接控制电机的正反转、全速/半速和使能。
三、基本功能描述:
通过光藕隔离之后将CLK CW HF EN四个基本控制端引出单片机等可以非常方便的控制电路的工作这个板子改进的地方比较多也方便研究使用。板子使用1N5822快速二极管作为续流器件 其速度要远远快于整流桥的 L298和电机能够提供更完善的有效的保护。模块供电+5V(L297和L298控制供电) +12V(根据电机最低4V最高16V)给电机供电。
电机输出接口包括: +12V 四相输出 GND(请根据您的电机连接)。
控制输入接口包括: GND CLK EN CW HF。
EN:高电平停止,低电平使能。
RET:高电平停止,低电平使能。
C/CW:高电平逆时针,低电平顺时针。
H/HD:高电平全速,低电平半速。
CLK:时钟脉冲。
需要特别说明的是:为了测试方便 在板子上设置了NE555构成的一个低频时钟源(使用时跳线冒打在CLK-555处),当您使用外部的时钟信号控制电机的转速时必须跳线冒打在CLK-CPU处 否则外部时钟是不会传到L297里面。
四、接口说明:
1、板子左上方小二接口(JT1) VCC接+5V、GND接电源地,次处为芯片L297和555芯片的工作电压;
2、板子左中方小八接口(MCU-IN)为光藕隔离的信号分别为:EN(使能)、RET(复位)、C/CW(正反控制)、H/FU(全速/半速)、CLK(时钟信号) +5V(光藕工作电压) 注意:如果没有用CPU控制,小八接口(MCU-IN)的信号可以不接任何东西。
3、JT2为298的工作电压也是驱动电机的工作电压(接+12V)
注意:板子推荐的最高电机供电电压在4V~18V之间 最大工作电流不超过2A 否则L298的耗散功率会过大 导致发热严重 这种情况下通过风冷等措施 可以提高最大工作电流到2.5A左右。
4、OUT为电机的四相信号线 A B C D
相关程序:
// 控制线接到MCU的P1口 独立键盘的接口接到MCU的P2口。 // KEY0- 右运动一步; KEY1- 左运动一步; // KEY2- 右运动200步; KEY3- 左运动200步 // KEY4- 右运动1000步; #include #include #define uint unsigned int #define uchar unsigned char
sbit en=P1^0; // 定义P1.0口 sbit rst=P1^1; // 定义P1.1口 sbit ccw=P1^2; // 定义P1.2口 sbit hf=P1^3; // 定义P1.3口 sbit clk=P1^4; // 定义P1.4口 sbit k1=P1^5; // 定义P1.5口 sbit k2=P1^6; // 定义P1.6口
void ShortDelay(void) { uchar x,y; for(x=0;x<5;x++) for(y=0;y<125;y++) _nop_(); return; }
void outclk(uint a) { uint i,j;
while(a--) { en=1; // 定义P1.0口 rst=1; // 定义P1.1口 //if((k1&k2)!=0) // K1,K2限位置判断 // { clk=1; for(i=150;i>0;i--) //200 for(j=150;j>0;j--); //200 clk=0; // } // else {rst=1;en=0;} }
}
uchar key(void) {uchar key_num;
if( ( P2 & 0x3f) != 0x3f ) //判断按键 { ShortDelay(); //消除抖动 if( ( P2 & 0x3f ) != 0x3f ) { switch ( P2 & 0x3f ) //将按键码转换成键值 { case 0x3e: return key_num=01; case 0x3d: return key_num=02; case 0x3b: return key_num=03; case 0x37: return key_num=04; case 0x2f: return key_num=05; case 0x1f: return key_num=06; default : return key_num=00; } } } return key_num; }
void main(void) { uchar b;
while(1) { b= key(); switch(b) { //4步走1CM设定走5Cm 半应该是200的为了调整误差所以少4步 (10CM为多8步) case 00:rst=1;break;//0 case 01:ccw=1; outclk(1);break;//1 右运动1步 case 02:ccw=0; outclk(1);break;//2 左运动1步 case 03:ccw=1; outclk(200);break;//3 右运动1CM case 04:ccw=0; outclk(200);break;//4 左运动1CM case 05:ccw=1; outclk(1000);break;//5 右运动5CM //case 06:ccw=0; outclk(1000);break;//6 左运动5CM default:break; } } }
实物图:
|