View Single Post
Old 26-04-2009, 02:57 PM   #1
motngayno10
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 4
:
hỏi về pwm trong ccs

các bác ơi cho em hỏi e dùng pwm cho 2 động cơ với thiết lập như sau
SETUP_CCP1(CCP_PWM); //THIEP LAP CHE DO PWM
SETUP_CCP2(CCP_PWM); //THIEP LAP CHE DO PWM
SETUP_TIMER_2(T2_DIV_BY_4,255,1);//THIET LAP TIMER2 DUNG CHO PWM

nhưng khi cài đặt
SET_PWM2_DUTY(0);
SET_PWM1_DUTY(0);
thì động cơ lại quay nhanh hết mức .thế là sai phải không.tại sao thế nhỉ

đây là đoạn ct của e
Code:
#include <16f877.h>
#fuses  XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NODEBUG
#DEVICE  *=16,ADC=8
#USE DELAY(CLOCK=4000000)
#USE FAST_IO(B)
INT8 TIEN,LUI,AD0,AD1,AD2,AD3,QUAYTRAI,THEM,
QUAYPHAI,RETRAI1,RETRAI2,REPHAI1,REPHAI2,LUIREPHAI1,LUIREPHAI2,LUIRETRAI1,LUIRETRAI2;
INT8 TANG;

VOID DUNG()
{ SETUP_CCP1(CCP_OFF);          //TAT CHE DO PWM
  SETUP_CCP2(CCP_OFF);          //TAT CHE DO PWM
  OUTPUT_HIGH(PIN_D3);                 //TAT CHAN ROLE CHIEU DONG CO
  OUTPUT_HIGH(PIN_D5);
}

VOID MAIN()
{ TANG=0;    
THEM=0;
SET_TRIS_B(11111111);                     //THIET LAP CAC CHAN RB0,1,2 LA CAC NGO VAO 
OUTPUT_HIGH(PIN_C1);                      //TAT 2 DONG CO
OUTPUT_HIGH(PIN_C2);
SETUP_ADC(ADC_CLOCK_INTERNAL);            //THIET LAP CHE DO ADC VOI THOI GIAN LAY MAU BANG XUNG IC
SETUP_ADC_PORTS(AN0_AN1_AN3);             //THET LAP 3 NGO VAO ADC
 SETUP_CCP1(CCP_PWM);          //THIEP LAP CHE DO PWM
              SETUP_CCP2(CCP_PWM);          //THIEP LAP CHE DO PWM
               SETUP_TIMER_2(T2_DIV_BY_4,255,1);//THIET LAP TIMER2 DUNG CHO PWM
WHILE (1)
 {   
      IF (INPUT(PIN_B1)) DELAY_MS(50);     //CO HAI NUT NHAN TANG GIAM MODE TOC DO ,5 DEN CHO 5 MODE 
      ELSE  {   // DUNG();                   //NEU NUT TANG DUOC NHAN
                  DELAY_MS(100);
                  IF (TANG<5)
               {  TANG++;
                  SWITCH(TANG)
                     {  CASE 1 : {OUTPUT_HIGH(PIN_D6);       //CAC DEN CHON MODE SANG   
                                                                  }      
                                 BREAK;
                        CASE 2 : {OUTPUT_HIGH(PIN_A5);
                                                                   }      
                                 BREAK;
                        CASE 3 : {OUTPUT_HIGH(PIN_E0);                               
                                  }     
                                 BREAK;
                        CASE 4 : {OUTPUT_HIGH(PIN_E1);                                                  }     
                                 BREAK; 
                        CASE 5 : {OUTPUT_HIGH(PIN_E2);
                                 
                                 }     
                                 BREAK;
                     }
                }    
               }
         IF (INPUT(PIN_B0)) DELAY_MS(50);                      //NEU NUT GIAM DUOC NHAN
            ELSE   {     DELAY_MS(100);
                        IF (TANG>0)
                  {     SWITCH(TANG)
                     {     CASE 1 : {OUTPUT_LOW(PIN_D6);        //CAC DEN MODE TAT  
                                    
                                    }
                           BREAK;
                           CASE 2 : {OUTPUT_LOW(PIN_A5);
                                    
                 
                                    }
                           BREAK;
                           CASE 3 : {OUTPUT_LOW(PIN_E0);
                                    
                     
                                    }//DEN MODE SANG
                           BREAK;
                           CASE 4 : {OUTPUT_LOW(PIN_E1); 
                                    // DUNG();
                                    }//DEN MODE SANG
                           BREAK; 
                           CASE 5 : {OUTPUT_LOW(PIN_E2);
                                    
                                    }
                           BREAK;
                      }
                        TANG--;
                     }   
      }
//CO 1 CAI JOYSITCK DIEU KHIEN XE,VOI 2 BIEN TRO,CO 2 DONG CO CHO HAI BANH   
   SET_ADC_CHANNEL(1);                    //CHON KENH AN1 DE DOC GIA TRI ADC TU BIEN TRO 1 CUA JOYSTICK
   DELAY_US(10);
   AD0=READ_ADC();                        //DOC GIA TRI ADC
   SET_ADC_CHANNEL(0);                    //CHON KENH AN0 DE DOC GIA TRI ADC
   DELAY_US(10);
   AD1=READ_ADC();

  IF ((AD0>=0)&&(AD0<=100)&&(AD1>100)&&(AD1<=145) )  // CHAY TOI
            {  TIEN=(ABS(AD0-127));          //GIA TRI ADC KHI KEO JOYSTICK DE XE CHAY TOI
               OUTPUT_HIGH(PIN_D3);          //TAT CHAN ROLE DOI CHIEU DONG CO
               OUTPUT_HIGH(PIN_D5);
               SET_PWM2_DUTY(TIEN);            
               SET_PWM1_DUTY(TIEN);
               DELAY_MS(50);
             }
               
                    
      
   IF ((AD0>100)&&(AD0<=145)&&(AD1>100)&&(AD1<=145))             //DUNG LAI
            {      SET_PWM2_DUTY(0);            
                  SET_PWM1_DUTY(0);                  
                  OUTPUT_HIGH(PIN_D3);                 //TAT CHAN ROLE CHIEU DONG CO
                  OUTPUT_HIGH(PIN_D5);
            }
      
   IF ((AD0>145)&&(AD1>100)&&(AD1<=145))             //CHAY LUI
            {                   
                LUI=ABS(127-AD0);
                OUTPUT_LOW(PIN_D3);                   //SET CHAN ROLE CHIEU DONG CO
                OUTPUT_LOW(PIN_D5);
                SET_PWM2_DUTY(LUI);
                SET_PWM1_DUTY(LUI);
                DELAY_MS(50);
               
                            
                SET_ADC_CHANNEL(1);         //CHON KENH AN1 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD2=READ_ADC();             //DOC GIA TRI ADC
                SET_ADC_CHANNEL(0);        //CHON KENH AN0 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD3=READ_ADC();
                IF ((AD0>AD2)&&((AD2-127)<30)&&(ABS(AD3-AD1)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0))      //CHONG BI GIAT KHI CHAY LUI SAU DO DUNG LAI 
                  {   SET_PWM2_DUTY(0);            
                  SET_PWM1_DUTY(0);   
                     DELAY_MS(2000);
                     OUTPUT_HIGH(PIN_D3);                 //TAT CHAN ROLE CHIEU DONG CO
                     OUTPUT_HIGH(PIN_D5);
                  }
                
           }
    IF  ((AD0>100)&&(AD0<=145)&&(AD1>0)&&(AD1<=100)&&INPUT(PIN_B1)&&INPUT(PIN_B0))       //QUAY PHAI
         {     QUAYPHAI=(ABS(AD1-127));
               OUTPUT_LOW(PIN_D3);                   //SET CHAN ROLE CHIEU DONG CO
               OUTPUT_HIGH(PIN_D5);
               SET_PWM2_DUTY(QUAYPHAI);
               SET_PWM1_DUTY(QUAYPHAI);
               DELAY_MS(50);   
               
               SET_ADC_CHANNEL(1);         //CHON KENH AN1 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD2=READ_ADC();             //DOC GIA TRI ADC
                SET_ADC_CHANNEL(0);        //CHON KENH AN0 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD3=READ_ADC();
                IF ((AD3>AD1)&&(ABS(AD2-AD0)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0))         //CHONG BI GIAT KHI QUAY PHAI
                  {  SET_PWM2_DUTY(0);
               SET_PWM1_DUTY(0);
                     DELAY_MS(1000);
                     OUTPUT_HIGH(PIN_D3);                 //TAT CHAN ROLE CHIEU DONG CO
                     OUTPUT_HIGH(PIN_D5);
                  }
               
         }
    IF ((AD0>100)&&(AD0<=145)&&(AD1>145)&&INPUT(PIN_B1)&&INPUT(PIN_B0))      //QUAY TRAI
         {     QUAYTRAI=(ABS(127-AD1));
               OUTPUT_HIGH(PIN_D3);                   //SET CHAN ROLE CHIEU DONG CO
               OUTPUT_LOW(PIN_D5);
               SET_PWM2_DUTY(QUAYTRAI);
               SET_PWM1_DUTY(QUAYTRAI);
               DELAY_MS(50);  
          
                SET_ADC_CHANNEL(1);         //CHON KENH AN1 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD2=READ_ADC();             //DOC GIA TRI ADC
                SET_ADC_CHANNEL(0);        //CHON KENH AN0 DE DOC GIA TRI ADC
                DELAY_US(10);
                AD3=READ_ADC();
                IF ((AD3<AD1)&&(ABS(AD2-AD0)<50)&&INPUT(PIN_B1)&&INPUT(PIN_B0))   //CHONG BI GIAT KHI QUAY TRAI 
                  {  SET_PWM2_DUTY(0);
                    SET_PWM1_DUTY(0);
                     DELAY_MS(1000);
                     OUTPUT_HIGH(PIN_D3);                 //TAT CHAN ROLE CHIEU DONG CO
                     OUTPUT_HIGH(PIN_D5);
                  }
         }
           
      IF ((100>AD0)&&(AD1<100)&&INPUT(PIN_B1)&&INPUT(PIN_B0))          //CHAY TOI RE PHAI
                  {   REPHAI1=(ABS(AD0-127)+ABS(AD1-127));
                      REPHAI2=ABS(ABS(AD0-127)-ABS(AD1-127));
                      SET_PWM2_DUTY(REPHAI1);
                      SET_PWM1_DUTY(REPHAI2);
                  }
       
      IF ((AD0<100)&&(AD1>145)&&INPUT(PIN_B1)&&INPUT(PIN_B0))     //CHAY TOI RE TRAI
                  {   RETRAI1=ABS(AD0-127)+AD1-127;
                      RETRAI2=ABS(ABS(AD0-127)-(AD1-127));
                      SET_PWM2_DUTY(RETRAI1);
                      SET_PWM1_DUTY(RETRAI2);  
                  }
   
   
       IF ((AD0>145)&&(AD1<100)&&INPUT(PIN_B1)&&INPUT(PIN_B0))          //CHAY LUI RE PHAI 
                  {   LUIREPHAI1=(AD0-127+ABS(AD1-127));
                      LUIREPHAI2=ABS(AD0-127-ABS(AD3-117));
                      SET_PWM2_DUTY(LUIREPHAI1);
                      SET_PWM1_DUTY(LUIREPHAI2);
                  }
       IF ((AD0>145)&&(AD1>145)&&INPUT(PIN_B1)&&INPUT(PIN_B0))     //CHAY LUI RE TRAI 
                  {   LUIRETRAI2=(AD0-127+AD3-127);
                      LUIRETRAI1=ABS(AD0-127-(AD3-127));
                      SET_PWM2_DUTY(LUIRETRAI2);
                      SET_PWM1_DUTY(LUIRETRAI1);  
                  }                    
   
 
}
}
các bác xem giúp e chút.

thay đổi nội dung bởi: namqn, 26-04-2009 lúc 03:59 PM. Lý do: định dạng code
motngayno10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn