Мазмұны:

Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу: 6 қадам
Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу: 6 қадам

Бейне: Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу: 6 қадам

Бейне: Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу: 6 қадам
Бейне: Arduino көмегімен шунт резисторымен тұрақты токтың 500А шамасын өлшеңіз 2024, Қараша
Anonim
Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу
Arduino көмегімен электрмен жабдықтау жиілігі мен кернеуді өлшеу

Кіріспе:

Бұл жобаның мақсаты - Үндістанда 220-240 вольт пен 50 Гц арасындағы жеткізу жиілігі мен кернеуді өлшеу. Мен Arduino -ды сигналды түсіруге, жиілік пен кернеуді есептеуге қолдандым, сізде кез келген басқа микроконтроллер немесе тақта болуы мүмкін. Схема бірнеше компоненттерді қажет етеді және барлық практикалық мақсаттар үшін өте дәл.

1 -қадам: Қажетті компоненттер

  • Ардуино Уно
  • IC LM358
  • Төменгі трансформатор (220 В - 12 В)
  • Конденсаторлар:

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

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1,5кОм
    • 3,3 кмОм
    • 6.8кОм
  • 3 x 1N4148 диод
  • Нан тақтасы мен қосқыш сымы (міндетті емес)

2 -қадам: Схемалық диаграмма

Схемалық диаграмма
Схемалық диаграмма
Схемалық диаграмма
Схемалық диаграмма

Жоғарыда келтірілген тізбекте трансформатордың бастапқы көзі электр желісіне, ал біріншісі біздің өлшеу тізбегіне қосылады

3 -қадам: Схеманы түсіну

Цикл туралы түсінік
Цикл туралы түсінік
Цикл туралы түсінік
Цикл туралы түсінік
Цикл туралы түсінік
Цикл туралы түсінік

Функционалдылыққа сәйкес бұл тізбекті төрт бөлікке бөлуге болады:

A: нөлдік қиылысу детекторының тізбегі

Бұл тізбек толқын оңнан терісге ауысқан кезде 5В квадраттық импульс жасайды. R1 резисторы D1 мен D2 -мен біріктірілгенде диодтың түйісуінде кіріс кернеуінің бұрылуын -0.6В -тан +5.6В -ге дейін шектейді (диодтың тура кернеуі 0,6В деп есептегенде). Сонымен қатар, сіз R1 мәнін арттыру арқылы тізбектің кіріс кернеу диапазонын арттыра аласыз.

R2 және R3 резисторы кернеудің теріс бұрылысын -0,24 Вольтке дейін шектеу үшін кернеу бөлгішті құрайды, себебі LM358 кіріс режимінің кіріс кернеуі -0,3 Вольтпен шектеледі.

R4, R5 резисторы, C1 конденсаторы және оп-ампер (мұнда салыстыру ретінде пайдаланылады) Schmitt Trigger тізбегін құрайды, онда R4 және R5 резисторы гистерезиске +49,5 мВ жерден жоғары орнатады. Schmitt Trigger шығысы одан әрі өңдеу үшін Arduino PIN2 -ге беріледі.

B: оқшаулау мен кернеуді төмендету

Атауынан көрініп тұрғандай, бұл бөлік кернеуді шамамен 12 Врм дейін оқшаулайды және төмендетеді. Төмендетілген кернеу одан әрі аспаптар тізбегіне беріледі.

C: Шың детекторының тізбегі

Бұл схема кіріс сигналының максималды шыңдық кернеуін анықтайды. Резисторлық бөлгіш R6 және R7 кіріс кернеуін 0,23 есе төмендетеді (12Врмс 2,76Врмс дейін төмендейді). D3 диоды сигналдың оң жарты циклін ғана өткізеді. С2 кернеуі кернеуді одан әрі есептеу үшін A0 Arduino аналогтық түйреуішіне берілетін түзетілген сигналдың ең жоғары мәніне дейін артады.

Сонымен қатар, сіз бұл тізбекті дәл осында айтылған дәл шыңы детекторлық схемаға ауыстыра аласыз. Бірақ менің демонстрациялық мақсатым үшін жоғарыдағы схема жеткілікті болады.

Д: Ардуино

Бұл бөлімде Arduino Schmitt Trigger схемасы тудыратын квадрат импульстарды түсіреді және шың детекторлар тізбегінен аналогты кернеуді оқиды. Деректер квадрат импульсінің уақыт кезеңін (демек, жиілікті) анықтау үшін өңделеді.

