H-bridge HG7881CP testimine Arduino ja 12V toitepingega.

H-sild HG7881CP mooduli ühendamine Arduinoga

Kiire ülevaade sellest kuidas ühendada H-sild HG7881CP moodul Arduino külge ning see käima panna. Käesolevas näites kasutame eraldiseisvat 12V toiteallikat. Toiteallikas ei pea kindlasti olema 12V, võib kasutada ükskõik mida ~5V – 12V vahemikus. Pigem oleneb sellest mitme voldist pinget on soov mootoril rakendada maksimumina ning palju mootor kannatab. Madalama pingega peaks ettevaatlikum olema. Väidetavalt võib väiksema pinge korral hakata moodul lekkima liiga suurt voolu Arduino kiibi suhtes.

Käesoleva mooduliga saab ka mootori kiirust reguleerida mida ka demonstreerime. Vaata siit mis H-sild moodulid meil hetkel müügis on.

Mis on H-sild ehk H-bridge?

Selle kohta tasub uurida Wiki artiklit H-sild kohta (H-bridge). Lühidalt on tegu elektriskeemiga mille abil on võimalik muuta voolu suunda (nn vahetada ära miinus ja pluss vool omavahel) mootori või mõne muu tarbija klemmidel. Üldiselt saab ka reguleerida pinget ehk mootori kiirust. Väga levinud moodul näiteks robootikas kuna selle abil saab panna alalisvoolu mootorit pöörlema nii edaspidi kui tagurpidi suunas. Lihtsustatult võiks näha H-silla põhilised olekud järgmised. Jälgiga juhtmete värvust mootori juures.

H-sild, lihtsustatud tööpõhimõte

a) Mootor seisab- ei rakendata pinget. Ühtegi lülitit pole suletud.

b) Mootor liigub vastupäeva, lülitid S2 ja S3 on suletud pannes voolu liikuma läbi mootori

c) Mootor liigub päripäeva, lülitid S1 ja S4 on suletud pannes voolu liikuma läbi mootori

NB: Reaalne pöörlemise suund oleneb mis pidi on mootor ühendatud.

H-sild HG7881 ühendamine ja näidiskood

Kuna tegu on 2 kanaliga, siis võime selle abil juhtida kahte erinevat mootorit. Siinses näidiskoodis ning ühendamise skeemis kasutame parema ülevaate saamiseks mootorit vaid ühes kanalis. Ühendused näiteks Arduino UNO peale tulevad selle järgi järgmised (moodul => Arduino):

  • GND => Toide GND (miinus klemm)
  • VCC => Toide +12V
  • A-1A => Digitaalsisend klemm  D8 (mootori suund)
  • A-1B => Digitaalsisend klemm  D9 (mootori kiirus)

Lisaks tuleb Arduino GND ühendada toiteploki GND klemmiga. Toiteploki ja Arduno GND ühenduse vahele võib kindluse mõttes lisada takisti võimaliku voolutugevuse piiramiseks (nt 600 oomise 12V puhul). Pildil seda pole. Hetkel jätame lahtiseks B-1A ja B-1B klemmid moodulil kuna need on teise mootori juhtimise jaoks.

H-bridge HG7881CP testimine Arduino ja 12V toitepingega.

Ühendused moodulil lähemalt.

HG7881CP ühendused
HG7881CP ühendused

Järgmise sammuna tuleks laadida Arduino peale allolev näidiskood. Kui kõik on õigesti ühendatud peaks selle tulemusel mootor kõigepealt hakkama käima ühes suunas  ja siis teises suunas demonstreerimaks samal ajal ka kiiruse muutumist maksimumi suunas.

/**
 * H-silla mooduli HG7881CP kasutamise näidiskood
 */

/**
 *  Loome muutujad Arduino pinnidega mida kasutame
 *  mootori A juhtimiseks 
 */
int motorAPin_A = 8; //Arduino klemm digitaal 8 ühendub moodulil A-1A klemmile
int motorAPin_B = 9; //Arduino klemm digitaal 9 ühendub moodulil A-1B klemmile


void setup(){
  //programmi käivitades määrame Arduino pinnid 8 ja 9 väljundiks
  //et nendele saaks analogWrite abil väärtusi 0-255 (0-5V) anda
  pinMode(motorAPin_A, OUTPUT);
  pinMode(motorAPin_B, OUTPUT);
}

void loop() {
  analogWrite(motorAPin_A, LOW);
  
  //mootor vaikselt käima kuni maksimumini suunas X
  for(int i=0; i<=255; i++){
    
    //kiirus kasvab vastavalt väärtusele 0 -> 255
    analogWrite(motorAPin_B, i);
    delay(40);
  }
   
  //Hoiame mootorit käimas 3 sekundit suunas X
  delay( 3000 );
  
  //Katkesta mootori toide 1 sekundiks (et saaks seisma jääda)
  //Pannes mõlema pinni väärtuseks 0V
  analogWrite(motorAPin_A, LOW);
  analogWrite(motorAPin_B, LOW);
  delay(1000);
  
  
  //ja nüüd teisipidi määrates mooduli A-1A klemmile 5V pinge
  analogWrite(motorAPin_A, 255);
  

  //mootor vaikselt käima kuni maksimumini suunas Y
  for(int i=0; i<=255; i++){
    //Me peame väärtuse invertima, et kiirus kasvaks väärtusega 255 -> 0 
    //selle mooduli eripära tõttu on selles suunas kiiruse määramine 
    //vastupidise väärtusega (inverted)
    analogWrite(motorAPin_B, invertOurValue( i ) );
    delay(40);
  }
  
  //Hoiame mootorit käimas 3 sekundit suunas Y
  delay( 3000 );
  
  //Katkesta mootori toide 1 sekundiks (et saaks seisma jääda)
  analogWrite(motorAPin_A, LOW);
  analogWrite(motorAPin_B, LOW);
  delay(1000);
  
  //ja nüüd hakkab kõik otsast peale
}


int invertOurValue(int input) {
  return 255 - input;
}

Näidiskoodiga töötamise video

Allolevas videos on näha kuidas peaks ülevaltoodud näidiskoodselle H-sillaga töötama.