วันอาทิตย์ที่ 3 ตุลาคม พ.ศ. 2553

Lab10: การควบคุม DC MOTOR


การควบคุม 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();                                   //หยุดการเคลื่อนที่
}
}
}