Thông báo

Collapse
No announcement yet.

Điều chế vector không gian dùng Pic18F4431

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Điều chế vector không gian dùng Pic18F4431

    Chào các bạn!
    Mình đang làm đề tài về điều khiển động cơ không đồng bộ 3 pha sử dụng phương pháp điều chế Vector không gian.
    MÌnh dùng 18F4431 và IRAMX16UP60A.
    Chương trình trên Pic mình đã test cho từng Sector và thấy đúng. Tuy nhiên khi đưa vào mạch để động cơ hoạt động thì đầu ra của IRAM không có tín hiệu điện áp.
    Mình không biết sai ở chỗ nào nữa. Mong mọi người giúp đỡ.
    Mình không tải file lên được.

    Code:
    #include "E:\POWER CONTROL MOTOR\XUANHIEN.h"
    #fuses  HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NODEBUG
    #use delay(clock=20000000)
    
    int16 TB,TA,HALF_T0,TS,MODULATION_INDEX;
    int8 DEGREE_CONSTANT,REQUIRED_MOTOR_SPEED;
    INT16 PHASE_R_DUTY,PHASE_Y_DUTY,PHASE_B_DUTY;
    unsigned INT8  i = 0;
    CONST INT16 TABLE_TB[256] = {0,4,8,12,16,20,24,28,32,36,40,44,48,52,55,59,63,67,71,
    75,79,83,87,91,95,99,103,107,111,115,119,123,126,130,134,138,142,146,150,154,158,
    162,166,170,173,177,181,185,189,193,197,201,205,208,212,216,220,224,228,232,235,
    239,243,247,251,255,258,262,266,270,274,278,281,285,289,293,296,300,304,308,311,
    315,319,323,326,330,334,338,341,345,349,352,356,360,363,367,371,374,378,382,385,
    389,393,396,400,403,407,411,414,418,421,425,429,432,436,439,443,446,450,453,457,
    460,464,467,471,474,478,481,484,488,491,495,498,501,505,508,512,515,518,522,525,
    528,532,535,538,541,545,548,551,555,558,561,564,567,571,574,577,580,583,586,590,
    593,596,599,602,605,608,611,614,617,621,624,627,630,633,636,639,642,644,647,650,
    653,656,659,662,665,668,671,673,676,679,682,685,687,690,693,696,699,701,704,707,
    709,712,715,717,720,723,725,728,731,733,736,738,741,743,746,748,751,753,756,758,761,
    763,766,768,770,773,775,777,780,782,784,787,789,791,794,796,798,800,803,805,807,809,
    811,813,816,818,820,822,824,826,828,830,832,834,836};
    Void GENERATE_PWM()
       {
      set_power_pwm0_duty(PHASE_R_DUTY);
      set_power_pwm2_duty(PHASE_Y_DUTY);
      set_power_pwm4_duty(PHASE_B_DUTY);
       }
    
    void main()
    {
    
       setup_adc_ports(NO_ANALOGS|VSS_VDD);
       setup_adc(ADC_OFF|ADC_TAD_MUL_0);
       setup_spi(FALSE);
       setup_wdt(WDT_OFF);
       setup_timer_0(RTCC_INTERNAL);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       setup_oscillator(False);
    
       setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY);
       setup_power_pwm(PWM_CLOCK_DIV_4|PWM_UP_DOWN|PWM_DEAD_CLOCK_DIV_4,1,0,250,0,1,10);
    
       MODULATION_INDEX = 1;
       TS    = 1000;                                         //PWM_DC_MAX
       i = 0;
    while (1)
     {
    
              TB    = TABLE_TB[i]*MODULATION_INDEX;            //VALUE OF TB
              TA    = TABLE_TB[255-i]*MODULATION_INDEX;        //VALUE OF TB
              HALF_T0    = (TS-(TA+TB))/2;                       //T0/2
    
                     PHASE_R_DUTY = HALF_T0;                  //PHASE R DC = T0/2
                     PHASE_Y_DUTY = TA + HALF_T0;             //PHASE Y DC = T0/2 + TA
                     PHASE_B_DUTY = TS - HALF_T0;             //PHASE B DC = TS - T0/2
                     GENERATE_PWM();
    
                     PHASE_Y_DUTY = HALF_T0;                  //PHASE Y DC = T0/2
                     PHASE_R_DUTY = HALF_T0 + TB;             //PHASE R DC = T0/2 + TB
                     PHASE_B_DUTY = TS - HALF_T0;             //PHASE B DC = TS - T0/2
                     GENERATE_PWM();
    
                     PHASE_R_DUTY = TS - HALF_T0;             //PHASE R DC = TS - T0/2
                     PHASE_Y_DUTY = HALF_T0;                  //PHASE Y DC = T0/2
                     PHASE_B_DUTY = HALF_T0 + TA;             //PHASE B DC = T0/2 + TA
                     GENERATE_PWM();
    
                     PHASE_R_DUTY = TS - HALF_T0;
                     PHASE_Y_DUTY = HALF_T0 + TB;
                     PHASE_B_DUTY = HALF_T0;
                     GENERATE_PWM();
    
                     PHASE_R_DUTY = HALF_T0 + TA;
                     PHASE_Y_DUTY = TS - HALF_T0;
                     PHASE_B_DUTY = HALF_T0;
                     GENERATE_PWM();
    
                     PHASE_R_DUTY = HALF_T0;
                     PHASE_Y_DUTY = TS - HALF_T0;
                     PHASE_B_DUTY = HALF_T0 + TB;
                     GENERATE_PWM();
    
             i++;
    
          if (i >=255 )
            {i=0;
    
            }
    
     }
    
    }
    Last edited by nodiesun; 29-07-2009, 19:19.

  • #2
    hix! Các cao thủ đâu hết roài? Dạo này các diễn đàn có vẻ trầm lắng quá!

    Comment


    • #3
      Sao không ai trả lời hết vậy? Không hiểu sao mình viết chương trình tạo xung chỉ tạo được dạng sin 3 pha tần số 1 Hz mới chán chứ? Muốn tạo tần số 50 Hz thì làm thế nào nhỉ?

      Comment

      Về tác giả

      Collapse

      nodiesun Tìm hiểu thêm về nodiesun

      Bài viết mới nhất

      Collapse

      Đang tải...
      X