قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 06-10-2013, 11:23 AM المشاركة 1   
ha تكوين موجه pwm بدون أستخدام الاطراف ccp Twitter FaceBook Google+



سلام عليكم
اريد تكوين موجه pwm بدون أستخدام ccp
كبدايه الامر يحتاج الى استخدام تايمر0 او تايمر1
اكتبت كود تالي
كود:
#define on      1
#define off     0
sbit pwm at rb0_bit;
unsigned int cont=0;
void interrupt()
{
 if(T0IF_bit ==1)
  {
   T0IF_bit=0;
   cont=cont+50;
   if(cont<=500)pwm=on;
   if(cont>500 && cont<=1000)pwm=off;
   if(cont>1000)cont=0;
   tmr0=231;
  }
}
void main()
{
 intcon    =0b10100000;
 OPTION_REG=0b00000000 ;// Prescaler Rate1/2
 trisb=0;
 portb=0;
 PWM1_Init(1000);
 tmr0=231;// interrupt happened every 50usec
 while(1)
   {
     PWM1_Start();
    PWM1_Set_Duty(127);


   }
}
هنا فعلت تايمر0 وجعلت معامل التقسيم 1/2

وضعت للمقارنه pwm وأعطيت تردد 1000 هيرتز اي زمن =1ms=1000us
واليكم صوره دائره وهي تعمل

http://img02.arabsh.com/uploads/imag...414c64f60d.png
مشكله موجه لاتطابق موجه pwm بزمن ولكن تتطابقه بشكل فكلاهما duty_cycle=50% علما ان أستخدمت pwm لغرض حصول موجه مطابقه لـــ pwm لغرض فهم موضوع وأعطاء دقه بالموضوع
هل مشكله في قيمه tmr0
حيث جعلت قيمه الابتدائيه =231 بتالي يحتاج العد الى 25 لكي يصبح 256 وبما انه معامل تقسيم=1/2 هذا يعني يحتاج ان يصل الى 50 لان (50/2=25)
كما ترون بصوره
عرض موجه pwm=1ms
عرض موجه التي تم تكوينها=2.355ms
مع علم اريد موجه عرضها ايضا=1ms فكيف أتحكم بقيمه tmr0


وهذا مشروع
http://arabsh.com/files/0c37424c6cfb...t-ccp-rar.html

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 06-10-2013, 03:18 PM المشاركة 2   
افتراضي


ارجو مساعده ؟؟

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 635
نشاط [ WRHLAMDA ]
قوة السمعة:113
قديم 06-10-2013, 05:54 PM المشاركة 3   
افتراضي


السلام عليكم

مع اني لم افهم مالذي تحاول فعله او ماهي مشكلتك بالضبط

لكن

احب ان اوضح ان PWM ... لن يؤثر على اداء التايمر ... فهذا الاخير يعتمد على تردد الكرستالة وتغيير تردد PWM لن يؤثر على التايمر ... ببساطة لان PWM يعتمد على التايمر وليس العكس ... وحسب ما قمت بة من حسابات سريعة فانت تستخدم كرستالة 8 ميكاهيرتز


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 06-10-2013, 06:09 PM المشاركة 4   
افتراضي


السلام عليكم

مع اني لم افهم مالذي تحاول فعله او ماهي مشكلتك بالضبط

لكن

احب ان اوضح ان PWM ... لن يؤثر على اداء التايمر ... فهذا الاخير يعتمد على تردد الكرستالة وتغيير تردد PWM لن يؤثر على التايمر ... ببساطة لان PWM يعتمد على التايمر وليس العكس ... وحسب ما قمت بة من حسابات سريعة فانت تستخدم كرستالة 8 ميكاهيرتز
سلام عليكم
الف شكر لك اخي كريم
اخي كريم انا كنت افكر بخلق اشاره pwm كي استفاد منها في متحكمات التي ليس لها ccp فهنا أخذت متحكم فيه خاصيه pwm ولكن اخذت portb.f0 كمخرج لاشاره pwm ثم قارنت هذه الاشاره التي تم توليدها مع الاشاره pwm لكني لاحظت ان زمن موجه خارجه اكبر من زمن الاشاره pwm مع علم كلاهما نفس تردد
علما اني أستخدمت كرستاله 4mhz
وفي مثال أعلاه اختاريت تردد 1000 هيرتز لما شغلت pwm ظهرت اشاره صحيحه بزمن كلي =1ms
ولكن الاشاره الي ولدتها لكي تعمل مثل اشاره pwm زمنها كبير مع علم انها يجب ان تتطابق موجه الاصليه pwm

باختصار اخي كريم انا اردت انشاء موجه pwm يمكن اخرجها على اي بن من اي بورت واستخدمت pwm من ccp1 للمقارنه مع اشاره التي تم توليدها حتى اعرف اني بطريق صحيح او هناك مشاكل
ارجو أطلاع على مشروع ومساعده في تحديد مشكله لماذا زمن موجه كبير مع علم انه لازم=1ms
ولك جزيل شكر والتقدير


WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 635
نشاط [ WRHLAMDA ]
قوة السمعة:113
قديم 06-10-2013, 06:38 PM المشاركة 5   
افتراضي


السلام عليكم

اعتقد ان هناك تضارب في عمل PWM مع التايمر ربما عليك ايقاف استخدامه والعمل بالتايمر فقط للحصول على النتيجة المظبوطة ... حيث ان ال PWM يعتمد على التايمر وربما يقوم بتغيير محتوياتة اثناء عملة فيعطي هذا الخطا

تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 06-10-2013, 07:06 PM المشاركة 6   
افتراضي


السلام عليكم

اعتقد ان هناك تضارب في عمل PWM مع التايمر ربما عليك ايقاف استخدامه والعمل بالتايمر فقط للحصول على النتيجة المظبوطة ... حيث ان ال PWM يعتمد على التايمر وربما يقوم بتغيير محتوياتة اثناء عملة فيعطي هذا الخطا

تحياتي
السلام عليكم
عفوا اي تايمر تقصد ارجو التوضيح مع جزيل الشكروالتقدبر


WRHLAMDA
:: عضو فضي ::
تاريخ التسجيل: Feb 2005
المشاركات: 635
نشاط [ WRHLAMDA ]
قوة السمعة:113
قديم 06-10-2013, 07:14 PM المشاركة 7   
افتراضي


التايمر الذي تستخدمة لتوليد الموجة تايمر0


zamalkawi
:: مهندس جيد ::
تاريخ التسجيل: May 2013
المشاركات: 270
نشاط [ zamalkawi ]
قوة السمعة:0
قديم 07-10-2013, 07:10 AM المشاركة 8   
افتراضي


أخي، فكر في أن تجعل كود المقاطعة كالتالي:
كود:
void interrupt()
{
  if(T0IF_bit ==1) 
  {
    tmr0=231;
    T0IF_bit=0;
    cont=cont+50;
    if(cont<=500)pwm=on;
    if(cont>500 && cont<=1000)pwm=off;
    if(cont>1000)cont=0;
  }
}
بمعنى أن تغير قيمة العداد في بداية كود المقاطعة، وليس في نهايته
والسبب في هذا أن العداد يعد 25 فقط، أي 25 دورة تعليمات، بينما كود المقاطعة يحتاج أيضا عدد من دورات التعليمات، يصعب علي تقديرها، ولكنها بالتأكيد تمثل نسبة معتبرة من 25، أي أن تأثيرها سيكون واضحا جدا (بعكس مثلا لو العداد يعد 1000، فإضافة بضع عدات عليه لن يحدث فارقا كبيرا)

جرب وأخبرنا بالنتيجة

في حالة أن الكود يحتاج عدد دورات أكبر من 25 دورة، فلن يصل كود المقاطعة أبدا لنهايته، وفي هذه الحالة، عليك أن تقلل الرقم 231 بعض الشيء (مثلا تجعله 206 أو 156) وتغير الأرقام الأخرى بداخل كود المقاطعة بحيث تحصل على ال1 ميلي ثانية التي تريدها

جرب وأخبرنا بالنتيجة

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:02 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025