Spisu treści:
- Krok 1: Demonstracja
- Krok 2: Wykorzystane zasoby
- Krok 3: Schemat blokowy
- Krok 4: Schemat
- Krok 5: LM386 - Przypinanie
- Krok 6: AmpOp - Dyferencjał (subtraktor)
- Krok 7: AmpOp - sumator falowników
- Krok 8: Klon Mini - Pinage
- Krok 9: Maple Mini - Przypinanie - a / D używane podczas przechwytywania
- Krok 10: Montaż
- Krok 11: Wykres z uzyskanymi danymi
- Krok 12: Obliczanie wartości skutecznej
- Krok 13: Kod źródłowy
- Krok 14: Pliki
Wideo: Pomiar napięcia True-RMS AC: 14 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Dzisiaj użyjemy STM32 Maple Mini do odczytu AC. W naszym przykładzie otrzymamy wartość RMS sieci energetycznej. Jest to bardzo przydatne dla tych, którzy chcą monitorować sieć elektryczną pod kątem Internetu Rzeczy. Następnie stworzymy aplikację wykorzystującą moc obliczeniową Maple Mini, zastosujemy obwód elektroniczny umożliwiający akwizycję sygnału 127Vac, a także zastosujemy obliczenia średniej kwadratowej (RMS) na próbkach.
Krok 1: Demonstracja
W naszym dzisiejszym zespole mamy STM32, oprócz naszego obwodu analogowego, aby wprowadzić wejście 110. Aby uniknąć wstrząsów, izoluj rezystor, który wchodzi przez 110.
Obwód jest dość wrażliwy. Dostaję się z 110, ale zmniejszam go 168 razy za pomocą dzielnika napięcia i wkładam do wzmacniacza operacyjnego, który ma kilka funkcji.
Mamy też opcjonalne kondensatory do filtrowania źródła. Jeśli twoje źródło jest dobrej jakości, nie musisz ich używać.
Wejście AD jest obliczane przez oscyloskop, w którym widać sinusoidę, która nie wynosi 110 (ale jest dobrze uformowana). Inną rzeczą jest to, że napięcie w naszej sieci elektrycznej nie wynosi 110 (w rzeczywistości jest to 127 woltów). Ale jak przechodzimy przez stabilizator to dostosuje się do 115V.
Wartość wyświetlana na monitorze szeregowym jest obliczana w RMS, czyli wartością identyfikowaną przez Fluke Meter.
Krok 2: Wykorzystane zasoby
• Zworki
• klon mini
• Płyta prototypowa
• Wzmacniacz LM386
• Symetryczne źródło (+5V i -5V)
• Potencjometr wieloobrotowy 10k (lub potencjometr)
• Cztery kondensatory z poliestru 100nF
• Trzy rezystory 10k
• Cztery rezystory 470k
• Jeden rezystor 5k6
• Jedna dioda Zenera 1n4728A
Krok 3: Schemat blokowy
Krok 4: Schemat
Jest to obwód, który opracowałem na podstawie specyfikacji, które uważam za najlepsze do tego pomiaru, ale istnieje kilka innych przykładów, które można znaleźć w Internecie.
Krok 5: LM386 - Przypinanie
LM386 ma dwa wzmacniacze do kondycjonowania lub wzmacniania sygnału.
Krok 6: AmpOp - Dyferencjał (subtraktor)
Krok 7: AmpOp - sumator falowników
Krok 8: Klon Mini - Pinage
Piny zaznaczone na:
Czerwony >> Tolerancja 3V3
Zielony >> tolerancja 5V
Krok 9: Maple Mini - Przypinanie - a / D używane podczas przechwytywania
Podkreślam tutaj, że pin, którego użyłem to D11, który (w nomenklaturze STMicroelectronics) to PA0.
Krok 10: Montaż
Do naszego obwodu potrzebujesz źródła symetrycznego, takiego jak to, które stworzyliśmy dla tego projektu. W przeciwnym razie będziesz potrzebować dwóch źródeł.
Krok 11: Wykres z uzyskanymi danymi
Krok 12: Obliczanie wartości skutecznej
Krok 13: Kod źródłowy
Kod źródłowy - Definicje i stałe
Najpierw zdefiniowaliśmy odczyt pinów jako D11, a także różne stałe używane w obliczeniach.
#define leituraTensao D11 //AD CH0 no pino PA0 //valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; //valor teórico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; //Valor usado na multiplicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; //Valor teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; //valor teórico do offsetu do amplifikatora = Vcc / 2.0; const float offSet = 1,66; //fator teórico da conversão do AD = 3,3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; //resulta em 1, 027 segundos para cada atualização //const int amostras = 35715; //resulta em 0, 514 sekund para cada atualização
Kod źródłowy - zmienne globalne
Teraz definiujemy kilka zmiennych globalnych.
pływak Vrms = 0.0; //armazena o valor rms da tensãofloat Vmax = 0.0; //armazena o valor máximo detectado float Vmin = 10000.0; //armazena o valor minimo detectado float Vmed = 0.0; //armazena o valor médio entre Vmáx e Vmín
Kod źródłowy - konfiguracja ()
Uruchom port szeregowy z prędkością 1Mbps. Dostosowaliśmy port AD jako wejście i odczekaliśmy 5 sekund przed rozpoczęciem zbierania danych. Czas czuwania jest opcjonalny.
void setup() { Serial.begin(1000000); //zainicjuj port szeregowy em 1Mbps pinMode(leituraTensao, INPUT); //ajusta a porta do AD como entrada delay(5000); //aguarda 5s antes de iniciar a coleta. (opcjonalnie) }
Kod źródłowy - Pętla () - Uruchamia zmienne zbierania danych
W pętli mamy zmienną do iteracji. Tutaj również przechowujemy odczyty AD w 0.0 i ponownie uruchamiamy zmienną VRMS również w 0.0.
void loop() { int i = 0; //variável para iteração float leitura = 0.0; //armazena jako leituras do AD Vrms = 0.0; //reinicia a variável Vrms
Kod źródłowy - Przechwytuje i wykonuje indywidualne obliczenia dla każdej próbki
Na tym etapie, jeśli i jest mniejsze niż próbka, rozpoczynamy cykl próbkowania aż do osiągnięcia liczby próbek. Uruchamiamy analogRead, aby odczytać port analogowy i obliczyć sumę kwadratów odczytanych napięć. Na koniec zwiększamy iterator.
while (i < amostras) { //inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead(leituraTensao); //le a porta analógica //Serial.println(leitura); //Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow(((leitura * fatorAD) - offset), 2.0); //oblicz a soma dos quadrados das tensões lidas i++; //przyrost o iterador }
Kod źródłowy - Ogólne obliczenia próbek i identyfikacja maksimum, minimum i średniej
Stosujemy fakt mnożenia do określenia rzeczywistej wartości napięć. Wykrywamy, czy wartość jest maksymalna czy minimalna i obliczamy średnią z aktualnych wartości maksymalnych i minimalnych.
//Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicacao; //detecta se é um valor é maximo if (Vrms > Vmax) { Vmax = Vrms; } //detecta se é um valor minimo if (Vrms < Vmin) { Vmin = Vrms; } //calcula a media dos valores maximo e minimo atuais Vmed = (Vmax + Vmin) / 2.0;
Kod źródłowy - opcje wyjściowe
Mamy trzy opcje „wykreślania” wartości wyjściowej. Mamy dane wyjściowe sformatowane do plotera szeregowego Arduino IDE, takie jak CSV lub Jason.
//podaj format dla plotera szeregowego IDE Arduino Serial.print(Vrms, 3); Serial.print(", "); Serial.print(Vmax, 3); Serial.print(", "); Serial.print(Vmin, 3); Serial.print(", "); Serial.println(Vmed, 3); /* //saída formatada como json Serial.print("{"instante(ms)\":"); Serial.print(millis()); Serial.print(", "); Serial.print("\"Vrms(V)\":"); Serial.print(Vrms, 3); Serial.print(", "); Serial.print("\"Vmax(V)\":"); Serial.print(Vmax, 3); Serial.print(", "); Serial.print("\"Vmin(V)\":"); Serial.print(Vmin, 3); Serial.print(", "); Serial.print("\"Vmed(V)\":"); Serial.print(Vmed, 3); Serial.println("}"); */ /* //w formacie CSV Serial.print(millis()); Serial.print(", "); Serial.print(Vrms, 3); Serial.print(", "); Serial.print(Vmax, 3); Serial.print(", "); Serial.print(Vmin, 3); Serial.print(", "); Serial.println(Vmed, 3); */ }
Krok 14: Pliki
Pobierz pliki:
JA NIE
Zalecana:
Regulowany regulator napięcia LM317: 6 kroków
Regulowany regulator napięcia LM317: Tutaj chcielibyśmy porozmawiać o regulowanych regulatorach napięcia. Wymagają bardziej skomplikowanych obwodów niż liniowych. Mogą być używane do wytwarzania różnych stałych wyjść napięciowych w zależności od obwodu, a także napięcia regulowanego za pomocą potencjometru. I
Pomiar częstotliwości i napięcia zasilania za pomocą Arduino: 6 kroków
Pomiar częstotliwości i napięcia zasilania za pomocą Arduino: Wstęp: Celem tego projektu jest pomiar częstotliwości i napięcia zasilania, które mieszczą się w zakresie od 220 do 240 woltów i 50 Hz w Indiach. Użyłem Arduino do przechwytywania sygnału i obliczania częstotliwości i napięcia, możesz użyć dowolnego innego mikrokonta
Pomiar napięcia stałego za pomocą Arduino: 5 kroków
Pomiar napięcia prądu stałego za pomocą Arduino: W tym projekcie pokażę, jak zmierzyć napięcie prądu stałego do 50 V za pomocą arduino i wyświetlacza OLED, część modułu wyświetlacza wymaga arduino UNOoled
Pomiar napięcia za pomocą Arduino: 5 kroków
Pomiar napięcia za pomocą Arduino: Pomiar napięcia przy użyciu dowolnego mikrokontrolera jest dość łatwy w porównaniu z pomiarem prądu. Pomiar napięć staje się konieczny, jeśli pracujesz z bateriami lub chcesz stworzyć własny regulowany zasilacz. Chociaż ta metoda ma zastosowanie
Pomiar napięcia DC za pomocą Arduino i Node-RED: 8 kroków (ze zdjęciami)
Pomiar napięcia DC za pomocą Arduino i Node-RED: Istnieje wiele samouczków Pomiar napięcia DC za pomocą Arduino, w tym przypadku znalazłem samouczek, który uważam za najlepszą funkcjonalną metodę pomiaru DC bez konieczności wprowadzania wartości rezystancji, wymaga tylko pewnej rezystancji i multimetr