Проблема, шаговый двигатель греется в состоянии покоя.

prime.monk
Offline
Зарегистрирован: 07.11.2019
Доброго времени суток дамы и господа. В проекте для управления мини шторой понадобился шаговик. Стоит  28BYJ-48, с модулем  ULN2003. При включении дуни, ток 0.04 ампера, при запуске движка 0.20 ампер. Но в состоянии покоя 0.26 ампер. Часами может стоять без работы, но 0.26 ампера так и останется (при этом греется не плохо), до момента, пока я не перегружу дуню. И все по новой. Это не есть гуд...  Прошу совета, в чем подвох? Перезагрузить порты движка мб или еще что... А то мозг уже 2ую ночь ломаю... Выложил код, может я где-то на химичил...
 
prime.monk
Offline
Зарегистрирован: 07.11.2019
#include "Stepper.h"
#include "IRremote.h"

#define STEPS  32   // Количество шагов
int  Steps2Take;  // 2048 = 1 оборот
int receiver = 6; // ИК подключен к 6 пину
int rele1 = 0;           //переменная для хранения состония нагрузки
int led1=0;  // RGB
int led2=0;  // RGB
int led3=0;  // RGB
int led4=0;  // светодиод

Stepper small_stepper(STEPS, 8, 10, 9, 11);  // пины шагового двигателя
IRrecv irrecv(receiver);     //пин к которому подключени ик приемник
decode_results results;


void setup()   //установка
{        
  pinMode(3,OUTPUT); // реле
  pinMode(4,OUTPUT);  // RGB led1
  pinMode(12,OUTPUT); // RGB led2
  pinMode(13,OUTPUT); // RGB led3
  pinMode(2,OUTPUT); // светодиоды
  
  Serial.begin(9600); //
  irrecv.enableIRIn(); //включим инфракрасный приемник
}
void loop()     // общий цикл
{
           
  if ( irrecv.decode( &results ))   //если есть сигнал на входе ИК приемника, то
  {  
    Serial.println(results.value, HEX); //выведем в сериал в 16 ричном формате
    
       // цикл реле нагрузки
if (results.value==0xFF30CF&&rele1==0)   //поступил сигнал, запишем в переменную
{   
  digitalWrite( 3, HIGH );rele1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF30CF&&rele1==1)    //поступил сигнал, запишем в переменную
{  
  digitalWrite( 3, LOW );rele1=0;results.value=0; //выключим нагрузку
}
       // цикл простых светодиодов
if (results.value==0xFF10EF&&led4==0)   //поступил сигнал, запишем в переменную
{   
  digitalWrite( 2, HIGH );led4=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF10EF&&led4==1)    //поступил сигнал, запишем в переменную
{  
  digitalWrite( 2, LOW );led4=0;results.value=0; //выключим нагрузку
}
       // цикл RGB светодиода
if (results.value==0xFF42BD&&led1==0){  //поступил сигнал, запишем в переменную
  digitalWrite( 4, HIGH );led1=1;results.value=0; //включим нагрузку
}
if (results.value==0xFF42BD&&led1==1){  //поступил сигнал, запишем в переменную
  digitalWrite( 4, LOW );led1=0;results.value=0;  //выключим нагрузку
}  
else if (results.value==0xFF4AB5&&led2==0){  //поступил сигнал, запишем в переменную
  digitalWrite( 12, HIGH );led2=1;results.value=0;  //включим нагрузку
}
if (results.value==0xFF4AB5&&led2==1){   //поступил сигнал, запишем в переменную
  digitalWrite( 12, LOW );led2=0;results.value=0;  //выключим нагрузку
}
else if (results.value==0xFF52AD&&led3==0){   //поступил сигнал, запишем в переменную
  digitalWrite( 13, HIGH );led3=1;results.value=0;  //включим нагрузку
}
if (results.value==0xFF52AD&&led3==1){   //поступил сигнал, запишем в переменную
  digitalWrite( 13, LOW );led3=0;results.value=0;   //выключим нагрузку
}
      // цикл управления шаговым двигателем
{
    switch(results.value)

       {

      case 0xFF18E7: // Вращение по часовой
                      small_stepper.setSpeed(700); //Макс 700 скорость
                      Steps2Take  =  4096;  // Сколько шагов по часовой
                      small_stepper.step(Steps2Take);
                      delay(100);
                      break;

      case 0xFF7A85: // Вращение против часовой
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Сколько шагов против часовой
                      small_stepper.step(Steps2Take);
                      delay(100);
                      break;
}
 irrecv.resume();   //конец
  }
  }
  
}

 

rkit
Offline
Зарегистрирован: 23.11.2016

Это режим удержания положения. Если вас не волнует, что шаговик может свободно крутиться в выключенном состоянии, то в библиотеке accelstepper есть функция отключения.

sadman41
Offline
Зарегистрирован: 19.10.2016

Для переключения 28BYJ-48 в режим свободного вращения не обязательно менять библиотеку.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Уважаемый, можно по подробнее?

prime.monk
Offline
Зарегистрирован: 07.11.2019

Я понимаю, что подается напряжение в состоянии покоя на все обмотки, дабы удержать его на 1 месте, но штора весит пару грамм. А 0.26 ампера очень много для питания от своего источника, по сравнению с 0.4 ампера. Хотелось бы отключать подачу тока на двигатель.

sadman41
Offline
Зарегистрирован: 19.10.2016

Подсказываю: на драйвере светодиоды видите? Они горят? Как в ардуине светодиоды выключают - помните?

prime.monk
Offline
Зарегистрирован: 07.11.2019

Конечно. Таким же образом отключить пины на модуле? щас по пробую, спасибо

prime.monk
Offline
Зарегистрирован: 07.11.2019

Stepper small_stepper(STEPS, 8, 10, 9, 11);

Уже пины задействованы в движке... Как я могу присвоить пин int led8=0; допустим... то-ли я дурак, то-ли лыжи не едут...

sadman41
Offline
Зарегистрирован: 19.10.2016

Просто переведите пин 8 (например) в LOW. Инициализация режима и пр. уже проделаны библиотекой.

prime.monk
Offline
Зарегистрирован: 07.11.2019

Уважаемый - вы просто космос) Спасибо огромное.... Заработало как надо! 

Paulletto
Offline
Зарегистрирован: 23.01.2020

Ребята выручайте, греется шаговый двигатель на 5 в, скетч создавал в FL PROG так как не владею письменными языками, суть в том, что у двигателя при остановке работаю две обмотки на удержание , читал форум , что надо перевести в режим LOW вот только куда тут и что вставить в этот код не фига не пойму вообще, выручайте народ плз, всю голову уже сломал.
 

#include <Stepper.h>
#include <IRremote.h>
IRrecv irRessPin2(2);
decode_results irRessPin2Res;
bool irRessPin2FE80AA55 = 0;

Stepper  _StM1(48,10,12,11,13);
int _PWDC = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _trgs1 = 0;
bool _trgt2 = 0;
bool _trgt2I = 0;
int stM_steps1 = 0;
bool stM_Ost1 = 0;
bool stM_Out1 = 0;
void setup()
{
TCCR2A = 0x00;
TCCR2B =  0x07;
TIMSK2=0x01;
TCNT2=100;
_StM1.setSpeed(300);
pinMode(9, OUTPUT);

irRessPin2.enableIRIn();
}
void loop()
{_PWDC = 0;
 if (irRessPin2.decode(&irRessPin2Res)) {
irRessPin2FillVar(&irRessPin2Res);
irRessPin2.resume(); }else {irRessPin2ResVar(); }





//Плата:1
if(irRessPin2FE80AA55) _trgs1 = 1;
if(!(stM_Out1)) _trgs1 = 0;
if(( (_trgs1) && (_trgt2) )) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 12000)) _tim1O = 0;}}}
bool  _tmp2 = _trgs1;
if (_tmp2)  { if (! _trgt2I) _trgt2 = ! _trgt2; } 
_trgt2I = _tmp2; 
digitalWrite(9, _tim1O);
_StM1.setSpeed( abs(150));
int  b1temp1_StM1;
if (_trgt2) { b1temp1_StM1 = 1;} else {b1temp1_StM1 = -1;}
if (_trgs1) { if( !stM_Ost1) {stM_steps1 =  abs(500); stM_Ost1 = 1;}}
else {stM_Ost1 = 0 ;}
if (stM_steps1 > 0 ) { _StM1.step(b1temp1_StM1); stM_steps1-- ;}
_StM1.setSpeed(300);
stM_Out1 = !(stM_steps1>0);




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }

