Съдържание:

Измерване на честота и напрежение на захранването с помощта на Arduino: 6 стъпки
Измерване на честота и напрежение на захранването с помощта на Arduino: 6 стъпки

Видео: Измерване на честота и напрежение на захранването с помощта на Arduino: 6 стъпки

Видео: Измерване на честота и напрежение на захранването с помощта на Arduino: 6 стъпки
Видео: Arduino code for VL53L1X Time-of-Flight 400cm Laser distance sensor 2024, Юли
Anonim
Измерване на честота и напрежение на захранването с помощта на Arduino
Измерване на честота и напрежение на захранването с помощта на Arduino

Въведение:

Целта на този проект е да се измери захранващата честота и напрежение, което е между 220 до 240 волта и 50Hz тук в Индия. Използвах Arduino за улавяне на сигнал и изчисляване на честота и напрежение, можете да използвате всеки друг микроконтролер или платка, която имате. Веригата изисква шепа компоненти и е доста точна за всички практически цели.

Стъпка 1: Необходими компоненти

  • Arduino Uno
  • IC LM358
  • Спускащ трансформатор (220V до 12V)
  • Кондензатори:

    • 0.1uF
    • 2 x 1uF
  • Резистори:

    • 3 x 1 kOhm
    • 2 x 100 kOhm
    • 1,5 кОм
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 диод
  • Дъска за хляб и джъмпер (по избор)

Стъпка 2: Схематична диаграма

Схематична диаграма
Схематична диаграма
Схематична диаграма
Схематична диаграма

В горната верига първичният трансформатор е свързан към захранващата мрежа, а първичният е свързан към нашата измервателна верига

Стъпка 3: Разбиране на веригата

Разбиране на веригата
Разбиране на веригата
Разбиране на веригата
Разбиране на веригата
Разбиране на веригата
Разбиране на веригата

Според функционалността тази верига може да бъде разделена на четири части:

О: Веригата на детектора за нулево пресичане

Тази верига генерира 5V квадратен импулс, когато синусоидата преминава от положителна към отрицателна. Резистор R1, комбиниран с D1 и D2, ограничава люлеенето на входното напрежение в кръстовището на диода до -0,6 V до +5,6 V (приемайки, че напрежението на диода е 0,6 V). Освен това можете да увеличите обхвата на входното напрежение на веригата, като увеличите стойността на R1.

Резисторът R2 и R3 образуват делител на напрежение, за да ограничат люлеенето на отрицателното напрежение до -0,24 волта, тъй като входното общомодово напрежение на LM358 е ограничено до -0,3 волта.

Резисторът R4, R5, кондензатор C1 и оп-усилвателят (тук използван като сравнител) образуват схемата на тригера на Шмит, където резисторът R4 и R5 задават хистерезиса на вход +49,5 mV над земята. Изходът на Schmitt Trigger се подава към Arduino PIN2 за по -нататъшна обработка.

B: Изолация и напрежение надолу

Както подсказва името, тази част изолира и намалява напрежението до приблизително 12Vrms. Намаленото напрежение се подава допълнително към измервателната верига.

C: Схема на детектор на пикове

Тази схема определя максималното пиково напрежение на входния сигнал. Резисторният разделител R6 и R7 намаляват входното напрежение с коефициент 0,23 (12Vrms се намалява до 2.76Vrms). Диодът D3 провежда само положителния полупериод на сигнала. Напрежението в C2 се увеличава до пиковата стойност на коригирания сигнал, който се подава към аналоговия щифт A0 на Arduino, за да се изчисли допълнително напрежението.

В допълнение, можете да замените тази верига с прецизна пикова детекторна верига, като тези, споменати тук. Но за моите демонстрационни цели горната схема ще бъде достатъчна.

D: Arduino

В тази част Arduino улавя квадратните импулси, генерирани от схемата на Schmitt Trigger и отчита аналоговото напрежение от пиковата верига на детектора. Данните се обработват допълнително, за да се определи периодът от време (следователно честотата) на квадратния импулс (който е равен на човека за времето за захранване с променлив ток) и напрежението на захранването.

Стъпка 4: Изчисляване на честота и напрежение

Изчисляване на честотата:

С помощта на Arduino можем да измерим времевия период Т на сигнала. Квадратните вълнови импулси от детектора за пресичане на нулата се подават към пин 2, от там можем да измерим времевия период на всеки импулс. Можем да използваме вътрешния таймер на Arduino (по -специално Timer1), за да изчислим периода от време между два нарастващи ръба на квадратния импулс с помощта на прекъсвания. Таймерът се увеличава с 1 на тактов цикъл (без предварителното деление = 1) и стойността се съхранява в регистър TCNT1. Следователно 16Mhz часовникът увеличава брояча с 16 на всяка микросекунда. По подобен начин за предусилвател = 8 таймерът се увеличава с 2 на всяка микросекунда. Оттук и периодът между два нарастващи ръба

T = (стойност на TCNT1) / време, необходимо за всеки брой

Къде, време, необходимо за всеки брой = предсказващо / / тактовата честота на Arduino (16MHz)

Следователно, честота f = 1 / T = (тактовата честота на Arduino (16MHz) / (предсказваща * TCNT! Стойност))

Следователно скоростта на таймера (Hz) се определя от = (тактова честота на Arduino (16MHz)) / предсказване

а честотата на сигнала се определя от = (тактовата честота на Arduino

Съответно можем да изчислим честота f от съотношението f = 1/T.

Изчисляване на напрежението:

Вграденият ADC на Arduino има разделителна способност 10 бита (възможни стойности = 2^10 = 1024), връщащи стойности в диапазона от 0-1023. За да изчислим съответното аналогово напрежение V, трябва да използваме следната връзка

V = (ADC отчитане) * 5/1023

За да изчислим захранващото напрежение Vs (rms), трябва да вземем предвид коефициента на трансформатора, резисторния делител R6R7 и пиковата верига на детектора. Можем просто да съберем различните фактори/съотношение като:

Трансформаторно съотношение = 12/230 = 0,052

Резисторен делител = R7/(R6 + R7) = 0,23

При пикова верига на детектора = 1.414

Vs (rms) = V/(1.414*0.052*0.23) = (ADC отчитане)*0.289

Трябва да се отбележи, че тази стойност е далеч от действителната стойност, главно поради грешка в действителното съотношение на трансформатора и спад на напрежението на диода. Един от начините да се заобиколи това е да се определи фактора след сглобяването на веригата. Това е чрез измерване на захранващото напрежение и напрежението в кондензатора С2 отделно с мултицет, след което се изчисляват Vs (rms), както следва:

Vs (rms) = ((Захранващо напрежение *5)/(Напрежение в C2 *1023)) *(ADC отчитане)

в моя случай Vs (rms) = 0,33*(ADC четене)

Стъпка 5: Arduino код

#detine volt_in A0 // щифт за четене на аналогово напрежение

променлив uint16_t t_period; uint16_t ADC_value = 0; плаващ волт, честота; void isr () {t_period = TCNT1; // съхранява стойността на TCNT1 в t_period TCNT1 = 0; // нулиране на Timer1 ADC_value = analogRead (volt_in); // чете аналогово напрежение} float get_freq () {uint16_t timer = t_period; if (таймер == 0) връщане 0; // за да се избегне деление на нула else return 16000000.0/(8UL*таймер); // честотата се дава от f = clk_freq/(prescaler*timeperiod)} void setup () {TCCR1A = 0; TCCR1B = бит (CS11); // настройте предварително делителя на 8 TCNT1 = 0; // нулиране на стойност Timer1 TIMSK1 = бит (TOIE1); // разрешаване на прекъсване на препълване на Таймер1 EIFR | = бит (INTF0); // изчистване на флаг за прекъсване INT0 Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // разрешаване на забавяне на външно прекъсване (INT0) (1000); detachInterrupt (0); freq = get_freq (); волт = ADC_value*0,33; Струнен буф; buf += низ (честота, 3); buf += F ("Hz / t"); buf += низ (волт); buf += F ("Волта"); Serial.println (buf); }

Стъпка 6: Заключение

Заключение
Заключение
Заключение
Заключение

Можете да сглобите веригата в макет и да промените кода и да добавите SD карта за съхраняване на данните, които по -късно могат да бъдат анализирани. Един такъв пример е, че можете да анализирате напрежението и честотата в пиковите часове.

Схемата, която сглобих в макета, използва LM324 (четириядрена опампа) вместо LM358 (двойна опампа), тъй като в този момент нямах тази интегрална схема и блокирането в цялата страна поради пандемията COVID-19 затрудняваше получаването на нова интегрална схема. Независимо от това, това не би повлияло на работата на веригата.

Чувствайте се свободни да коментирате по -долу за всякакви предложения и запитвания.

Препоръчано: