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.
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; } } }
Comment