5-6. EV 모듈의 PWM 출력예제목표 : 본예제에서는 EV(Event Manager) 모듈의 PWM 출력에대해학습한다. DSP8x에는 3상 AC 모터를구동할수있는 조의 PWM과엔코더입력회로가있다. 본예제에서는이 PWM 출력을사용하여 DC 모터의속도를조절해보고, RC 회로로 PWM 를필터링하여사인파형을출력시켜본다. 사용회로고찰 : 3.3V AR Kx4 3 4 5 LED M0 4 3 LED M CN6 PWM_IN C3 470uF/50V LED3 M +V LED4 M3 CN9 R 4.7K TP3 TP CN_DM 5V R 4.7K TP4 TP 5 7 6 0 IN IN ENA IN3 IN4 ENB 5V V+ VCC GND 8 9 4 U OUT OUT OUT3 OUT4 SEN_A SEN_B L98 3 3 4 5 R3 0.5 ohm,w 0.5 ohm,w R4 C 470p D N4007 D5 N4007 C 470p +V D N4007 D3 N4007 D6 N4007 D7 N4007 D4 N4007 MOT MOT MOT3 MOT4 D8 N4007 4 3 CN5 DC_MOT 5V PWM 신호연결 CN0 3 4 CN_RC CN PA_L R4 0K R7 R5 0K 0K R9 0K 3 4 5 6 7 8 TP5 C4 0.uF TP6 C5 0.uF TP8 C7 0.uF PWM PWM PWM3 PWM4 PWM5 PWM6 TPWM TPWM PWM7 PWM8 PWM9 PWM0 PWM PWM T3PWM T4PWM TP0 C8 0.uF TP PA0 PA PA PA3 PA4 PA5 PA6 PA7 PB0 PB PB PB3 PB4 PB5 PB6 PB7 CN 3 4 5 6 7 8 9 0 3 4 5 6 7 8 9 0 3 4 5 6 7 8 9 30 3 3 33 34 35 36 37 38 39 40 4 4 43 44 45 46 47 48 49 50 CN_IO 오실로스코프로 필터출력파형관찰 DC 모터접속 RealSYS (www.realsys.co.kr) - 3 - Tel: 03-40-436
EV 모듈살펴보기 : 그림. EV 장치인터페이스구성도 - HSPLCK 클럭사용 : 고속 PWM 사용가능 50MHz까지 - 조의 PWM & ENC 회로 - 다양한인터럽트지원 - ADC 모듈과연계가능 - PWM 출력차단신호 : PDPINTA, PDPINTB RealSYS (www.realsys.co.kr) - 3 - Tel: 03-40-436
그림. EVA 모듈전체구성도 (EVB 모듈도이와유사함 ) - Dead Band( 또는 Dead Time) 가지원되는 3상 PWM 출력 (SVPWM 구동도가능 ) - 개의기준타이머 : GP Timer, GP Timer ( 여기의타이머는 DSP내부 3개의타이머와는별개임 ) - QEP ( 로터리엔코더 ) 입력회로, Capture 기능으로도사용가능 RealSYS (www.realsys.co.kr) - 33 - Tel: 03-40-436
그림. GP(General Purpose) 타이머구성도 - HSPCLK 클럭으로동작 : 외부클럭 (TCLKINA/B) 을사용할수도있음 ) - TxCNT GP timer counter(6비트크기 ) 는동작모드에따라증가또는감소함 - 비교로직 (Compare logic) 에서 TxCNT 값과 TxPR값을비교하여 TxPWM 파형출력 - 다양한인터럽트가능 : Overflow, Underflow, Compare match, Period match - 다양한카운팅동작연속증가, 방향입력에따른증가또는감소, 연속증가-감소모드 RealSYS (www.realsys.co.kr) - 34 - Tel: 03-40-436
카운터동작모드 : 연속증가동작모드 : TxPR 값까지증가하다가 0 부터다시증가함. 방향입력증가 - 감소동작모드 : TDIRA/B 입력에따라증가또는감소모드가변경됨. 연속증가 - 감소동작모드 : TxPR 까지증가후다시감소하다가 0 이되면다시증가반복. RealSYS (www.realsys.co.kr) - 35 - Tel: 03-40-436
그림. GP 타이머증가모드에서 PWM 출력 - 타이머는계속증가하다가주기값에도달하면 0 으로되고다시증가반복 - 비교매치값에서액티브 Low & High PWM 출력됨. 그림. GP 타이머증가 - 감소모드에서 PWM 출력 - 타이머가증가하다가주기값에도달하면감소모드로되고, 0에도달되면다시증가반복 - 비교매치값에서액티브 Low & High PWM 출력됨. - 이방법은단순증가모드보다스위칭수가적어많이사용됨. 실제의모터드라이브장치에서 Active Low & High PWM 출력파형사이에약간의완충지 대가필요 : Dead band 로직이필요함. RealSYS (www.realsys.co.kr) - 36 - Tel: 03-40-436
데드타임 (Dead time) 이란무엇인가? PWM PWM 위의그림과같이전력소자로 3상모터를회전하는경우 Q과 Q를동시에 ON 시키면 Udc와 GND를쇼트시키게되어소자가파손된다. 따라서동시에 ON하는것을피하기위해스위칭이변경되는지점에일정시간동안모두 OFF하는시간을둔다. 이시간을데드타임또는데드밴드라한다. 일반적으로데드타임은파형왜곡을가져오므로전류방향에따라적절히보상해준다. L98 을사용한양방향 DC 모터제어 : PWM PWM IN IN OUT OUT 모터 PWM3 PWM4 IN3 IN4 OUT3 OUT4 모터 L98 은 개의 DC 모터를구동할수있다. DC 모터구동방법은 가지가가능하다. 첫번째방법은한쪽 PWM 은고정하고다른 PWM 의듀티를조절하여속도제어하는방법 정방향회전 : PWM= 듀티조절, PWM = 0 으로고정 PWM PWM PWM PWM RealSYS (www.realsys.co.kr) - 37 - Tel: 03-40-436
역방향회전 : PWM = 0 으로고정, PWM = 듀티조절 PWM PWM PWM PWM 두번째방법은양쪽 PWM을상대적으로조절하여속도제어하는방법정방향회전 : PWM 듀티 > PWM 듀티 PWM PWM 역방향회전 : PWM 듀티 < PWM 듀티 PWM PWM 정지 : PWM 듀티 = PWM 듀티 PWM PWM 여기에서 3 상 PWM 을사용하는경우위의두번째방법으로동작하며, 가변저항값을돌 리면 DC 모터가좌우로회전함을볼수있다. RealSYS (www.realsys.co.kr) - 38 - Tel: 03-40-436
타이머의주요레지스터 : 상세한레지스터설정은다음에다루기로함. 소스프로그램살펴보기설명 >> PWM 포트설정 void init_gpio(void){ EALLOW; GpioMuxRegs.GPAMUX.all=0x00ff; /* GPAMUX: GPIO_A function 0=IOP,=FUN I(0)/O() bit5 0: C3TRIP,PA5 ;IOP bit4 0: CTRIP,PA4 ;IOP bit3 0: CTRIP,PA3 ;IOP bit 0: TCLKINA,PA ;IOP bit 0: TDIRA,PA ;IOP bit0 0: CAP3_QEPI,PA0 ;IOP bit9 0: CAP_QEP,PA9 ;IOP 0 bit8 0: CAP_QEP,PA8 ;IOP 0 bit7 : TPWM_TCMP,PA7 ;FUN bit6 : TPWM_TCMP,PA6 ;FUN bit5 : PWM6,PA5 ;FUN bit4 : PWM5,PA4 ;FUN bit3 : PWM4,PA3 ;FUN bit : PWM3,PA ;FUN RealSYS (www.realsys.co.kr) - 39 - Tel: 03-40-436
bit : PWM,PA ;FUN bit0 : PWM,PA0 ;FUN */ GpioMuxRegs.GPADIR.all=0xfcff; // PA DIR: =output,0=input GpioMuxRegs.GPAQUAL.all=0x0000; // PA Input Qualification: /* 0x00=No, 0x0=SYSCLK/, 0x0=SYSCLK/4, 0xff=SYSCLK/50 */ } PWM 출력을단순 I/O가아닌 PWM 고유기능으로설정함. 설명 >> EV 모듈초기화 void init_ev(void){ // EVA Configure TPWM, TPWM, PWM-PWM6 // Step Initalize the timers // Initalize EVA Timer EvaRegs.TPR = t_prd; // Timer period EvaRegs.TCMPR = t_cmp; // Timer compare EvaRegs.TCNT = 0x0000; // Timer counter // TMODE = continuous up/down // Timer enable // Timer compare enable EvaRegs.TCON.all = 0x084; // Initalize EVA Timer EvaRegs.TPR = t_prd; // Timer period EvaRegs.TCMPR = t_cmp; // Timer compare EvaRegs.TCNT = 0x0000; // Timer counter // TMODE = continuous up/down // Timer enable // Timer compare enable EvaRegs.TCON.all = 0x04; // Step Setup TPWM and TPWM // Drive T/T PWM by compare logic EvaRegs.GPTCONA.bit.TCMPOE = ; // Polarity of GP Timer Compare = Active low RealSYS (www.realsys.co.kr) - 40 - Tel: 03-40-436
EvaRegs.GPTCONA.bit.TPIN = ; // Polarity of GP Timer Compare = Active high EvaRegs.GPTCONA.bit.TPIN = ; // Step 3 Enable compare for PWM-PWM6 EvaRegs.CMPR = 0x00; EvaRegs.CMPR = 0x800; EvaRegs.CMPR3 = 0xff0; } // Compare action control. Action that takes place // on a cmpare event // output pin CMPR - active high // output pin CMPR - active low // output pin 3 CMPR - active high // output pin 4 CMPR - active low // output pin 5 CMPR3 - active high // output pin 6 CMPR3 - active low EvaRegs.ACTRA.all = 0x0999; // change 0x0666 => 0x0999 EvaRegs.DBTCONA.all = 0x09ec; // Deadband: enable EvaRegs.COMCONA.all = 0xA600; 설명3 >> main 함수에서 Uint6 t_prd=0xfff,t_cmp=0x800; Uint6 t_prd=4096,t_cmp=; void main(void){ // for PWM(EV) init_ev(); lcd_gotoxy(0,0); lcd_puts("!!! PWM test!!!"); AD_START; while(){ mcnt++; lcd_gotoxy(0,); lcd_hex4(mcnt); RealSYS (www.realsys.co.kr) - 4 - Tel: 03-40-436
} } ad0 = AdcRegs.ADCRESULT0>>4; lcd_gotoxy(5,); lcd_decimal_word(ad0); key = IN_KEY; OUT_LED(key); if(key_code & KEY_PRESSED) key_process(); if(key_code & KEY_CONT) cont_key_process(); EvaRegs.CMPR = ad0; PWM, PWM에가변저항값출력 delay_ms(00); 설명4 >> 타이머0 인터럽트에서 interrupt void cpu_timer0_isr(void){ CpuTimer0.InterruptCount++; T_LED; t0_cnt++; if(++idx >= ARRAY_LEN) idx = 0; sv[idx] = sin(*pi*idx/(array_len-)) * 047 + 048; cv[idx] = cos(*pi*idx/(array_len-)) * 047 + 048; EvaRegs.TCMPR = sv[idx]; PWM3, PWM4에 sin 값출력 dac_out(0,ad0); // DAC0: VR data out dac_out(,sv[idx]); // DAC: sin if((t0_cnt % 0) == 0) key_check(); // 0 msec interval key check // Acknowledge this interrupt to recieve more interrupts from group PieCtrlRegs.PIEACK.all = PIEACK_GROUP; } - PWM, PWM를 L98 입력에접속하면 PWM 듀티에따라 DC모터속도가달라짐. - PWM3 또는 PWM4를 R-C 필터에접속하면 sin 파형관찰가능 RealSYS (www.realsys.co.kr) - 4 - Tel: 03-40-436
실행관찰 PWM 파형관찰 : PWM 출력 DC 모터연결 DC 모터 연결 PWM 파형관찰 PWM 파형관찰 RealSYS (www.realsys.co.kr) - 43 - Tel: 03-40-436
PWM 파형관찰 : TPWM PWM 출력 RC 필터연결 TPWM 파형관찰 : sin 파형 RC 필터파형 TPWM 파형 ON-OFF 상태의 PWM 파형이 R-C 필터를거쳐 sin 파형으로관찰됨. RealSYS (www.realsys.co.kr) - 44 - Tel: 03-40-436