Photo of a control box inside

Parte II: Come monitorare il Feedback di Carico di un Attuatore Lineare?

Guest Writer
Guest Writer
PA Engineer

Benvenuti alla Parte II della nostra guida su come monitorare il feedback del carico di un attuatore lineare. In Parte I abbiamo esaminato il processo di cablaggio e il codice di base necessario per l'esempio. Nella guida di oggi, analizzeremo nel dettaglio le diverse sezioni del codice, oltre ad alcuni modi per modificarlo. Per iniziare, vedremo la sezione di codice latchButtons().

La prima cosa che vogliamo gestire è l'antirimbalzo dei pulsanti: quando viene premuto il pulsante sinistro, bisogna calcolare il tempo trascorso dall'ultima pressione. Per farlo dovremo utilizzare l'ultimo valore memorizzato nel codice e poi usare la funzione millis() per verificare il tempo. Quando il tempo è maggiore del tempo di antirimbalzo, la funzione controllerà se l'attuatore può estendersi. Una volta soddisfatte entrambe le condizioni, la funzione potrà proseguire.

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


La sezione successiva è il ciclo all'interno della funzione motorForward(), in particolare i due delay. Il ciclo inizia attivando il controller del motore, che avvia il motore dell'attuatore lineare. Se è il primo passaggio nel ciclo, ci sarà un ritardo più lungo. Il ritardo serve a ignorare il picco di corrente che si verifica quando il motore viene attivato. Assicurati di non impostare un ritardo troppo grande perché, una volta avviato, non avrai più controllo. Quando il motore parte, la sezione getFeedback() viene utilizzata per controllare il sensore di corrente.

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

Foto dell'interno di una scatola di controllo

Ora analizzeremo le sezioni della routine getFeedback(), che inizia leggendo il pin analogico collegato al sensore. Si parte verificando se il motore è a fine corsa e il codice riconosce il fine corsa quando la corrente risulta 0.

Purtroppo a volte possono verificarsi letture errate, quindi è importante impostare un contatore. Questo contatore deve contare fino a hitLimitsmax prima che il motore si fermi e, se conta meno di tale valore, si azzererà.

 

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


Dopo di ciò si gestiscono i limiti. Quando il motore dell'attuatore lineare si muove in avanti e raggiunge il limite, il latch destro verrà disattivato. Se il motore si muove all'indietro, verrà disattivato il latch sinistro. Il codice seguente mostra solo il latch destro, ma quello sinistro è lo stesso.

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

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

Viene controllato il limite di corrente e viene definito il valore massimo. Se il limite viene superato, il latch sinistro verrà disattivato e il motore non si estenderà più. Per avviare nuovamente l'estensione, occorre invertire il motore.
if (CRaw > maxAmps)  {

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

Questo ci porta alla fine della Parte II del monitoraggio del feedback del carico di un attuatore lineare. Questa volta siamo entrati nel dettaglio di sezioni specifiche del codice e abbiamo spiegato come funzionano. Se desideri ordinare una qualsiasi delle unità utilizzate in questo esempio, puoi farlo online oppure contattarci per ordinare telefonicamente. Se hai domande o dubbi sui nostri prodotti, siamo sempre pronti ad aiutarti.