Stránka 1 z 1

DC motor 12V - cyklování

Napsal: 13 lis 2025, 10:02
od A69
Ahoj

Jsem tu nový, tak prosím o shovívavost. Zatím jsem tu jen četl. Řeším teď jeden problém ale nenašel jsem, že by se to tady řešilo někdy dříve. Na úvod: Mám zkušenosti pouze s řízením průmyslových 3f motorů, např. pomocí frekvenčního měniče. Tuhle problematiku mám celkem najetou.

Ale nyní chci řešit ovládání malého DC motorku na 12V a zatím tápu. Požadavek na funkci je cyklování. Tedy start - rotace vlevo - stop - rotace vpravo atd… až do vypnutí. Možnosti jsou: přepnout směr otáčení po 3 otáčkách. Nebo přepnout po určitém čase, který odpovídá zhruba třem otáčkám. Cílem je co nejjednodušejší řešení. Zamýšlený motor je s převodovkou, otáčky na výstupu 60rpm. Zbytek si zatím nedovedu představit. Vím, že pro změnu směru se používá H-můstek. A že časové relé můžu použít na řízení spínání - ale spínání si dokážu představit jen v jednom směru.

Jak tedy udělat to cyklování? Pomůže mi prosím někdo najít cestu? Díky moc

Re: DC motor 12V - cyklování

Napsal: 13 lis 2025, 11:49
od bum
Předně čím budete motorek ovládat a jaký má proudový odběr pro případ použití H-můstku, pro změnu směru otáčení po třech otáčkách budete potřebovat snímač otáček (je možné použít HALL senzor v tomto případě spínací, než použití lineárního HALL senzoru, optický snímač) který po dosažení počtu otáček vypne napájení pro jeden směr a po určité době zapne motor pro opačné otáčení. Změnu otáček je možné provést pomocí H-můstku nebo pomocí relátek které jdou ovládat jak elektronikou nebo ručně. V případě časového ovládání jak píšete je možné použít časové relé o kterém píšete a to bude pak ovládat například relátka na přepínání směru otáčení motorku dokud se nevypne napájení, v tom případě není potřeba žádný mikrokontrolér stejné zapojení na změnu otáček DC motorku mám na webu kde takto ovládám DC motorek použitý ve stavebnici MERKUR.

Re: DC motor 12V - cyklování

Napsal: 13 lis 2025, 16:48
od A69
Děkuji vám za odpověď.
Motor bude použit tento :
https://www.conrad.cz/cs/p/motor-s-prev ... 27560.html

Je to obyčejný DC motor bez enkodéru, musel bych tedy použít zmíněnou Hallovku. Kvůli rozměrům bych se tomu rád vyhnul.
Takže bych šel cestou časového relé. Takže použiji časové relé, které bude ovládat další relé, která budou měnit smysl otáčení DC motoru, je to tak? Můžu použít například tohle relé?
https://pest.cz/produkt/casove-rele-pan ... -999s-m-h/

Re: DC motor 12V - cyklování

Napsal: 13 lis 2025, 19:09
od bum
Použité časové relé na které jste dal odkaz je možné použít, tak jak jste napsal a jim pak ovládat relátka pro změnu směru otáčení, je to to nejjednodušší zapojení.

Re: DC motor 12V - cyklování

Napsal: 14 lis 2025, 13:09
od A69
Teď už je mi to jasné. Musím si jen rozvhrhnout rozmístění komponent, aby se do omezeného prostoru vše vešlo.
Pokud ne, našel jsem jako alternativu tohle dvoukanálové časové relé. Z návodu jsem pochopil, že funkce F-11 se dá naprogramovat do nekonečné smyčky, kde čas T1 ovládá motor dopředu, čas T2 může být pauza a čas T3 je obrácený chod. Objednám to a pak poreferuji, jak dobře to funguje.

https://eletechsup.com/products/dc-5-24 ... arage-door

Velké díky za nasměrování na dobrou cestu a pomoc!

Re: DC motor 12V - cyklování

Napsal: 14 lis 2025, 13:57
od Caster
Nejjednodušší řešení: Arduino + L298N H-můstek
Budete potřebovat:

Arduino Uno (nebo nano)
  • L298N H-můstek modul (~50 Kč)
  • Zdroj 12V
  • Pár vodičů
