Witam, mam takie pytanie, ostatnimi czasy pracowałem nad pomiarem energii kWh jakie z powodzeniem utylizuje u siebie w domu, ale za pomocą raspberry pi[C] i ADC MCP3208 [12 bit]. Udaje mi się przy pomocy tego zestawu osiągnąć około 120-180 pomiarów na/Sinus, całość już działała jakiś czas dobrze, zdecydowałem sie jednak na upgrade.
Moje zainteresowanie padło na maksymalną prostotę, i zakupiłem w tym celu arduino DUE. po kilku H spędzonych w internecie i czytania na temat możliwości tego urządzenia skończyłem z programem który osiąga następujące efekty w trybie freerun dla 2 ADC
tylko 12 bit [0-4095]:
pomiar 1 sinusoidy napięcie/prąd to około 5300 próbek
(1 pomiar do tablicy to 1 odczyt z ADC)
"oversampling" 13 bit[0-8191]:
pomiar 1 sinusoidy napięcie/prąd to około 1350 próbek (4x mniej)
(1 pomiar do tablicy to 4^1 odczytów podzielone przez 2^1 - w praktyce sumujemy 4 pomiarów ze sobą i następnie dzielimy je przez 2 dla 1 dodatkowego bita)
"oversampling" 14 bit[0-16383]:
pomiar 1 sinusoidy napięcie/prąd to około 350 próbek (16x mniej)
(1 pomiar do tablicy to 4^2 odczytów podzielone przez 2^2 - w praktyce sumujemy 16 pomiarów ze sobą i następnie dzielimy je przez 4 dla 2 dodatkowych bitów)
W obu przypadkach tracimy na ilosci próbek, ale zyskujemy na rozdzielczości.
W związku z tym ma 2 pytania.
Overampling wydaje się działać i dawać pośrednio zadowalające efekty. Chciałbym sie zapytać jak wy byście się do tego faktu odnieśli.
I drugie pytanie odnosi się do samych pomiarów, niezależnie od rozdzielczości.
Problemem jednak są zakłócenia. Zdaję sobię sprawę, ze stosowanie zwykłych przewodów dla tego typu płytek nie jest najlepszym pomysłem (z tąd mogą się brać widoczne zakłócenia). tak samo jak ze wzrostem rozdzielczości wzrasta również poziom zakłóceń.
Przy 12 bitach, napięciu odniesienia 3.3V i czujniku typu SCT-013-000 pomiar prądu zużywanego przez urządzenia o niskich mocach (np 30/50W) jest praktycznie niemożliwy, przy 14 bitach i jest już możliwy taki pomiar, gdzie przy podłączonej zwykłej żarowej żarówce 45W z P=U*I wychodzi mi ~38W, problemem są właśnie te zakłucenia.
Znacie może jakiś sprawdzony sposób na programowy filtr gotowej tablicy zawierającej takie próbki, bądź dokonywania obliczeń na bieżąco w trakcie pomiaru?
Próbowałem z pętlą która liczyła średnią z 2 pomiarów z każdego parzystego pomiaru w tablicy (numer porządkowy) ale nie jestem zadowolony z efektu.
Zdaję sobię sprawę, że pomimo wyeliminowania wszelkich zakłóceń i szczelności ekranowej układu pomiarowego po mojej stronie i tak zostają kilometry kabla zarówno w ziemi jak i na liniach napowietrznych i te zakłócenia zawsze będą występować, na dodatek stosowanie oversamplingu również nie polepsza tutaj sprawy.
Nie chodzi mi o gotowy kod na "gładką" sinusoidę, chodzi mi o pozbycie sie z niej tych wszystkich dodatkowych "strzępów" w rozważaniu teoretycznym.
W chwili obecnej chwili "noise" sprawia błąd pomiaru w szczytowych okolicach 0.08-0.12A RMS(co i tak nie jest tragiczne przy 100 A czujniku tego typu) jednak wystarczy żeby pomiar mocy żarówki 45W wahał się od 25-55W.
Ewentualne obejście problemu to zastosowanie 3 pomiarów jednocześnie, przy czym 1 pomiar napięcie i 2 pomiarów z 2 różnych sensorów, gdzie 100A wpięty będzie na stałe i jeżeli pomiar będzie mniejszy niż np 10A program podłączy 30A (czulszy model) i będzie jego uwzględniał w pomiarach zamiast 100A.
----------- EDIT -------------
Jako ciekawostka, kod który stosuję, Wartość ADC z A0 oraz A1 znajują się pod AN0 i AN1 po wywołaniu funkcji read_adc():
Po przetestowaniu poniższego programu wyniki sa następujące dla pomiarów o łącznym czasie trwania 20,5 ms (nieco ponad 1 okres 50Hz) przy odczycie 2 ADC:
12 bitów - 6821 próbek
13 bitów - 1706 próbek
14 bitów - 427 próbek
15 bitów - 107 próbek
16 bitów - 27 próbek
17 bitów - 7 próbek
oczywiście 15,16,17 tutaj występują jako ciekawostka, przydatne, keidy chcemy mierzyć dosyć dokładnie napięcie/prąd stałe z wyjścia czujnika lub baterii.
Kod podaję, gdyż nie tak łatwo znaleźć informacje w internecie jak to fajnie poskładać żeby osiągnąć te 1MS/s w arduino due.
Ilość sampli/s spada tyle razy ile ADC chcemy odczytywać na raz, czyli:
1 adc około 1MS/s
2 adc około 500 kS/S
itd
Z góry dzięki za wszelkie rady.
Moje zainteresowanie padło na maksymalną prostotę, i zakupiłem w tym celu arduino DUE. po kilku H spędzonych w internecie i czytania na temat możliwości tego urządzenia skończyłem z programem który osiąga następujące efekty w trybie freerun dla 2 ADC
tylko 12 bit [0-4095]:
pomiar 1 sinusoidy napięcie/prąd to około 5300 próbek
(1 pomiar do tablicy to 1 odczyt z ADC)
"oversampling" 13 bit[0-8191]:
pomiar 1 sinusoidy napięcie/prąd to około 1350 próbek (4x mniej)
(1 pomiar do tablicy to 4^1 odczytów podzielone przez 2^1 - w praktyce sumujemy 4 pomiarów ze sobą i następnie dzielimy je przez 2 dla 1 dodatkowego bita)
"oversampling" 14 bit[0-16383]:
pomiar 1 sinusoidy napięcie/prąd to około 350 próbek (16x mniej)
(1 pomiar do tablicy to 4^2 odczytów podzielone przez 2^2 - w praktyce sumujemy 16 pomiarów ze sobą i następnie dzielimy je przez 4 dla 2 dodatkowych bitów)
W obu przypadkach tracimy na ilosci próbek, ale zyskujemy na rozdzielczości.
W związku z tym ma 2 pytania.
Overampling wydaje się działać i dawać pośrednio zadowalające efekty. Chciałbym sie zapytać jak wy byście się do tego faktu odnieśli.
I drugie pytanie odnosi się do samych pomiarów, niezależnie od rozdzielczości.
Problemem jednak są zakłócenia. Zdaję sobię sprawę, ze stosowanie zwykłych przewodów dla tego typu płytek nie jest najlepszym pomysłem (z tąd mogą się brać widoczne zakłócenia). tak samo jak ze wzrostem rozdzielczości wzrasta również poziom zakłóceń.
Przy 12 bitach, napięciu odniesienia 3.3V i czujniku typu SCT-013-000 pomiar prądu zużywanego przez urządzenia o niskich mocach (np 30/50W) jest praktycznie niemożliwy, przy 14 bitach i jest już możliwy taki pomiar, gdzie przy podłączonej zwykłej żarowej żarówce 45W z P=U*I wychodzi mi ~38W, problemem są właśnie te zakłucenia.
Znacie może jakiś sprawdzony sposób na programowy filtr gotowej tablicy zawierającej takie próbki, bądź dokonywania obliczeń na bieżąco w trakcie pomiaru?
Próbowałem z pętlą która liczyła średnią z 2 pomiarów z każdego parzystego pomiaru w tablicy (numer porządkowy) ale nie jestem zadowolony z efektu.
Zdaję sobię sprawę, że pomimo wyeliminowania wszelkich zakłóceń i szczelności ekranowej układu pomiarowego po mojej stronie i tak zostają kilometry kabla zarówno w ziemi jak i na liniach napowietrznych i te zakłócenia zawsze będą występować, na dodatek stosowanie oversamplingu również nie polepsza tutaj sprawy.
Nie chodzi mi o gotowy kod na "gładką" sinusoidę, chodzi mi o pozbycie sie z niej tych wszystkich dodatkowych "strzępów" w rozważaniu teoretycznym.
W chwili obecnej chwili "noise" sprawia błąd pomiaru w szczytowych okolicach 0.08-0.12A RMS(co i tak nie jest tragiczne przy 100 A czujniku tego typu) jednak wystarczy żeby pomiar mocy żarówki 45W wahał się od 25-55W.
Ewentualne obejście problemu to zastosowanie 3 pomiarów jednocześnie, przy czym 1 pomiar napięcie i 2 pomiarów z 2 różnych sensorów, gdzie 100A wpięty będzie na stałe i jeżeli pomiar będzie mniejszy niż np 10A program podłączy 30A (czulszy model) i będzie jego uwzględniał w pomiarach zamiast 100A.
----------- EDIT -------------
Jako ciekawostka, kod który stosuję, Wartość ADC z A0 oraz A1 znajują się pod AN0 i AN1 po wywołaniu funkcji read_adc():
Po przetestowaniu poniższego programu wyniki sa następujące dla pomiarów o łącznym czasie trwania 20,5 ms (nieco ponad 1 okres 50Hz) przy odczycie 2 ADC:
12 bitów - 6821 próbek
13 bitów - 1706 próbek
14 bitów - 427 próbek
15 bitów - 107 próbek
16 bitów - 27 próbek
17 bitów - 7 próbek
oczywiście 15,16,17 tutaj występują jako ciekawostka, przydatne, keidy chcemy mierzyć dosyć dokładnie napięcie/prąd stałe z wyjścia czujnika lub baterii.
Kod podaję, gdyż nie tak łatwo znaleźć informacje w internecie jak to fajnie poskładać żeby osiągnąć te 1MS/s w arduino due.
Ilość sampli/s spada tyle razy ile ADC chcemy odczytywać na raz, czyli:
1 adc około 1MS/s
2 adc około 500 kS/S
itd
Code: c
Z góry dzięki za wszelkie rady.