duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Motor shieldu L293D  (Přečteno 733 krát)

Offline steev77

  • Bastlíř začátečník
  • *
  • Příspěvků: 1
Motor shieldu L293D
« kdy: Říjen 01, 2015, 15:12:36 odpoledne »
Ahoj, mám dotaz na uvedeny shield,lze sním řídit dva krokové motory současně? Bez toho aby jeden čekal až druhy dojede požadovaný počet kroků?
Pokud někdo víte,díky za odpověď.

Offline astromik

  • Pokročilý bastlíř
  • ***
  • Příspěvků: 115
Re:Motor shieldu L293D
« Odpověď #1 kdy: Říjen 02, 2015, 06:41:34 dopoledne »
Pokud by stačilo pohybovat motory stejnou rychlostí, tak by to šlo třeba takhle:

(je to jen nevyzkoušený náznak principu řešení)

Kód: [Vybrat]
// podprogram pro soucasne toceni dvou krokovych motoru ("A" a "B")
// u kazdeho motoru se nastavuje pocet kroku a smer otaceni
// promenna "pauza" urcuje zakladni rychlost krokovani otaceni


motory(smer_a, kroky_a, smer_b, kroky_b, pauza)
  {
    while ((kroky_a > 0) or (kroky_b > 0)) // kdyz je alespon jedno pocitadlo kroku vetsi nez 0, bude se tocit nekterym motorem
      {
         if (kroky_a > 0)
           {
             udelej_jeden_krok_motorem_A(smer_a);  // podprogram pro 1 krok motoru A pozadovanym smerem
             kroky_a --;
           }
 
         if (kroky_b > 0)
           {
             udelej_jeden_krok_motorem_B(smer_b);  // podprogram pro 1 krok motoru B pozadovanym smerem
             kroky_b --;
           }

         delay(pauza);
       
      } // kdyz jsou obe pocitadla kroku vynulovane, podprogram konci 
 
  }




Pokud by bylo třeba točit motory různou rychlostí, bylo by to trochu složitější.

Když by rychlost jednoho motoru byla celočíselným násobkem rychlosti druhého motoru, tak by stačilo přidat počítadlo smyček a u pomalejšího motoru některé průchody ignorovat.


Kód: [Vybrat]
...

         pocitadlo_smycek ++;
         if ((kroky_b > 0) and (pocitadlo_smycek == 3))  // motor B se pootoci jen v kazde 3. smycce
           {
             udelej_jeden_krok_motorem_B(smer_b);  // podprogram pro 1 krok motoru B pozadovanym smerem
             kroky_b --;
             pocitadlo_smycek == 0;
           }

...



Pokud by byla podobně napsaná i část programu pro motor "A", bylo by možné nastavit i neceločíselný poměr rychlostí.
Například motor A se pootočí každý druhý průchod smyčkou a motor B se pootočí každý třetí průchod smyčkou.