ccs 3 pwm

ب قرار شد در اين قسمت نحوه راه اندازي pwm رو توضيح بدم

دو راه براي راه اندازي pwm در کامپايلر ccs وجود داره يکي استفاده از فرمول هاي موجود براي بدست آوردن فرکانس و پريود تا اونها رو در دستورات کانفيگ pwm قرار بديم که براي اين روش ميتونيد به اين تاپيک مراجعه کنيد:
http://www.eca.ir/forum2/index.php?topic=82583.msg503696#new
توي تاپيک بالا دوست عزيزمون محمد حسين فايلي رو قرار داده که توضيحات خوبي درش ارائه شده.
حتي اگر اطلاعاتي در مورد pwm نداريد ميتونيد از فايلي که توي اين تاپيک قرار داده شده استفاده کنيد

راه ديگه براي راه اندازي pwm در کامپايلر CCS استفاده از WIZARD هستش که شما فرکانس دلخواهتون رو به اون ميديد و اون دستورات کانفيگ PWM رو براي شما مينويسه. که در ادامه مطلب اين روش رو آموزش ميديم

براي اينکار در محيط کامپايلر وارد NEW و از اونجا گزينه Project Wizard را بزنيد


بعد از ذخيره فايل پنجره زير باز ميشه


جلوي عبارت device ميکرو کنترل خودتون رو انتخواب ميکنيد (البته اين ويزارد براي ميکرو هاي 8 بيتي هستش) که در اينجا 16f877a هستش
و جلوي عبارت ocillator type نوع اسيلاتور رو مشخص ميکنيد که در اينجا چون از کريستال خارجي استفاده شده گزينه کريستال رو انتخواب ميکنيم

حالا از سربرگ هاي سمت چپ صفحه گزينه ccp & comparator رو انتخواب کنيد( مثل عکس زير)
همچنين گزينه pwm رو انتخواب کنيد تا تنظيمات pwm ظاهر شود
حال در قسمت set pwm frequency فرکانس دلخواهتان رو انتخواب کنيد (البته اين مقدار نبايد از 1220.7 هرتز کمتر و از 5mhz بيشتر باشه). که بنده فرکانس 50khz رو انتخواب کردم
و قسمت duty cycle هم که مشخصه duty cycle مورد نظرتون رو انتخواب کنيد و چون ديوتي سايکل از 0 تا 100 درصد است مقداري که ميديد نميتواند خارج از اين بازه باشه. در اينجا من 100 رو انتخواب کردم تا حداکثر عددي که ميتونم به دستور ديوتي سايکل بدم مشخص بشه


بعد از اين کارها روي کليد create project کليک کنيد تا دستورات کانفيگ نمايش داده بشن. همانند عکس زير:


خط 5 دستور کانفيگ timer2 که مخصوص pwm هستش رو کانفيگ ميکنه و خط 7 هم کانال ccp رو در حالت pwm قرار ميدهد
خط 8 هم همان خطي است که در طول برنامه ممکن است باهاش کار داشته باشيد.اين دستور همان دستوري است که ديوتي سايکل pwm خروجي رو مشخص ميکنه. همانطور که ميبينيد (عکس بالا) در حال حاضر عدد 397 را گرفته. اين عددي است که ويزارد داده و ما در ويزارد درصد ديوتي سايکل رو 100 داده بوديم پس اين مقدار 397 حداکثر مقداري است که دستور set_pwm1_dut ميتواند بپذيرد. پس شما در طول برنامه ميتوانيد عددي بين 0 تا 397 رو در اين دستور قرار بديد و ديوتي سايکل pwm خودتون رو مشخص کنيد.

حالا يه برنامه کامل براي دو pwm1 و pwm2 مينويسيم

[code=c]#include <16f877a.h>
#use delay(xtal=20Mhz)
#fuses HS,NOWDT 

#define sw_1 input(pin_b0)
#define sw_2 input(pin_b1)

int16 i=0,j=0;

void main()
{
setup_timer_2(T2_DIV_BY_1,99,1); //20.0 us overflow, 20.0 us interrupt

setup_ccp1(CCP_PWM);

setup_ccp2(CCP_PWM);

while(TRUE)
{
set_pwm2_duty((int16)198);

if( (sw_1) && (i<397) ) i++; 

if( (sw_2) && (i!=0) ) i--; 

while( (sw_1==1) && (sw_2==1) ) {}

set_pwm1_duty((int16)i); 

set_pwm2_duty((int16)j);

}
}[/code]

توي اين برنامه کانال ccp1 و کانال ccp2 بر روي pwm با فرکانس 50 کيلو هرتز تنظيم شده اند.

به کانال 2 ديوتي سايکل ثابت 50 درصد (198 نصف 397 است) داده شده است.

اگر کليد متصل به پين b0 را فشار دهيد يک واحد به i اضافه ميشود و اگر کليد متصل به پين b1 رو فشار دهيد يه واحد از i کم ميشود. سپس در يک while منتظر ميماند ( اگر اي while نباشد بخاطر سرعت زياد ميکرو کنترل با يکم فشار دادن کليد عدد به سرعت کم و زياد ميشه) اين while را گذاشتم تا براي هر واحد اضافه يا کم کردن i مجبور باشيم يک بار کليد رو فشار بديم

و در نهايت مقدار i در دستور ديوتي سايکل pwm 1 قرار ميگيرد

اين هم فايل پروتئوس و کد c مربوط به برنامه بالا
http://s2.picofile.com/file/7917913117/pwm.rar.html