To jest mój pierwszy post. Jestem facetem od oprogramowania, który próbuje robić sprzęt, więc bądź delikatny :)
Obwód
Projektuję mały obwód (patrz zdjęcie i przepraszam za niechlujny schemat), który jest prosty i po prostu jest zbiorem MOSFETÓW i sterowników bram zaprojektowanych do przełączania obciążeń rezystancyjnych (w tym przypadku podkładek grzewczych) z mikrokontrolera. Elementy grzejne często mają bardzo niską rezystancję, a aby utrzymać moc na pożądanym poziomie, MOSFETY są przełączane za pomocą PWM.
Pomiary
Oprócz aspektu czysto funkcjonalnego, istnieje również nacisk edukacyjny. Chcę mieć możliwość uzyskania informacji zwrotnej na temat bieżącego zużycia. A moim naiwnym podejściem było po prostu wrzucenie kilku obecnych układów scalonych czujnika bocznika. Używając multimetru do pomiaru napięcia wyjściowego z czujnika, faktycznie otrzymuję coś, co wygląda jak średni prąd (z przełączaniem PWM) z powodu „powolności” amperomierza. Ale kiedy podłączam to samo wyjście do np. ADC atmega328p, otrzymuję złe odczyty - prędkość tutaj powoduje odczyt w dowolnym miejscu na fali prostokątnej PWM.
Moje pytanie brzmi: jak przejść do pomiaru (średniego) prądu podczas przełączania z PWM?
Wygląda na to, że projekt jest w porządku, ale mogłem coś przeoczyć zarówno w projekcie, jak iw tym, jak należy używać ADC uC w tym kontekście.
Odpowiedzi:
Czasami to, co wygląda prosto, nie jest takie proste. Masz dość skomplikowany pomiar, ale potrzebujesz prostego wyniku. To, co chcesz zmierzyć, nie jest stałe, zmienia się w czasie. W zależności od poziomu wymagań można obliczyć jedną lub wiele właściwości bieżącego zużycia. Te właściwości pomogą ci lepiej monitorować system. Proponuję ci 3 różne rozwiązania w rosnącej złożoności.
Rozwiązanie 1: Średnia
Chcesz uzyskać wynik jednej wartości -> uzyskać średnią w czasie. Jak już zaproponował @akellyirl, użyj filtra dolnoprzepustowego. Oblicz
float y = alpha*input + (1-alpha)*y
dla każdej próbki, gdziealpha
jest współczynnik wygładzania. Szczegóły w Wikipedii .Rozwiązanie 2: Maks. + Średnia
Jesteś ciekawy w uzyskaniu średniej i wartości maksymalnej. Monitorowanie wartości maksymalnej może być interesujące na przykład dla wymiarowania komponentu.
Rozwiązanie 3: Odchylenie standardowe + maks. + Średnia
Dlaczego?
Zobacz poniższe wykresy. Istnieją 3 sygnały o różnych kształtach. Trójkąt , A sinus i skok sygnału. Wszystkie są okresowe z tym samym okresem, tą samą amplitudą , tą samą średnią i tymi samymi wartościami minimalnymi i maksymalnymi . Ale mają różne kształty i rzeczywiście mają zupełnie inną historię ...
Jedną z różnic jest odchylenie standardowe. Dlatego proponuję rozszerzyć swoje pomiary i uwzględnić odchylenie standardowe. Problem polega na tym, że standardowy sposób jego obliczania zajmuje procesor. Mamy nadzieję, że jest jedno rozwiązanie.
W jaki sposób?
Użyj metody histogramu . Zbuduj histogram wszystkich pomiarów i wydajnie wyodrębnij statystyki (min., Maks., Śr., Odchylenie standardowe) zestawu danych. Histogram grupuje wartości, które mają tę samą wartość lub zakres wartości. Zaletą jest uniknięcie przechowywania wszystkich próbek (zwiększenie liczby w czasie) i szybkie obliczenia na ograniczonej liczbie danych.
Przed rozpoczęciem pobierania pomiarów utwórz tablicę do przechowywania histogramu. Jest to jednowymiarowa tablica liczb całkowitych o rozmiarze 32, na przykład:
int histo[32];
W zależności od zakresu amperomierza, dostosuj poniżej funkcji. Na przykład, jeśli zakres wynosi 256 mA, oznacza to, że przedział 0 histogramu zostanie zwiększony o wartość między 0 a 8 mA, przedział 1 o wartość między 8 a 16 mA itd. Tak więc, aby reprezentować, potrzebujesz liczby całkowitej numer pojemnika histogramu:
short int index;
Za każdym razem, gdy otrzymasz próbkę, znajdź odpowiedni indeks bin:
index = (short int) floor(yi);
I zwiększ ten kosz:
histo[index] += 1;
Aby obliczyć średnią, uruchom następującą pętlę:
Aby obliczyć odchylenie standardowe, uruchom następującą pętlę:
Strategia metody histogramu polega na wykonywaniu powolnych operacji na kilku przedziałach, zamiast na wszystkich zebranych próbkach sygnału. Im dłuższy rozmiar próbki, tym lepiej. Jeśli chcesz uzyskać więcej informacji, przeczytaj tę interesującą stronę Histogram, Pmf i Pdf .
źródło
Prawidłowo rozumiesz problem: musisz uzyskać „średnią” PWM, podobnie jak miernik używany do pomiarów.
Możesz użyć filtra RC dla sygnałów A1,2,3, których stała czasowa jest co najmniej dziesięć razy większa niż okres PWM. Oznacza to, że jeśli okres PWM wynosił 10 mikrosekund, to stała czasowa RC powinna wynosić 100 mikrosekund. Na przykład 10kOhm x 10nF = 100us
Lepszym rozwiązaniem jest cyfrowa filtracja sygnałów w mikrokontrolerze:
Zmień wartość „0,99”, aby zmienić stałą czasową tego filtra cyfrowego.
źródło