PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
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
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:02 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam