فهرست مطالب:

اندازه گیری ولتاژ AC True-RMS: 14 مرحله
اندازه گیری ولتاژ AC True-RMS: 14 مرحله

تصویری: اندازه گیری ولتاژ AC True-RMS: 14 مرحله

تصویری: اندازه گیری ولتاژ AC True-RMS: 14 مرحله
تصویری: Why True-RMS multimeter? 2024, جولای
Anonim
Image
Image
تظاهرات
تظاهرات

امروز ، ما از STM32 Maple Mini برای خواندن AC استفاده می کنیم. در مثال ما ، مقدار RMS شبکه برق را دریافت می کنیم. این برای کسانی که مایل به نظارت بر شبکه برق برای اینترنت اشیا هستند بسیار مفید است. سپس یک برنامه کاربردی با استفاده از قدرت محاسباتی Maple Mini ایجاد می کنیم ، یک مدار الکترونیکی که قادر به دریافت سیگنال 127Vac است ، و همچنین محاسبه مربع میانگین ریشه (RMS) را بر روی نمونه ها اعمال می کنیم.

مرحله 1: تظاهرات

در مونتاژ امروز ما STM32 را داریم ، علاوه بر مدار آنالوگ خود ورودی 110 را داریم. برای جلوگیری از ضربه ، مقاومتی را که 110 وارد می کند جدا کنید.

مدار کاملا حساس است. من با 110 وارد می شوم ، اما با استفاده از تقسیم ولتاژ آن را 168 بار کاهش می دهم و در تقویت کننده عملیاتی قرار می دهم که چندین عملکرد دارد.

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

ورودی AD از طریق اسیلوسکوپ محاسبه می شود که در آن شما یک سینوسی را مشاهده می کنید که 110 نیست (اما به خوبی شکل گرفته است). نکته دیگر این است که ولتاژ در شبکه برق ما 110 نیست (در واقع 127 ولت است). اما همانطور که در حال گذراندن یک تثبیت کننده هستیم ، آن را به 115 ولت تنظیم می کند.

مقدار نمایش داده شده در مانیتور سریال همان چیزی است که در RMS محاسبه می شود ، یعنی مقداری که توسط Fluke Meter مشخص می شود.

مرحله 2: منابع مورد استفاده

منابع مورد استفاده
منابع مورد استفاده

• جامپرها

• مپل مینی

• Protoboard

• تقویت کننده LM386

• منبع متقارن (+ 5V و -5V)

• تریمپات 10 دور چند دور (یا پتانسیومتر)

• چهار خازن پلی استر 100nF

• سه مقاومت 10k

• چهار مقاومت 470k

• یک مقاومت 5k6

• یک دیود زنر 1n4728A

مرحله 3: بلوک نمودار

نمودار بلوکی
نمودار بلوکی

مرحله 4: طرح

طرح
طرح

این مداری است که من بر اساس ویژگی هایی که معتقدم برای این اندازه گیری بهترین است ، ایجاد کردم ، اما چندین مثال دیگر وجود دارد که می توان در اینترنت یافت.

مرحله 5: LM386 - سنجاق کردن

LM386 - سنجاق کردن
LM386 - سنجاق کردن

LM386 دارای دو تقویت کننده برای تهویه یا تقویت سیگنال است.

مرحله 6: AmpOp - دیفرانسیل (تفریق کننده)

AmpOp - دیفرانسیل (تفریق کننده)
AmpOp - دیفرانسیل (تفریق کننده)

مرحله 7: AmpOp - Inverter Adder

AmpOp - اینورتر Adder
AmpOp - اینورتر Adder

مرحله 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

پین های مشخص شده روی:

قرمز >> 3V3 تحمل

سبز >> تحمل 5 ولت

مرحله 9: Maple Mini - Pinning - a / D مورد استفاده در ضبط

Maple Mini - Pinning - a / D مورد استفاده در ضبط
Maple Mini - Pinning - a / D مورد استفاده در ضبط

در اینجا تأکید می کنم که پینی که من استفاده کردم D11 است که (در نامگذاری STMicroelectronics) PA0 است.