ISR(TIMER2_OVF_vect)
{ TCNT2=100;
if(_PWDC >= 1000){asm volatile ("jmp 0x0000");}else{_PWDC = _PWDC+1;};
}
void irRessPin2FillVar(decode_results *irRessPin2Res) {
long tempRes;
byte tempType;
tempRes=(irRessPin2Res->value); 
tempType=(irRessPin2Res->decode_type); 
if(!(tempRes == -1)) {if ((tempRes == (0xFE80AA55))&&(tempType == 3)) {irRessPin2FE80AA55 = 1;} else {irRessPin2FE80AA55=0;}
}}
void irRessPin2ResVar() {
irRessPin2FE80AA55 = 0;
}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

а с ФЛПрогом всегда так. Не думаю. что кто-нибудь захочет в нем разбираться, проще новый написать

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Paulletto пишет:

Ребята выручайте, ......, скетч создавал в FL PROG 

Вот пусть он тебя и выручает

Paulletto
Offline
Зарегистрирован: 23.01.2020

Помогите плз , не бесплатно конечно ребят 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Paulletto пишет:

Помогите плз , не бесплатно конечно ребят 

Реально, никто в этом криво сгенерированном авне ковыряться не будет, даже за деньги. Ну, если только за большие. 

Paulletto
Offline
Зарегистрирован: 23.01.2020

Может есть библиотеки какие нибудь которые отключают эту функцию 

sadman41
Offline
Зарегистрирован: 19.10.2016

К FLPROG-у можно только флпрожное что-то подрубить. Вы или целиком пишете всё в нём или абсолютно без него. Конечно, если Вы не безумец.

Paulletto
Offline
Зарегистрирован: 23.01.2020

Да у меня простая схема на самом деле , в одну сторону мотор крутится , делает определенное кол-во шагов, потом прекращает свое движение, в этом время светится светодиод, в другую сторону ровно такое кол-во шагов , светится другой светодиод, прекращение вращения, управление ик пультом с одной  кнопки , можно с двух 

Гриша
Offline
Зарегистрирован: 27.04.2014

Paulletto пишет:

Да у меня простая схема на самом деле , в одну сторону мотор крутится , делает определенное кол-во шагов, потом прекращает свое движение, в этом время светится светодиод, в другую сторону ровно такое кол-во шагов , светится другой светодиод, прекращение вращения, управление ик пультом с одной  кнопки , можно с двух 

ФуФелпрог такое точно не потянет, там тока диодами мигать и то с оглядкой.

напишите норм ТЗ и в платный раздел там точно помогут, раз есть вариант возмезной помощи... ценник будет зависить от "памагите переделать я в ТЗ не все написал" 

UPD составить ТЗ со слов заказчика с такими вводными, может стоить дороже чем код написать. 

Paulletto
Offline
Зарегистрирован: 23.01.2020

Да решил проблему уже , в фуфел проге)) просто ограничил ток идущий на обмотки стал меньше греться ) 

b707
Онлайн
Зарегистрирован: 26.05.2017

Гриша пишет:

напишите норм ТЗ и в платный раздел там точно помогут, раз есть вариант возмезной помощи... ценник будет зависить от "памагите переделать я в ТЗ не все написал" 

Гриша, он уже отписался в стиле "за что там платить - там работы на полчаса".

Вот пусть сам за полчаса и слабает.

Гриша
Offline
Зарегистрирован: 27.04.2014

b707 пишет:

Гриша пишет:

напишите норм ТЗ и в платный раздел там точно помогут, раз есть вариант возмезной помощи... ценник будет зависить от "памагите переделать я в ТЗ не все написал" 

Гриша, он уже отписался в стиле "за что там платить - там работы на полчаса".

Вот пусть сам за полчаса и слабает.

Ну так формат форума помогать и направлять, а не делать вместо... дня 2 на ТЗ и 30 минут на код вполне реально.  

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Paulletto пишет:

Ребята выручайте, ......, скетч создавал в FL PROG 

Вот пусть он тебя и выручает

"Он словом острым и шутливым
Любил свою приправить речь,
Своим воинственным призывом
Умел он форум сей "зажечь""...
;-)))

PS почти C. Белоброву "Богиня Байдымат"