资源描述:
《l298n驱动步进电机发热的问题探讨》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、L298N驱动步进电机发热的问题探讨L298N是ST公司生产的一种高电压、大电流电机驱动芯片。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载,是很多爱好者喜欢使用的一个驱动电路。但是,L298N在实际使用中很多人反映发热现象严重,经常烧管子。通过分析原因并多次试验,初步得出了L298N发热原因,并给出解决方案。一、L298N发热原因首先,L298N瞬间峰值电流可达3A,持续工作电流为2A,压降可达1V,本身消耗的功率就很大,其
2、散热片普遍比较小,易造成发热现象。驱动小电机或者电流较小的步进电机,尚不明显;而满电流驱动就会造成发热。其次,一些步进电机直流内阻很低,甚至可以低到零点几欧姆,好多L298N板子没有恒流控制,易造成超负载现象。我直接用来驱动23KM-K383-G2V步进电机,即便5V供电,十几秒钟就感觉L298N很热了,一直很苦恼。二、解决办法必要的办法当然是增加降温风扇了,这个不多叙。无意之中看到步进电机斩波恒流驱动原理,考虑用Arduino的PWM输出模拟斩波恒流,通过适当参数调整,即便不是闭环控制,也能把电流控制在一定程度上,确保不超过2A电流也许能解决这个问题。于是开发了一个小程序,通过数字3口输出
3、10khz的波形,通过赋值OCR2B改变占空比,数字3口接L298N的使能端,见图。程序参考有关同学作品,多谢,具体如下。另说明一下:PWM频率、占空比的参数需要自行调整,以适应步进电机的转速和力矩,占空比小电机力矩小,带不动设备;占空比太大电流控制不住,L298n继续发烧。这个参数与电压、驱动电流、电机内阻等都有关系,此方法仅供参考。intPin0=8;intPin1=9;intPin2=10;intPin3=12;int_step=0;booleandir=false;//正反转intstepperSpeed=5;//电机转速,5ms一步voidsetup(){pinMode(Pin0,
4、OUTPUT);pinMode(Pin1,OUTPUT);pinMode(Pin2,OUTPUT);pinMode(Pin3,OUTPUT);pinMode(11,OUTPUT);pinMode(3,OUTPUT);TCCR2A=_BV(COM2A0)
5、_BV(COM2B1)
6、_BV(WGM21)
7、_BV(WGM20);TCCR2B=_BV(WGM22)
8、_BV(CS22)
9、_BV(CS20);OCR2A=22;//about5khzOCR2B=14;}voidloop(){switch(_step){case0://stepperSpeed++;digitalWrite(Pin0,LOW)
10、;digitalWrite(Pin1,LOW);digitalWrite(Pin2,LOW);digitalWrite(Pin3,HIGH);//32Abreak;case1:digitalWrite(Pin0,LOW);digitalWrite(Pin1,HIGH);//10BdigitalWrite(Pin2,LOW);digitalWrite(Pin3,HIGH);break;case2:digitalWrite(Pin0,LOW);digitalWrite(Pin1,HIGH);digitalWrite(Pin2,LOW);digitalWrite(Pin3,LOW);break;c
11、ase3:digitalWrite(Pin0,LOW);digitalWrite(Pin1,HIGH);digitalWrite(Pin2,HIGH);digitalWrite(Pin3,LOW);break;case4:digitalWrite(Pin0,LOW);digitalWrite(Pin1,LOW);digitalWrite(Pin2,HIGH);digitalWrite(Pin3,LOW);break;case5:digitalWrite(Pin0,HIGH);digitalWrite(Pin1,LOW);digitalWrite(Pin2,HIGH);digitalWrite
12、(Pin3,LOW);break;case6:digitalWrite(Pin0,HIGH);digitalWrite(Pin1,LOW);digitalWrite(Pin2,LOW);digitalWrite(Pin3,LOW);break;case7:digitalWrite(Pin0,HIGH);digitalWrite(Pin1,LOW);digitalWrite(Pin2,LOW);digitalW