
Program symulacyjny do obliczania wartości tętnień oraz czasu stabilizacji kilku filtrów RC z przebiegu PWM (skrótowo):
1xRC, 2xRC, 3xRC, 3xRC_BUF, SALLEN-KEY, RC_SALLEN-KEY, 4th_1xOPAMP, 2xSALLEN-KEY
Na wstępie, gdyby ktoś nie wiedział, co to jest PWM i filtry napisałem troszke o tym:
https://www.elektroda.pl/rtvforum/viewtopic.php?p=19084682
Myśle że warto przeczytać, chociaż wstęp, inaczej możecie nie wiedzieć o czym jest ten program.
Programik pisany był na system linux, działa w konsoli, nie wiem czy skompiluje się na innych systemach.
Prezentuje się skromnie


Po uruchomieniu mamy następujące opcje do wyboru:
EDYCJA:
LEFT / RIGH - poruszanie sie po menu
UP/ DOWN - zmiana o 1
+ / - zmiana o 0.1
0.123456789 zatwierdzenie ENTEREM - nowa wartość z klawiatury
Edytowany element ma znaczek '>' dla rozpoznania.
1xRC itp - rodzaj filtru
T - stała czasowa (wartości elementów R1 C1 1 równej okresowi PWM)
I - współczynnik rezystancji (impedancji) dla elementów gałęzi RC
IFL - współczynnik rezystancji (impedancji) dla gałęzi filtrów aktywnych
MPWM - zwielokrotnienie PWM (np. zamiast 1x12 bit 2x11 bit)
TIMS - maksymalny czas trwania symulacji
CPWM - ilość cykli obliczeniowych (precyzja)
ALL SAVE / ADD-a - zapisywanie wszystkich lub po wciśnięciu 'a', symulacji do pliku html
AUTOMATIC / MANUAL - automatyczne wyliczenie wartości RC (z T I IFL) lub ręczna edycja
R1-R4 C1-C4 - wartości elementów w odniesieniu do okresu PWM
r -uruchom symulacje
q - wyjście z programu
a - dodaj wyniki do pliku html
c - zakończ plik html
Tak prezentują się filtry:








Program podczas obliczeń określa czas stabilizacji oraz wartości tętnień dla 50% wypełnienia, plus wartości overshoot.
Wyniki:
aprox - aproksymacja do kolejnej liczby dziesiętnej( dla 50% PWM to jest 0,4 0,49 0,499 .. itd )
tim - czas w stałych czasowych okresu PWM
pk-pk - tętnienia międzyszczytowe za określony okres
overshoot - wyniki overshoot jeśli takowe zostały obliczone
tim - czas w stałych czasowych overshoot
value - wartość overshoot
pk-pk - tętnienia międzyszczytowe za określony okres
Dla każdego podaje czas w stałych czasowych. Zapisuje także wyniki w pliku html, ilość wyników jest ograniczona do 15 na jeden plik html. Może być mniejsza przez wciśniecie 'c' i zakończenie zapisywania do pliku. Pliki html numerowane są od 0 do 999. Pliki nie są nadpisywane i zapisywane są do kolejnej wolnej numeracji.
Progam kończy symulacje gdy:
- wartości będą różne, i dokładne 9 miejsc po przecinku
- wartość międzyszczytowa overshoot jest mniejsza niż 9-go miejsca po przecinku
- zrobiono 9 analiz dla overshoot
- przekroczony został czas symulacji
- przekroczono 90000 stałych czasowych
Wykresy:
Jeźeli mamy w systemie program do wykresów gnuplot, to generuje trzy zbiorcze wykresy.
Jeden z czasem ustalania, drugi z wartością międzyszczytową, trzeci parametr to jakość filtracji.
Gnuplot ma kilka wyjść generujacych grafike, wybierane są w kolejności: png, jpeg, pngcairo
Opis legendy na wykresach:
filtr-kolejny numer symulacji-stała czasowa-współczynnik impedancji dla RC-współczynnik impedancji dla SK-zwielokrotnieniePWM
Przykład zbiorczych wykresów:



Tak prezentuje się strona html:

Opcje podczas uruchomienia:
-p ścieżka gdzie mają być zapisywane wyniki symulacji, ostatni katalog nie musi istnieć.
domyślnie /tmp/pwmf
Ograniczenia:
R - 0.1 - 1000000
C - 0.001 - 1000
T - I - IFL - 0.1 - 10000
MPWM - 1 - 2048 (potęgi dwa)
TIMS - 1 - 1000
CPWM - 1 - 10000
Wady:
słabym punktem programu, którego jeszcze musze przemyśleć, jest fakt że dla filtrów z oscylacjami wykresy są tylko w zakresie do czasu osiągnięcia tych 50%. Wynika to z tego że 100% pewne oszacowanie takich na bazie symulacji filtrów jest problematyczne. O ile przy wykryciu kilku kolejnych oscylacji daje możliwość oszacowania wartości o tyle czasem odpowiedź układu jest długa w skali czasu i nie ma po prostu dostatecznych danych. No, może angażując bardziej zaawansowaną matematyke. No ale ja jestem przeciętniakiem matematycznym

Kolejna rzecz to odróżnienie z wykresu czy dane są po oscylacjach czy nie. Tego też nie widać. A może okazać się istotne. Stąd wykresy mają charakter wizualizacyjny a konkrety należy odczytać po prostu z danych.
Błedy obliczeniowe:
Program liczy dość prosto na liczbach typu double. Nie jest jakimś majstersztykiem obliczeniowym, ponieważ mam takie wrażenie że większa dokładność nie jest jakoś potrzebna.
Wyniki wartości tętnień dla różnych CPWM dla filtra SALLEN_KEY dla dokładności 6:
1 0.03124988
2 0.03100568
4 0.03088414
8 0.03082351
16 0.03079350
32 0.03077863
64 0.03077120
128 0.03076750
256 0.03076565
512 0.03076473
1024 0.03076427
2048 0.03076404
Im większa jest wartość CPWM tym dłuższy czas kalkulacji z powodu większej ilości obliczeń.
Plany:
- kolorowanie
- uruchamianie symulacji z danych z pliku
- uruchomienie wykresu podczas działania programu
- ulepszenie pliku html: np sortowanie itp
- jakiś opis itp.
Program:
Program jest na gitlabie, na licencji GNU-GPLv2, wersja binarna 32 i 64 bitowa linux, źródła:
https://gitlab.com/trolsix/pwmfl/
Wersja 0.1.0 w załączniku
Cool? Ranking DIY