• No results found

Popis vývojového prost edí CCS

In document ZADÁNÍ BAKALÁ SKÉ PRÁCE (Page 30-47)

A te si o každém z t chto blok n co ekneme.

Menu DSP/BIOS: Tyto ikony nám slouží na obsluhu DSP/BIOS systému.

Ten slouží nap íklad pro ízení v aplikací v reálném ase, ale obsahuje i jiné dalších funkce.

Krokování programu: Krokování v CCS je možno provést bu to na úrovni jazyka C nebo Asembleru.

Strana: 31 z 49 ízení b hu programu: Tím si zvolíme, v jakém režimu chceme, aby byl program spušt n nebo zda ho chceme zastavit.

Ladící ikony: Otvírají r zné prost edky pro odlad ní programu, nap . okno s obsahem registr

Textový výstup externích program : Používá se bu to pro výpis z COM knihoven, nebo se v n m také vypisují chyby p i emulaci programu.

Správa projektu: Slouží pro práci s projekty.

Vlastní okno editoru: V n m se píše vlastní kód programu.

Probe pointy: Slouží k p epínání mezi Standardní strukturou a Ladící strukturou projektu.

Breakpointy: Pomáhají p i lad ní projektu. Umož ují nám m it hodnoty pomocí Debuggeru, které se za b hu generují v tomto bod .

Obsahy prom nných: Slouží k práci s projektem p i kompilaci.

Strana: 32 z 49

5.2 Spušt ní a p ipojení programu pomocí souboru GEL

Jelikož tento program vychází z p eprogramovaných examples, které jsou na instala ním CD CCS nebo voln ke stažení na stránkách TI, nebudeme se zabývat podrobnostmi, které se vyskytují u vytvá ení vlastního projektu. A rovnou p istoupíme k vkládání p edp ipravených projekt , které jsou vepsány v souborech s p íponou gel.

GEL soubor je vlastn jakási knihovna, která nám vytvo í celý projekt se základní p eddefinovanou strukturou. Ta se vloží do CCS pomocí nabídky File Load GEL….

Pokud máme takto vytvo ený projekt, je nutno jej zkompilovat, pomocí GEL jméno našeho projektu Load_and_Build_Project, a nahrát jej do DSP GEL jméno našeho projektu Load_Code, ale nežli m žeme nahrát program je nutno nejprve náš procesor p ipojit k po íta i a to p es nabídky Debug Connect.

Jelikož ve valné v tšin p ípad pot ebujeme vždy v projektu n co m nit je pot eba si ješt otev ít Okno Editoru a to pomocí Správce Projektu.

V n m se pracuje podle podobn jako v b žném jazyce C, jen s tím rozdílem že navíc obsahuje práci s registry a prom nnými, které jsou ur ené jen pro náš DSP.

Strana: 33 z 49

5.3 Vlastní ídící program

Program je postaven z voln stažitelných examples na stránkách Texas Instrument Všechny jsou p iloženy v p íloze. Náš konkrétn z cpu_timer, do kterého se p ipsalo ovládání logických stup a výstup , analogového vstupu a PWM výstupu.

Tyto dva ádky slouží k tomu, aby náš program dokázal pracovat

Nyní si musíme definovat a nastavit AD p evodník, PWM výstup

Nastavuje vzorkovací frekvenci pro ADC p evodníky podle tohoto vzorce:

HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*4)= 12,5MHz

#define ADC_MODCLK 0x4

ADC modul hodin: HSPCLK/2*ADC_CKPS=12,5MHz/(1*2)=6.25MHz

#define ADC_CKPS 0x1

Ší ka pásma ADC hodin je nastavena 16

#define ADC_SHCLK 0xf

Pr m rné posunutí za átku tení ADC

#define ZOFFSET 0x00

Strana: 34 z 49

Nastavení typové struktury PWM

typedef struct

{

volatile struct EPWM_REGS *EPwmRegHandle;

Uint16 EPwm_CMPA_Direction;

Strana: 35 z 49

interrupt void cpu_timer0_isr(void);

Volání funkce nadefinování PWM výstupu

void InitEPwm1Example(void);

Obnovování PWM signálu podle aktuální pot eby

void update_compare(EPWM_INFO*);

Funkce PID regulátoru

void PID_Regulator(void);

Hlavní program

Funkce main je normální funkce. Je výjime ná pouze tím, že se volá jako první po spušt ní programu.

void main(void)

{

InitSysCtrl();

Strana: 36 z 49 P íkaz EALLOW nám umož uje zápis do chrán ných registr .

EALLOW;

Specifikace nastavení hodin tohoto programu

SysCtrlRegs.HISPCP.all = ADC_MODCLK;

Nastaveni GPIO pinu 0, 1 na PWM výstup. PWM výstup pot ebujeme pouze jeden, a sice na ak ní veli inu

Registru GPAMUX slouží k definování GPIO (U tohoto portu má každý pin jiné možnosti nastavení kapitola 2.2), zde na PWM výstup.

GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;

Strana: 37 z 49

GpioCtrlRegs.GPAMUX1.bit.GPIO15= 0;

GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;

Strana: 38 z 49

Tato funkce inicializuje Pie íta e instrukcí jejich standardní stav je: celý Pie p erušení vy azený a bity p íznakového registru jsou vynulovány.

InitPieCtrl();

Nulování bit p íznakového registru

IER = 0x0000;

IFR = 0x0000;

Inicializuje tabulky vektoru PIE s ukazovateli na p erušení. Starají se o údržbu rutiny (ISR). Ta zaplní celou tabulku, i když není p erušení použito.

Což je užite né pro odlad ní. ISR rutiny jsou k nalezení v

AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;

AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;

AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;

Strana: 39 z 49

AdcRegs.ADCTRL1.bit.CONT_RUN = 0;

Zápis do chrán ných registr

EALLOW;

PieVectTable.TINT0 = &cpu_timer0_isr;

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;

EDIS;

Volání funkce nastavování PWM

InitEPwm1Example();

EALLOW;

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;

EDIS;

Volání funkce pro nastavování CPU asova e

InitCpuTimers();

Nastavení periody p erušení. Kde jeho nejv tší velikost odpovídá jedné sekund ((&CpuTimer0, 100, 1000000) v mikrosekundách).

ConfigCpuTimer(&CpuTimer0, 2, 10000);

StartCpuTimer0();

Povolí CPU INT3, které je p ipojené k EPWM1-3 INT

IER |= M_INT3;

Povolí CPU INT3, které je p ipojené k CPU-Timer0

Strana: 40 z 49

IER |= M_INT1

umožn te EPWM INTN v PIE: Souboru 3 p erušit 1

PieCtrlRegs.PIEIER3.bit.INTx1 = 1;

umožn te TINT0 v PIE: Souboru 1 p erušení 7

Funkce p erušení od cpu_timer0

interrupt void cpu_timer0_isr(void)

{

Start sekvencru SEQ1.

AdcRegs.ADCTRL2.all = 0x2000;

Strana: 41 z 49 tení ADC hodnot. Po áte ní podmínka nám eká na p erušení, po spln ní podmínky se povolí tení, a uloží hodnotu do prom nné Y_AD.

while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {}

AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

Y_AD =((AdcRegs.ADCRESULT0)>>4);

Tato ást kódu je dopln na z d vod velkých rušení, které se projevovaly,

CpuTimer0.InterruptCount++;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

Nastavení žádané hodnoty pomoci tla ítek. P i držení jednoho nebo druhého tla ítka se m ní žádaná hodnota, aby se nám tato hodnota nem nila p íliš rychle, je do kódu za len no zpožd ní, které nám p i držení tla ítka zm ní

Strana: 42 z 49 žádanou hodnotu po každém t icátém p erušení.

if(GpioDataRegs.GPADAT.bit.GPIO7==1 && GpioDataRegs.GPADAT.bit.GPIO8==1) { TestStisk1 = 0; }

else

{

if(GpioDataRegs.GPADAT.bit.GPIO7==0 && GpioDataRegs.GPADAT.bit.GPIO8==1 &&

W<1999 && TestStisk1==0)

GpioDataRegs.GPADAT.bit.GPIO8 == 1 && W < 1999)

{ TestStisk1++;

if(TestStisk1 == 30){TestStisk1 = 0; }

}

if(GpioDataRegs.GPADAT.bit.GPIO7 == 1 && GpioDataRegs.GPADAT.bit.GPIO8 == 0

&& W > 0 && TestStisk1 == 0) {

Strana: 43 z 49

if(TestStisk1 == 30){TestStisk1 = 0;}

} }

rozsv cení diod podle hodnoty žádané veli iny (W). Dioda svítí vždy pouze jedna a to podle toho ve kterém intervalu se zrovna nachází žádaná hodnota.

if(W > 200 && W < 600){GpioDataRegs.GPASET.bit.GPIO18 = 1;}

else {GpioDataRegs.GPACLEAR.bit.GPIO18 = 1;}

if(W > 600 && W < 1000){GpioDataRegs.GPASET.bit.GPIO17 = 1;}

else {GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;}

if(W > 1000 && W < 1400){GpioDataRegs.GPASET.bit.GPIO16 = 1;}

else {GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;}

if(W > 1400 && W < 1800){GpioDataRegs.GPASET.bit.GPIO15 = 1;}

else {GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;}

if(W > 1800 && W <= 2000){GpioDataRegs.GPASET.bit.GPIO14 = 1;}

else {GpioDataRegs.GPACLEAR.bit.GPIO14 = 1;}

}

Funkce pro nastavení PWM výstupu

void InitEPwm1Example()

Nastavení doby asova e

EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;

Strana: 44 z 49

EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA;

Nastavení po ítacího módu Po ítání nahoru

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;

Vy adí fázi pln ní

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;

Pom r hodinového impulsu k SYSCLKOUT

EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;

EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

Nastavení stohovacího obrazu

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW

Vynuluje LOADMODE

EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

Strana: 45 z 49

Nastavení innosti

Nastaví PWM1A p i události A na p ír stkové ítání

EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;

istí PWM1A p i události A sm rem dol

EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;

P erušení tam kde budeme m nit porovnávané hodnoty

Zakázání p erušení

EPwm1Regs.ETSEL.bit.INTEN = 0;

Za ínat zvýšením CMPA

epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP;

Nastaví ukazatel k PWM jednotce

epwm1_info.EPwmRegHandle = &EPwm1Regs;

Nastavení minimální a maximální hodnoty CMPA/CMPB

epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA;

epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;

}

Funkce PID regulátoru. Nejprve posouváme vektor regula ní odchylky a až teprve potom ji vypo ítáme. Poté z této odchylky m žeme pomocí vzorc

Strana: 46 z 49

void update_compare(EPWM_INFO *epwm_info)

{

epwm_info->EPwmRegHandle->CMPA.half.CMPA = u;

}

Strana: 47 z 49

5.4 Odlad ní PID regulátoru pomocí pracovní desky Starter Kit

I když je program už napsán, tak ješt není práce zcela hotova, ješt je zapot ebí jej odladit. A k tomu nám pom že pracovní deska Starter Kit. Ta je složena z AD a DA p evodník a umož uje nám íst a generovat pot ebný signál.

Aby bylo možno tyto signály zpracovávat a zobrazovat je, tak pot ebujeme využít n jakého softwarového prost edku. K tomu nám poslouží funkce MatLab simulinku, který nám umož uje komunikovat s deskou Starter Kit a skrze ni íst a generovat p esn definovaný signál. Tato komunikace je zobrazena na obrázku 11.

In document ZADÁNÍ BAKALÁ SKÉ PRÁCE (Page 30-47)

Related documents