Photo of a control box inside

2. del: Kako spremljati povratno zvezo obremenitve linearnega aktuatorja?

Dobrodošli v 2. delu našega vodnika o tem, kako spremljati povratno zvezo obremenitve linearnega aktuatorja. V 1. del smo obravnavali postopek ožičenja in osnovno kodiranje, potrebno za primer. V današnjem vodniku bomo podrobno pregledali različne odseke kode in nekaj načinov za njihovo urejanje. Za začetek si bomo ogledali del kode latchButtons().

Najprej želimo videti odpravljanje drhtenja (debounce) tipke, zato je ob pritisku leve tipke treba izračunati čas od prejšnjega pritiska. Za to moramo uporabiti zadnjo vrednost, shranjeno v kodi, nato pa s funkcijo millis() preveriti čas. Ko je čas večji od časa za odpravljanje drhtenja, funkcija preveri, ali se lahko aktuator iztegne. Ko sta oba pogoja izpolnjena, lahko funkcija nadaljuje.

if (digitalRead(buttonLeft)==LOW)// levo je naprej

{
currentTimedebounce = millis() - lastButtonpress;// preveri čas od zadnjega pritiska
if (currentTimedebounce > debounceTime && dontExtend == false)// ko se sproži dontExtend, ignoriraj vse pritiske za naprej
{
leftlatch = !leftlatch;// če se motor premika, ustavi; če stoji, začni premik
firstRun = true;// nastavi zastavico firstRun, da ignoriraš konico toka
fullyRetracted = false; // ko se premakneš naprej, nisi več popolnoma uvlečen
lastButtonpress = millis();// shrani čas zadnjega pritiska tipke
return;
}// konec if
}// konec btnLEFT


Naslednji odsek je zanka znotraj funkcije motorForward(), posebej dve zakasnitvi. Zanka začne z vključitvijo krmilnika motorja, ki zažene motor linearnega aktuatorja. Če je to prvi prehod skozi zanko, bo zakasnitev večja. Zakasnitev ignorira konico toka, ki nastane, ko se motor vklopi. Pazite, da ne nastavite prevelike zakasnitve, saj po začetku nad njo ne boste imeli nadzora. Ko se motor zažene, se odsek getFeedback() uporabi za preverjanje tokovnega senzorja.

while (dontExtend == false && leftlatch == HIGH)  {

digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, speeed);
analogWrite(PWMPinB, 0);// premakni motor
if (firstRun == true) delay(firstfeedbacktimedelay);
else delay(feedbacktimedelay); // kratka zamuda za doseganje hitrosti
getFeedback();
firstRun = false;
latchButtons();
}// konec while

Fotografija krmilne škatle v notranjosti

Nato bomo pregledali odseke v rutini get feedback(), ki se začne z branjem analognega pina, povezanega s senzorjem. Najprej preveri, ali je motor na svojih mejah, pri čemer koda meje prepozna, ko je tok 0.

Žal lahko včasih pride do napačnega odčitka, zato je pomembno nastaviti števec. Ta koda števca mora šteti do hitLimitsmax, preden se motor ustavi; če prešteje manj, se ponastavi.

 

if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;  

else hitLimits = 0; // preveri, ali je motor na mejah in ali se je tok ustavil


Po tem sledijo zadetki mej. Ko se motor linearnega aktuatorja premika naprej in doseže mejo, bo izklopil desni zapah. Če se motor premika nazaj, bo izklopil levi zapah. Spodnja koda prikazuje samo desni zapah, vendar je koda za levi zapah enaka.

if (hitLimits == hitLimitsmax && rightlatch == HIGH)  {

rightlatch = LOW;
hitLimits = 0;
}// konec if

Preveri se mejna vrednost toka in določi maksimalna meja. Če je meja presežena, se levi zapah izklopi in motor se ne bo več iztegnil. Za ponovni začetek iztegovanja je treba motor obrniti.
if (CRaw > maxAmps)  {

dontExtend = true;
leftlatch = LOW; // ustavi, če je povratna zveza nad maksimumom
}// konec if

S tem smo pri koncu 2. dela spremljanja povratne zveze obremenitve linearnega aktuatorja. Tokrat smo podrobno obravnavali določene odseke kode in razložili, kako delujejo. Če želite naročiti katerega od sklopov, ki smo jih uporabili v tem primeru, lahko naročite na spletu ali nas kontaktirate za naročilo po telefonu. Če imate kakršna koli vprašanja ali pomisleke glede naših izdelkov, smo vam vedno na voljo.