Princip:
Arduino bude řídit H-můstek a spínat směry podle času. Kód je velmi jednoduchý:

Kód: Vybrat vše

// Definice pinů
int IN1 = 8;
int IN2 = 9;
int ENA = 10;

void setup() {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
}

void loop() {
  // Rotace vlevo
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, 255); // plná rychlost
  delay(3000); // 3 sekundy = cca 3 otáčky při 60rpm
  
  // Stop
  digitalWrite(ENA, LOW);
  delay(500); // pauza
  
  // Rotace vpravo
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 255);
  delay(3000);
  
  // Stop
  digitalWrite(ENA, LOW);
  delay(500);
}
Výpočet času pro 3 otáčky:
  • 60 RPM = 1 otáčka za sekundu
  • 3 otáčky = 3 sekundy
Řešení s enkodérem
Součástky:
1. Arduino Uno/Nano
2. L298N H-můstek
3. Rotační enkodér - Hall sensor enkodér (magnetický) na výstupní hřídeli převodovky

Nejjednodušší a nejlevnější encodér:
1. Hall sensor modul A3144 (~20 Kč na LaskaKit)
2. Malý neodymový magnet (~10 Kč)
3. Magnet nalepíte na výstupní část převodovky
4. Hall sensor detekuje při každém průchodu = 1 impuls/otáčku

Pro 3 otáčky = 3 impulsy - super jednoduché!

Enkodér generuje impulzy při otáčení. Například:
  • Enkodér s 20 impulzy/otáčka
  • Pro 3 otáčky = 60 impulsů
Zapojení:
Obrázek

Kód s enkodérem:

Kód: Vybrat vše

// Definice pinů pro H-můstek
int IN1 = 8;
int IN2 = 9;
int ENA = 10;

// Definice pinů pro enkodér
int encoderPinA = 2;  // interrupt pin
int encoderPinB = 3;  // interrupt pin (pro směr)

// Proměnné
volatile long pulseCount = 0;
int pulsesPerRevolution = 20;  // závisí na vašem enkodéru
int targetRevolutions = 3;
int targetPulses = targetRevolutions * pulsesPerRevolution;

bool motorDirection = true;  // true = vlevo, false = vpravo

void setup() {
  // Nastavení pinů H-můstku
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(ENA, OUTPUT);
  
  // Nastavení enkodéru
  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  
  // Přerušení pro čtení enkodéru
  attachInterrupt(digitalPinToInterrupt(encoderPinA), countPulse, RISING);
  
  Serial.begin(9600);  // pro ladění
}

void loop() {
  // Reset počítadla
  pulseCount = 0;
  
  if (motorDirection) {
    // Rotace vlevo
    Serial.println("Rotace vlevo - start");
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 200);  // můžete upravit rychlost (0-255)
    
    // Čekání na dokončení 3 otáček
    while (abs(pulseCount) < targetPulses) {
      // Motor běží, Arduino čeká na impulzy
      delay(10);
    }
    
  } else {
    // Rotace vpravo
    Serial.println("Rotace vpravo - start");
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 200);
    
    // Čekání na dokončení 3 otáček
    while (abs(pulseCount) < targetPulses) {
      delay(10);
    }
  }
  
  // Stop motoru
  digitalWrite(ENA, LOW);
  Serial.print("Dokonceno. Impulzy: ");
  Serial.println(pulseCount);
  
  // Pauza mezi cykly
  delay(500);
  
  // Změna směru pro další cyklus
  motorDirection = !motorDirection;
}

// Funkce pro přerušení - počítání impulsů
void countPulse() {
  // Jednoduchá verze - jen počítání
  pulseCount++;
  
  // Pro detekci směru (s B kanálem):
  // if (digitalRead(encoderPinB) == HIGH) {
  //   pulseCount++;
  // } else {
  //   pulseCount--;
  // }
}

Re: DC motor 12V - cyklování

Napsal: 14 lis 2025, 18:47
od bum
Návrhnout ovládání Arduino jde také, v dotazu jsem se ptal co použije na ovládání tazatel na volbu ovládání zvolil co by chtěl použít a co mu vyhovuje, tak že jsem mu ani tuto možnost ovládání pomocí H-můstku nenavrhoval. Jinak také využívám na ovládání el.motorků H-můstky hlavně u autíček a dalších viz web.