Thaimicrotron.com : Home    
 
Servo Tester-1 แบบกดปุ่ม
Software PWM
 
     
  วัตถุประสงค์  
  -เพื่อศึกษาการทำงานแบบ software PWM โดยใช้ Timer1(สามารถเพิ่ม Servo ได้อีกหลายตัว)  
  -เพื่อศึกษาการทำงานเบื้องต้นของ Servo  
     
     
 
 
 
การทดสอบการทำงานของ Servo แบบกดปุ่ม
 
     
     
     
 
#case
#include <16F648A.h>
//#include <16F628.h>
//#include <16F88.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOBROWNOUT,NOWDT,NOPROTECT,NOLVP

//Gobal Variable
int nPluse=0; 
long PWMPeriod1=1392; 

#define MAX_PERIOD  20000
#define PWMOUT0     PIN_B3 


//Interrupt Timer1
#int_timer1
void TIMER1_isr()
{
   switch(nPluse)
   {
    case 0:
         set_timer1(65536-PWMPeriod1);
         output_high(PWMOUT0);
         nPluse++;
      break;
    case 1:// 20ms
         output_low(PWMOUT0);
         set_timer1(65536-(MAX_PERIOD-PWMPeriod1));
         nPluse=0;
      break;
   }
}

//*** mian ***
void main(void)
{
   delay_ms(200);
   setup_comparator(NC_NC_NC_NC);   //Input Digital

   set_tris_a(0B00111111);
   set_tris_b(0B00000010);

   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER1);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
    
    while(1)
    {
     //Turn left
     if(input(PIN_A2)==0)
     {
      delay_ms(100);
      if(input(PIN_A2)==0)
      {
       while(input(PIN_A2)==0);
       PWMPeriod1=1000;
      }
     }
     //Center
     if(input(PIN_A3)==0)
     {
      delay_ms(100);
      if(input(PIN_A3)==0)
      {
       while(input(PIN_A3)==0);
       PWMPeriod1=1392;
      }
     }
     //Turn right
     if(input(PIN_A4)==0)
     {
      delay_ms(100);
      if(input(PIN_A4)==0)
      {
       while(input(PIN_A4)==0);
       PWMPeriod1=1800;
      }
     }
    }
}
 
 
     
  ผลการทดลอง  
  -เมื่อเริ่มจ่ายไฟให้กับวงจร Servo จะหมุนมาอยู่ที่ต่ำแหน่งกลาง  
  - เมื่อกดปุ่ม 1 Servo จะหมุนไปทางซ้าย  
  - เมื่อกดปุ่ม 2 Servo จะหมุนกลับมาที่ต่ำแหน่งกลาง  
  - เมื่อกดปุ่ม 3 Servo จะหมุนไปทางขวา  
     
  NOTE:  
  - Servo บางรุ่นอาจจะหมุ่นกลับด้าน (ซ้ายเป็นขวา-ขวาเป็นซ้าย)  
  - เมื่อ Servo ทำงานจะดึงกระแสไฟมากอาจทำให้ MCU Reset ได้ ดังนั้น C 0.1,C100U ควรต่อไว้ใกล้ๆ ขา VDD ของ MCU  
  - หาก Servo ขนาดใหญ่ จะต้องแยกแหล่งจ่ายไฟ +5V ไว้ใช้กับ Servo อย่างเดียว ไม่ควรใช้ร่วมกับ MCU  
     
  Servo Tester-2 แบบปรับ VR  
 
SMITDH EMSOMBATศมิทธิ์ เอมสมบัติ