极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28887|回复: 2

L298N驱动步进电机发热的问题探讨

[复制链接]
发表于 2013-11-6 07:33:54 | 显示全部楼层 |阅读模式
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载,是很多爱好者喜欢使用的一个驱动电路。
但是,L298N在实际使用中很多人反映发热现象严重,经常烧管子。通过分析原因并多次试验,初步得出了L298N发热原因,并给出解决方案。
一、L298N发热原因
首先,L298N瞬间峰值电流可达3A,持续工作电流为2A,压降可达1V,本身消耗的功率就很大,其散热片普遍比较小,易造成发热现象。驱动小电机或者电流较小的步进电机,尚不明显;而满电流驱动就会造成发热。
其次,一些步进电机直流内阻很低,甚至可以低到零点几欧姆,好多L298N板子没有恒流控制,易造成超负载现象。我直接用来驱动23KM-K383-G2V步进电机,即便5V供电,十几秒钟就感觉L298N很热了,一直很苦恼。
二、解决办法
必要的办法当然是增加降温风扇了,这个不多叙。无意之中看到步进电机斩波恒流驱动原理,考虑用Arduino的PWM输出模拟斩波恒流,通过适当参数调整,即便不是闭环控制,也能把电流控制在一定程度上,确保不超过2A电流也许能解决这个问题。于是开发了一个小程序,通过数字3口输出10khz的波形,通过赋值OCR2B改变占空比,数字3口接L298N的使能端,见图。






程序参考有关同学作品,多谢,具体如下。另说明一下:PWM频率、占空比的参数需要自行调整,以适应步进电机的转速和力矩,占空比小电机力矩小,带不动设备;占空比太大电流控制不住,L298n继续发烧。这个参数与电压、驱动电流、电机内阻等都有关系,此方法仅供参考。
int Pin0 = 8;
int Pin1 = 9;
int Pin2 = 10;
int Pin3 = 12;
int _step =0 ;
boolean dir = false;//正反转
int stepperSpeed = 5;//电机转速,5ms一步
void setup()
{
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(11, OUTPUT);
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22) | _BV(CS20);
OCR2A = 22;//about 5khz
OCR2B = 14;
}

void loop()
{
switch(_step){
    case 0:
  //  stepperSpeed++;
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);//32A
    break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);//10B
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    case 2:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
    case 3:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;
    case 4:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;
    case 5:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
    break;
      case 6:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;
    case 7:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    default:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
    break;

}

if(dir){
    _step++;
}else{
    _step--;
}
if(_step>7){
    _step=0;
}
if(_step<0){
    _step=7;
}
delay(stepperSpeed);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-11-6 09:14:37 | 显示全部楼层
分析的比较好,最近一直在用298,之前驱动步进的时候后发热真的很厉害,还是内阻偏大了
回复 支持 反对

使用道具 举报

发表于 2014-6-2 23:42:22 | 显示全部楼层
学习了!正要用到步进电机做一点东西!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-13 19:17 , Processed in 0.039750 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表