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:
- Arduino Mega (można też użyć Arduino Uno).
- LC-241.
- PA-14 z bezszczotkowym silnikiem.
- Zasilacz PS-13-12.
- Przewody połączeniowe (jumpery).
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.