Strona 1 z 1

Proste Sterowanie silnikiem krokowym bez komputera

: 12 kwie 2012, 17:15
autor: Andrzej G
Witam , proszę o pomoc w opracowaniu sterownika silnika krokowego do następującej czynności:
Powinien reagować na prosty sygnał typu podanie napięcia lub zwarcie wejścia sterującego.
- mam do dyspozycji wyjścia typu otwarty kolektor.

po otrzymaniu sygnału" start "
silnik krokowy ma zrobić np. 30 kroków i się zatrzymać
po ustaniu sygnału sterującego silnik ma wrócić 30 kroków do pozycji wyjściowej.

wymagania niewielkie ale gotowych rozwiązań nie widziałem

kąt obrotu silnika około 30 stopni nie wymagana precyzja większa niż 5 stopni
prędkość obrotu 30 stopni ok 0,05 sek
W pozycji wyjściowej silnik musi być zasilany - wymagany moment trzymający
w pozycji po obrocie 30 stopni - moment trzymający nie jest wymagany
obciążenie silnika - minimalne


będę bardzo wdzięczny za sugestie w tym temacie - możliwe zlecenie wykonania takich modułów

pozdrawiam

Andrzej - 790 770 020

Re: Proste Sterowanie silnikiem krokowym bez komputera

: 12 kwie 2012, 18:07
autor: pitsa
Arduino podpięte do normalnego sterownika silnika krokowego - 4 przewody.
Zasilacz do silnika i zasilacz Arduino.

Mniej więcej coś takiego:
Obrazek
ale bez tak dużej ilości kabli.

Zaprogramowanie tego jest bardzo proste.

Mogę jutro osobiście zaprezentować wraz z ekipą młodych osób. :-)

[ Dodano: 2012-04-13, 21:29 ]
Serdecznie dziękuję, za dwukierunkową możliwość podzielenia się wiedzą. :-)
To było dla młodych ludzi bardzo wartościowe spotkanie, podczas którego mogli się przekonać, że warto robić coś wyjątkowego, łącząc tak wiele różnych umiejętności z wielu dziedzin.

Re: Proste Sterowanie silnikiem krokowym bez komputera

: 08 maja 2018, 19:00
autor: pitsa
Do sposobów sterowania silnikiem bez komputera mogę dodać esp8266 i arduino - właśnie kręcę dwoma silnikami z jednego ESP-12. ;-)

Przy arduino i accelstepper uzyskuje się impulsy do około 4kHz.
Na ESP-12 mam max 17kHz gdy drugim silnikiem kręcę wolno.
Przy szybkiej pracy dwoma silnikami max użytkowa częstotliwość impulsów to 10kHz.

Reklama: 13,90zł za moduł esp-12e plus do tego konwerter poziomów logicznych za 3,90zł.

Re: Proste Sterowanie silnikiem krokowym bez komputera

: 06 sie 2018, 17:41
autor: markcomp77
moduł ESP wygląda super - dzięki Pitsa :)

Re: Proste Sterowanie silnikiem krokowym bez komputera

: 15 sie 2018, 13:42
autor: kwarc
ach te arduino , to już niechce siem lutowac plytki? żartuje troche ....

Re: Proste Sterowanie silnikiem krokowym bez komputera

: 25 sie 2018, 08:01
autor: pitsa
Prosty kod do sterowania jedną osią i jazdy do dwóch punktów.
Sterowanie: dwa oddzielne przyciski nakazujące ruch.

Kod: Zaznacz cały

#include <AccelStepper.h>
// pobierz i wgraj do libraries stąd:
// http://www.open.com.au/mikem/arduino/AccelStepper/
// pin 7 zwarty do zera ruch w jedną stronę 
// pin 8 zwarty do zera ruch w drugą stronę 
// po 10 sekundach wyłączany silnik krokowy

AccelStepper osX(1, 13, 11);  //   pin 13 - STEP, pin 11 - DIR
long goX = 200;                //   zdefiniowana liczba kroków do wykonania.
boolean lewo = false;  
boolean bylo = false;
    
unsigned long czasn;  // w zmiennej czas będziemy przekazywać aktualną wartość millis()
                                // do ustalania czas od ostatniego zadanego ruchu

void setup() {  
  pinMode(7, INPUT);
  pinMode(8, INPUT);  
  digitalWrite(7,HIGH);    
  digitalWrite(8,HIGH);    
  
  pinMode(13, OUTPUT);  
  pinMode(5, OUTPUT);  
  digitalWrite(5,LOW);    

  osX.setMaxSpeed(4300.0);    // 
  osX.setSpeed(4300.0); 
  osX.setAcceleration(4000.0);  //


// na starcie sterownika jedzie silnik w jedną stronę do pozycji na zderzak mechaniczny.
// później ruch będzie odmierzany od tego zderzaka 
 for ( int i=0 ; i < 360 ; i++ ) {
  osX.runToNewPosition(osX.currentPosition()-1);
  osX.run(); 
  delay(2);
 }
// zamiast zderzaka można pozycjonować krańcówką 
// przykład tutaj: https://www.cnc.info.pl/maszyna-do-punktowania-rur-t94055-40.html#p655149
 
  czasn = millis();

}

void loop(){

// to jest glowne polecenie ruchu - ma być w loop uruchamiane cały czas
// pozostałe rzeczy są na warunkach
  osX.run(); 

// opcja wyłączania silnika na postoju - 10000 = 10 sek i wyłączenie silnika ENA
if ( ( millis() - czasn ) >  10000 ) {
  digitalWrite(13, HIGH);  // dioda na arduino
  digitalWrite(5, HIGH);   // sygnał ENA
}

//jeśli sygnał ruchu i pozycja po przeciwnej stronie to można jechać i zmienić pozycję o goX
if  ( (digitalRead(7) == LOW ) && ( bylo == false ) ) {
  delay(50);
  digitalWrite(5, LOW);  // obudzenie
  delay(50);
  if (digitalRead(7) == LOW ) {
     osX.runToNewPosition(osX.currentPosition()+goX);
     bylo = true ;
     czasn = millis();
  }
}

// i tu ruch w drugą strone
if ( (digitalRead(8) == LOW ) && ( bylo == true ) ) {
  delay(50);
  digitalWrite(5, LOW);  // obudzenie
  delay(50);
  if (digitalRead(8) == LOW ) {
     osX.runToNewPosition(osX.currentPosition()-goX);
     bylo = false ;
     czasn = millis();
  }
}
  
}