Photo of a control box inside

Osa II: Kuinka seurata lineaarisen toimilaitteen kuormituspalautetta?

Guest Writer
Guest Writer
PA Engineer

Tervetuloa oppaamme osaan II, jossa kerromme, miten lineaarisen toimilaitteen kuormituspalautetta seurataan. Osassa I kävimme läpi esimerkin johdotuksen ja tarvittavan peruskoodauksen. Tässä osassa käymme yksityiskohtaisesti läpi koodin eri osia ja tapoja muokata sitä. Aloitamme tarkastelemalla koodin latchButtons()-osiota.

Ensimmäisenä haluamme varmistaa painikkeiden ”debouncauksen”, eli kun vasenta painiketta painetaan, aika edellisestä painalluksesta pitää laskea. Tätä varten hyödynnetään koodiin tallennettua viimeistä arvoa ja tarkistetaan aika millis()-funktiolla. Kun aika on suurempi kuin debounce‑aika, funktio tarkistaa, voiko toimilaite pidentyä. Kun molemmat ehdot täyttyvät, funktio voi jatkaa.

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


Seuraava osio on motorForward()-funktion sisäinen silmukka, erityisesti kaksi viivettä. Silmukka alkaa kytkemällä moottoriohjaimen päälle, mikä käynnistää lineaarisen toimilaitteen moottorin. Ensimmäisellä kierroksella viive on pidempi. Viive ohittaa virran aloituspiikin, joka syntyy moottorin käynnistyessä. Älä aseta viivettä liian pitkäksi, koska käynnistyttyään sitä ei voi enää hallita. Moottorin käynnistyttyä getFeedback()-osiolla luetaan virtasensoria.

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

Kuva ohjauslaatikon sisäpuolelta

Seuraavaksi käymme läpi get feedback() ‑rutiinin osiot. Se alkaa lukemalla anturiin liitetyn analogiatapin. Ensin tarkistetaan, onko moottori rajoissaan; koodi tunnistaa rajat, kun virta on 0.

Valitettavasti joskus voi tulla virheellisiä lukemia, joten on tärkeää asettaa laskuri. Laskurin on laskettava arvoon hitLimitsmax ennen kuin moottori pysähtyy; jos laskenta jää pienemmäksi, se nollataan.

 

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


Tämän jälkeen käsitellään rajat. Kun lineaarisen toimilaitteen moottori liikkuu eteenpäin ja saavuttaa rajan, oikea salpa kytkeytyy pois. Kun moottori liikkuu taaksepäin, vasen salpa kytkeytyy pois. Alla oleva koodi näyttää vain oikean salvan, mutta vasemman koodi on sama.

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

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

Virrarajaa seurataan ja enimmäisraja määritellään. Jos raja ylittyy, vasen salpa kytketään pois päältä eikä moottori enää pidennä. Pidentämisen jatkamiseksi moottori on käännettävä vastakkaiseen suuntaan.
if (CRaw > maxAmps)  {

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

Tässä oli II osan loppu lineaarisen toimilaitteen kuormituspalautteen seurannasta. Kävimme tällä kertaa läpi tarkemmin koodin tiettyjä osia ja selitimme niiden toiminnan. Jos haluat tilata mitä tahansa esimerkissä käyttämiämme laitteita, voit tehdä tilauksen verkossa tai ottaa meihin yhteyttä tilataksesi puhelimitse. Jos sinulla on kysyttävää tuotteistamme, autamme mielellämme.