极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15378|回复: 9

步进电机驱动问题

[复制链接]
发表于 2015-8-12 11:22:57 | 显示全部楼层 |阅读模式
如题,我用L298N驱动这个步进电机时,L298N发热特别严重,而且步进电机转动时噪音特别大!用的驱动电压为8V左右!
不知道哪里出了问题,求指教!!!谢谢

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2015-8-12 14:16:42 | 显示全部楼层
应该是你调节频率的问题,你试一试换过频率试试,不一定正确。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-12 15:26:41 | 显示全部楼层
kanshizhuo 发表于 2015-8-12 14:16
应该是你调节频率的问题,你试一试换过频率试试,不一定正确。

我把程序给你看看
int Pin0 = 4;
int Pin1 = 5;
int Pin2 = 6;
int Pin3 = 7;
int _step = 0;
char lkf;
boolean dir = true;//true为反转,false为正转
int stepperSpeed = 10;//电机转速,1ms一步
void setup()
{
  Serial.begin(9600);
  pinMode(Pin0, OUTPUT);
  pinMode(Pin1, OUTPUT);
  pinMode(Pin2, OUTPUT);
  pinMode(Pin3, OUTPUT);
}
 
void loop()
{
  run();
}
void run()
{
  switch(_step){
    case 0:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
    break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      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;
  }
&#160;&#160;if(_step<0){
&#160;&#160;&#160;&#160;_step=7;
&#160;&#160;}
&#160;&#160;delay(stepperSpeed);

}
回复 支持 反对

使用道具 举报

发表于 2015-8-12 22:30:09 | 显示全部楼层
int stepperSpeed = 10;//电机转速,1ms一步
太慢了,10ms了,最适合的时间是500-800us
delay(stepperSpeed);
改成
delayMicroseconds(500);
试试
回复 支持 反对

使用道具 举报

发表于 2015-8-13 08:15:39 | 显示全部楼层
电流太大啦。在298的使能(En)端接入20KHz的PWM,并做到该PWM的占空比可调节,依据电机的力矩使用情况实时调节。你现在做的就是把使能端直接接啦高电平相当于PWM占空比为100%,满电流工作肯定发热的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-13 08:34:47 | 显示全部楼层
PINKWALKMAN 发表于 2015-8-13 08:15
电流太大啦。在298的使能(En)端接入20KHz的PWM,并做到该PWM的占空比可调节,依据电机的力矩使用情况实时 ...

你的意思是给使能端赋值,那这个值该给多大呢(之前一直以为使能就是调节电机转速的)谢谢啦!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-13 08:36:18 | 显示全部楼层
Ansifa 发表于 2015-8-12 22:30
int stepperSpeed = 10;//电机转速,1ms一步
太慢了,10ms了,最适合的时间是500-800us
delay(stepperSpee ...

好的好的,我试试看,谢谢啦!
回复 支持 反对

使用道具 举报

发表于 2015-8-13 20:45:03 | 显示全部楼层
转身已是黄昏 发表于 2015-8-13 08:34
你的意思是给使能端赋值,那这个值该给多大呢(之前一直以为使能就是调节电机转速的)谢谢啦!

使能端,要看用在什么电机上面。如果使能用在直流有刷电机控制就是控制转速的,如果用在步进电机就是用来控制电机力矩的,步进电机的转速靠步进脉冲的交替速度来控制的。
回复 支持 反对

使用道具 举报

发表于 2015-8-13 20:45:22 | 显示全部楼层
转身已是黄昏 发表于 2015-8-13 08:34
你的意思是给使能端赋值,那这个值该给多大呢(之前一直以为使能就是调节电机转速的)谢谢啦!

使能端,要看用在什么电机上面。如果使能用在直流有刷电机控制就是控制转速的,如果用在步进电机就是用来控制电机力矩的,步进电机的转速靠步进脉冲的交替速度来控制的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-17 20:39:38 | 显示全部楼层
PINKWALKMAN 发表于 2015-8-13 20:45
使能端,要看用在什么电机上面。如果使能用在直流有刷电机控制就是控制转速的,如果用在步进电机就是用来 ...

恩恩,学习了,谢谢啦!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 23:05 , Processed in 0.038302 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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