Operácie

Generovanie kódu z prostredia Matlaba/Simulink

Zo stránky SensorWiki

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.

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

V tejto časti rozoberieme, odkiaľ filter pochádza, ako sme ho pretransformovali do digitálnej podoby a prečo sme zvolili integer aritmetiku.

Spojitý model máme spojitú prenosovú funkciu 1. rádu


  Máme spojitú prenosovú funkciu prvého rádu
  G(s) = 1 / (0,5·s + 1),
  kde K = 1 a časová konštanta T = 0,5 s. Tento systém pri skoku vstupu vykresľuje exponenciálnu odozvu danú T.

2. Diskretizácia

  Pre mikroprocesor sme zvolili vzorkovací čas Ts = 0,01 s (100 Hz) s metódou Zero-Order Hold (ZOH). Koeficienty sa vypočítajú podľa
    a = exp(–Ts/T) ≈ exp(–0,01/0,5) ≈ 0,98,
    b = 1 – a ≈ 0,02.
  Rozdielová rovnica tak znie:
    y[n] = 0,98·y[n–1] + 0,02·u[n].

3. Integer aproximácia

  ATmega328P nemá hardvérovú podporu float operácií, preto násobíme koeficienty 100 a zaokrúhľujeme:
    K1 = 98,  K2 = 2,  deliteľ = 100.
  Výsledná implementácia:
    y[n] = (K1·y[n–1] + K2·u[n]) / 100.
  Tento prístup je rýchly a postačuje pre 16-bitové výpočty.


Celkový pohľad na zariadenie.

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.

Schéma zapojenia.


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.

Aplikácia.

Video:



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