Operácie

Generátor harmonického signálu: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
Bez shrnutí editace
StudentMIPS (diskusia | príspevky)
d quote fix
Riadok 1: Riadok 1:
Záverečný projekt predmetu MIPS / LS2026 - """Oleksandr Mykyta"""
Záverečný projekt predmetu MIPS / LS2026 - '''Oleksandr Mykyta'''


== Zadanie ==
== Zadanie ==


Úlohou bolo generovať """harmonický signál""" bez použitia funkcií """sin()""" alebo """cos()""".   
Úlohou bolo generovať '''harmonický signál''' bez použitia funkcií '''sin()''' alebo """cos()""".   
Na tento účel bol použitý oscilátor realizovaný ako prenosová funkcia:
Na tento účel bol použitý oscilátor realizovaný ako prenosová funkcia:


Riadok 229: Riadok 229:
Kroky:
Kroky:
- výpočet oscilátora
- výpočet oscilátora
- generovanie """x"""
- generovanie '''x'''
- výpočet systému
- výpočet systému
- """PWM""" výstup
- '''PWM''' výstup
- """UART""" komunikácia
- '''UART''' komunikácia


=== Overenie ===
=== Overenie ===
Riadok 241: Riadok 241:


Pozorované javy:
Pozorované javy:
- """zmena amplitúdy"""
- '''zmena amplitúdy'''
- """fázový posun"""
- '''fázový posun'''


== Čo by som urobil inak ==
== Čo by som urobil inak ==


- použiť """bilineárnu transformáciu"""
- použiť '''bilineárnu transformáciu'''
- presnejší výpočet """cos(θ)"""
- presnejší výpočet '''cos(θ)'''
- merať """amplitúdu a fázu""" priamo v MCU
- merať '''amplitúdu a fázu''' priamo v MCU


[[Category:AVR]] [[Category:MIPS]]
[[Category:AVR]] [[Category:MIPS]]

Verzia z 13:26, 18. apríl 2026

Záverečný projekt predmetu MIPS / LS2026 - Oleksandr Mykyta

Zadanie

Úlohou bolo generovať harmonický signál bez použitia funkcií sin() alebo """cos()""". Na tento účel bol použitý oscilátor realizovaný ako prenosová funkcia:

H(s) = 1 / ((s · T)^2 + 1)

Zároveň bolo potrebné zmerať jeden bod """frekvenčnej charakteristiky""" systému:

H(s) = 1 / (s · T + 1)

pre frekvenciu: ω = 1 / T, kde T = 0.5 s.

Výstupný signál má mať tvar:

A₀ + A₁ · sin(ωt + φ)

kde: A₀ = 128, A₁ = 100.

Analýza a opis riešenia

Cieľom riešenia je vytvoriť """sínusový signál""" bez použitia matematických funkcií """sin()""" alebo """cos()""". Tento problém sa rieši pomocou """diskrétneho oscilátora""", ktorý vychádza z diferenciálnej rovnice harmonického kmitania.

Základom je rovnica:

y'' + ω²y = 0

Táto rovnica popisuje """harmonické kmity""" a jej riešením sú funkcie sin() a cos().

Teoretický základ a odvodenia

Laplaceova transformacia

Vychádzajme z """prenosovej funkcie""" systému:

H(s) = Y(s) / X(s) = 1 / (T · s + 1)

Po úprave:

Y(s) · (T · s + 1) = X(s)
T · s · Y(s) + Y(s) = X(s)

Použitím """inverznej Laplaceovej transformácie""" dostaneme:

T · dy(t)/dt + y(t) = x(t)

Diskretizácia

Mikrokontrolér pracuje v """diskrétnom čase""".

Pre druhú deriváciu:

y'' ≈ (y[n] − 2y[n−1] + y[n−2]) / T_s²

Dosadenie:

y'' + ω²y = 0

Výsledok:

y[n] = (2 / (1 + ω²T_s²)) · y[n−1] − (1 / (1 + ω²T_s²)) · y[n−2]

Diskrétny oscilátor (presný model)

Trigonometrické identity:

sin(A + B) = sin(A)cos(B) + cos(A)sin(B)
sin(A − B) = sin(A)cos(B) − cos(A)sin(B)

Po sčítaní:

sin(A + B) + sin(A − B) = 2 · sin(A) · cos(B)

Dosadenie:

A = (n−1)θ B = θ

Výsledok:

sin(nθ) + sin((n−2)θ) = 2 · cos(θ) · sin((n−1)θ)

Definícia:

y[n] = sin(nθ)

Rekurentný vzťah:

y[n] = 2 · cos(θ) · y[n−1] − y[n−2]

Výpočet parametrov

Vzťah:

θ = ω · T_s

Konštanty:

T = 0.5 s ω = 1 / T = 2 rad/s SAMPLE_RATE = 1000 Hz T_s = 0.001 s

Výsledok:

θ = 0.002

Aproximácia cos()

Taylorov rozvoj:

cos(θ) ≈ 1 − θ²/2

Úprava:

2cos(θ) ≈ 2 · (1 − θ²/2)

Inicializácia oscilátora

Počiatočné hodnoty:

y1 = 1 y2 = 1 − θ²/2

Generovanie signálu

Rozsah:

⟨−1, 1⟩

Výstup:

x = A0 + A1 · y

Konštanty:

A0 = 128 A1 = 100

Diskretizácia systému 1 / (sT + 1)

Spojitá rovnica:

T · dy/dt + y = x

Eulerova metóda:

dy/dt ≈ (y[n] − y[n−1]) / T_s

Úpravy:

y[n] = x − (T / T_s) · y[n] − (T / T_s) · y[n−1]
y[n] · (1 + (T / T_s)) = x − (T / T_s) · y[n−1]
y[n] = (T_s / (T + T_s)) · x + (T / (T + T_s)) · y[n−1]

Definícia parametra:

α = T_s / (T + T_s)

Finálny tvar:

y[n] = α · x + (1 − α) · y[n−1]
y[n] = y[n−1] + α · (x − y[n−1])

Algoritmus a program

Použité časti: - """diskrétny oscilátor""" - """numerický model systému"""

Frekvencia prerušenia:

1 kHz

Kroky: - výpočet oscilátora - generovanie x - výpočet systému - PWM výstup - UART komunikácia

Overenie

Výpis:

x, y_sys

Pozorované javy: - zmena amplitúdy - fázový posun

Čo by som urobil inak

- použiť bilineárnu transformáciu - presnejší výpočet cos(θ) - merať amplitúdu a fázu priamo v MCU