Photo of a control box inside

Časť II: Ako sledovať spätnú väzbu zaťaženia lineárneho aktuátora?

Guest Writer
Guest Writer
PA Engineer

Vitajte v časti II nášho sprievodcu o tom, ako monitorovať spätnú väzbu zaťaženia lineárneho aktuátora. V Časti I sme si prešli proces zapojenia a základné programovanie potrebné pre príklad. V dnešnom návode si podrobne prejdeme rôzne časti kódu a aj niektoré možnosti, ako ho upraviť. Začneme sekciou kódu latchButtons().

Najprv sa chceme pozrieť na odstránenie zákmitov tlačidla, takže keď sa stlačí ľavé tlačidlo, treba vypočítať čas od predchádzajúceho stlačenia. Na to použijeme poslednú hodnotu uloženú v kóde a následne funkciu millis() na kontrolu času. Keď je čas väčší než čas odrušenia, funkcia skontroluje, či sa aktuátor môže vysunúť. Po splnení oboch podmienok môže funkcia pokračovať.

if (digitalRead(buttonLeft)==LOW)//left is forwards

{
currentTimedebounce = millis() - lastButtonpress;// check time since last press
if (currentTimedebounce > debounceTime && dontExtend == false)//once you've tripped dontExtend, ignore all forwards presses
{
leftlatch = !leftlatch;// if motor is moving, stop, if stopped, start moving
firstRun = true;// set firstRun flag to ignore current spike
fullyRetracted = false; // once you move forwards, you are not fully retracted
lastButtonpress = millis();//store time of last button press
return;
}//end if
}//end btnLEFT


Ďalšia časť je slučka vo funkcii motorForward(), konkrétne dve oneskorenia. Slučka začína aktivovaním ovládača motora, ktorý spustí motor lineárneho aktuátora. Ak ide o prvý prechod slučkou, bude tam dlhšie oneskorenie. Oneskorenie ignoruje prúdovú špičku, ktorá vznikne pri aktivácii motora. Dávajte pozor, aby ste nenastavili príliš dlhé oneskorenie, pretože po spustení nad ním nebudete mať kontrolu. Keď sa motor spustí, časť getFeedback() slúži na kontrolu snímača prúdu.

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

digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, speeed);
analogWrite(PWMPinB, 0);//move motor
if (firstRun == true) delay(firstfeedbacktimedelay);
else delay(feedbacktimedelay); //small delay to get to speed
getFeedback();
firstRun = false;
latchButtons();
}//end while

Photo of a control box inside

Ďalej si prejdeme časti rutiny get feedback(), ktorá začína čítaním analógového pinu pripojeného k snímaču. Najprv kontroluje, či je motor na svojich limitoch, a kód to zistí vtedy, keď prúd ukazuje 0.

Niekedy však môže dôjsť k chybnému odčítaniu, preto je dôležité nastaviť čítač. Tento čítač musí napočítať až po hodnotu hitLimitsmax, než sa motor zastaví, a ak napočíta menej, vynuluje sa.

 

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

else hitLimits = 0; // check to see if the motor is at the limits and the current has stopped


Potom nasleduje detekcia dosiahnutia limitov. Keď sa motor lineárneho aktuátora pohybuje dopredu a dosiahne limit, vypne pravú západku. Ak sa motor pohybuje dozadu, vypne ľavú západku. Nižšie uvedený kód ukazuje len pravú západku, ale kód pre ľavú je rovnaký.

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

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

Skontroluje sa limit prúdu a stanoví sa maximálna hodnota. Ak sa limit prekročí, ľavá západka sa vypne a motor sa už nebude vysúvať. Aby sa opäť začalo vysúvanie, je potrebné motor prehodiť na opačný smer.
if (CRaw > maxAmps)  {

dontExtend = true;
leftlatch = LOW; //stop if feedback is over maximum
}//end if

Tým sa dostávame na koniec časti II monitorovania spätnej väzby zaťaženia lineárneho aktuátora. Tentoraz sme sa detailne venovali konkrétnym častiam kódu a vysvetlili, ako fungujú. Ak by ste si chceli objednať niektoré jednotky, ktoré sme v tomto príklade použili, môžete objednať online alebo nás kontaktovať a objednať telefonicky. Ak máte otázky alebo obavy týkajúce sa našich produktov, sme vždy pripravení pomôcť.