Снимка на MegaMoto Plus H-мост за Arduino Модел: LC-80 от Progressive Automations

Част I: Как да следим обратната връзка на линеен задвижващ механизъм?

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 МегаМото Плюс, а линеен задвижващ механизъм (използваме нашия PA-14 мини задвижващ механизъм), един Ардуино Уно и един захранване от поне 12V.

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

За да започнем, ще трябва да направим окабеляването, за да свържем всичко заедно. Започнете, като включите MegaMoto в Arduino, просто поставете MegaMoto върху Uno, за да го направите. След това свържете проводник от BAT+ терминала, който се намира на MegaMoto, към Vin пина, който се намира на Uno.

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


Сега трябва да свържем кабелите на линейните задвижващи механизми към клемите A и B на MegaMoto и да свържем 12V захранващия източник към BAT+ и GND към BAT-. Ще трябва също да свържем два бутона за управление, като ги свържем между неизползван пин и GND. Препоръчваме да свържете бутоните към платка.

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


Сега е време за малко кодиране с Arduino Uno. Искаме да програмираме бутоните така, че да могат да контролират кога задвижващият механизъм ще се издигне и прибере. Токът ще започне да се следи, след като задвижващият механизъм се издигне, и това ще ни позволи да наблюдаваме дали надвишава максималния лимит на тока или не. Ако премине лимита, задвижващият механизъм автоматично ще спре, докато не изберете да го приберете. Като се има предвид, че двигателите вътре в задвижващите механизми имат голям пик на тока, когато се захранват за първи път, кодът, който въвеждаме, ще има кратко забавяне, преди да започне да следи тока. Този код ще може да отчете кога задвижващият механизъм е достигнал крайните си изключватели, което е когато токът падне до 0.

const int EnablePin = 8;
константа int PWMPinA = 11;
const int PWMPinB = 3; // щифтове за Megamoto
const int бутонLeft = 4;
const int buttonRight = 5;//бутони за движение на мотора
const int CPin1 = A5; // обратна връзка от двигателя

int leftlatch = LOW;
int rightlatch = LOW;//заключвания на двигателя (използвани за логиката на кода)
int hitLimits = 0;//започва от 0
int hitLimitsmax = 10;//стойности, за да се разбере дали са достигнати ограниченията за пътуване
longlastfeedbacktime = 0; // трябва да е дълго, в противен случай препълва
int firstfeedbacktimedelay = 750; //първо забавяне за игнориране на текущия пик
int feedbacktimedelay = 50; //забавяне между циклите на обратна връзка, колко често искате двигателят да бъде проверяван
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
дълго текущоВремеЗаБуждане = 0;
int CRaw = 0; // входна стойност за текущите показания
int maxAmps = 0; // ограничение на изключването
bool dontExtend = false;
bool firstRun = true;
bool fullyRetracted = false;//логика на програмата
невалидна настройка()
{
Serial.begin(9600);
pinMode(EnablePin, OUTPUT);
pinMode(PWMPinA, ИЗХОД);
pinMode(PWMPinB, OUTPUT);//Задаване на изходите на двигателя
pinMode(бутонЛяво, INPUT);
pinMode(бутонRight, INPUT);//бутони
digitalWrite(бутонЛяво, HIGH);
digitalWrite(buttonRight, HIGH);//активиране на вътрешни издърпвания
pinMode(CPin1, INPUT);//задаване на вход за обратна връзка
текущоВремеОтказ = милис();
currentTimefeedback = 0;//Задаване на начални времена
maxAmps = 15;// ЗАДАВАЙТЕ МАКСИМАЛЕН ТОК ТУК
}//край на настройката
невалиден цикъл()
{
latchButtons();//проверка на бутоните, дали трябва да се преместят
moveMotor();//проверка на ключалките, преместване на двигателя навътре или навън
}//край на основния цикъл
невалиден latchButtons()
{
ако (digitalRead(buttonLeft)==LOW)//лявото е напред
{
currentTimedebounce = millis() - lastButtonpress;// проверява времето от последното натискане
ако (currentTimedebounce> debounceTime && dontExtend == false)//след като сте активирали dontExtend, игнорирайте всички натискания напред
{
leftlatch = !leftlatch;// ако двигателят се движи, спира, ако е спрял, започва движениеfirstRun = true;// задава флага firstRun, за да игнорира текущия пик
fullyRetracted = false; // след като се придвижите напред, не сте напълно прибрани
lastButtonpress = millis();//запазване на времето на последното натискане на бутон
връщане;
}//край ако
}//край на btnLEFT
ако (digitalRead(buttonRight)==LOW)//дясното е назад
{
currentTimedebounce = millis() - lastButtonpress;// проверява времето от последното натискане
ако (текущоВремеЗаОтказване>ВремеЗаОтказване)
{
rightlatch = !rightlatch;// ако двигателят се движи, спиране, ако е спрял, започване на движение
firstRun = true;// задава флага firstRun, за да игнорира текущия пик
lastButtonpress = millis();//запазване на времето на последното натискане на бутон
връщане;
}//край ако
}//край на бутона RIGHT
}//край на latchButtons
невалиден moveMotor()
{
ако (leftlatch == HIGH) motorForward(255); //скорост = 0-255
ако (leftlatch == LOW) motorStop();
ако (rightlatch == HIGH) motorBack(255); //скорост = 0-255
ако (rightlatch == LOW) motorStop();
}//край на moveMotor
void motorForward(int speed)
{
докато (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, скорост);
analogWrite(PWMPinB, 0);//преместване на двигателя
ако (firstRun == true) delay(firstfeedbacktimedelay); // по-голямо забавяне, за да се игнорира пикът на тока
else delay(feedbacktimedelay); //малко забавяне за достигане на скорост
getFeedback();
първоИзпълнение = невярно;
latchButtons();//проверка на бутоните отново
}//край докато
}//край на двигателяНапред

