Generovanie kódu z prostredia Matlaba/Simulink: Rozdiel medzi revíziami
Zo stránky SensorWiki
Riadok 18: | Riadok 18: | ||
V tejto časti popíšeme, prečo a ako sme diskrétny filter navrhli, od spojitého modelu až po finálnu integer implementáciu. | V tejto časti popíšeme, prečo a ako sme diskrétny filter navrhli, od spojitého modelu až po finálnu integer implementáciu. | ||
1. Spojitý model | 1. Spojitý model | ||
• Prenosová funkcia prvého rádu je G(s)=1/(0,5*s+1), čo znamená, že pri skoku vstupu sa výstup exponenciálne približuje k cieľovej hodnote s časovou konštantou T = 0,5 s. | • Prenosová funkcia prvého rádu je G(s)=1/(0,5*s+1), čo znamená, že pri skoku vstupu sa výstup exponenciálne približuje k cieľovej hodnote s časovou konštantou T = 0,5 s. | ||
2. Prečo digitálny filter | 2. Prečo digitálny filter | ||
• Mikrokontrolér ATmega328P pracuje v diskrétnom čase a vyžaduje digitálne spracovanie signálu. | • Mikrokontrolér ATmega328P pracuje v diskrétnom čase a vyžaduje digitálne spracovanie signálu. | ||
• ADC prevádza analógový signál na čísla, následný filter sa implementuje v kóde ako rozdielová rovnica. | • ADC prevádza analógový signál na čísla, následný filter sa implementuje v kóde ako rozdielová rovnica. | ||
3. Diskretizácia (ZOH) | 3. Diskretizácia (ZOH) | ||
• Pri vzorkovacom čase Ts = 0,01 [s]: a = exp(–Ts/T) = exp(–0,01/0,5) ≈ 0,98; b = 1 – a ≈ 0,02. | • Pri vzorkovacom čase Ts = 0,01 [s]: a = exp(–Ts/T) = exp(–0,01/0,5) ≈ 0,98; b = 1 – a ≈ 0,02. | ||
• Rovnica v diskrétnej podobe: y[n] = 0,98*y[n–1] + 0,02*u[n]. | • Rovnica v diskrétnej podobe: y[n] = 0,98*y[n–1] + 0,02*u[n]. | ||
4. Integer aproximácia | 4. Integer aproximácia | ||
• Pre rýchle a efektívne výpočty na AVR používame celočíselný zápis: K1 = 98, K2 = 2, deliteľ = 100. | • Pre rýchle a efektívne výpočty na AVR používame celočíselný zápis: K1 = 98, K2 = 2, deliteľ = 100. | ||
• Riešenie: y[n] = (98*y[n–1] + 2*u[n]) / 100. | • Riešenie: y[n] = (98*y[n–1] + 2*u[n]) / 100. | ||
5. Mapovanie ADC signálu | 5. Mapovanie ADC signálu | ||
• ADC hodnota 0–1023 zodpovedá 0–5 V. | • ADC hodnota 0–1023 zodpovedá 0–5 V. | ||
• Pre zobrazenie v stotinách voltu: volt = (adc_val * 500) / 1023, výsledok 0–500. | • Pre zobrazenie v stotinách voltu: volt = (adc_val * 500) / 1023, výsledok 0–500. | ||
6. Model v MATLAB/Simulink | 6. Model v MATLAB/Simulink | ||
Nižšie je zobrazená schéma, ktorú sme vytvorili v Simulinku na simuláciu diskrétneho filtra (vstup , výstup ): | Nižšie je zobrazená schéma, ktorú sme vytvorili v Simulinku na simuláciu diskrétneho filtra (vstup , výstup ): | ||
Verzia z 14:59, 12. jún 2025
Záverečný projekt predmetu MIPS / LS2025 - Meno Priezvisko
Zadanie
Na platforme Arduino Uno R3 (ATmega328P) implementovať diskrétny filter prvého rádu so spojitou prenosovou funkciou G(s)=K/(T*s+1), K=1[-], T=0,5 [s], so vzorkovacím časom Ts=0,01. Vstupom je jednorazový skok napätia z 0 V na 2,00 V (potenciometer na A0). Výstup má byť v celočíselnej aritmetike (integer), formátovaný ako text "x.yy\n" a odoslaný cez UART0 (115200 Bd). Grafické zobrazenie prechodovej charakteristiky sa vykoná v SerialPlot.

Literatúra:
Analýza a opis riešenia
V tejto časti popíšeme, prečo a ako sme diskrétny filter navrhli, od spojitého modelu až po finálnu integer implementáciu.
1. Spojitý model
• Prenosová funkcia prvého rádu je G(s)=1/(0,5*s+1), čo znamená, že pri skoku vstupu sa výstup exponenciálne približuje k cieľovej hodnote s časovou konštantou T = 0,5 s.
2. Prečo digitálny filter
• Mikrokontrolér ATmega328P pracuje v diskrétnom čase a vyžaduje digitálne spracovanie signálu.
• ADC prevádza analógový signál na čísla, následný filter sa implementuje v kóde ako rozdielová rovnica.
3. Diskretizácia (ZOH)
• Pri vzorkovacom čase Ts = 0,01 [s]: a = exp(–Ts/T) = exp(–0,01/0,5) ≈ 0,98; b = 1 – a ≈ 0,02.
• Rovnica v diskrétnej podobe: y[n] = 0,98*y[n–1] + 0,02*u[n].
4. Integer aproximácia
• Pre rýchle a efektívne výpočty na AVR používame celočíselný zápis: K1 = 98, K2 = 2, deliteľ = 100.
• Riešenie: y[n] = (98*y[n–1] + 2*u[n]) / 100.
5. Mapovanie ADC signálu
• ADC hodnota 0–1023 zodpovedá 0–5 V.
• Pre zobrazenie v stotinách voltu: volt = (adc_val * 500) / 1023, výsledok 0–500.
6. Model v MATLAB/Simulink
Nižšie je zobrazená schéma, ktorú sme vytvorili v Simulinku na simuláciu diskrétneho filtra (vstup , výstup ):

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Algoritmus a program
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...
#include <avr/io.h>
int main(void)
{
unsigned int measuredValue;
while (1)
{
/* relax */
}
return(0);
}
#include <avr/io.h>
void adc_init(void); // A/D converter initialization
unsigned int adc_read(char a_pin);
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:
Zdrojový kód: zdrojaky.zip
Overenie
Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.