תמונה של גשר H של MegaMoto Plus עבור ארדואינו דגם: LC-80 מאת Progressive Automations

חלק א': כיצד לנטר משוב של מפעיל ליניארי?

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 שלנו מיני מפעיל), א ארדואינו אונו ו-א ספק כוח של לפחות 12 וולט.

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

כדי להתחיל, נצטרך לבצע חיווט כדי לחבר את הכל יחד. התחילו בחיבור ה-MegaMoto לארדואינו, פשוט הניחו את ה-MegaMoto מעל ה-Uno לשם כך. לאחר מכן חברו חוט מהדק BAT+ שנמצא ב-MegaMoto לפין Vin שנמצא ב-Uno.

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


כעת עלינו לחבר את חוטי המפעילים הליניאריים להדקים A ו-B במגה-מוטו ולחבר את מקור הכוח 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


עכשיו הגיע הזמן לקצת קידוד עם הארדואינו אונו. אנחנו רוצים לתכנת את הכפתורים כך שיוכלו לשלוט מתי המפעיל ייפתח ונסוג. הזרם יתחיל להיות מנוטר ברגע שהמפעיל ייפתח וזה יאפשר לנו לראות אם הוא עובר את מגבלת הזרם המרבית או לא. אם הוא עובר את הגבול, המפעיל יעצור אוטומטית עד שתבחרו לסגת. בהתחשב בכך שלמנועים בתוך המפעילים יש עלייה גדולה בזרם כשהם מופעלים לראשונה, לקוד שנזין תהיה השהייה קצרה לפני שהוא יתחיל לנטר את הזרם. קוד זה יוכל לקרוא מתי המפעיל הגיע למתגי הגבול שלו, כלומר כאשר הזרם יורד ל-0.

const int EnablePin = 8;
קבוע int PWMPinA = 11;
const int PWMPinB = 3; // סיכות עבור Megamoto
const int כפתורשמאל = 4;
const int buttonRight = 5;//כפתורים להזזת המנוע
const int CPin1 = A5; // משוב מנוע

int leftlatch = נמוך;
int rightlatch = LOW;// נעילת מנוע (משמשת להיגיון קוד)
int hitLimits = 0;//התחל ב-0
int hitLimitsmax = 10;//ערכים כדי לדעת אם הושגו מגבלות הנסיעה
זמן משוב ארוך = 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; // לוגיקת תוכנית
הגדרת ריק ()
{
סידורי.התחלה(9600);
מצב פינים (EnablePin, פלט);
מצב פינים (PWMPinA, פלט);
pinMode(PWMPinB, OUTPUT);//הגדרת יציאות מנוע
מצב_pin(כפתור_שמאלי, קלט);
pinMode(buttonRight, INPUT);//כפתורים
digitalWrite(כפתורשמאל, גבוה);
digitalWrite(buttonRight, HIGH);//הפעלת משיכות פנימיות
pinMode(CPin1, INPUT);//הגדרת קלט משוב
נוכחיזמןהפסקה = מילישניות();
משוב זמן נוכחי = 0; // הגדרת זמנים ראשוניים
maxAmps = 15;// הגדר כאן את הזרם המקסימלי
}//סיום ההתקנה
לולאת ריק ()
{
latchButtons();// בדוק כפתורים, ראה אם אנחנו צריכים לזוז
moveMotor();//בדיקת בריחים, הזזת מנוע פנימה או החוצה
}//סוף לולאה ראשית
כפתורי void latch()
{
אם (digitalRead(buttonLeft)==LOW)// left הוא קדימה
{
currentTimedebounce = millis() - lastButtonpress;// בדיקת זמן מאז הלחיצה האחרונה
אם (currentTimedebounce> debounceTime && dontExtend == false) // לאחר שהפעלת את dontExtend, התעלם מכל הלחיצות קדימה
{
leftlatch = !leftlatch;// אם המנוע נע, עצור, אם נעצר, התחל לנוע firstRun = true;// הגדר את דגל firstRun להתעלם מקפיצת הזרם
fullyRetracted = false; // ברגע שאתה זז קדימה, אתה לא נסוג לחלוטין
לחיצת כפתור אחרונה = millise(); // אחסון זמן הלחיצה האחרונה על הכפתור
לַחֲזוֹר;
}//סוף אם
}//סוף btnLEFT
אם (digitalRead(buttonRight)==LOW)//ימין הוא הפוך
{
currentTimedebounce = millis() - lastButtonpress;// בדיקת זמן מאז הלחיצה האחרונה
אם (זמן_הפסקה_current>_זמן_הפסקה)
{
rightlatch = !rightlatch;// אם המנוע נע, עצור, אם נעצר, התחל לנוע
firstRun = true;// הגדר את דגל firstRun להתעלם משיא הנוכחי
לחיצת כפתור אחרונה = millise(); // אחסון זמן הלחיצה האחרונה על הכפתור
לַחֲזוֹר;
}//סוף אם
}//סוף btnRIGHT
}//סוף כפתורי תפס
ריק הזזת מנוע ()
{
אם (leftlatch == HIGH) motorForward(255); //מהירות = 0-255
אם (leftlatch == LOW) מנועStop();
אם (rightlatch == HIGH) motorBack(255); //מהירות = 0-255
אם (rightlatch == LOW) מנועStop();
}//סוף תנועהמנוע
מנוע חלל קדימה (מהירות int)
{
בזמן (dontExtend == false && leftlatch == HIGH)
{
digitalWrite(EnablePin, גבוה);
analogWrite(PWMPinA, מהירות);
analogWrite(PWMPinB, 0);//להזיז את המנוע
אם (firstRun == true) delay(firstfeedbacktimedelay); // עיכוב גדול יותר כדי להתעלם מעלייה חדה בזרם
אחרת עיכוב (משוב זמן עיכוב); // עיכוב קטן כדי להגיע למהירות
קבל משוב();
הפעלה ראשונה = שקר;
latchButtons();//בדוק שוב את הכפתורים
}//סוף בזמן
}//סוף מנוע קדימה