4 -қадам: Жиілік пен кернеуді есептеу

Жиілікті есептеу:

Arduino көмегімен біз сигналдың T уақыт кезеңін өлшей аламыз. Нөлдік қиылысу детекторының квадраттық толқын импульстері 2 түйреуішке беріледі, сол жерден біз әр импульстің уақыт кезеңін өлшей аламыз. Біз үзілістер көмегімен квадрат импульсінің екі көтерілетін жиегі арасындағы уақыт кезеңін есептеу үшін Arduino ішкі таймерін (дәл Timer1) пайдалана аламыз. Таймер сағат цикліне 1 -ге артады (алдын ала есептегішсіз = 1) және мән TCNT1 регистрінде сақталады. Осылайша, 16 МГц сағаты есептегішті әр микросекундқа 16 -ға арттырады. Алдын ала есептегіш = 8 үшін таймер әрбір микросекундқа 2 -ге ұлғаяды. Осылайша, екі көтерілудің арасындағы уақыт кезеңі

T = (TCNT1 мәні) / әр санау үшін алынған уақыт

Бұл жерде әр есептеуге кететін уақыт = prescaler / (Arduino сағат жылдамдығы (16 МГц)

Демек, жиілік f = 1 / T = (Arduino жылдамдығы (16МГц) / (Prescaler * TCNT! Мәні)

Демек, таймер жылдамдығы (Гц) = (Arduino сағат жылдамдығы (16МГц)) / алдын ала есептегіш арқылы беріледі

ал сигнал жиілігі = (Arduino сағат жылдамдығы) арқылы беріледі

Сәйкесінше f жиілігін f = 1/T қатынасынан есептей аламыз.

Кернеуді есептеу:

Arduino борттық ADC-нің ажыратымдылығы 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

Айта кету керек, бұл мән нақты мәннен алыс, негізінен трансформатордың нақты коэффициентінің қателігі мен диодтың кернеудің төмендеуіне байланысты. Мұны айналып өтудің бір жолы - тізбекті құрастырғаннан кейін факторды анықтау. Яғни, кернеу мен кернеуді C2 конденсаторындағы мультиметрмен бөлек өлшеп, Vs (rms) келесі түрде есептеледі:

Vs (rms) = ((Жеткізу кернеуі *5)/(C2 *1023 кернеуі)) *(ADC оқу)

менің жағдайда, Vs (rms) = 0.33*(ADC оқу)

5 -қадам: Arduino коды

#А0 -дағы вольтты анықтаңыз // аналогты кернеуді оқу штыры

тұрақсыз 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 таймер = t_period; if (таймер == 0) 0 қайтару; // нөлге бөлінбеу үшін 16000000.0/(8UL*таймер) қайтарыңыз; // жиілік f = clk_freq/(prescaler*timeperiod)} арқылы беріледі void setup () {TCCR1A = 0; TCCR1B = бит (CS11); // алдын ала есептегішті 8 TCNT1 = 0 күйіне орнатыңыз; // қалпына келтіру Timer1 мәні TIMSK1 = бит (TOIE1); // Timer1 толып кетуін қосу EIFR | = бит (INTF0); // тазалау INT0 үзу жалаушасы Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // сыртқы үзілісті (INT0) кешіктіруді қосу (1000); detachInterrupt (0); жиілік = get_freq (); вольт = ADC_ мәні*0,33; String buf; buf += Жол (жиілік, 3); buf += F («Гц / т»); buf += Жол (вольт); buf += F («Вольт»); Serial.println (buf); }

6 -қадам: Қорытынды

Қорытынды
Қорытынды
Қорытынды
Қорытынды

Сіз тізбекті тақтаға жинап, кодты өзгерте аласыз және деректерді сақтау үшін SD картасын қоса аласыз, оны кейінірек талдауға болады. Осындай мысалдардың бірі - сіз ең жоғары сағаттағы кернеу мен жиілікті талдай аласыз.

Мен тақтаға құрастырған схема LM358 (қос опамп) орнына LM324 (төрт опамп) қолданды, өйткені менде ол кезде IC болмаған және COVID-19 пандемиясына байланысты жалпыұлттық құлыптау маған жаңа IC алуды қиындатты.. Дегенмен, бұл тізбектің жұмысына әсер етпейді.

Кез келген ұсыныстар мен сұраулар үшін төменде пікір қалдырыңыз.

Ұсынылған: