การควบคุม DC MOTOR มีประโยชน์ในด้านสามารถควบคุมทิศทาง และความเร็วในการเคลื่อนที่ ซึ่งจะสามารถพัฒนาไปเป็นการควบคุมแบบป้อนกลับ (Feed Back Control)
#include<18F4431.h>
#define CLOCK_SP 20000000 // ความเร็วสัญญาณนาฬิกา
#fuses HS // โหมดการทำงานแบบ High Speed
#fuses NOLVP,NOWDT // No Low Voltage Program, No Watchdog timer
#fuses NOPROTECT // Code no protection
#use delay (clock=CLOCK_SP) // ใช้งานฟังก์ชัน delay_ms() & delay_us()
#use rs232(baud=9600,xmit= PIN_C6,rcv= PIN_C7 ) // ใช้งาน module RS232
void forward(){
output_high(pin_c4);
output_low(pin_c5);
} // ฟังก์ชันควบคุมการเคลื่อนที่ไปข้างหน้า
void backward(){
output_low(pin_c4);
output_high(pin_c5);
} // ฟังก์ชันควบคุมการเคลื่อนที่ถอยกลับ
void stop(){
output_low(pin_c4);
output_low(pin_c5);
} // ฟังก์ชันหยุดการเคลื่อนที่
void main(void){
enable_interrupts(GLOBAL); //เปิดการใช้งาน interrupt รวม
enable_interrupts(INT_CCP1); //เปิดการใช้งาน interrupt CCP1
setup_ccp1(CCP_PWM); // กำหนดค่า CCP1 ทำงานโหมด PWM
setup_timer_2(T2_DIV_BY_1, 255, 1); //กำหนดค่า Timer2 ควบคุมความถี่ของ PWM
set_timer2(0); //กำหนดค่า Timer2 เป็น 0
while(true){
if(!input(pin_a0)){ //ตรวจสอบ input pin a0 ถ้า Low (กด switch)
forward(); //เคลื่อนที่ไปข้างหน้า
set_pwm1_duty(1000); //กำหนดความเร็วโดยปรับ duty Cycle 0 - 1023
}
if(!input(pin_a1)){ //ตรวจสอบ input pin a1 ถ้า Low (กด switch)
backward(); //เคลื่อนที่ถอยหลัง
set_pwm1_duty(1000); //กำหนดความเร็วโดยปรับ duty Cycle 0 - 1023
}
if(!input(pin_a2)){ //ตรวจสอบ input pin a2 ถ้า Low (กด switch)
stop(); //หยุดการเคลื่อนที่
}
}
}