Слишком много ампер для шагового двигателя

У меня есть шилд двигателя adafruit, и я подключил шаговый двигатель Nema 17. Теперь большая проблема — попытаться запитать его, не перегревая. Изначально я использовал блок питания 12 В 6 А, но быстро перешел на 12 В 2 А, а затем на 12 В 1 А. Все они по-прежнему сильно нагревают шаговый двигатель Nema.

Я использую модули accelstepper и adafruit на arduino для управления шаговым двигателем. Я заметил, что в моем коде все магниты всегда включены, что может объяснить, почему он нагревается, но мне нужно поддерживать некую форму крутящего момента для системы, которую я разрабатываю.

Я прикреплю код, так как проблема может быть в нем. Есть ли второе устройство, которое мне нужно присоединить к щитку двигателя adafruit и шаговому двигателю nema.

#include <AccelStepper.h>
#include <MultiStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

int ComControlValue = -1;

/* Define pins for motor and define step motor function */
const int SlowStepPerRev = 400;                              // Определяем константу медленной скорости
const int MotorB = 2;
int rpm = 60;                                                // Оборотов в минуту
int acelspeed = 40;                                          // Скорость ускорения
int distrot = 200;
int destinationunknown = 0;                                  // Место назначения пластины 1

/* Initialize the stepper library on the motor shield */
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *myMotorB = AFMS.getStepper(SlowStepPerRev, MotorB);

/* you can change these to SINGLE or DOUBLE or INTERLEAVE or MICROSTEP! */
// обертки для мотора!
void forwardstepB() {  
   myMotorB->onestep(FORWARD, INTERLEAVE);
}
void backwardstepB() {  
   myMotorB->onestep(BACKWARD, INTERLEAVE);
}

AccelStepper stepperB(forwardstepB, backwardstepB);

void setup() {
   Serial.begin(115200);                                     // Установить последовательное соединение с компьютером
   Wire.begin();                                             // присоединяемся к шине i2c как ведущее устройство
   AFMS.begin();                                             // Начало использования двигателя конвейерной ленты

   stepperB.setMaxSpeed(rpm);                                // Инициализируем максимальную скорость
   stepperB.setAcceleration(acelspeed);                      // Инициализация и установка скорости ускорения для вращения
}

void loop() {
   switch(ComControlValue){
        case -1: //ждем
            Serial.println("Waiting for Command");
            Serial.println(stepperB.currentPosition());
            while (Serial.available()==0){}
            ComControlValue=Serial.parseInt();               // Извлечь значение из последовательного порта
            break;                                           // прерываем цикл и возвращаемся к началу
        /* 1 : Move plates into the system */
        case 1:                                                  
// Arduino с помощью акселерометра перемещается в позицию X
        if (plateNum < platelimit){
               plateNum++;
               ComControlValue= 11;                          // После установки номера и местоположения пластины переходим к случаю 11, чтобы начать движение шагового двигателя
               destinationunknown = destinationunknown + 200;
        }
        else { 
               ComControlValue = -1;                         // Для многих пластин отменить команду перемещения
        }
        stepperB.moveTo(destinationunknown);
        break;

        /* 2 : Move plate out of system */
        case 2:
        // Arduino с помощью акселерометра перемещается в позицию Y
        if (plateNum > 0){
               plateNum = plateNum--;
               ComControlValue= 11;                         // После установки номера и местоположения пластины переходим к случаю 11, чтобы начать движение шагового двигателя
               destinationunknown = destinationunknown - 200;  
        }
        else {
               ComControlValue = -1; 
        }
        stepperB.moveTo(destinationunknown);
        break;

        /* 1 : Run Stepmotor to completion */
        case 11:
        // Шаговому двигателю требуется непрерывный цикл while для перехода к завершению
        // настройка кода будет использовать цикл while и позволит перемещаться
        stepperB.run();                                     // запустить шаговый двигатель
        if (stepperB.distanceToGo() == 0 ){
                ComControlValue = -1;                       // Завершено движение, возвращаемся к случаю -1
        }
        break;
   }
}

, 👍1


2 ответа


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

1

Шаговые двигатели нагреваются. Это факт жизни. Особенно, когда они неподвижны.

Типичный шаговый двигатель Nema 17 на 12 В имеет сопротивление катушки 30 Ом на фазу. При напряжении 12 В на одной фазе он будет потреблять 0,4 А. Это эквивалентно примерно 4,8 Вт мощности. Она выделяется в виде тепла.

Снижение текущей мощности вашего источника питания не «исправит» проблему. Все, что произойдет, это то, что по мере того, как вы будете переходить к более низким значениям тока, источник будет нагреваться все сильнее и в конечном итоге сломается.

Вы можете проверить сопротивление катушек ваших двигателей с помощью цифрового мультиметра, установленного в диапазоне Ом, а затем рассчитать рассеиваемую мощность, используя:

Current = V ÷ R = 12 ÷ <measured resistance>

и:

Power = V² ÷ R = 144 ÷ <measured resistance>
,

Кроме того, если вы пойдете по пути уменьшения напряжения (вместо уменьшения значения тока), вам придется пойти на компромисс с уменьшением крутящего момента., @Sumit Panse

Похоже, тогда следует использовать блок питания 12 В 1 А и просто пойти на компромисс с головкой через радиаторы., @Hojo.Timberwolf

У вас 2 фазы. Это потенциальный пик в 0,8 А только для двигателей. Я бы снизил его и использовал бы по крайней мере 2 А. У вас не может быть "слишком много" ампер - он потребляет только то, что ему нужно., @Majenko


1

Я думаю, у вас будет больше шансов снизить нагрев, снизив напряжение питания (что, как следствие, снизит ток). Вы не получите номинальный крутящий момент, если опустите напряжение ниже 12 В, но это компромисс, и бесплатного сыра здесь не бывает.

Ограничение доступного тока работает предсказуемым образом только с блоками питания, которые могут работать как источники тока. Если ваш блок питания является только источником напряжения, то попытка получить больше тока, чем он может обеспечить, в конечном итоге приведет к тому, что блок питания войдет в режим самозащиты (не будет подавать никакого напряжения) или выйдет из строя. В случае источников напряжения максимальный ток — это ограничение, которое вы должны соблюдать, а не ограничение, которое наложит блок питания.

,