Hình 5.10:Sơ đô khối điều khiển xuất xung của TMS320LF2407 5.4:CHƯƠNG TRÌNH ĐIÊU KHIÉN

Một phần của tài liệu Điều khiển vận tốc độ cơ không đồng bộ dùng bộ biến tần (Trang 72 - 80)

V x ẸKhi đó ta có sơ đồ mạch gần đúng là

Hình 5.10:Sơ đô khối điều khiển xuất xung của TMS320LF2407 5.4:CHƯƠNG TRÌNH ĐIÊU KHIÉN

5.4:CHƯƠNG TRÌNH ĐIÊU KHIÉN

#include "f2407_c.h" #include "math.h" #define Speed_max 50; float anpha_sect,Vout; float anpha=0; Tloat tanso=0; int ADC,tanso_ dat; foat pI=3.1416; int Tx= 2000; *0.1us*/ int T= 2500; int VDC=220; char secfOr; float T1,dx,dy,M; fñoat Vout; voidV_HZ_ Profile(void) { VouftE 10 + 4.2*tanso; 1 (tanso>50)Vout=220; 7 void main(void)

/*chu kí` song mang : 5Khz <=> 200us = 2000 /*chu kÌ lay mẫu sau 250us = 2500*0.1us*/

Page-67

{

.x*xwxtt#x#wk###** NGUYEN XUAN TRUONG_03DHTDH_ DIEU KHIEN DONG CO

*SCSRI = 0x00FD; /*0000 0000 1111 1101B*/

,

bịt 15 Ú: reserved

bít 14 0: CLKOUT=CPUCLK

bít 13-12 00: IDLEI selected for low-power mode bí1I1-9 000: PLL x4 mode

bịt 8 Ú: reserved

bít 7 I: I =cho phep ADC module cloek bít 6 1: _ 1 = cho phep SCI module clock bít 5 1: _ 1 = cho phep SPI module clock bịt 4 1: 1 = cho phep CAN module clock bịt 3 l: _ 1 = cho phep EVB module clock bịt 2 1: 1 = cho phep EVA module clock bít I Ú: reserved

bit 0 1: — clear the lLLADR bít */

*SCSR2 = (ŒSCSR2 | 0x000B) & 0x000F ; /#0000 0000 1011B*/

/*

bt1S5-+6 0Ú: reserved

bịt 5 0: do NOT clear the WD OVERRIDE bit bịt 4 0: XMIF HI-Z, 0=normal mode, I=H¡-Z'd

bít 3 1: đisable the boot ROM, enable the FLASH

b2 nochangec Bit cho biet chíp dang o chục nang Vi dieu khien hay Vi xu ly bít 1-0 11: 1= SARAM mapped to prog and đata

*/

/*** Tat watchdog timer ***/

*WDCR = 0x00E8; /*0000 0000 1110 1000B*/

/*

/#

bís lS-§ 0%: reserved bịt 7 l: — clear WD flag bịt 6 1: — disable the dog

bít 5-3 101: must be written as 101

bí2-0 000: WDCLK divider= I

*/

/*** Setup giao tiep bô nho ngoai ***/

WSGR = 0x0040 ; /*0000 000 0100 0000B */ (adsbygoogle = window.adsbygoogle || []).push({});

/,#

/#

bíq1IS-11 0S: reserved

bít10-9 00: bus visibility of

bịt 8-6 001: † waif-state for LO space bịt 5-3 000: 0 wait-state for data space bịt 2-0 000: 0 wait state for propram space */

Page-68

/#** Setup chuc nang chan ***#/

*MCRA = 0x0FC0_ ; /*0000 1111 1100 0000 /* group A pins */

/

bít 15 0: 0=IOPB7, Chuc nang LO bịt 14 0: — 0EIOPBó, bịt 13 0: - 0EIOPBS, bịt 12 0: - 0EIOPB4, IĐBBI l: IEPWM6 bít 10 l: IEPWMS bịt 9 l: IEPWM4 bịt 8 l: IEPWM3 bịt 7 l: IEPWM2 bịt 6 l: IEPWMI bịt 5 0: 0EIOPAS bịt 4 0: 0EIOPA4, bịt 3 0: - 0EIOPA43, bịt 2 0: 0EIOPA2, bít 1 0: - 0EIOPAI, bịt 0 0: 0=IOPAO0, */

*MCRB=0xFE00 ; /*1111 1100 0000 0000 /* group B pins */

/,#

bịt 15 l: _ IETMS2 (always write as ]) bịt 14 l: IETMS (always write as l) bịt 13 l: I=TDO (always write as 1) bm 12 1: IETDI (always write as 1) bít 11 l: IETCK (always write as l) bịt 10 l: 1E=EMUI (always write as 1) bịt 9 l: I1=EMUO0 (always write as 1) bít 8 0: - 0=IOPD0, bịt 7 0: 0EIOPC?, bịt 6 0: - 0EIOPCó, bít 5 0: 0=IOPCS, bịt 4 0: - 0EIOPC4, bịt 3 0: — 0EIOPCA, bịt 2 0: 0EIOPC2, bịt 1 0: - 0EIOPCI, bịt 0 0: - 0=IOPCO, */ *MCRC = 0x0000; /* group C pins */ /* bit 15 Ú: reserved bịt 14 0: 0=IOPEó6, bịt 13 0: - 0FIOPES, bịt 12 0: 0EIOPE4, bịt 1Ì 0: 0FIOPE3, bịt 10 0: 0EIOPE2,

Page-69 bịt 9 0: 0EIOPFI, bịt 8 0: 0=IOPF0, bịt 7 0: — 0EIOPE7, bịt 6 0: - 0FIOPEó, bịt Š 0: — 0FIOPES, bít 4 0: - 0=IOPE4, bít 3 0: - 0=IOPE43, bịt 2 0: - 0PIOPE2, bít Í 0: — 0EIOPEI, bít 0 0: - 0=IOPEO, */

/RXESEEKSE SE HE SE ĐCE CEO Ế ác đc SE É SE 4E ÁC# ĐK Ác 4E Í© đo Ác 4 4E 4E CĐ đc 4 XE 4C 4o /

/*# ki 3X k # %3 $ ‡ ‡ Sefup †imers ] va2 cho ADC va PWM skiếk $ E sE k k sk lk k SE /

#TICON = 0x0000; /* reset timer | */ *T2CON = 0x0000; /* reset timer 2 */

*GPTCONA = 0x0200; /*0000 0000 0000 00000B__ /*configure GPTCONA */

/*

bít 15 Ú: — reserved

bít 14 0: Trang thai cua Timer2, read-only bịt 13 0: Trang thai cua Timer], read-only bit12-II 00: reserved

bít 10-9 01: Timer2 kích ADC moi đau chu ki bit8-7 00: Ko dung Timerl kích ADC

bit 6 0: TCOMPOE, 0 = Hi-z tat ca timer compare oufputs bi(t5-4 00: reserved

bit 3-2 00: T2PIN, 00 = forced low

bịt 1-0 00: TIPIN, 00 = forced low

*/

/*** Dung Timer 2 de lay mầu **##**/

*T2CNT = 0x0000; /* clear timer2 counter */

*T2PR =T; /⁄* Cu (adsbygoogle = window.adsbygoogle || []).push({});

sau 250us lay mau toc do */

*T2CON = 0x1280;/*0001 0010 1000 0000 */

/*

bit 15-14 00: stop mmediately on emulator suspend bít 13 Ú: — reserved

bít12-11 10: 10= Dung dang Tam giac bat doi xung bít 10-8 010: 010 = moi lan dem là ***0.1us*** bit 7 1: Khoidong cung luc voi Timer] bít 6 0: Chua cho phep bat dau dem Timer]

bitS-4 00: 00 = Nguon xung clock la chu kỉ` máy (25ns) bit3-2 00: 00= reload compare reg on underflow

Page-70 bịt Í 0: 0= Cam chuc nang Timer compare

bịt 0 0: — Dung chu kirieng

*/

/*** Dung Timer] tao xung PWM *#**/

*TICNT = 0x0000; /* clear timer]l counter */

#TIPR = Tx;

*TICON = 0x0900; /#0000 1001 0000 0000%/ /

configure TICON register */

,

bít 15-14 00: stop immediately on emulator suspend bịt 13 O0: - reserved

bít12-1I 01: 01 = Dung dang Tam giac doi xung bit10-8 — 001: 001 = moi lan dem là ***0.05us*** bịt 7 0: — reservedin TICON

bít 6 0: __ Chua cho phep bat dau dem Timer1

bít Š-4 00: 00 = Nguon xung clock la chu kỉ` máy (25ns) bịt 3-2 0U: 00 = reload compare reg on underflow

bịt 1 0: 0= Cam chuc nang Timer compare bít Ö 0: — reservedin TICON

*/

*ADCTRLI = 0x4000; /* Reset ADC*/

asm(” nop ”); /* Doi de ADC reset*/

*ADCTRLI = 0x2F40;

/*

bít 15 0: reserved

bịt 14 0: ghi 1 de reset

bịt 13,12 10: 1mmediate stop on suspend

bịt II-8 II11: thoi gian delay giua 2 lan ngat (adsbygoogle = window.adsbygoogle || []).push({});

bịt 7 0: toc do chuyen doi 1 bít la I chu kì may

bít 6 1: continuous_loop mode

bịt Š 0: đo uu tien ngat cao

bịt 4 0: dung 8 chan ADC

bít 3-0 0: Disnable calibration

*/

*ADCTRL2 = 0x0000; /*#0000 0000 0000

0000 */ / /

bịt 1Š 0: Khong cho phep kích SEQ tu EVB

bịt 14 0: No action, bít dung de reset SEQI

bít 13 l: Kich SQEI, =0: ko co tin hieu kích

bít 12 0: Trang thai lam viec cua SQE1, =0: ranh roi

bịt 11,10 00: Cam ngat

bịt 9 0: Co ngat ADC SQE1, chua co ngat

bịt § 0: Ko cho phep kích ADC SQEI tu EVA

Page-7l

bịt 6 0: No action, bit dung de reset SQE2

bịt 5 0: Kích SQE2, =0: ko co tin hieu ngat

bịt 4 0: Trang thai lam viec cua SQE], =0: ranh roi

bít 3,2 00: Disnable ngat SQE2

bịt Ì 0: Co ngat SQE2

bít 0 0: Ko cho phep kích SQE2 tu EVB

*/

*MAX_ CONV = 0x0000; / Dung I chan

ADC */

*CHSELSEQI = 0x0000; /* lay mau tu chan ADC

0*/

*ADCTRL2 = *ADCTRL2 | 0x2000; /* set SỌC start convert*/

/XYYXESEKEEKYKEEEEOEOEOX So S SE 4á E É É Ấ SE # Ấ Ác ĐC Ác Ác ác 4á ĐÁ Ác 4đ XI 4đ Xe / (adsbygoogle = window.adsbygoogle || []).push({});

/*#****#***#*% % s s dc đc s sk dế dẸ lỆ SE s St sự dc dc sịc dc sự Setup PWM ****##*%* ## # é + # S X É SE SE SẸ + đồ /

*COMCONA = 0x8200; /*1000 0001 0000 0000*/

/%

bít 15 1: 1 = dung PWMo dang Compare Unit

bí 14-13 00: 00= Load lai Ton moi đâu chu kỉ` Timer 1

bít 12 0: 0= khong dung vector khong gian bí 11-10 00: 00 =reload ACTR dau chu kìtimer bít 9 1: l =enable cac chan PWM

bit 8-0 Ús: reserved */

*DBTCƠNA = 0x0AF0; /*0000 1010 1111 0000 */

/

bịt 15-12 0x0: reserved

bịt 11-8 I010: thoi gian Dead_band: 4us

bịt 7 1: enable Dead_band PWMS,6

bít 6 1: enable Dead_band PWM4.3

bịt 5 L: enable Dead_band PWM2,I

bịt 4-2 100: Prescaler = 1ó, I gia tri là 0.4us

bí 1-0 00; reserved

*/

*ACTRA = 0x0999: /*0000 1001 1001 1001*//* Chan PWMI,2 duoc dung */

/#

bít 15 0: Chieu Vector khong gian(don't care) bịt 14-12 000: chỉ so vector khong gian (dont care) bít 1-10. 01: PWM6/IOPB3 tích cục mục thap bịt 9-8 10: PWM5⁄IOPB2 tích cục muc cao bt7-6 — 01: PWM4/IOPBI tích cục mục thap bịt 5-4 10: PWM3/IOPB0 tích cuc muc cao bt3-2 01: PWM2/IOPA7 tích cuc mục thap bịt 1-0 10: PWM1/IOPA6 tích cuc mục cao */

Page-72

/## * ** #13 % dc dc dự dự dc dc dc ức dc dc dc ịc ắc súc Sefup Interrupfs #**t** X9 # Ác SE de dc đ /

/*** Setup the event manager interrupts ***/

*IMR = 0x0000; /* Reset thanh ghi che ngat IMR, che tat ca cac ngat */ *IFR = 0x003F; /* clear cac co ngat hien thoi */

*IMR = 0x0004; /* enable ngat lop int(3 chua ngat Timer2 */ *EVAIFRA =0xFFFE; /* clear all EVA group A infterrupts */ *EVAIFRB = 0xFFFFE; /* clear all EVA group B interrupts */ *EVAIFRC = 0xFFFFE; /* clear all EVA group C interrupts */

*EVAIMRA = 0x0000; /*0000 0000 1000 0000 /* địsnable desired EVA Øøroup A Iinterrupts */

*EVAIMRB = 0x0001; /* enable ngat periode Timer2 */

*EVAIMRC = 0x0000; /* disnable desired EVA group C interrupts */

asm(” CLRC INTM"); /* cho phep tat ca cac ngat (adsbygoogle = window.adsbygoogle || []).push({});

*/ LG... while(1) Ẳ ADC= (*RESULT0)>>6; / IÊ(ADC<=10)ADC= 0;*/

tanso_ dat= ADC*0.0488; /*0.0488 = 50/1024*/

If (tanso_dat>50) tanso_ dat= 50; /***** tinh anpha ****/

anpha= anpha + 2*pi*tanso*0.0002: /* nhan voi chu kỉ` lay mau T=200us*/ If(anpha>2*pi) anpha= anpha-2*pi;

sector=l + 3*anpha/3.1416;

anpha_secf= anpha-(sector-1)*1.047; /*pi⁄3 = 1.047%/

/t*###*##*% Xuaft xung ki * k s # SE /

/*void SVGEN_MF(void)*/

M= Vout/VDC; /*sart(3)=1.732*/ dx= M*sin(1.047-anpha_sect);

dy= M*sin(anpha_ sect); TI= (1-dx-dy)*Tx/2; If(sector==l) { *CMPRIE= TI; *CMPR2= Tx*dx + T1; *CMPR3= Tx-Tl1; } If(sector==2) { *CMPRIE= Tx*dy+TI; *CMPR2= T1; *CMPR3= Tx-T1; } 1f(sector==3) { *CMPRIE Tx-T1;

Page-73 *CMPR2= TỊ; *CMPR3= Tx*dx+T1; } 1fsector==4) { *XCMPRI= Tx-T1; *CMPR2= Tx*dy+Tl; *CMPR3= TI; ì # IÍ(sector==S9) { *CMPRIE Tx*dx+T1; *CMPR2= Tx-Tl; *CMPR3=T1; } If(sector==6) { *CMPRI= TỊ; *CMPR2= Tx-Tl; *CMPR3= Tx*dy+T1; } *XTICON= *T1CONI0x0040; } j

Interrupt void Ngat_Timer2 (void)

{- *EVAIFRB = *EVAIFRB | 0x0001; /*clear co ngat TIimer2*/ /*void ramp(void)*/

If(tanso<tanso_ dat)

tanso= tansơ0.00625; /*Sau 2s moi dat dc toc do 50hz*/

1Ể (tanso>50) tanso= 50; /*chia làm 4000=1/T lần lay mau*/ else IÍ(tanso>tanso_ đat) /* mol lan 250us*/

tanso= tanso-0.00625:

Page-74

CHƯƠNG:Ô

% %%

Một phần của tài liệu Điều khiển vận tốc độ cơ không đồng bộ dùng bộ biến tần (Trang 72 - 80)