مكتبة PWM تتضمن أربع دوال وهى :
الدالة : PWM1_Init (const long freq) : لتهيئة موديول PWM للعمل بتردد حامل يتحدد بالبارامتر freq .
الدالة : PWM1_Set_Duty (unsigned short duty_ratio) : هذه الدالة تحدد (تعين) دورة الخدمة duty cycle من خلال البارامتر duty_ratioN
, هذا البارامتر يمكن أن يأخذ القيم من 0 إلى 255, حيث الصفر تمثل 0% تمثل 100% لدورة الخمة .
الشكل التالى يبين سلوك إشارة PWM , تبعا لدورة الخدمة , العلاقة بين Fpwmو Tpwm :
وأخيرا الدوال : PWM1_Start () و PWM1_Stop () والتى تمكن أو لا تمكن أشارة PWM على الترتيب
كود:
void PWM1_Init(const long freq);
كود:
void PWM1_Set_Duty(unsigned short duty_ratio);
كود:
void PWM1_Start(void);
كود:
void PWM1_Stop(void);
لفهم طريقة التنفيذ راقب وحلل وحاكى البرنامج التالى :
كود:
// Declaring Constants for sine wave.
const unsigned short Sine_Wave [20] =
{
127, 146, 163, 177, 185, 189, 185,
177, 163, 146, 127, 107, 90, 76,
68, 65, 68, 76, 90, 107
};
void main (void)
{
// Declaration of variables.
unsigned short n = 0;
// Set the PWM module to Fpwm = 15.625K Hz
PWM1_Init (15625);
// Start of PWM signal.
PWM1_Start ();
while (1) // infinite loop.
{
// Loop for the 20 samples of a sine wave cycle.
for (n = 0; n <20; n ++)
{
// Changing the duty cycle of the PWM.
PWM1_Set_Duty (Sine_Wave [n]);
// Delay 50u sec.
delay_us (50);
}
}
}
لتنفيذ المحاكاة تحتاح للأجهزة التالية :