Foto av MegaMoto Plus H-brygga för Arduino Modell: LC-80 av Progressive Automations

Del I: Hur man övervakar återkoppling från ett linjärt ställdon?

Anna Sapiga
Anna Sapiga
PA Engineer

In today’s guide, we will go over how to find out how much force a linear actuator is applying by monitoring the amount of current it is using. This will be one of our more advanced guides and will require some complex coding, calibrating and programming. We will be covering the monitoring of analog input and how it utilizes its functions. For this project, we’ll be using a MegaMoto Plus, en linjär ställdon (vi använder vår PA-14 mini-ställdon), en Arduino Uno och en strömförsörjning på minst 12V.

Photo of PA-14 mini actuator, an Arduino Uno and a power supply

Till att börja med behöver vi dra kablar för att koppla ihop allting. Börja med att ansluta MegaMoto till Arduino, placera bara MegaMoto ovanpå Uno för att göra det. Anslut sedan en kabel från BAT+-terminalen som finns på MegaMoto till Vin-pinnen som finns på Uno.

Photo of MegaMoto Plus H-bridge for Arduino Model: LC-80 by Progressive Automations


Nu behöver vi ansluta kablarna till de linjära ställdonen till A- och B-terminalerna på MegaMoto och ansluta 12V-strömkällan till BAT+ och GND till BAT-. Vi behöver också koppla två knappar för styrning genom att koppla dem var och en mellan ett oanvänt stift och GND. Vi rekommenderar att koppla knapparna till ett kopplingsdäck.

Photo of the linear actuators wires connecting to the A and B terminals on the MegaMoto and connect the 12V power source to BAT+ and GND to BAT


Nu är det dags för lite kodning med Arduino Uno. Vi vill programmera knapparna så att de kan styra när ställdonet ska förlängas och dras in. Strömmen börjar övervakas när ställdonet förlängs och detta låter oss observera om det överskrider den maximala strömgränsen eller inte. Om det passerar gränsen kommer ställdonet automatiskt att stanna tills du väljer att dra in det. Med tanke på att motorerna inuti ställdonen har en stor strömtopp när de först slås på, kommer koden vi anger att ha en kort fördröjning innan den börjar övervaka strömmen. Denna kod kommer att kunna läsa av när ställdonet har nått sina gränsbrytare, vilket är när strömmen sjunker till 0.

const int AktiveraPin = 8;
konstant int PWMPinA = 11;
const int PWMPinB = 3; // stift för Megamoto
const int knappVänster = 4;
const int knappHöger = 5;//knappar för att flytta motorn
konstant int CPin1 = A5; // motoråterkoppling

int vänsterspärr = LÅG;
int rightlatch = LOW;//motorlås (används för kodlogik)
int träffgränser = 0;//börja vid 0
int hitLimitsmax = 10;//värden för att veta om resegränserna har uppnåtts
longlastfeedbacktime = 0; // måste vara lång, annars överfylls tiden
int firstfeedbacktimedelay = 750; //första fördröjningen för att ignorera strömtopp
int återkopplingstidsfördröjning = 50; //fördröjning mellan återkopplingscykler, hur ofta du vill att motorn ska kontrolleras
currentTimefeedback = 0; // must be long, else it overflows unceTime = 300; //amount to debounce buttons, lower values makes the buttons more sensitivelong lastButtonpress = 0; // timer for debouncing
lång strömTidavstudsning = 0;
int CRaw = 0; // ingångsvärde för aktuella avläsningar
int maxAmpere = 0; // utlösningsgräns
bool dontExtend = false;
bool firstRun = true;
bool helt indragen = falskt;//programlogik
void setup()
{
Seriell.börja(9600);
pinMode(AktiveraPin, UTGÅNG);
pinMode(PWMPinA, UTGÅNG);
pinMode(PWMPinB, OUTPUT);//Ställ in motorutgångar
pinMode(knappVänster, INGÅNG);
pinMode(knappHöger, INGÅNG);//knappar
digitalWrite(knappVänster, HÖG);
digitalWrite(buttonRight, HIGH);//aktivera interna pullups
pinMode(CPin1, INPUT);//ställ in återkopplingsingång
aktuellTidavstängning = millis();
aktuellTidåterkoppling = 0;//Ställ in initiala tider
maxAmpere = 15;// STÄLL IN MAX STRÖM HÄR
}//avsluta installationen
void loop()
{
latchButtons();//kontrollera knappar, se om vi behöver flytta
moveMotor();//kontrollera spärrarna, flytta motorn in eller ut
}//avsluta huvudslingan
void latchButtons()
{
om (digitalRead(buttonLeft)==LOW)//vänster är framåt
{
currentTimedebounce = millis() - sistaKnapptryckning;// kontrollerar tiden sedan senaste tryckning
om (currentTimedebounce> debounceTime && dontExtend == false)//när du har utlöst dontExtend, ignorera alla framåttryckningar
{
leftlatch = !leftlatch;// Om motorn rör sig, stoppa, om den stoppas, börja röra sigfirstRun = true;// Ställ in firstRun-flaggan för att ignorera strömtopp
helt indragen = falsk; // när du rör dig framåt är du inte helt indragen
sista knapptryckning = millis();//lagra tid för senaste knapptryckning
återvända;
}//slut om
}//slut btnLEFT
om (digitalRead(buttonRight)==LOW)//höger är bakåt
{
currentTimedebounce = millis() - sistaKnapptryckning;// kontrollerar tiden sedan senaste tryckning
om (nuvarandeTidavstudsning> avstudsningstid)
{
rightlatch = !rightlatch;// Om motorn rör sig, stanna, om den stannar, börja röra sig
firstRun = true;// sätt firstRun-flaggan för att ignorera aktuell topp
sista knapptryckning = millis();//lagra tid för senaste knapptryckning
återvända;
}//slut om
}//slut bntnHÖGER
}//slutlåsknappar
void moveMotor()
{
om (vänsterspärr == HÖG) motorFramåt(255); //hastighet = 0-255
om (leftlatch == LOW) motorStop();
om (högerspärr == HÖG) motorBack(255); //hastighet = 0-255
om (rightlatch == LOW) motorStop();
}//slut på moveMotor
void motorForward(int speed)
{
medan (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, HÖG);
analogWrite(PWMPinA, hastighet);
analogWrite(PWMPinB, 0); // flytta motorn
om (firstRun == true) delay(firstfeedbacktimedelay); // större fördröjning för att ignorera strömtopp
annars delay(feedbacktimedelay); //liten fördröjning för att komma igång
fåÅterkoppling();
firstRun = false;
latchButtons();//kontrollera knapparna igen
}//slut medan
}//slut motorframåt

