مرحبًا بك في الجزء الثاني من دليلنا حول كيفية مراقبة التغذية الراجعة للحمولة في مشغل خطي. في الجزء الأول استعرضنا عملية التوصيل والبرمجة الأساسية اللازمة للمثال. في دليل اليوم، سنتناول بمزيد من التفصيل الأقسام المختلفة من الشيفرة وبعض الطرق لتعديلها. سنبدأ بقسم latchButtons() من الشيفرة.
أول ما نريد رؤيته هو إزالة ارتداد الأزرار (debouncing)، بحيث عند الضغط على الزر الأيسر يجب حساب الوقت منذ ضغطة الزر السابقة. للقيام بذلك سنستخدم آخر قيمة مُخزنة في الشيفرة، ثم نستخدم الدالة millis() للتحقق من الوقت. عندما يكون الوقت أكبر من وقت إزالة الارتداد، ستتحقق الدالة عندها مما إذا كان المشغل قادرًا على التمدد. بمجرد تحقق الشرطين، ستتمكن الدالة من المتابعة.
if (digitalRead(buttonLeft)==LOW)//left is forwards
{
currentTimedebounce = millis() - lastButtonpress;// check time since last press
if (currentTimedebounce > debounceTime && dontExtend == false)//once you've tripped dontExtend, ignore all forwards presses
{
leftlatch = !leftlatch;// if motor is moving, stop, if stopped, start moving
firstRun = true;// set firstRun flag to ignore current spike
fullyRetracted = false; // once you move forwards, you are not fully retracted
lastButtonpress = millis();//store time of last button press
return;
}//end if
}//end btnLEFT
القسم التالي هو الحلقة داخل الدالة motorForward()، وتحديدًا التأخيرين. تبدأ الحلقة بتفعيل متحكم المحرك، والذي يبدأ تشغيل محرك المشغل الخطي. إذا كانت هذه هي المرة الأولى عبر الحلقة فسيكون هناك تأخير أكبر. يتجاهل التأخير ذروة التيار التي تحدث عند تفعيل المحرك. احرص على عدم ضبط التأخير كبيرًا جدًا لأنك لن تملك السيطرة عليه بمجرد البدء. عند بدء تشغيل المحرك، يُستخدم قسم getFeedback() للتحقق من حساس التيار.
while (dontExtend == false && leftlatch == HIGH) {
digitalWrite(EnablePin, HIGH);
analogWrite(PWMPinA, speeed);
analogWrite(PWMPinB, 0);//move motor
if (firstRun == true) delay(firstfeedbacktimedelay);
else delay(feedbacktimedelay); //small delay to get to speed
getFeedback();
firstRun = false;
latchButtons();
}//end while

بعد ذلك، سنستعرض الأقسام في روتين get feedback() الذي يبدأ بقراءة الطرف التناظري المتصل بالحساس. يبدأ بفحص ما إذا كان المحرك عند حدوده، وتعرف الشيفرة ذلك عندما تكون قراءة التيار 0.
لسوء الحظ، قد يحدث أحيانًا قياس خاطئ، لذا من المهم تعيين عدّاد. يجب أن يعدّ هذا الكود حتى قيمة hitLimitsmax قبل أن يتوقف المحرك، وإذا عدّ أقل من ذلك فسيُعاد ضبطه.
if (CRaw == 0 && hitLimits < hitLimitsmax) hitLimits = hitLimits + 1;
else hitLimits = 0; // check to see if the motor is at the limits and the current has stopped
بعد ذلك تأتي حدود الضربات. عندما يتحرك محرك المشغل الخطي للأمام ويصل إلى الحد، سيقوم بإيقاف القفل الأيمن. وإذا تحرك المحرك للخلف، سيقوم بإيقاف القفل الأيسر. الكود أدناه يُظهر القفل الأيمن فقط، لكن كود القفل الأيسر مماثل.
if (hitLimits == hitLimitsmax && rightlatch == HIGH) {
rightlatch = LOW;
hitLimits = 0;
}//end if
يتم فحص حد التيار وتعريف الحد الأقصى. إذا تم تجاوز الحد فسيتم إيقاف القفل الأيسر ولن يستمر المحرك في التمدد. لبدء التمدد مرة أخرى، يجب عكس دوران المحرك.
if (CRaw > maxAmps) {
dontExtend = true;
leftlatch = LOW; //stop if feedback is over maximum
}//end if
وبذلك نصل إلى نهاية الجزء الثاني من مراقبة التغذية الراجعة للحمولة لمشغل خطي. تطرّقنا هذه المرة بالتفصيل إلى أقسام محددة من الشيفرة وشرحنا كيفية عملها. إذا رغبت في طلب أي من الوحدات التي استخدمناها في هذا المثال، يمكنك الطلب عبر الإنترنت أو التواصل معنا للطلب عبر الهاتف. وإذا كانت لديك أي أسئلة أو استفسارات بخصوص منتجاتنا فنحن دائمًا جاهزون للمساعدة.