1- الكود سليم وهذا عمله:
المقاومة المتغيرة تزيد أو تنقص في عرض نبضة التردد الخارج من الرجل للمتحكم:

2- الآن هناك ملاحظة:
في الكود تعليمة تقسم قيمة المتغير بسعة 10 بت على 4 وهذا حتى يكون الناتج على شكل رقم تنائي 8 بت:
temp_duty = (temp_res/4); // Convert the 10 bit value to 8 bits
لماذا هذه التعليمة؟
ربما واضع الكود يريد إظهار ناتج التحويل على البورت B
هو هيأ البورت B ليكون كخرج بالتعليمة ;TRISB=0
لكن ينقصه تعليمة العرض وهي:
;PORTB = temp_duty
ومكانها في الكود يجب أن يكون هنا:
PWM1_set_Duty(temp_duty); // Set the duty value
Delay_ms(50); // Slow everything down a little
;PORTB = temp_duty
مجرد احتمال..
|
يالنسبة ل
temp_duty = (temp_res/4);
فهي مهمه للغاية
انا الان فهمتها بعد ما استخدمت نوع آخر من المتحكمات وهو
pic 16f716
واجهتني مشاكل بان سرعة الموتور بطيئة وليس مثل 877 و 887
ولما شفت الداتا شيت وجدت مكتوب عند البك 887 و 778 ان مدخل الانالوج هو 10 بت
و على خلاف المتحكم 716 فهو 8 بت
في هذا الكود
temp_duty = (temp_res/4);
قسمنا على اربعه لان 877 و 887 هو عشره بت اي تعادل 1024
اما الثمانية بت فتساوي 256
انا المشكله الي حصلت معي في البك 716 هو انني قسمت على اربعة في الثمانيه بت فاصبحت القيمه 64 بت
وعند زياده السرعة لاقصى سرعة ( خمسة فولت )
لسا duty cycle 50%
فقمت بكتابه الامر من غير قسمه
temp_duty = (temp_res);
والامور تمام
وايضا ممكن تضرب القيمه في 2 مثلا لو حاب ان عند 2.5 فولت يصل ال duty cycle
الى 100%
احيانا ممكن تحتاج مثل ذلك