void motorBack (int speed)
{
medan (högerspärr == HÖG)
{
digitalWrite(EnablePin, HÖG);
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, hastighet); // flytta motorn
om (firstRun == true) delay(firstfeedbacktimedelay); // större fördröjning för att ignorera strömtopp
annars delay(feedbacktimedelay); //liten fördröjning för att komma igång
fåÅterkoppling();
firstRun = false;
latchButtons();//kontrollera knapparna igen
}//slut medan
dontExtend = false;//låt motorn förlängas igen efter att den har dragits in
}//slut motorTillbaka
void motorStop()
{
analogWrite(PWMPinA, 0);
analogWrite(PWMPinB, 0);
digitalWrite(EnablePin, LOW);
firstRun = true;//när motorn har stannat, återaktivera firstRun för att ta hänsyn till startströmstoppar
}//ändstoppMotor

void getFeedback()
{
CRaw = analogRead(CPin1); // Läs ström
om (CRaw == 0 && träffLimits < träffLimitsmax) träffLimits = träffLimits + 1;
annars hitLimits = 0; // kontrollera om motorn är vid gränserna och strömmen har slutat
om (hitLimits == hitLimitsmax && rightlatch == HÖG)
{
högerspärr = LÅG; // stoppa motorn
heltTillbakadragen = sant;
}//slut om
annars om (hitLimits == hitLimitsmax && leftlatch == HÖG)
{
vänsterspärr = LÅG;//stoppa motorn
träffgränser = 0;
}//slut om
om (CRaw> maxAmpere)
{
dontExtend = true;
vänsterspärr = LÅG; //stoppa om återkopplingen är över maximum
}//slut om
lastfeedbacktime = millis(); // lagra tidigare tid för att ta emot feedback
}//slut få återkoppling


Det nya och förbättrade PA-01 ministälldon (PA-14-uppgradering) är den nuvarande modellen vi erbjuder med en mängd olika fördelar. För en jämförelse, kolla in tabellerna nedan och uppgradera tryggt!

 

PA-01

PA-14

Dynamiska laddningsalternativ

16, 28, 56, 112, 169, 225 lb

35, 50, 75, 110, 150 lb

Högsta belastning

225 lb

150 lb

Snabbaste hastighet

3.54 "/sec

2.00"/sec

Inträngningsskydd

IP65

IP54

Strokealternativ

1 varv till 40 varv

1 varv till 40 varv

Halleffektåterkoppling

Frivillig

Inga

With this basic code, you will successfully monitor the feedback of your linear actuator. In Del II we will go more into how the code works and how to edit it to your liking. Hopefully, you found this post helpful and stay tuned for Part II in the coming weeks. If you'd like to order any units we used in this example or want to learn more about our produkter, snälla kontakta oss.