فهرست مطالب:

اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو: 6 مرحله
اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو: 6 مرحله

تصویری: اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو: 6 مرحله

تصویری: اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو: 6 مرحله
تصویری: Convert PWM to Voltage using IC Station converter (Review and Test ) 2024, جولای
Anonim
اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو
اندازه گیری فرکانس منبع تغذیه و ولتاژ با استفاده از آردوینو

معرفی:

هدف این پروژه اندازه گیری فرکانس و ولتاژ منبع تغذیه است که در هند بین 220 تا 240 ولت تا 50 هرتز است. من از آردوینو برای ضبط سیگنال و محاسبه فرکانس و ولتاژ استفاده کردم ، شما می توانید از هر میکروکنترلر یا برد دیگری استفاده کنید. مدار به چند جزء نیاز دارد و برای همه اهداف عملی نسبتاً دقیق است.

مرحله 1: اجزای مورد نیاز

  • آردوینو اونو
  • IC LM358
  • ترانسفورماتور پله پایین (220 ولت تا 12 ولت)
  • خازن ها:

    • 0.1uF
    • 2 x 1uF
  • مقاومت ها:

    • 3 1 1 کیلو اهم
    • 2 100 100 کیلو اهم
    • 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 و op-amp (که در اینجا به عنوان مقایسه کننده استفاده می شود) مدار Schmitt Trigger را ایجاد می کند که در آن مقاومت R4 و R5 پسماند را در ورودی +49.5mV بالاتر از سطح زمین تنظیم می کند. خروجی Schmitt Trigger برای پردازش بیشتر به Arduino PIN2 تغذیه می شود.

ب: ایزولاسیون و ولتاژ کاهش می یابد

همانطور که از نامش مشخص است این قسمت ولتاژ را جدا کرده و تا حدود 12Vrm کاهش می دهد. ولتاژ کاهش یافته بیشتر به مدار ابزار دقیق تغذیه می شود.

C: مدار پیک آشکارساز

این مدار حداکثر ولتاژ پیک سیگنال ورودی را تعیین می کند. تقسیم کننده مقاومت R6 و R7 ولتاژ ورودی را تا 0.23 برابر کاهش می دهد (12Vrms به 2.76Vrms کاهش می یابد). دیود D3 فقط نیم چرخه مثبت سیگنال را هدایت می کند. ولتاژ C2 تا مقدار پیک سیگنال تصحیح شده افزایش می یابد که برای محاسبه بیشتر ولتاژ به پین آنالوگ A0 آردوینو تغذیه می شود.

علاوه بر این ، شما می توانید این مدار را با یک مدار آشکارساز پیک دقیق مانند موارد ذکر شده در اینجا جایگزین کنید. اما برای اهداف نمایشی من ، مدار فوق کافی خواهد بود.

D: آردوینو

در این قسمت ، آردوینو پالس های مربعی ایجاد شده توسط مدار Schmitt Trigger را گرفته و ولتاژ آنالوگ را از مدار آشکارساز پیک می خواند. داده ها بیشتر برای تعیین دوره زمانی (از این رو فرکانس) پالس مربعی (که برابر است با زمان منبع تغذیه AC) و ولتاژ منبع تغذیه پردازش می شود.

مرحله 4: محاسبه فرکانس و ولتاژ

محاسبه فرکانس:

با کمک آردوینو می توان دوره زمانی T سیگنال را اندازه گیری کرد. پالس های موج مربعی از آشکارساز عبور صفر به پین 2 تغذیه می شوند ، از آنجا می توان دوره زمانی هر پالس را اندازه گیری کرد. ما می توانیم از تایمر داخلی آردوینو (به ویژه Timer1) برای محاسبه فاصله زمانی بین دو لبه در حال افزایش پالس مربعی با کمک وقفه ها استفاده کنیم. تایمر در هر چرخه ساعت 1 افزایش می یابد (بدون پیش شماره گیری = 1) و مقدار در ثبات TCNT1 ذخیره می شود. بنابراین ساعت 16 مگاهرتز در هر میکرو ثانیه شمارنده را 16 برابر افزایش می دهد. به طور مشابه برای پیش شماره گیری = 8 ، تایمر در هر میکرو ثانیه 2 بار افزایش می یابد. بنابراین فاصله زمانی بین دو لبه در حال افزایش است

T = (مقدار TCNT1) / زمان در نظر گرفته شده برای هر تعداد

کجا ، زمان لازم برای هر شمارش = پیش فروشنده / (سرعت ساعت آردوینو (16 مگاهرتز)

از این رو ، فرکانس f = 1 / T = (سرعت ساعت آردوینو (16 مگاهرتز) / (مقدار پیش شماره * TCNT! مقدار)

بنابراین سرعت تایمر (هرتز) توسط = (سرعت ساعت آردوینو (16 مگاهرتز)) / پیش سنج نشان داده می شود

و فرکانس سیگنال توسط = (سرعت ساعت آردوینو

به همین ترتیب ، ما می توانیم فرکانس f را از رابطه f = 1/T محاسبه کنیم.

محاسبه ولتاژ:

ADC داخلی آردوینو دارای وضوح 10 بیت است (مقادیر ممکن = 2^10 = 1024) ، که مقادیر را در محدوده 0-1023 باز می گرداند. برای محاسبه ولتاژ آنالوگ V مناسب ، باید از رابطه زیر استفاده کنیم

V = (ADC Reading) * 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 Reading)*0.289*

لازم به ذکر است که این مقدار دور از مقدار واقعی است ، عمدتا به دلیل خطا در نسبت ترانسفورماتور واقعی و افت ولتاژ رو به جلو دیود. یکی از راههای دور زدن این امر تعیین عامل پس از مونتاژ مدار است. یعنی با اندازه گیری ولتاژ تغذیه و ولتاژ روی خازن C2 به طور جداگانه با مولتی متر ، سپس Vs (rms) را به صورت زیر محاسبه کنید:

Vs (rms) = ((ولتاژ منبع *5)/(ولتاژ C2 *1023)) *(ADC Reading)

در مورد من ، Vs (rms) = 0.33*(ADC Reading)

مرحله 5: کد آردوینو

ولتاژ #تعریف 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*timer) ؛ // فرکانس توسط 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)؛ freq = get_freq ()؛ ولت = ADC_value*0.33 ؛ رشته باف ؛ buf += رشته (Freq ، 3) ؛ buf += F ("Hz / t") ؛ buf += رشته (ولت) ؛ buf += F ("ولت") ؛ Serial.println (buf) ؛ }

مرحله 6: نتیجه گیری

نتیجه
نتیجه
نتیجه
نتیجه

می توانید مدار را در یک تخته نان جمع کنید و کد را تغییر دهید و یک کارت SD برای ذخیره داده ها اضافه کنید ، که بعداً قابل تجزیه و تحلیل است. یکی از این مثالها این است که می توانید ولتاژ و فرکانس را در ساعات اوج تجزیه و تحلیل کنید.

مداری که من در تخته نان جمع کردم از LM324 (quad opamp) به جای LM358 (opamp دوگانه) استفاده می کرد زیرا آن IC را در آن لحظه نداشتم و قفل شدن سراسری به دلیل همه گیری COVID-19 برای من گرفتن IC جدید را دشوار کرد به با این وجود ، بر عملکرد مدار تأثیری نخواهد داشت.

در صورت تمایل می توانید برای هر گونه پیشنهاد و سeriesال در زیر نظر دهید.

توصیه شده: