Photo of a brushless DC motor controller when paired with an Arduino and a linear actuator

Estendi & Ritrai Continuamente la Corsa di un Attuatore con un Motore CC brushless

Guninder Malhi
Guninder Malhi
PA Engineer

Questo tutorial aiuta a comprendere i controlli di un controller per Motore DC brushless abbinato a un Arduino e a un Attuatore lineare. Questo programma può essere usato per estendere e ritrarre continuamente la Corsa di un Attuatore.

Prima di iniziare, passiamo in rassegna i componenti che useremo in questo tutorial:

  1. Arduino Mega (si può usare anche Arduino Uno).
  2. LC-241.
  3. PA-14 con un Motore brushless.
  4. Alimentatore PS-13-12.
  5. Cavi jumper.

 Programmazione Arduino

L'Attuatore lineare ha 2 gruppi di cavi in uscita: uno è per il Motore e l'altro è per i Finecorsa. Lo schema nella figura sopra mostra come collegare tra loro i componenti.

CODICE CONFIGURAZIONE PIN

int out_lim = 45; // outer limit switch pin

int in_lim = 53;  // inner limit switch pin

int run_f = 25;  // run pin on controller
int run_r = 30;  // reverse pin on controller

Questa parte del codice si occupa dell’inizializzazione dei pin che verranno usati per ricevere e inviare dati. In questo caso sono stati usati pin digitali, ma si possono usare anche quelli analogici.

CODICE DELLA FUNZIONE SETUP

void setup() {

  Serial.begin(9600);  // initialize serial communication at 9600 bits per second
  pinMode(out_lim, INPUT_PULLUP); // configures pin 45 as input pin
  pinMode(in_lim, INPUT_PULLUP); // configures pin 53 as input pin
  pinMode(run_f, OUTPUT); // configures pin 25 as output pin
  pinMode(run_r, OUTPUT); // configures pin 30 as output pin

 

  retract(); // retracts the stroke on startup

  delay(500);
  }


Il ciclo “setup” configura quali pin saranno usati per l’output e quali per l’input. Come si vede nel codice, i pin collegati ai Finecorsa verranno usati per leggere lo stato dei Finecorsa e i pin collegati a “RUN” e “REV” sull’LC-241 verranno usati per scrivergli i comandi. All'inizio, il codice esegue anche una funzione di retrazione per ritrarre completamente prima di iniziare.

CODICE DELLE DEFINIZIONI DI FUNZIONE

void extend() // this function enables the motor to run

{
 digitalWrite(run_f, LOW);
 digitalWrite(run_r, HIGH);

 }

void retract() // this function reverses the direction of motor
{
  digitalWrite(run_f, LOW);
  digitalWrite(run_r, LOW);
}

void run_stop() // this function disables the motor
{
  digitalWrite(run_f, HIGH);
  digitalWrite(run_r, HIGH);
}


Questa sezione spiega le funzioni usate per controllare l’alimentazione e la direzione del Motore. Abiliteremo o disabiliteremo il Motore scrivendo “0” o “1” sul pin “RUN”, quindi useremo gli stessi comandi sul pin “REV” per invertire la direzione del Motore.

CODICE DEL LOOP PRINCIPALE

Void loop() {

   int out_lim_state = digitalRead(out_lim);     // reads the limit switches and saves its value
  int in_lim_state = digitalRead(in_lim);

   Serial.print("outer limit switch value "), Serial.println(out_lim_state); // 0 -> limit switch is pressed
   Serial.print("inner limit switch value "), Serial.println(in_lim_state);  // 1 -> limit switch is not pressed

  if (out_lim_state == 0 && in_lim_state == 1) // if outer limit switch is pressed and inner is not (extended all the way)
   {
   retract(); // retract the stroke
   }

   else if (out_lim_state == 1 && in_lim_state == 0) // if inner limit switch is pressed   and outer is not (reracted all the way)
  {
   extend(); // extend the stroke
  }

 

Il ciclo “loop” sostanzialmente legge gli ingressi dai Finecorsa per verificare se sono premuti oppure no e poi, in base a ciò, cambia la direzione del Motore.

La maggior parte degli Attuatori lineari sul mercato è dotata di un Motore DC a spazzole e il Ciclo di lavoro di quel Motore rende in pratica impossibile far funzionare l’unità in continuo. In Progressive Automations offriamo ai nostri clienti la possibilità di optare per un Motore DC brushless sul nostro modello PA-14, offrendo ancora più opzioni per i loro progetti.