جدول المحتويات:
- الخطوة 1: العرض التوضيحي
- الخطوة 2: الموارد المستخدمة
- الخطوة 3: مخطط الكتلة
- الخطوة 4: المخطط
- الخطوة 5: LM386 - التثبيت
- الخطوة 6: AmpOp - التفاضل (الطرح)
- الخطوة 7: AmpOp - Inverter Adder
- الخطوة 8: Maple Mini - Pinage
- الخطوة 9: Maple Mini - Pinning - a / D المستخدم في الالتقاط
- الخطوة 10: التجميع
- الخطوة 11: رسم بياني بالبيانات التي تم الحصول عليها
- الخطوة 12: حساب قيمة RMS
- الخطوة 13: كود المصدر
- الخطوة 14: الملفات
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
اليوم ، سنستخدم STM32 Maple Mini للقيام بقراءة التيار المتردد. في مثالنا ، سنحصل على قيمة RMS لشبكة الطاقة. هذا مفيد جدًا لأولئك الذين يرغبون في مراقبة الشبكة الكهربائية لإنترنت الأشياء. سننشئ بعد ذلك تطبيقًا باستخدام القوة الحسابية لـ Maple Mini ، ونطبق دائرة إلكترونية قادرة على السماح بالحصول على إشارة 127Vac ، وكذلك تطبيق حساب جذر متوسط التربيع (RMS) على العينات.
الخطوة 1: العرض التوضيحي
في مجموعتنا اليوم ، لدينا STM32 ، بالإضافة إلى دائرتنا التناظرية لإدخال 110. لتجنب الصدمات ، اعزل المقاوم الذي يدخل بمقدار 110.
الدائرة حساسة للغاية. أنا أدخل بـ 110 ، لكنني قللته 168 مرة باستخدام مقسم الجهد ووضعه في مكبر الصوت التشغيلي ، الذي له عدة وظائف.
لدينا أيضًا بعض المكثفات الاختيارية لتصفية المصدر. إذا كان مصدرك ذا نوعية جيدة ، فلا داعي لاستخدامه.
يُحسب إدخال AD من خلال مرسمة الذبذبات ، حيث ترى الجيب الجيبي ، وهو ليس 110 (ولكنه متشكل جيدًا). شيء آخر هو أن الجهد في شبكتنا الكهربائية ليس 110 (إنه في الواقع 127 فولت). ولكن نظرًا لأننا نجتاز عامل استقرار ، فسوف يتكيف مع 115 فولت.
القيمة المعروضة على الشاشة التسلسلية هي ما يتم حسابه في RMS ، أي القيمة المحددة بواسطة Fluke Meter.
الخطوة 2: الموارد المستخدمة
• صداري
• ميني ميبل
• Protoboard
• مكبر للصوت LM386
• مصدر متماثل (+ 5 فولت و -5 فولت)
• أداة تقليم متعددة الأدوار 10 آلاف (أو مقياس الجهد)
• أربعة مكثفات 100nF البوليستر
• ثلاث مقاومات 10 كيلو
• أربع مقاومات 470 ألف
• مقاوم واحد 5k6
• واحد 1n4728A زينر ديود
الخطوة 3: مخطط الكتلة
الخطوة 4: المخطط
هذه دائرة قمت بتطويرها بناءً على المواصفات التي أعتقد أنها الأفضل لهذا القياس ، ولكن هناك العديد من الأمثلة الأخرى التي يمكن العثور عليها على الإنترنت.
الخطوة 5: LM386 - التثبيت
يحتوي LM386 على مضخمين للتكييف أو تضخيم الإشارة.
الخطوة 6: AmpOp - التفاضل (الطرح)
الخطوة 7: AmpOp - Inverter Adder
الخطوة 8: Maple Mini - Pinage
تم وضع علامة على دبابيس على:
أحمر >> 3V3 متسامح
أخضر >> 5V متسامح
الخطوة 9: Maple Mini - Pinning - a / D المستخدم في الالتقاط
أؤكد هنا أن الدبوس الذي استخدمته هو D11 (في تسمية STMicroelectronics) هو PA0.
الخطوة 10: التجميع
بالنسبة إلى دائرتنا ، ستحتاج إلى مصدر متماثل ، مثل الذي أنشأناه لهذا المشروع. خلاف ذلك ، سوف تحتاج إلى مصدرين.
الخطوة 11: رسم بياني بالبيانات التي تم الحصول عليها
الخطوة 12: حساب قيمة RMS
الخطوة 13: كود المصدر
كود المصدر - التعاريف والثوابت
في البداية ، حددنا قراءة الدبوس على أنها D11 ، بالإضافة إلى الثوابت المختلفة المستخدمة في الحسابات.
#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 تعويم Vcc = 3.3 ؛ // valor teórico do offset do amplificador = Vcc / 2.0؛ تعويم const offSet = 1.66 ؛ // fator teórico da convertã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 detado float Vmin = 10000.0 ؛ // armazena o valor mínimo detado float Vmed = 0.0 ؛ // armazena o valor médio entre Vmáx e Vmín
كود المصدر - الإعداد ()
ابدأ المنفذ التسلسلي بسرعة 1 ميجابت في الثانية. قمنا بتعديل منفذ AD كإدخال وانتظرنا 5 ثوانٍ قبل البدء في جمع البيانات. وقت الاستعداد اختياري.
إعداد باطل () {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 ؛ // varável para iteração float leitura = 0.0 ؛ // armazena مثل leituras تفعل AD Vrms = 0.0 ؛ // renicia a varável Vrms
كود المصدر - يلتقط وينفذ العمليات الحسابية الفردية لكل عينة
في هذه المرحلة ، إذا كنت أصغر من العينة ، نبدأ دورة أخذ العينات حتى أصل إلى عدد العينات. نقوم بتشغيل analogRead لقراءة المنفذ التناظري وحساب مجموع مربعات الفولتية القراءة. أخيرًا ، نقوم بزيادة المكرر.
while (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao) ؛ // lê a porta analógica //Serial.println(leitura) ؛ // Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet)، 2.0) ؛ // calcula a soma dos quadrados das tensões lidas i ++ ؛ // incrementa o iterador}
كود المصدر - الحسابات العامة للعينات وتحديد الحد الأقصى والحد الأدنى والمتوسط
نطبق حقيقة الضرب لتحديد القيمة الفعلية للجهد. نكتشف ما إذا كانت القيمة هي الحد الأقصى أو الحد الأدنى ، ونحسب متوسط القيم القصوى والدنيا الحالية.
// Aplicando fator de multiplicação paraerminar o valor real das tensões Vrms = (sqrt (Vrms / amostras)) * fatorMultiplicacao ؛ // Discovera se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms؛ } // Discovera se é 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 (مللي ()) ؛ 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: الملفات
قم بتنزيل الملفات:
بي دي إف
انا لا