Example 12 Pulse-Width Modulation (PWM): Motors and Servos Lecture L8.1
PIM_9DP256 Block Diagram PWM Port
PWM Pins PP0 – PP7 Pins 4,3,2,1, 112,111,110,109
PWM Pins PP0 – PP7 Pins 4,3,2,1, 112,111,110,109
Motor Driver Circuit Solid-state relay
G3VM-61B1 MOS FET Relays
Motor – Generator Experiment
Using an AC Relay
Pulse-Width Modulation
// Example 12a: Motor demo #include /* common defines and macros */ #include /* derivative information */ #include "main_asm.h" /* interface to the assembly module */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b" void main(void) { int val; int speed; PLL_init();// set system clock frequency to 24 MHz ad0_enable(); // enable a/d converter 0 lcd_init(); // enable lcd motor1_init(); // enable 8-bit pwm1 for motor while(1) { val = ad0conv(7); // speed = val >> 2;// set_lcd_addr(0x40);// 2nd line of lcd display write_int_lcd(speed);// display speed motor1(speed); // set motor speed ms_delay(100);// delay 100 ms }
Controlling the Position of a Servo using PWM
// Example 12b: Servo demo #include /* common defines and macros */ #include /* derivative information */ #include "main_asm.h" /* interface to the assembly module */ #pragma LINK_INFO DERIVATIVE "mc9s12dp256b" void main(void) { int val; int width; PLL_init();// set system clock frequency to 24 MHz ad0_enable(); // enable a/d converter 0 lcd_init(); // enable lcd servo1_init(); // enable pwm1 for servo while(1) { val = ad0conv(7); // width = (val << 1) ; // width: set_lcd_addr(0x40);// line 2 of lcd display write_int_lcd(width);// display width on lcd set_servo1(width); // move servo to pos width ms_delay(100);// delay 100 ms }