מנוע חלל חזור (מהירות int)
{
בזמן (ימין == גבוה)
{
digitalWrite(EnablePin, גבוה);
אנלוגי כתיבה(PWMPinA, 0);
analogWrite(PWMPinB, speeed);//הזזת מנוע
אם (firstRun == true) delay(firstfeedbacktimedelay);// עיכוב גדול יותר כדי להתעלם מעלייה חדה בזרם
אחרת עיכוב (משוב זמן עיכוב); // עיכוב קטן כדי להגיע למהירות
קבל משוב();
הפעלה ראשונה = שקר;
latchButtons();//בדוק שוב את הכפתורים
}//סוף בזמן
dontExtend = false;// אפשר למנוע להתארך שוב, לאחר שהוא נסוג לאחור
}//סוף מנועחזור
void motorStop()
{
אנלוגי כתיבה(PWMPinA, 0);
אנלוגי כתיבה(PWMPinB, 0);
כתיבה דיגיטלית (EnablePin, נמוך);
firstRun = true;//לאחר שהמנוע עצר, הפעל מחדש את firstRun כדי להתחשב בקפיצות זרם האתחול
}//עצירת קצהמנוע

void getFeedback()
{
CRaw = analogRead(CPin1); // קריאה נוכחית
אם (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
אחרת hitLimits = 0; // בדוק אם המנוע נמצא בגבולות והזרם הפסיק
אם (hitLimits == hitLimitsmax ו- rightlatch == HIGH)
{
נעילה ימנית = נמוך; // עצירת מנוע
נסוג לחלוטין = נכון;
}//סוף אם
אחרת אם (hitLimits == hitLimitsmax ו- leftlatch == HIGH)
{
שמאליאטץ' = נמוך;//עצור את המנוע
גבולות_הגעה = 0;
}//סוף אם
אם (CRaw> maxAmps)
{
dontExtend = true;
leftlatch = LOW; //עצור אם המשוב מעל המקסימום
}//סוף אם
lastfeedbacktime = millis(); // אחסון הזמן הקודם לקבלת משוב
}//סוף קבל משוב


החדש והמשופר מפעיל מיני 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

אפשרויות משיכה

אינץ' אחד עד 40 אינץ'

אינץ' אחד עד 40 אינץ'

משוב אפקט הול

אופציונלי

לֹא

With this basic code, you will successfully monitor the feedback of your linear actuator. In חלק ב' 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 מוצריםבבקשה צרו קשר.