Установить низкий уровень мощности или включить контакт драйвера шагового двигателя, чтобы шаговый двигатель не нагревался.

Я использую приведенный ниже код с этим степпером:

https://www.dfrobot.com/wiki/index.php/Stepper_Motor_Shield_For_Arduino (DRV8825)_SKU:DRI0023

Все работает, но имеет тенденцию нагреваться (62,3 Цельсия) в режиме ожидания. Что я понял на данный момент, снизить температуру я могу:

  1. Устанавливайте штифт включения только тогда, когда мне нужно повернуть двигатель, но я потерял свое положение.

  2. Я могу использовать то, что в руководстве драйвера описано как низкий уровень. Чего я не совсем понял.

Если я установлю на входе разрешения низкий уровень, выполнив digitalWrite(M1en,LOW);, переведу ли я шаговый двигатель в режим пониженного энергопотребления или отключу питание шагового двигателя?

>
  1. Я мог включать шаговый двигатель только тогда, когда мне это нужно. Что было бы лучше всего, как я понял.

Где в приведенном ниже коде мне нужно будет добавить digitalWrite LOW,HIGH, чтобы добиться этого? Или мне нужно просто установить НИЗКИЙ уровень (для режима низкого энергопотребления).

  1. Или есть способ получше, о котором я не знаю.

Код:

const int dirPin = 4;
const int stepPin = 5;
const int M1en = 12;

int speed = 200;    // желаемая скорость в шагах в секунду
int steps = 0;      // количество шагов, которые нужно сделать

void setup()
{
  pinMode(dirPin, OUTPUT);
  pinMode(stepPin, OUTPUT);
  digitalWrite(M1en,LOW);// Включение низкого уровня
  Serial.begin(9600);
}

void loop()
{
  if ( Serial.available()) {
    char ch = Serial.read();

    if(isDigit(ch)){             // является ли ch числом?
      steps = steps * 10 + ch - '0';        // да, накапливаем значение
    }
    else if(ch == '+'){
      step(steps);
      steps = 0;
    }
    else if(ch == '-'){
      step(-steps);
      steps = 0;
    }
    else if(ch == 's'){
      speed = steps;
      Serial.print("Setting speed to ");
      Serial.println(steps);
      steps = 0;
    }
  }
}

void step(int steps)
{
  int stepDelay = 1000 / speed;  // задержка в мс для скорости, заданной в шагах в секунду
  int stepsLeft;

  // определяем направление на основании того, равно ли Step_to_mode + или -
  if (steps > 0)
  {
    digitalWrite(dirPin, HIGH);
    stepsLeft = steps;
  }
  if (steps < 0)
  {
    digitalWrite(dirPin, LOW);
    stepsLeft = -steps;
  }
  // уменьшаем количество шагов, каждый раз перемещаясь на один шаг
  while(stepsLeft > 0)
  {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(1);
    digitalWrite(stepPin,LOW);
    delay(stepDelay);
    stepsLeft--;      // уменьшаем количество оставшихся шагов
  }
}

, 👍0


1 ответ


Лучший ответ:

1

На указанной вами странице продукта есть ссылка на техническое описание DRV8825.

Прочитав это, становится ясно, что контакты включения полностью отключают H-мост, который управляет катушками двигателя. Это режим низкого энергопотребления. Это не означает низкий, но ненулевой ток удержания. Драйвер поддерживает только включение и отключение.

Если ваши шаговые двигатели перегреваются, возможно, ток, подаваемый драйвером, слишком велик. Максимальный ток возбуждения устанавливается токоизмерительными резисторами, подключенными к микросхеме драйвера. Это может быть нелегко изменить. Чтобы уменьшить максимальный ток, вы увеличиваете значение токоизмерительного резистора.

На странице продукта указано, что ток экрана установлен на уровне 1,6 А на катушку.

,