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

Ciągłe wysuwanie i wsuwanie skoku siłownika za pomocą bezszczotkowego silnika prądu stałego

Guninder Malhi
Guninder Malhi
PA Engineer

Ten poradnik pomoże zrozumieć sterowanie sterownikiem bezszczotkowego silnika prądu stałego w połączeniu z Arduino i siłownikiem liniowym. Ten program można wykorzystać do ciągłego wysuwania i wsuwania skoku siłownika.

Zanim zaczniemy, omówmy komponenty, których użyjemy w tym poradniku:

  1. Arduino Mega (można też użyć Arduino Uno).
  2. LC-241.
  3. PA-14 z bezszczotkowym silnikiem.
  4. Zasilacz PS-13-12.
  5. Przewody połączeniowe (jumpery).

 Programowanie Arduino

Siłownik liniowy ma 2 wiązki przewodów: jedna służy do silnika, druga do wyłączników krańcowych. Schemat na powyższym rysunku pokazuje, jak połączyć komponenty.

KOD KONFIGURACJI PINÓW

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

Ta część kodu odpowiada za inicjalizację pinów używanych do odbioru i wysyłania danych. W tym przykładzie użyto pinów cyfrowych, ale można również użyć analogowych.

KOD FUNKCJI 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);
  }


Funkcja “setup” konfiguruje, które piny będą używane jako wyjścia, a które jako wejścia. Jak widać w kodzie, piny podłączone do wyłączników krańcowych posłużą do odczytu stanów wyłącznika krańcowego, a piny podłączone do “RUN” i “REV” na LC-241 będą używane do zapisu. Na początku kod uruchamia też funkcję retract(), aby całkowicie wsunąć siłownik przed startem.

KOD DEFINICJI FUNKCJI

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);
}


Ta część wyjaśnia funkcje używane do sterowania zasilaniem i kierunkiem pracy silnika. Będziemy włączać lub wyłączać silnik, zapisując “0” lub “1” na pin “RUN”, a następnie te same polecenia na pin “REV”, aby odwrócić kierunek pracy silnika.

KOD PĘTLI loop

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
  }

 

Pętla “loop” zasadniczo odczytuje wejścia z wyłączników krańcowych, aby sprawdzić, czy zostały wciśnięte, a następnie na tej podstawie zmienia kierunek pracy silnika.

Większość siłowników liniowych dostępnych na rynku jest wyposażona w szczotkowy silnik prądu stałego, a cykl pracy takiego silnika sprawia, że ciągła praca urządzenia jest w praktyce niemożliwa. W Progressive Automations dajemy naszym klientom możliwość wyboru bezszczotkowego silnika prądu stałego dla modelu PA-14, co zapewnia jeszcze więcej opcji do ich projektów.