шаговый двигатель 28byj-48 сильно греется

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
Добрый день, помогите пожалуйста, шаговый двигатель 28byj-48 сильно греется, при чем не только когда крутит (а крутит он со скоростью 7 шагов в секунду примерно) но и когда останавливается. Судя по тому что нашел на просторах интернета - одна из обмоток постоянно запитана (режим удержания положения) но у меня нет необходимости удерживать положение, нагрузка которая на него действует не в состоянии прокрутить его обратно. Есть ли в библиотеке gyver stepper возможность отключить это? А то через 6 часов работы невозможно держпть его рукой, значит градусов до 70 греетс, ну девайс от акб работает, не хотелось бы чтобы жрал постоянно такой ток..
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
95
12
51
За gyver stepper не скажу, но в большинстве библиотек есть возможность обесточивать фазы двигателя.
 

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
95
12
51
Я заглянул в инструкцию https://alexgyver.ru/gyverstepper/:
  • Самостоятельное управление enable() / disable()
  • Автоматическое - autoPower(true) - будет сам вызывать disable() после полной остановки двигателя
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
Я заглянул в инструкцию https://alexgyver.ru/gyverstepper/:
  • Самостоятельное управление enable() / disable()
  • Автоматическое - autoPower(true) - будет сам вызывать disable() после полной остановки двигателя
autoPower(true) пробовал, греется по ощущению чуть меньше, но даже в отключенном состоянии всеравно греется..

@Эдуард Анисимов, если вам не сложно пожалуйста подскажите как это сделать.
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
@Эдуард Анисимов,вы имеете ввиду физически на плате управления нужно как-то выставлять? плата стандартная, идущая в комплекте с движком, других ни разу не видел.
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0

EugeneFrol

★✩✩✩✩✩✩
17 Апр 2024
95
12
51
@ValeDeMare, согласен! Тогда предположу, что одна из обмоток виткует (потребляет больше чем позволительно). В любом случае после disable() все светодиоды должны погаснуть.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,377
1,341
Москва
I=V/R
Сопротивление мотора увеличить можно добавив по резистору на линии
Можно снизить напряжение питания мотора , кстати какое оно ?
Все это снизит силу тока и соотв. нагрев, но может и понизить скорость вращения.

Я таким мотором развлекался оч. давно, но потом перешел на нема и нормальные драйвера.

Но если взять драйвер для коллекторного мотора, то у них что то типа такой таблицы есть:
1 / 0 вращаем в одну сторону
0 / 1 вращаем в другую сторону
1 / 1 тормоз/удержание
0 / 0 отключено.
Т.к. на ULN управляется пинами, то можно попробовать на нужные пины одинаковые значения и попробовать покрутить вал
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
@Старик Похабыч, устройство питается от18650 АКБ через повышающую напряжение плату для пауэрбанка, нужно не снизить ток, а убать его между шагами, скорость вращения 7 шагов в секунду, по сути она никакая, нагрузки также нет. но между шагами обмотки запитаны, я хочу это убрать, не нужно оно, а аккум сажать будет ооочень сильно, учитывая что ток явно не маленький идет и одного аккума всего на 2-3 часа хватает ( а мне желательно хотябы на 10 часов, а лучше на 30)
 

Bruzzer

★★★★✩✩✩
23 Май 2020
810
251
@ValeDeMare,
Насколько я вижу в GyverStepper нет встроенной возможности регулировать длительность импульса шага для 4-х проводного драйвера.
И я не знаю, насколько такое в принципе допустимо.
Но попробовать добавить эту возможность не сложно. Добавьте в функцию tick() контроль времени с предыдущего шага, и когда оно станет больше заданного, отключайте обмотки.
Примерно так

C++:
                // проверка остановки для быстрого планировщика, а также работы без ускорения
                if (!_curMode && _target == pos) {
                    brake();
                    return false;
                }
                step();  // двигаем мотор
            }
            // Добавляем ограничение длительности импульса
            #define STEP_PULSE_TIME    1000UL    // длительность импульса в микросекундах ЗНАЧЕНИЕ 1000 ВЗЯТО КАК ПРИМЕР
            if (STEP_PULSE_TIME && tickUs - _prevTime >= STEP_PULSE_TIME)  // ограничение длительности импульса 
                disable();
            // Конец ограничение длительности импульса
        }
        return _workState;
    }
disable(); вызывается излишне часто, можно добавить переменную и отключать только если включено. Но для попробовать должно сойти.
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
@Bruzzer, спасибо за подсказку,наверное мне проще будет попробовать немного иначе, у меня шаги в прерывание по таймеру выведены раз в 136мс и можно в этот момент обнулить например timer2=millis и в цикле через схожую с вашей конструкцию подобрать период после которого сработает
if (millis-timer2 > STEP_TIME) {
stepper.disable() ;}
а в прерывание воткнуть
stepper.enable()
завтра попробую.
 

ValeDeMare

✩✩✩✩✩✩✩
16 Ноя 2022
24
0
Я удивлен, но вот такой код сработал... причем энкодер не тупит несмотря на delay и вообще честно говоря не понимаю как оно работает, учитывая, что между прерываниями 0.136с, а делай 0.5с ?????

C++:
 ISR(TIMER1_A){
if (flag){
  //stepper.enable();
  pos++;
  if (pos>=4 ){pos=0;}
 
switch (pos) {
        case 0:
        digitalWrite(5, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, HIGH);
        digitalWrite(2, LOW);
        break;
        case 1:
        digitalWrite(5, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, HIGH);
        digitalWrite(2, LOW);
         break;
        case 2:
        digitalWrite(5, LOW);
        digitalWrite(3, HIGH);
        digitalWrite(4, LOW);
        digitalWrite(2, HIGH); 
        break;
        case 3:
        digitalWrite(5, HIGH);
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        digitalWrite(2, HIGH); 
        break;
}
delay (500);
 digitalWrite(5, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(2, LOW); 
  //stepper.step();
   //timer= millis();
 
   //Serial.println(" Channel A interrupt !");
    
   //Serial.println(Time1);
  // stepper.disable();
  eb.tick();

 
 }
 }