مرحله 10: مونتاژ

مونتاژ
مونتاژ

برای مدار ما ، شما به یک منبع متقارن نیاز دارید ، مانند منبع مورد نظر ما برای این پروژه. در غیر این صورت ، شما به دو منبع نیاز دارید.

مرحله 11: نمودار با داده های به دست آمده

نمودار با داده های به دست آمده
نمودار با داده های به دست آمده

مرحله 12: محاسبه مقدار RMS

محاسبه مقدار RMS
محاسبه مقدار RMS

مرحله 13: کد منبع

کد منبع - تعاریف و ثابت ها

در ابتدا ، قرائت پین را به عنوان D11 و ثابت های مختلف مورد استفاده در محاسبات تعریف کردیم.

#deitine 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 offset do amplificador = 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 segundos para cada atualização

کد منبع - متغیرهای جهانی

اکنون ، ما برخی از متغیرهای جهانی را تعریف می کنیم.

شناور Vrms = 0.0 ؛ // armazena o valor rms da tensãofloat Vmax = 0.0؛ // armazena o valor máximo deteado float Vmin = 10000.0؛ // armazena o valor mínimo deteado float Vmed = 0.0؛ // armazena o valor médio entre Vmáx e Vmín

کد منبع - راه اندازی ()

پورت سریال را با سرعت 1 مگابیت بر ثانیه شروع کنید. ما پورت AD را به عنوان ورودی تنظیم کردیم و 5 ثانیه قبل از شروع به جمع آوری داده ها منتظر ماندیم. زمان آماده به کار اختیاری است.

void setup () {Serial.begin (1000000)؛ // inicia a porta serial em 1Mbps pinMode (leituraTensao، INPUT)؛ // ajusta a porta do AD como entrada delay (5000)؛ // aguarda 5s antes de iniciar a coleta. (اختیاری)}

کد منبع - حلقه () - متغیرهای جمع آوری داده ها را شروع می کند

در حلقه ، متغیری برای تکرار داریم. در اینجا ، ما مقادیر AD را در 0.0 ذخیره می کنیم و متغیر VRMS را نیز در 0.0 راه اندازی مجدد می کنیم.

حلقه خالی () {int i = 0؛ // variável para iteração float leitura = 0.0؛ // armazena as leituras AD Vrms = 0.0؛ // reinicia a variável Vrms

کد منبع - محاسبه های جداگانه برای هر نمونه را ضبط و اجرا می کند

در این مرحله ، اگر i از نمونه کوچکتر است ، یک چرخه نمونه گیری را شروع می کنیم تا به تعداد نمونه ها برسم. ما analogRead را برای خواندن پورت آنالوگ و محاسبه مجموع مربعات ولتاژهای خوانده شده اجرا می کنیم. در نهایت ، تکرار کننده را افزایش می دهیم.

while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao) ؛ // اما a porta analógica //Serial.println(leitura) ؛ // Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet) ، 2.0) ؛ // محاسبه a soma dos quadrados das tensões lidas i ++؛ // افزایش یا تکرار}

کد منبع - محاسبات عمومی نمونه ها و شناسایی حداکثر ، حداقل و متوسط

ما از واقعیت ضرب برای تعیین مقدار واقعی ولتاژها استفاده می کنیم. ما حداکثر یا حداقل مقدار را تشخیص می دهیم و میانگین حداکثر و حداقل مقادیر فعلی را محاسبه می کنیم.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao؛ // detea se é um um valor é máximo if (Vrms> Vmax) {Vmax = Vrms؛ } // detea se é um um valor mínimo if (Vrms <Vmin) {Vmin = Vrms؛ } // calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0؛

کد منبع - گزینه های خروجی

ما سه گزینه برای "رسم" مقدار خروجی داریم. ما خروجی را برای پلاتر سریال Arduino IDE قالب بندی کرده ایم ، مانند CSV یا Jason.

// saída formatada para plotter serial 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 ("}") ؛ * / /* // saída formatada como 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) ؛ */}

مرحله 14: فایل ها

دانلود فایلها:

PDF

من نه

توصیه شده: