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 */
/,#
/#
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
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
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 /
/*#****#***#*% % 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
*/ 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:Ô
% %%