ברוכים הבאים לחלק ב' של המדריך שלנו בנושא כיצד לנטר את משוב העומס של מפעיל ליניאריב חלק א' עברנו על תהליך החיווט ועל הקידוד הבסיסי הנדרש לדוגמה. במדריך של היום, נעבור בפירוט על החלקים השונים של הקידוד וכן על כמה דרכים לעריכה שלו. ראשית, נבחן את מקטע הקוד latchButtons().
הדבר הראשון שאנחנו רוצים לראות הוא את זמן הניתוק של הכפתור, כך שכאשר נלחץ על הכפתור השמאלי יש לחשב את הזמן הזה מאז לחיצת הכפתור הקודמת. לשם כך נצטרך להשתמש בערך האחרון שאוחסן בקוד, ולאחר מכן להשתמש בפונקציית millis() כדי לבדוק את הזמן. כאשר הזמן גדול מזמן הניתוק, הפונקציה תבדוק אם המפעיל מסוגל להתארך. לאחר ששני התנאים מתקיימים, הפונקציה תוכל להמשיך.
אם (digitalRead(buttonLeft)==LOW)// left הוא קדימה
{
currentTimedebounce = millis() - lastButtonpress;// בדיקת זמן מאז הלחיצה האחרונה
אם (currentTimedebounce> debounceTime && dontExtend == false) // לאחר שהפעלת את dontExtend, התעלם מכל הלחיצות קדימה
{
leftlatch = !leftlatch;// אם המנוע נע, עצור, אם נעצר, התחל לנוע
firstRun = true;// הגדר את דגל firstRun להתעלם משיא הנוכחי
fullyRetracted = false; // ברגע שאתה זז קדימה, אתה לא נסוג לחלוטין
לחיצת כפתור אחרונה = millise(); // אחסון זמן הלחיצה האחרונה על הכפתור
לַחֲזוֹר;
}//סוף אם
}//סוף btnLEFT
החלק הבא הוא הלולאה בתוך הפונקציה motorForward(), ובפרט שתי ההשהיות. הלולאה מתחילה על ידי הפעלת בקר המנוע, אשר מפעיל את מנוע המפעיל הליניארי. אם זהו הלולאה הראשונה דרך הלולאה, יהיה השהייה גדולה יותר. ההשהיה מתעלמת מעלייה חדה בזרם המתרחשת כאשר המנוע מופעל. ודא שלא להגדיר את ההשהיה גדולה מדי מכיוון שלא תהיה לך שליטה עליה לאחר שהיא מתחילה. כאשר המנוע מתחיל, החלק getFeedback() משמש לבדיקת חיישן הזרם.
בעוד (dontExtend == false && leftlatch == HIGH) {
digitalWrite(EnablePin, גבוה);
analogWrite(PWMPinA, מהירות);
analogWrite(PWMPinB, 0);//להזיז את המנוע
אם (firstRun == true) delay(firstfeedbacktimedelay);
אחרת עיכוב (משוב זמן עיכוב); // עיכוב קטן כדי להגיע למהירות
קבל משוב();
הפעלה ראשונה = שקר;
כפתורי latch();
}//סוף בזמן

בשלב הבא, נעבור על הסעיפים בשגרת get feedback(), שמתחילה בקריאת הפין האנלוגי שמתחבר לחיישן. היא מתחילה בבדיקה האם המנוע נמצא בגבולותיו והקוד יודע את גבולותיו כאשר הזרם קורא 0.
Unfortunately, there can be a false reading sometimes so it's important to set a counter. This counter code has to count up to the hitLimitsmax before the motor stops and if it counts less then that it will reset.
אם (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
אחרת hitLimits = 0; // בדוק אם המנוע נמצא בגבולות והזרם הפסיק
אחרי זה, יש גבולות פגיעה. כאשר ה מפעיל ליניארי המנוע נע קדימה וכאשר הוא מגיע לקצה הגבול, הוא יכבה את הבריח הימני. אם המנוע נע אחורה, הוא יכבה את הבריח השמאלי. הקוד שלהלן מציג רק את הבריח הימני, אך קוד הבריח השמאלי זהה.
אם (hitLimits == hitLimitsmax ו- rightlatch == HIGH) {
תפס ימני = נמוך;
גבולות_הגעה = 0;
}//סוף אם
מגבלת הזרם נבדקת ומגבלה מקסימלית מוגדרת. אם הגבול חורג, אזי התפס השמאלי יכבה והמנוע לא ייפתח עוד. על מנת להפעיל את ההארכה, יש להטות את המנוע לאחור.
אם (CRaw> maxAmps) {
dontExtend = true;
leftlatch = LOW; //עצור אם המשוב מעל המקסימום
}//סוף אם
זה מביא אותנו לסוף החלק ב' של ניטור משוב העומס של מפעיל ליניארי. We went into detail on specific sections of the code this time and explained how they work. If you'd like to order any units we used in this example you can order online or צרו קשר להזמנה טלפונית. אם יש לכם שאלות או חששות בנוגע למוצרים שלנו, אנו תמיד מוכנים לעזור.