void motorBack (int speed)
{
докато (дясно заключване == ВИСОКО)
{
digitalWrite(EnablePin, HIGH);
аналогов запис(PWMPinA, 0);
analogWrite(PWMPinB, speeed);//преместване на двигателя
ако (firstRun == true) delay(firstfeedbacktimedelay);// по-голямо забавяне, за да се игнорира пикът на тока
else delay(feedbacktimedelay); //малко забавяне за достигане на скорост
getFeedback();
първоИзпълнение = невярно;
latchButtons();//проверка на бутоните отново
}//край докато
dontExtend = false;//позволява на двигателя да се разтегне отново, след като е бил прибран
}//край на двигателяBack
невалиден motorStop()
{
аналогов запис(PWMPinA, 0);
аналоговоЗаписване(PWMPinB, 0);
digitalWrite(EnablePin, LOW);
firstRun = true;//след като двигателят спре, активирайте отново firstRun, за да отчетете пиковете на тока при стартиране
}//край на спиране на двигателя

невалидно получаване на обратна връзка()
{
CRaw = analogRead(CPin1); // Четене на ток
ако (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
иначе hitLimits = 0; // проверява дали двигателят е на границите си и токът е спрял
ако (hitLimits == hitLimitsmax && rightlatch == HIGH)
{
rightlatch = LOW; // спиране на двигателя
напълноПрибран = вярно;
}//край ако
иначе ако (hitLimits == hitLimitsmax && leftlatch == HIGH)
{
leftlatch = LOW;//спиране на двигателя
hitLimits = 0;
}//край ако
ако (CRaw> maxAmps)
{
dontExtend = true;
leftlatch = LOW; //спиране, ако обратната връзка е над максимума
}//край ако
lastfeedbacktime = millis();//съхраняване на предишното време за получаване на обратна връзка
}//край на getFeedback


Новото и подобреното Мини задвижващ механизъм PA-01 (PA-14 ъпгрейд) е текущият модел, който предлагаме с разнообразни допълнителни предимства. За сравнение, разгледайте таблиците по-долу и надстройте с увереност!

 

PA-01

PA-14

Опции за динамично натоварване

16, 28, 56, 112, 169, 225 фунта

35, 50, 75, 110, 150 фунта

Най-високо натоварване

225 lb

150 lb

Най-бърза скорост

3.54 "/sec

2.00"/sec

Защита от проникване

IP65

IP54

Опции за инсулт

от 1 инч до 40 инча

от 1 инч до 40 инча

Обратна връзка с ефекта на Хол

По избор

Не

With this basic code, you will successfully monitor the feedback of your linear actuator. In Част 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 продукти, моля свържете се с нас.