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.