مستشعر MP220V لمراقبة جهد التيار الكهربائي باستخدام optocoupler. الفولتميتر السري في اردوينو - قياس جهد البطارية باستخدام متحكم دقيق

16.07.2019
  • درس تعليمي

مقدمة

أهلاً بكم! بعد الانتهاء من الدورة على أجهزة الاستشعار، كانت هناك أسئلة مختلفة حول قياس معلمات استهلاك الأجهزة المنزلية وليس الأجهزة الكهربائية. من يستهلك كم، وكيفية ربط ما يجب قياسه، وما هي التفاصيل الدقيقة الموجودة، وما إلى ذلك. حان الوقت للكشف عن جميع الأوراق في هذه المنطقة.
في هذه السلسلة من المقالات سنتناول موضوع قياس معلمات الكهرباء. يوجد في الواقع عدد كبير جدًا من هذه المعلمات، والتي سأحاول التحدث عنها تدريجيًا في سلسلة صغيرة.
حتى الآن هناك ثلاث سلاسل مخطط لها:
  • قياس الكهرباء.
  • نوعية الطاقة.
  • أجهزة لقياس معلمات الكهرباء.
خلال عملية التحليل، سوف نقوم بحل بعض المشاكل العملية على المتحكمات الدقيقة حتى يتم تحقيق النتيجة. وبطبيعة الحال، سيتم تخصيص معظم هذه السلسلة لقياس الجهد المتردد وقد تكون مفيدة لجميع أولئك الذين يحبون التحكم في الأجهزة الكهربائية لمنزلهم الذكي.
واستنادا إلى نتائج الدورة بأكملها، سنقوم بإنتاج نوع من عدادات الكهرباء الذكية مع إمكانية الوصول إلى الإنترنت. يمكن لعشاق التحكم الكامل في الأجهزة الكهربائية لمنزلهم الذكي تقديم كل المساعدة الممكنة في تنفيذ جزء الاتصال على قاعدة، على سبيل المثال، MajorDomo. دعونا نجعل OpenSource منزلًا ذكيًا أفضل، إذا جاز التعبير.
في هذه السلسلة المكونة من جزأين، سنستكشف الأسئلة التالية:
  • توصيل أجهزة استشعار التيار والجهد في أجهزة التيار المستمر، وكذلك دوائر التيار المتردد أحادية الطور وثلاثية الطور؛
  • قياس القيم الفعالة للتيار والجهد.
  • قياس معامل القدرة
  • إجمالي الطاقة النشطة والمتفاعلة؛
  • استهلاك الكهرباء؛
بالنقر أدناه ستجد إجابات السؤالين الأولين في هذه القائمة. أنا لا أتطرق عمدا إلى قضايا الدقة في قياس المؤشرات ومن هذه السلسلة أنا سعيد فقط بالنتائج التي تم الحصول عليها بدقة زائد أو ناقص حذاء اللحاء. سأخصص بالتأكيد مقالًا منفصلاً لهذه المشكلة في السلسلة الثالثة.

1. توصيل أجهزة الاستشعار


في السلسلة الأخيرة عن حساسات الجهد والتيار تحدثت عن أنواع الحساسات ولكن لم أتحدث عن كيفية استخدامها ومكان وضعها. حان الوقت لإصلاحه
توصيل حساسات التيار المستمر
من الواضح أن السلسلة بأكملها ستخصص لأنظمة التيار المتردد، ولكن دعونا نتناول دوائر التيار المستمر بسرعة، حيث قد يكون ذلك مفيدًا لنا عند تطوير مصادر طاقة التيار المستمر. خذ على سبيل المثال محول باك PWM الكلاسيكي:


الشكل 1. محول باك PWM
مهمتنا هي توفير جهد خرج مستقر. بالإضافة إلى ذلك، استنادًا إلى المعلومات الواردة من المستشعر الحالي، من الممكن التحكم في وضع تشغيل المحث L1، ومنع تشبعه، وكذلك تنفيذ الحماية الحالية للمحول. ولكي نكون صادقين، لا توجد أي خيارات لتثبيت أجهزة الاستشعار.
يتم تثبيت مستشعر الجهد على شكل مقسم مقاوم R1-R2، وهو الوحيد القادر على العمل بالتيار المباشر، عند إخراج المحول. كقاعدة عامة، تحتوي الدائرة الدقيقة للمحول المتخصصة على مدخلات تغذية مرتدة، وتبذل قصارى جهدها للتأكد من أن هذا الإدخال (3) له مستوى جهد معين محدد في وثائق الدائرة الدقيقة. على سبيل المثال 1.25 فولت. إذا كان جهد الخرج لدينا يتوافق مع هذا المستوى، فكل شيء على ما يرام - فنحن نطبق جهد الخرج مباشرة على هذا الإدخال. إذا لم يكن الأمر كذلك، فقم بتعيين المقسم. إذا أردنا توفير جهد خرج قدره 5 فولت، فيجب أن يوفر المقسم عامل تقسيم قدره 4، أي على سبيل المثال، R1 = 30k، R2 = 10k.
عادةً ما يتم تثبيت المستشعر الحالي بين مصدر الطاقة والمحول وعلى الشريحة. بناءً على فرق الجهد بين النقطتين 1 و 2، ومع مقاومة معروفة للمقاومات Rs، من الممكن تحديد القيمة الحالية لتيار مغوِّنا. لا يعد تركيب مستشعر تيار بين المصادر والحمل فكرة جيدة، حيث سيتم قطع مكثف المرشح بواسطة المقاوم من مستهلكي تيار النبض. كما أن تثبيت المقاوم في فجوة السلك المشترك لا يبشر بالخير - سيكون هناك مستويان أرضيان سيكون من دواعي سروري العبث بهما.
يمكن تجنب مشاكل انخفاض الجهد باستخدام أجهزة استشعار التيار غير المتصلة - مثل أجهزة استشعار القاعة:


الشكل 2. جهاز استشعار عدم الاتصال الحالي
ومع ذلك، هناك طريقة أكثر ذكاءً لقياس التيار. بعد كل شيء، ينخفض ​​الجهد عبر الترانزستور بنفس الطريقة تمامًا ويتدفق من خلاله نفس التيار مثل الحث. وبالتالي، يمكن أيضًا تحديد القيمة الحالية للتيار من خلال انخفاض الجهد عبره. بصراحة، إذا نظرت إلى الهيكل الداخلي لرقائق المحول، على سبيل المثال، من شركة Texas Instruments، فإن هذه الطريقة شائعة مثل تلك السابقة. إن دقة هذه الطريقة، بالطبع، ليست هي الأعلى، ولكن هذا يكفي تماما للعمل الحالي.


الشكل 3. الترانزستور كمستشعر للتيار
نحن نفعل الشيء نفسه في دوائر أخرى ذات محولات مماثلة، سواء كانت معززة أو مقلوبة.
ومع ذلك، من الضروري أن نذكر بشكل منفصل المحولات الأمامية والمحولات المرتدة.


الشكل 4. توصيل أجهزة الاستشعار الحالية في محولات flyback
يمكنهم أيضًا استخدام مقاومة خارجية أو ترانزستور في دورهم.
هذا هو المكان الذي انتهينا فيه من توصيل المستشعرات بمحولات التيار المستمر. إذا كانت لديك اقتراحات لخيارات أخرى، سأكون سعيدًا بتكملة المقالة بها.
1.2 توصيل أجهزة الاستشعار بدوائر التيار المتردد أحادية الطور
في دوائر التيار المتردد لدينا مجموعة أكبر بكثير من أجهزة الاستشعار الممكنة. دعونا نفكر في عدة خيارات.
أبسطها هو استخدام مقسم جهد مقاوم وتحويلة تيار.


الشكل 5. توصيل أجهزة استشعار المقاوم
ومع ذلك، فإنه يحتوي على اثنين من العيوب الهامة:
أولاً، سنوفر إما سعة كبيرة للإشارة من التحويلة الحالية من خلال تخصيص كمية كبيرة من الطاقة لها، أو سنكتفي بسعة صغيرة للإشارة ثم نقوم بتضخيمها لاحقًا. وثانيًا، تخلق المقاومة فرق جهد بين محايد الشبكة ومحايد الجهاز. إذا كان الجهاز معزولا، فلا يهم، ولكن إذا كان الجهاز يحتوي على محطة تأريض، فإننا نخاطر بالبقاء دون إشارة من المستشعر الحالي، لأننا سنقوم بإغلاقه. قد يكون من المفيد تجربة أجهزة الاستشعار التي تعمل وفق مبادئ أخرى.
على سبيل المثال، سوف نستخدم محولات التيار والجهد، أو مستشعر تيار تأثير هول ومحول الجهد. هناك إمكانيات أكبر بكثير للعمل مع المعدات، حيث أن السلك المحايد لا يوجد به خسائر، والأهم من ذلك، في كلتا الحالتين هناك عزل كلفاني لمعدات القياس، والذي قد يكون مفيدًا في كثير من الأحيان. ومع ذلك، فمن الضروري أن نأخذ في الاعتبار أن أجهزة استشعار التيار والجهد للمحولات لها استجابة تردد محدودة وإذا أردنا قياس التركيب التوافقي للتشوهات، فليس حقيقة أنها ستعمل.


الشكل 6. توصيل المحولات وأجهزة استشعار التيار والجهد غير المتصلة
1.3 توصيل أجهزة الاستشعار بدوائر التيار المتردد متعددة الطور
في الشبكات متعددة المراحل، تكون قدرتنا على توصيل أجهزة الاستشعار الحالية أقل قليلاً. ويرجع ذلك إلى حقيقة أنه لن يكون من الممكن استخدام تحويلة التيار على الإطلاق، حيث أن فرق الجهد بين تحويلات الطور سوف يتقلب ضمن مئات الفولتات ولا أعرف أي وحدة تحكم للأغراض العامة يمكن أن تصمد مدخلاتها التناظرية مثل هذه الإساءة.
بالطبع، هناك طريقة واحدة لاستخدام مجزئات التيار - لكل قناة تحتاج إلى إجراء مدخلات تناظرية معزولة جلفانيًا. ولكن من الأسهل والأكثر موثوقية استخدام أجهزة استشعار أخرى.
في محلل الجودة الخاص بي، أستخدم مقسمات الجهد المقاومة وأجهزة استشعار تيار تأثير القاعة عن بعد.

الشكل 7. أجهزة الاستشعار الحالية في شبكة ثلاثية الطور
كما ترون من الشكل، نحن نستخدم اتصالاً بأربعة أسلاك. بالطبع، بدلاً من مستشعرات تأثير هول، يمكنك استخدام محولات التيار أو حلقات روجوفسكي.
بدلاً من المقسمات المقاومة، يمكن استخدام محولات الجهد، لكل من الأنظمة ذات الأربعة أسلاك والثلاثية الأسلاك.
وفي الحالة الأخيرة، ترتبط الملفات الأولية لمحولات الجهد بمثلث، والملفات الثانوية بنجمة، والنقطة المشتركة بينهما هي النقطة المشتركة لدائرة القياس


الشكل 8. استخدام محولات الجهد في شبكة ثلاثية الطور

2 قيمة RMS للتيار والجهد


حان الوقت لحل مشكلة قياس إشاراتنا. من الأهمية العملية بالنسبة لنا، أولاً وقبل كل شيء، القيمة الفعالة للتيار والجهد.
اسمحوا لي أن أذكركم بالمعدات من سلسلة أجهزة الاستشعار. باستخدام ADC لوحدة التحكم الدقيقة لدينا، سوف نقوم بتسجيل قيمة الجهد اللحظي على فترات منتظمة. وبالتالي، خلال فترة القياس سيكون لدينا مجموعة من البيانات على مستوى قيمة الجهد اللحظي (كل شيء مشابه للتيار).


الشكل 9. سلسلة من قيم الجهد اللحظي
مهمتنا هي حساب القيمة الفعالة. أولاً، دعونا نستخدم صيغة التكامل:
(1)
في النظام الرقمي علينا أن نقتصر على كمية معينة من الوقت، لذلك ننتقل إلى المجموع:
(2)
أين هي فترة أخذ العينات لإشارتنا، وما هو عدد العينات خلال فترة القياس. في مكان ما هنا في الفيديو أبدأ بالحديث عن هراء حول المساواة في المناطق. كان يجب أن أحصل على قسط من النوم في ذلك اليوم. =)
في وحدات التحكم الدقيقة MSP430FE4252، والتي تُستخدم في عدادات الكهرباء أحادية الطور من طراز Mercury، يتم إجراء 4096 عملية حسابية خلال فترة قياس تبلغ 1 أو 2 أو 4 ثوانٍ. وسوف نعتمد على T=1c و N=4096 فيما يلي. علاوة على ذلك، فإن 4096 نقطة في الثانية ستسمح لنا باستخدام خوارزميات تحويل فورييه السريعة لتحديد الطيف التوافقي حتى التوافقي الأربعين، كما هو مطلوب من قبل GOST. لكن المزيد عن ذلك في الحلقة القادمة.
دعونا نرسم خوارزمية لبرنامجنا. نحتاج إلى ضمان الإطلاق المستقر لـ ADC كل 1/8192 ثانية، نظرًا لوجود قناتين وسنقوم بقياس هذه البيانات بالتناوب. للقيام بذلك، قم بإعداد مؤقت وستقوم إشارة المقاطعة بإعادة تشغيل ADC تلقائيًا. يمكن لجميع ADC القيام بذلك.
سنكتب البرنامج المستقبلي على الأردوينو، لأنه في متناول الكثير من الناس. في الوقت الحالي، اهتمامنا أكاديمي بحت.
نظرًا لوجود تردد كوارتز للنظام يبلغ 16 ميجاهرتز ومؤقت 8 بت (بحيث لا تبدو الحياة مثل العسل)، نحتاج إلى التأكد من أن أي مقاطعة للمؤقت تعمل بتردد 8192 هرتز.
يحزننا أن 16 ميجاهرتز غير مقسم بالقدر الذي نحتاجه وتردد التشغيل النهائي للمؤقت هو 8198 هرتز. نغمض أعيننا عن خطأ قدره 0.04٪ وما زلنا نقرأ 4096 عينة لكل قناة.
يحزننا أن مقاطعة الفائض في الاردوينو مشغولة بحساب الزمن (المسؤولة عن الملل والتأخير فتتوقف عن العمل بشكل طبيعي)، لذلك نستخدم مقاطعة المقارنة.
وندرك فجأة أن الإشارة القادمة إلينا ثنائية القطب، وأن msp430fe4252 يتأقلم معها تمامًا. نحن راضون عن ADC أحادي القطب، لذلك نقوم بتجميع محول إشارة بسيط ثنائي القطب إلى أحادي القطب باستخدام مضخم تشغيلي:


الشكل 10. محول الإشارة ثنائي القطب إلى أحادي القطب
علاوة على ذلك، فإن مهمتنا هي التأكد من أن التذبذب الجيبي لدينا نسبة إلى نصف الجهد المرجعي - ثم سنقوم إما بطرح نصف النطاق أو تنشيط الخيار في إعدادات ADC والحصول على القيم الموقعة.
يحتوي Arduino على ADC 10 بت، لذلك سنطرح النصف من النتيجة غير الموقعة في النطاق 0-1023 ونحصل على -512-511.
نتحقق من النموذج الذي تم تجميعه في LTSpiceIV ونتأكد من أن كل شيء يعمل كما ينبغي. في مادة الفيديو نتحقق من ذلك بشكل تجريبي.


الشكل 11. نتيجة المحاكاة. الأخضر هو إشارة المصدر، والأزرق هو إشارة الخرج.

رسم تخطيطي لاردوينو لقناة واحدة

إعداد باطل () (autoadcsetup () ؛ DDRD | = (1<

البرنامج مكتوب في Arduino IDE لوحدة التحكم الدقيقة ATmega1280. في لوحة تصحيح الأخطاء الخاصة بي، يتم توجيه القنوات الثمانية الأولى لتلبية الاحتياجات الداخلية للوحة، لذلك يتم استخدام قناة ADC8. من الممكن استخدام هذا المخطط للوحة مع ATmega168، ولكن يجب عليك تحديد القناة الصحيحة.
داخل المقاطعات، نقوم بتشويه اثنين من دبابيس الخدمة لرؤية تردد رقمنة التشغيل بوضوح.
بضع كلمات حول مصدر المعامل 102 في البداية، تم توفير إشارة بسعات مختلفة من المولد، وتمت قراءة قيمة الجهد الفعال من راسم الذبذبات، وتم أخذ القيمة المحسوبة بوحدات ADC المطلقة من وحدة التحكم. .

اوماكس، V أورمز، ب عد
3 2,08 212
2,5 1,73 176
2 1,38 141
1,5 1,03 106
1 0,684 71
0,5 0,358 36
0,25 0,179 19

وبقسمة قيم العمود الثالث على قيم الثاني نحصل على متوسط ​​102. وسيكون هذا هو معامل "المعايرة" الخاص بنا. ومع ذلك، يمكنك ملاحظة أنه مع انخفاض الجهد، تنخفض الدقة بشكل حاد. ويرجع ذلك إلى الحساسية المنخفضة لـ ADC لدينا. في الواقع، 10 أرقام للحسابات الدقيقة صغيرة بشكل كارثي، وإذا كان من الممكن تمامًا قياس الجهد في المقبس بهذه الطريقة، فإن استخدام ADC 10 بت لقياس التيار الذي يستهلكه الحمل سيكون جريمة ضد علم القياس .

عند هذه النقطة سوف نأخذ استراحة. في الجزء التالي، سننظر في الأسئلة الثلاثة الأخرى في هذه السلسلة وسننتقل بسلاسة إلى إنشاء الجهاز نفسه.

ستجد البرامج الثابتة المقدمة، بالإضافة إلى البرامج الثابتة الأخرى لهذه السلسلة (نظرًا لأنني أقوم بتصوير مواد الفيديو بشكل أسرع من إعداد المقالات) في المستودع الموجود على GitHub.

مخطط دائرة لجهاز محلي الصنع يعتمد على Arduino Uno، وهو مصمم لقياس التردد والجهد في المقبس وعرض النتائج على شاشة 1602A. من السهل جدًا تصنيع الجهاز بفضل استخدام وحدة ARDUINO UNO الجاهزة.

رسم تخطيطى

المؤشر عبارة عن شاشة LCD من النوع 1602A، وهو قياسي، استنادًا إلى وحدة التحكم HD44780. يعني التعيين 1602A في الواقع أنه موجود على سطرين يتكون كل منهما من 16 حرفًا.

أساس الجهاز هو ARDUINO UNO، وهي وحدة جاهزة غير مكلفة نسبيًا - لوحة دوائر مطبوعة صغيرة يوجد عليها متحكم ATMEGA328، بالإضافة إلى جميع "الأنابيب" اللازمة لتشغيلها، بما في ذلك مبرمج USB و مزود الطاقة.

يتم تشغيل الجهاز من التيار الكهربائي ويقيس المعلمات المذكورة أعلاه. يعمل مصدر الطاقة في نفس الوقت كجهاز استشعار للحصول على بيانات حول التردد والجهد في الشبكة الكهربائية. يتم تصنيع مصدر الطاقة على أساس محول T1 جاهز منخفض الطاقة ، والذي يحتوي على ملفين متطابقين بجهد متناوب 9 فولت لكل منهما.

أرز. 1. رسم تخطيطي لمقياس التردد والجهد في الشبكة الكهربائية، تم استخدام Arduino Uno و1602A.

يعمل ملف واحد على استقبال جهد الإمداد. يتم توفير الجهد المتردد منه إلى جسر المعدل باستخدام الثنائيات VD1-VD4. يعمل المكثف C3 على تنعيم تموجات الجهد المصحح.

يتلقى C3 جهدًا ثابتًا يبلغ حوالي 12 فولت، والذي يتم توفيره للموصل لتزويد الطاقة إلى لوحة ARDUINO UNO، وإلى مدخل منظم الجهد 5 فولت على هذه اللوحة، والذي يعمل على تشغيل اللوحة بأكملها ومؤشر H1.

يعمل الملف الثانوي الآخر للمحول كجهاز استشعار لقياس معلمات شبكة الطاقة. يتم توفير الجهد المتردد منه عبر R1 إلى جهاز تشكيل النبض بتردد التيار الكهربائي المصنوع على الترانزستور VT1 وفقًا لدائرة التبديل. يتم إرسال هذه النبضات إلى المنفذ الرقمي D10 للوحة ARDUINO UNO.

يتم قياس الجهد المتردد للشبكة باستخدام مقوم باستخدام الصمام الثنائي VD5 والمكثف C2. يتم تحديد حجم الجهد المتردد في الشبكة من خلال حجم الجهد المباشر على هذا المكثف ومن خلال مقسم قابل للتعديل على المقاومات R4 و R5، يتم توفيره إلى الإدخال التناظري A1 للوحة ARDUINO UNO.

برنامج

ويرد في الجدول 1 برنامج C++ مع التعليقات التفصيلية. لقياس التردد، استخدم وظيفة النبض، التي تقيس بالميكروثانية مدة الحافة الإيجابية أو السلبية لنبضة الإدخال.

الجدول 1.

أرز. 2. الكود المصدري لبرنامج قياس قيمة التردد والجهد في الشبكة الكهربائية.

لذلك، من أجل معرفة الفترة، تحتاج إلى إضافة مدة نصف الدورات الإيجابية والسلبية، ولمعرفة التردد بالهرتز، تحتاج إلى تقسيم 1،000،000 على الفترة المحسوبة.

يتكون قياس مدة الفترة من جزأين: أولاً، يتم قياس فترات أنصاف الموجات الموجبة والسالبة بالخطوط:

Htime=pulseln(10,HIGH);

Ltime=pulseln(10,LOW);

ثم يتم حساب الفترة الكاملة في السطر:

Ttime=Htime+Ltime ;

ومن ثم حساب التردد في الخط:

التردد = 1000000/Ttime؛

يعتمد عمل برنامج قياس الجهد على قراءة البيانات من المدخلات التناظرية وحساب نتيجة القياس. يتم تحويل إخراج المنفذ التناظري إلى شكل رقمي بواسطة ADC الخاص بوحدة التحكم الدقيقة. للحصول على النتيجة بوحدات فولت، تحتاج إلى ضربها في 5 (في الجهد المرجعي، أي في جهد إمداد المتحكم الدقيق) والقسمة على 1024.

من أجل أن تكون قادرًا على قياس الفولتية الأكبر من 5 فولت، أو بالأحرى، أكبر من جهد إمداد المتحكم الدقيق، لأن الجهد الفعلي عند خرج المثبت 5 فولت على لوحة ARDUINO UNO قد يختلف عن 5 فولت، وعادةً ما يكون أقل قليلاً، تحتاج إلى استخدام مقسمات مقاومة تقليدية عند الإدخال. يوجد هنا مقسم جهد عبر المقاومات R5 و R4.

بالإضافة إلى ذلك، يلعب استخدام المحول دورًا، وكذلك الفرق بين قيمة الجهد المباشر والجهد المتردد. لذلك، يتم إضافة عامل القسمة الأصلي وهو 0.016. تتم قراءة البيانات من المنفذ التناظري في السطر:

vout=analogRead(analogInput);

ثم يتم حساب الجهد الفعلي مع الأخذ في الاعتبار نسبة تقسيم مقسم جهد الدخل:

فولت=فوت*5.0/1024.0/0.016;

في هذا الخط، الرقم 5.0 هو الجهد عند خرج مثبت لوحة ARDUINO UNO. من الناحية المثالية، يجب أن يكون 5 فولت، ولكن لكي يعمل الفولتميتر بدقة، يجب أولاً قياس هذا الجهد.

قم بتوصيل مصدر طاقة 12 فولت وقياس الجهد +5 فولت عند موصل الطاقة باللوحة باستخدام مقياس الفولتميتر الدقيق إلى حد ما. ماذا يحدث، أدخل في هذا السطر بدلاً من 5.0، فمثلاً إذا كان هناك 4.85V، فسيبدو السطر هكذا:

فولت=فوت*4.85/1024.0/0.016;

ثم يتم عرض نتائج القياس على شاشة LCD. يتم إدخال الجهد في السطر الأول من الشاشة والتردد في السطر الثاني. يشار إلى وحدات القياس بـ "V" و"هرتز". أما بالنسبة لقياس التردد، فلا حاجة لأي تعديل على الإطلاق. ولكن لقياس الجهد، تحتاج إلى معايرة الجهاز وفقًا للمعيار عن طريق ضبط المقاوم R5.

كارافكين ف.رك-10-17.

المدخلات التناظرية للوحة اردوينو.

تحتوي لوحة Arduino UNO على 6 مدخلات تناظرية مصممة لقياس إشارات الجهد. سيكون من الأصح أن نقول أن دبابيس اللوحة الستة يمكن أن تعمل في كل من وضعي الإخراج المنفصل والإدخال التناظري.

يتم ترقيم هذه الأطراف من 14 إلى 19. وقد تم تكوينها في البداية كمدخلات تناظرية ويمكن الوصول إليها باستخدام الأسماء A0-A5. ويمكن تهيئتها لتعمل كمخرجات منفصلة في أي وقت.

pinMode(A3, OUTPUT); // ضبط وضع الإخراج المنفصل لـ A3
الكتابة الرقمية (A3، LOW)؛ // ضبط الإخراج A3 منخفضًا

للعودة إلى وضع الإدخال التناظري:

pinMode(A3, INPUT); // ضبط وضع الإدخال التناظري لـ A3

المدخلات التناظرية ومقاومات السحب.

يتم توصيل مقاومات السحب إلى أطراف الإدخال التناظرية، وكذلك إلى المسامير المنفصلة. يتم تشغيل هذه المقاومات باستخدام الأمر

الكتابة الرقمية (A3، عالية)؛ // قم بتشغيل المقاوم السحب لإدخال A3

يجب تطبيق الأمر على الدبوس الذي تم تكوينه في وضع الإدخال.

يجب أن نتذكر أن المقاوم يمكن أن يؤثر على مستوى إشارة الدخل التناظرية. سيؤدي التيار القادم من مصدر الطاقة 5 فولت، عبر مقاومة السحب، إلى انخفاض الجهد عبر المقاومة الداخلية لمصدر الإشارة. لذلك من الأفضل فصل المقاوم.

محول تناظري إلى رقمي للوحة Arduino.

يتم إجراء قياس الجهد الفعلي عند المدخلات بواسطة محول تناظري إلى رقمي (ADC) مع مفتاح لـ 6 قنوات. تبلغ دقة ADC 10 بتات، وهو ما يتوافق مع الكود عند إخراج المحول 0...1023. لا يزيد خطأ القياس عن وحدتين من الرقم الأقل أهمية.

للحفاظ على أقصى قدر من الدقة (10 بت)، من الضروري ألا تتجاوز المقاومة الداخلية لمصدر الإشارة 10 كيلو أوم. يعد هذا المطلب مهمًا بشكل خاص عند استخدام مقسمات المقاومة المتصلة بالمدخلات التناظرية للوحة. لا يمكن أن تكون مقاومة مقاومات المقسم عالية جدًا.

وظائف برنامج الإدخال التناظري.

قراءة تناظرية دولية (منفذ)

يقرأ قيمة الجهد عند المدخل التناظري المحدد. يتراوح جهد الإدخال من 0 إلى مستوى الجهد المرجعي (غالبًا 5 فولت) ويتحول إلى رمز من 0 إلى 1023.

مع الجهد المرجعي 5 فولت، تكون الدقة 5 فولت / 1024 = 4.88 مللي فولت.

يستغرق التحويل حوالي 100 ميكروثانية.

int inputCod; // كود جهد الإدخال
تعويم جهد الإدخال؛ // جهد الإدخال في V

inputCod=analogRead(A3); // قراءة الجهد عند الإدخال A3
inputVoltage= ((float)inputCod * 5. / 1024.); // تحويل الكود إلى جهد (V)

مرجع تناظري باطل (نوع)

يضبط الجهد المرجعي لـ ADC. فهو يحدد الحد الأقصى لقيمة جهد الإدخال التناظري الذي يمكن لـ ADC تحويله بشكل صحيح. تحدد قيمة الجهد المرجعي أيضًا عامل تحويل الكود إلى الجهد:

جهد الإدخال = رمز ADC * الجهد المرجعي / 1024.

يمكن أن تأخذ وسيطة النوع القيم التالية:

  • الافتراضي - الجهد المرجعي يساوي جهد إمداد وحدة التحكم (5 فولت أو 3.3 فولت). لاردوينو UNO R3 – 5 فولت.
  • داخلي – جهد مرجعي داخلي 1.1 فولت للوحات المزودة بوحدات تحكم ATmega168 وATmega328، لـ ATmega8 – 2.56 فولت.
  • INTERNAL1V1 - الجهد المرجعي الداخلي 1.1 فولت لوحدات تحكم Arduino Mega.
  • INTERNAL2V56 - الجهد المرجعي الداخلي 2.56 فولت لوحدات تحكم Arduino Mega.
  • خارجي - مصدر جهد مرجعي خارجي، متصل بمدخل AREF.

تناظري(INTERNAL); // الجهد المرجعي هو 1.1 فولت

الفولتميتر ثنائي القناة على اردوينو.

كمثال لاستخدام وظائف الإدخال التناظرية، دعونا ننشئ مشروعًا لفولتميتر رقمي بسيط على الأردوينو. يجب على الجهاز قياس الفولتية عند مدخلين تناظريين للوحة، ونقل القيم المقاسة إلى الكمبيوتر عبر منفذ تسلسلي. باستخدام هذا المشروع كمثال، سأعرض مبادئ إنشاء أنظمة بسيطة للقياس وجمع المعلومات.

لنقرر أن الفولتميتر يجب أن يقيس الجهد في حدود 0...20 فولت على الأقل ونقوم بتطوير دائرة لتوصيل مدخلات الفولتميتر بلوحة Arduino UNO.

إذا قمنا بضبط الجهد المرجعي على 5 فولت، فإن المدخلات التناظرية للوحة ستقيس الجهد ضمن 0...5 فولت. ونحن بحاجة إلى 0...20 فولت على الأقل. وهذا يعني أننا بحاجة إلى استخدام مقسم الجهد.

يرتبط الجهد عند مدخلات ومخرجات المقسم بالعلاقة:

Uoutput = (Uinput / (R1 + R2)) * R2

نسبة الإرسال:

K = Uoutput / Uinput = R2 / (R1 + R2)

نحن بحاجة إلى نسبة نقل 1/4 (20 فولت * 1/4 = 5 فولت).

للحفاظ على أقصى قدر من الدقة (10 بت)، من الضروري ألا تتجاوز المقاومة الداخلية لمصدر الإشارة 10 كيلو أوم. لذلك نختار المقاومة R2 وتساوي 4.22 كيلو أوم. نحسب مقاومة المقاوم R1.

0.25 = 4.22 / (R1 + 4.22)
R1 = 4.22 / 0.25 – 4.22 = 12.66 كيلو أوم

لقد وجدت مقاومات بمقاومة 15 كيلو أوم بأقرب قيمة. مع المقاومات R1 = 15 كيلو أوم و R2 = 4.22:

5 / (4.22 / (15 + 4.22)) = 22.77 فولت.

ستبدو دائرة الفولتميتر المعتمدة على الأردوينو بهذا الشكل.

يتم توصيل مجزئين للجهد بالمدخلين التناظريين A0 وA1. تشكل المكثفات C1 وC2، مع مقاومات المقسم، مرشحات تمرير منخفض تعمل على إزالة الضوضاء عالية التردد من الإشارات.

لقد قمت بتجميع هذه الدائرة على اللوح.

لقد قمت بتوصيل المدخل الأول للفولتميتر بمصدر طاقة منظم، والثاني بمصدر طاقة 3.3 فولت للوحة Arduino. لمراقبة الجهد، قمت بتوصيل الفولتميتر بالمدخل الأول. كل ما تبقى هو كتابة البرنامج.

برنامج لقياس الجهد باستخدام لوحة الاردوينو.

الخوارزمية بسيطة. ضروري:

  • قراءة رمز ADC مرتين في الثانية الواحدة؛
  • تحويله إلى الجهد.
  • إرسال القيم المقاسة عبر المنفذ التسلسلي إلى جهاز الكمبيوتر؛
  • يعرض برنامج مراقبة منفذ Arduino IDE قيم الجهد التي تم الحصول عليها على شاشة الكمبيوتر.

سأعطيك مخططًا كاملاً للبرنامج على الفور.

// برنامج قياس الجهد
// على المدخلات التناظرية A0 وA1

#يشمل

زمن فترة القياس
#تعريف R1 15. // مقاومة المقاوم R1
#تعريف R2 4.22 // مقاومة المقاوم R2


تعويم u1، u2؛ // الفولتية المقاسة

الإعداد باطل() (
Serial.begin(9600); //

MsTimer2::start(); // تمكين المقاطعة
}

حلقة فارغة() (

// الفترة 500 مللي ثانية
إذا (timeCount >= MEASURE_PERIOD) (
timeCount= 0;

//

// قراءة رمز القناة 2 والتحويل إلى الجهد
u2= ((float)analogRead(A1)) * 5. / 1024. / R2 * (R1 + R2);

// نقل البيانات عبر المنفذ التسلسلي
Serial.print("U1 = "); Serial.print(u1, 2);
Serial.print("U2 ="); Serial.println(u2, 2);
}
}

// معالجة المقاطعة 1 مللي ثانية
مقاطعة باطلة ()
timeCount++;
}

اسمحوا لي أن أشرح السطر الذي يتم فيه تحويل رمز ADC إلى جهد:

// قراءة رمز القناة 1 وتحويلها إلى الجهد
u1= ((float)analogRead(A0)) * 5. / 1024. / R2 * (R1 + R2);

  • تتم قراءة رمز ADC:analogRead(A0) .
  • تم تحويله بشكل صريح إلى تنسيق النقطة العائمة: (float) .
  • تم تحويله إلى جهد عند الإدخال التناظري: * 5. / 1024. تشير النقطة الموجودة في نهاية الأرقام إلى أن هذا رقم فاصلة عائمة.
  • ويؤخذ في الاعتبار معامل انتقال المقسم: / R2 * (R1 + R2).

لنقم بتحميل البرنامج على اللوحة ونطلق شاشة المنفذ التسلسلي.

يُظهر شريطان قيد التشغيل قيم الفولتية المقاسة. كل شيء يعمل.

قياس متوسط ​​قيمة الإشارة.

لنقم بتوصيل القناة الأولى لجهاز الفولتميتر الخاص بنا بمصدر جهد بمستوى تموج عالٍ. سوف نرى هذه الصورة على الشاشة.

ترتعش قيم الجهد للقناة الأولى على شاشة الشاشة وتقفز باستمرار. وقراءات جهاز قياس الفولتميتر مستقرة تمامًا. وذلك لأن الفولتميتر المرجعي يقيس متوسط ​​قيمة الإشارة، بينما تقوم لوحة الاردوينو بقراءة العينات الفردية كل 500 مللي ثانية. وبطبيعة الحال، فإن اللحظة التي يقرأ فيها ADC تقع في نقاط مختلفة في الإشارة. وعلى مستوى عال من النبضات، تكون السعة عند هذه النقاط مختلفة.

بالإضافة إلى ذلك، إذا تمت قراءة الإشارة في عينات متفرقة منفصلة، ​​فإن أي ضوضاء نبضية يمكن أن تؤدي إلى خطأ كبير في القياس.

الحل هو أخذ عدة عينات متكررة ومتوسط ​​القيمة المقاسة. لهذا:

  • في معالج المقاطعة نقرأ كود ADC ونجمعه مع العينات السابقة؛
  • حساب متوسط ​​الوقت (عدد العينات المتوسطة)؛
  • عند الوصول إلى العدد المحدد من العينات، نقوم بحفظ القيمة الإجمالية لرموز ADC؛
  • للحصول على القيمة المتوسطة، قم بتقسيم مجموع رموز ADC على عدد عينات المتوسط.

مشكلة من كتاب الرياضيات للصف الثامن. فيما يلي رسم تخطيطي للبرنامج، وهو عبارة عن فولتميتر متوسط ​​القيمة ثنائي القناة.

// برنامج قياس الجهد المتوسط
// على المدخلات التناظرية A0 وA1

#يشمل

#تعريف القياس_الفترة 500 // زمن فترة القياس
#تعريف R1 15. // مقاومة المقاوم R1
#تعريف R2 4.22 // مقاومة المقاوم R2

int timeCount; // عداد الوقت
طويلة sumU1، sumU2؛ // المتغيرات لجمع رموز ADC
متوسط ​​طويل U1، متوسط ​​U2؛ // مجموع رموز ADC (متوسط ​​القيمة * 500)
العلم المنطقي جاهز؛ // مؤشر جاهزية بيانات القياس

الإعداد باطل() (
Serial.begin(9600); // تهيئة المنفذ، السرعة 9600
MsTimer2::set(1, timerInterupt); // مقاطعات الموقت، الفترة 1 مللي ثانية
MsTimer2::start(); // تمكين المقاطعة
}

حلقة فارغة() (

إذا (flagReady == صحيح) (
flagReady= false;
// التحويل إلى الجهد ونقله إلى الكمبيوتر
Serial.print("U1 = ");
Serial.print((float)avarageU1 / 500. * 5. / 1024. / R2 * (R1 + R2)، 2)؛
Serial.print("U2 =");
Serial.println((float)avarageU2 / 500. * 5. / 1024. / R2 * (R1 + R2)، 2)؛
}
}

// معالجة المقاطعة 1 مللي ثانية
مقاطعة باطلة ()

timeCount++; // +1 عداد متوسط ​​العينات
sumU1+=analogRead(A0); // جمع رموز ADC
sumU2+=analogRead(A1); // جمع رموز ADC

// التحقق من عدد العينات المتوسطة
إذا (timeCount >= MEASURE_PERIOD) (
timeCount= 0;
avarageU1= sumU1; // متوسط ​​القيمة الزائدة
avarageU2= sumU2; // متوسط ​​القيمة الزائدة
مجموعU1= 0;
sumU2= 0;
flagReady= true; // نتيجة قياس الإشارة جاهزة
}
}

تمت إضافة /500 إلى صيغة تحويل كود ADC إلى جهد - عدد العينات. قم بتحميل وتشغيل مراقب المنفذ (Cntr+Shift+M).

الآن، حتى مع وجود مستوى كبير من النبض، تتغير القراءات بمقدار أجزاء من المئات. هذا فقط لأن الجهد غير مستقر.

ويجب اختيار عدد العينات مع الأخذ بعين الاعتبار:

  • ويحدد عدد العينات زمن القياس؛
  • كلما زاد عدد العينات، قل التداخل.

المصدر الرئيسي للتداخل في الإشارات التناظرية هو شبكة 50 هرتز. ولذلك، فمن المستحسن اختيار متوسط ​​الوقت الذي يكون مضاعفًا لـ 10 مللي ثانية - زمن نصف الدورة لشبكة ذات تردد 50 هرتز.

تحسين العمليات الحسابية.

تستهلك حسابات النقطة العائمة ببساطة موارد وحدة التحكم الدقيقة 8 بت. تتطلب أي عملية للفاصلة العائمة إلغاء تطبيع الجزء العشري، وتشغيل النقطة الثابتة، وتطبيع الجزء العشري، وتصحيح الترتيب... وجميع العمليات بأرقام 32 بت. لذلك، من الضروري تقليل استخدام حسابات الفاصلة العائمة. سأخبرك بكيفية القيام بذلك في الدروس التالية، ولكن دعونا على الأقل نقوم بتحسين حساباتنا. سيكون التأثير كبيرا.

في برنامجنا، تتم كتابة تحويل كود ADC إلى جهد على النحو التالي:

(تعويم) متوسطU1 / 500. * 5. / 1024. / R2 * (R1 + R2)

هناك الكثير من الحسابات هنا، جميعها باستخدام النقطة العائمة. لكن معظم الحسابات هي عمليات ذات ثوابت. جزء من الخط:

/ 500. * 5. / 1024. / ر2 * (ر1 + ر2)

(تعويم) متوسطU1 * 0.00004447756

يتعرف المترجمون الأذكياء أنفسهم على الحسابات ذات الثوابت ويحسبونها في مرحلة التجميع. لدي سؤال حول مدى ذكاء مترجم Andruino. قررت التحقق من ذلك.

لقد كتبت برنامجًا قصيرًا. فهو ينفذ دورة مكونة من 10000 تمريرة ثم ينقل وقت تنفيذ تلك الدورات الـ 10000 إلى الكمبيوتر. أولئك. فهو يسمح لك بمعرفة وقت تنفيذ العمليات الموضوعة في نص الحلقة.

// التحقق من تحسين الحساب

كثافة العمليات س= 876;
تعويم ذ؛
عدد صحيح غير موقعة؛
وقت طويل غير موقع الحالي، الوقت السابق؛

الإعداد باطل() (
Serial.begin(9600);
}

حلقة فارغة() (
العد++;
// y= (float)x / 500. * 5. / 1024. / 4.22 * (15. + 4.22);
// ص = (تعويم)x * 0.00004447756 ;

إذا (العدد >= 10000) (
العد= 0;
timeCurrent= ميلي();
Serial.println(timeCurrent - timePrev);
timePrev= timeCurrent;
}
}

في الخيار الأول، عندما يتم التعليق على عمليات الفاصلة العائمة في الحلقة وعدم تنفيذها، ينتج البرنامج نتيجة تبلغ 34 مللي ثانية.

أولئك. يتم إكمال 10000 حلقة فارغة في 34 مللي ثانية.

ثم فتحت السطر:

ص= (تعويم)x / 500. * 5. / 1024. / 4.22 * (15. + 4.22);

يكرر حساباتنا. نتيجة 10000 تمريرة في 922 مللي ثانية أو

(922 - 34) / 10000 = 88.8 ميكروثانية.

أولئك. يستغرق هذا السطر من حسابات النقطة العائمة 89 ميكروثانية لإكماله. اعتقدت أنه سيكون هناك المزيد.

الآن أغلقت هذا السطر بتعليق وفتحت السطر التالي، مضروبًا في ثابت محسوب مسبقًا:

ص= (تعويم)x * 0.00004447756 ;

نتيجة 10000 تمريرة في 166 مللي ثانية أو

(166 - 34) / 10000 = 13.2 ميكروثانية.

نتيجة مذهلة. لقد وفرنا 75.6 ميكروثانية لكل سطر. لقد أكملناها أسرع بنحو 7 مرات. لدينا سطرين من هذا القبيل ولكن يمكن أن يكون هناك المزيد منهم في البرنامج.

الخلاصة - يجب إجراء العمليات الحسابية ذات الثوابت بنفسك على الآلة الحاسبة واستخدامها في البرامج كمعاملات جاهزة. لن يقوم مترجم Arduino بحسابها في مرحلة التجميع. وفي حالتنا يجب أن نفعل هذا:

#تعريف ADC_U_COEFF 0.00004447756 // عامل تحويل رمز ADC إلى الجهد

Serial.print((float)avarageU1 * ADC_U_COEFF, 2);

الخيار الأمثل للأداء هو نقل رمز ADC إلى الكمبيوتر، ومعه جميع حسابات الفاصلة العائمة. وفي هذه الحالة يجب أن يقوم برنامج متخصص على الكمبيوتر باستقبال البيانات. لن تعمل شاشة المنفذ من Arduino IDE.

سأتحدث عن طرق أخرى لتحسين برامج Arduino في الدروس المستقبلية حسب الحاجة. ولكن بدون حل هذه المشكلة، من المستحيل تطوير برامج معقدة على متحكم 8 بت.

ظهر درس آخر على الموقع (

اردوينويحتوي على العديد من المدخلات التناظرية، والتي يمكنك من خلالها قياس معلمات الكميات التناظرية. يمكن أن يكون هذا الجهد والتيار والمقاومة ودرجة الحرارة والضوء وما إلى ذلك. في بعض الحالات، قد تكون هناك حاجة إلى أجهزة استشعار خاصة لتحويل الكميات الفيزيائية إلى إشارات كهربائية. سأتحدث اليوم عن استخدام واختبار أداء المحول التناظري إلى الرقمي (ADC) اردوينو. سأقوم بإجراء الاختبار باستخدام اللوحة الأصلية اردوينو ميجا 2560، والذي يعتمد على متحكم دقيق ATMega 2560 يعمل بتردد 16 ميجاهرتز. متحكم ATMega328، والتي يرتكزون عليها اردوينو أونوو اردوينو نانو، تعمل أيضًا بتردد 16 ميجاهرتز، لذلك من المرجح أن يكون كل ما سبق صحيحًا بالنسبة لهذه اللوحات واللوحات المماثلة.

قراءة تناظرية

دعونا نرى كم من الوقت يستغرق التحويل من تمثيلي إلى رقمي باستخدام الوظيفة القياسية قراءة تناظرية.

لتحديد بداية ونهاية التحويل، سأستخدم الدبوس 12 كعلامة. أولا، دعونا نكرر التجربة التي وصفتها في المقال. سوف نقوم بتغيير مستوى الجهد على الدبوس الرقمي 12 بين الحالات قليلو عالي. لنقاء التجربة سأضعها بالداخل حلقةدورة لا نهاية لها.

يبدو المخطط الذي يطبق التبديل البسيط على الدبوس الرقمي 12 كما يلي:

إعداد باطل () (DDRB = B01000000؛ // ضبط الدبوس 12 على وضع الإخراج) حلقة باطلة () (بينما (1) ( PORTB = B01000000؛ // ضبط الدبوس 12 على الحالة العالية PORTB = B00000000؛ // ضبط الدبوس 12 على الحالة منخفضة ))

دعونا نستخدم راسم الذبذبات وننظر إلى معلمات التوقيت لهذا البرنامج:

من هذا يمكننا أن نرى أن وقت تبديل حالة الدبوس يستغرق 62 نانو ثانية (مدة النبضة الإيجابية).

الآن دعونا نغير الرسم قليلاً ونضيف وظيفة لقراءة الإشارة التناظرية بين المفاتيح قراءة تناظريةعلى دبوس التناظرية 3:

int AnalogPin = 3; // الإدخال التناظري intanalogValue = 0; إعداد باطل () (DDRB = B01000000؛ // ضبط الدبوس 12 على وضع الإخراج) حلقة باطلة () (بينما (1) ( PORTB = B01000000؛ // ضبط الدبوس 12 على الحالة العاليةanalogValue =analogRead(analogPin);//قراءة الإشارة التناظرية PORTB = B00000000؛ // ضبط الدبوس 12 على LOWanalogValue =analogRead(analogPin);

إنت التناظرية = 3 ؛ // إدخال دبوس التناظرية

قيمة التناظرية int = 0 ؛ // قيمة الإشارة التناظرية

الإعداد باطل()

DDRB = B01000000 ; // اضبط الدبوس 12 على وضع الإخراج

حلقة فارغة()

بينما(1)

بورتب = B01000000 ; // اضبط الدبوس 12 على الحالة العالية

// قراءة الإشارة التناظرية

بورتب = B00000000 ; // قم بتعيين الدبوس 12 على الحالة المنخفضة

AnalogValue =analogRead(analogPin); // قراءة الإشارة التناظرية

سيبدو الآن مخطط ذبذبات الإشارة على الدبوس الرقمي 12 كما يلي:

مدة التبديل 62 ns وزمن العودة الدوري لبدء البرنامج 124 ns لا تتجاوز خطأ القياس على هذا المقياس الزمني ويمكننا إهمال هذه الفواصل الزمنية. من هذا يمكننا أن نرى أن الوقت المستغرق في التحويل من التناظري إلى الرقمي يبلغ حوالي 112 ميكروثانية، وبالتالي فإن الحد الأقصى لمعدل أخذ العينات عند استخدام الوظيفة قراءة تناظريةلا يتجاوز 8.9 كيلو هرتز.

مساوئ الاستخدام قراءة تناظريةهو ذلك أيضا اردوينولا يمكن تنفيذ تعليمات برمجية أخرى أثناء انتظار نتيجة التحويل.

نحن نستخدم مقاطعات ADC

لأن ATMega2560لا يستخدم نواة المعالج عند التقاط الإشارات التناظرية، فهو مضيعة لقدرات المعالجة. خاصة عندما نحتاج إلى أخذ عينات مستمرة من الإشارة. يمكن تنفيذ هذا أخذ العينات بطريقة أكثر تعقيدًا قليلاً باستخدام المقاطعات. نظرًا لعدم وجود وظيفة مضمنة لتعيين التحويل التناظري باستخدام المقاطعات، يجب معالجة السجلات المرتبطة بـ ADC يدويًا.

أخذ العينات لمرة واحدة

أخذ العينات لمرة واحدة هو في الواقع ما اردوينويفعل عند استدعاء وظيفة قراءة تناظرية. لن نكون قادرين على الحصول على فوائد كبيرة من خلال تنفيذ أخذ العينات المخصصة من خلال وسائل أخرى. نظرًا لأنه قبل بدء ADC، يتم فحص علامة جاهزية ADC أولاً، وهذا يعني أن التحقق من العلامة في الحلقة لا يختلف عما يفعله Arduino.

أخذ العينات المستمر

من الأفكار الجيدة عند أخذ عينات الإشارة بشكل مستمر هو استخدام المقاطعات. المتحكمات الدقيقة ATMega328و ATMega2560يمكن تحويله إلى وضع أخذ العينات المستمر ( وضع التشغيل الحر). في هذا الوضع، يبدأ ADC تلقائيًا بعد اكتمال المعالجة السابقة. في كل مرة ينتهي التحويل بإنشاء مقاطعة، والتي تستدعي وظيفة معالج المقاطعة ISR (ADC_vect)، حيث يمكن قراءة ومعالجة نتيجة التحويل من التناظري إلى الرقمي.

لتمكين وضع أخذ العينات المستمر، يجب تعيين ثلاثة سجلات: أدموكس, أدكسراو ADCSRB. يمكن العثور على وصف تفصيلي لهذه السجلات في الأدلة الفنية للمتحكم الدقيق.

مرجع داخلي 1.1 فولت وقناة إدخال تناظرية أدك3يتم اختيارها باستخدام أدموكس. يتم ضبط تردد الساعة باستخدام أدكسراوفي مثالنا تم تعيينه كمقسوم على ÷16. يستغرق التحويل التناظري الواحد 13 فترة زمنية. يمكن حساب تردد أخذ العينات بناءً على تردد ساعة المتحكم الدقيق: 16 ميجا هرتز/(16*13) ≈ 77 كيلو هرتز. عن طريق تحديد بت التسجيل 6 أدكسرافي حالة عالي، يبدأ أخذ العينات المستمر.

تتم قراءة نتيجة التحويل من التناظري إلى الرقمي في وظيفة خدمة المقاطعة ISR (ADC_vect). وبما أن النتيجة يبلغ طولها 10 بتات، فإنها مقسمة إلى سجلين ADCLو ADCH، حجم كل بايت واحد. لقراءة قيمة بشكل صحيح، تحتاج أولاً إلى قراءة قيمة التسجيل ADCL، ومن ثم التسجيل ADCH.

مثال على رسم يتم فيه نسخ النتيجة التي تم الحصول عليها من ADC إلى متغير عدد صحيح القيمة التناظرية:

القيمة التناظرية int = 0; // إعداد قيمة الإشارة التناظرية () (DDRB = B01000000؛ // الدبوس 12 في وضع الإخراج DIDR0 = 0x3F؛ // تعطيل المدخلات الرقمية ADMUX = 0x43؛ // القياس على ADC3، استخدم الجهد المرجعي الداخلي = 1.1 فولت ADCSRA = 0xAC // تمكين ADC، تمكين المقاطعات، المقسوم = 16 ADCSRB = 0x40؛ // تمكين قنوات التيار المتردد MUX، وضع أخذ العينات المنزلق bitWrite(ADCSRA, 6, 1); ) /*** إجراء معالجة مقاطعة ADC ***/ ISR(ADC_vect) ( PORTB = B00000000; // تم ضبط الطرف 12 على الحالة المنخفضةanalogValue = ADCL; // احفظ البايت المنخفض لنتيجة ADC تمثيلية += ADCH<< 8; // сохраняем старший байт АЦП PORTB = B01000000; // пин 12 переводим в состояние HIGH }

قيمة التناظرية int = 0 ؛ // قيمة الإشارة التناظرية

الإعداد باطل()

DDRB = B01000000 ; // الدبوس 12 في وضع الإخراج

ديدر0 = 0x3F ; // تعطيل المدخلات الرقمية

أدموكس = 0x43؛ // القياس على ADC3، استخدم الجهد المرجعي الداخلي = 1.1 فولت

أدكسرا = 0xAC ; // تمكين ADC، تمكين المقاطعات، المقسوم = 16

أدكسرب = 0x40؛ // تمكين قنوات MUX AC، ووضع أخذ العينات المنزلق

bitWrite(ADCSRA, 6, 1); // ابدأ التحويل عن طريق تعيين البت 6 (=ADSC) إلى ADCSRA

sei(); // قم بتعيين علامة المقاطعة

حلقة فارغة()

/*** إجراء معالجة مقاطعة ADC ***/

ISR (ADC_vect)

بورتب = B00000000 ; // تم تبديل الدبوس 12 إلى الحالة المنخفضة

AnalogValue = ADCL ; // احفظ البايت المنخفض لنتيجة ADC

قيمة تمثيلية + = ADCH<< 8 ; // احفظ البايت العالي لـ ADC

بورتب = B01000000 ; // تم ضبط الدبوس 12 على الحالة العالية

نتيجة البرنامج على شاشة الذبذبات:

لقياس وقت التنفيذ، نترجم حالة الدبوس إلى قليل، ثم نقرأ ADC، وبعد ذلك نحدد المستوى الأعلى مرة أخرى. يستغرق استدعاء معالج المقاطعة وقتًا، ولهذا السبب يكون الجزء الإيجابي من الفترة طويلًا جدًا.

دورة حلقةأصبح الآن مجانيًا تمامًا ويمكن استخدامه لمعالجة أي كود.

مقياس الفولت

لقياس إشارة تناظرية، يجب أن يكون لدينا مستوى جهد معين للمقارنة به. في المتحكمات الدقيقة ATMega328و ATMega2560، والتي تستخدم في اردوينوالجهد المرجعي هو أيضًا أقصى جهد يمكن قياسه. يتم دائمًا قياس الفولتية بالنسبة للأرض. في اردوينوهناك ثلاثة مصادر محتملة للجهد المرجعي: AVcc- الذي يتصل بخط الطاقة الرقمي 5 فولت، الجهد الداخلي 1.1 فولت (ل اردوينو ميجاخيار آخر هو 2.56 فولت) ومصدر جهد مرجعي خارجي. نظرًا لأن قياسات جهد الدخل يتم إجراؤها بالنسبة إلى الجهد المرجعي، فإن التقلبات في الجهد المرجعي ستؤثر على النتيجة.

يمكن ضبط الجهد المرجعي باستخدام الوظيفة أو باستخدام البتات ردتفي السجل أدموكس.

مقياس الفولت AVcc

AVccهو الجهد المرجعي الافتراضي ويستخدم عندما تعتمد الفولتية المقاسة بشكل مباشر على جهد مصدر الطاقة. على سبيل المثال، في الحالة التي تحتاج فيها إلى قياس الجهد في نصف جسر المقاوم، كما هو موضح في الشكل أدناه.

استخدام جهد مرجعي 5 فولت عند قياس المقاومة في نصف الجسر

إذا انخفض جهد مصدر الطاقة لسبب ما، فإن الجهد عند النقطة التي تتصل فيها المقاومتان سينخفض ​​بشكل متناسب. نظرًا لحقيقة أن الجهد المرجعي وجهد الإدخال يتغيران بشكل متناسب، فإن نتيجة ADC ستظل كما هي.

الجهد المرجعي الداخلي 1.1 فولت

استخدم الجهد المرجعي الداخلي 1.1 فولت لإجراء قياسات دقيقة للجهود الخارجية. يعتبر الجهد المرجعي 1.1 فولت أكثر استقرارًا ولا يتأثر بالتغيرات في جهد الإمداد أو درجة الحرارة. وبهذه الطريقة، يمكن إجراء قياسات القيمة المطلقة. في اردوينو ميجايتوفر أيضًا جهد مرجعي 2.56 فولت. يستخدم المثال أدناه جهدًا مرجعيًا 1.1 فولت ومقسم جهد 10:1 لقياس جهد خارجي يتراوح من 0 إلى 11 فولت.

استخدام الجهد المرجعي الخارجي أو الجهد الداخلي 1.1 فولت عند قياس الفولتية الخارجية

خطأ

وفقا للدليل الفني لوحدة التحكم الدقيقة ATMega328و ATMega2560الجهد المرجعي هو 1.1 ± 0.1 فولت. وهذا تسامح كبير إلى حد ما. قياس الجهد المرجعي للجهاز قيد الاختبار اردوينو ميجاكان 2560 هو 1.089 فولت عند درجة حرارة محيطة تبلغ 21 درجة مئوية وكانت درجة حرارة علبة المتحكم الدقيق 29 درجة مئوية.

لقد قمت بتبريد علبة وحدة التحكم الدقيقة باستخدام رذاذ تبريد غير موصل الاتصال الكيميائي تجميد 75/200إلى درجة حرارة -18 درجة مئوية، في حين انخفض الجهد المرجعي المقاس إلى 1.084 فولت. وهكذا، كان انجراف درجة الحرارة حوالي 100 جزء في المليون(جزء في المليون)/درجة مئوية.

رسم الاختبار:

int AnalogPin = 3; // إدخال دبوس التناظرية إعداد الفراغ () (analogReference(INTERNAL1V1)؛ // تحديد الجهد المرجعي الداخلي 1.1V Serial.begin(9600)؛) حلقة باطلة () (intanalogValue =analogRead(analogPin)؛// اقرأ القيمة على الإدخال التناظري Serial.println (analogValue) // إخراجه إلى المنفذ التسلسلي تأخير (300)؛

إنت التناظرية = 3 ؛ // إدخال دبوس التناظرية

الإعداد باطل()

// حدد الجهد المرجعي الداخلي 1.1 فولت

مسلسل. تبدأ (9600)؛

حلقة فارغة()

// اقرأ القيمة عند الإدخال التناظري

مسلسل. println(analogValue); // إخراجه إلى المنفذ التسلسلي

تأخير (300)؛

تم توصيل الطرف التناظري 3 بمصدر جهد 0.545 فولت. عند درجة حرارة 29 درجة مئوية، يجب أن تكون النتيجة: (0.545/1.089) * 1024 = 512 (القيمة الفعلية التي تم الحصول عليها هي 511). عند درجة حرارة -18 درجة مئوية يجب أن تكون (0.545/1.084) * 1024 = 515 (القيمة الفعلية التي تم الحصول عليها هي 515 أيضًا).

كما أظهرت التجربة، فإن انحراف درجة الحرارة صغير ولقياسات دقيقة عند الاستخدام اردوينوفهو يحتاج إلى معايرته بسبب عدم اليقين الكبير في الجهد المرجعي الإجمالي والذي يبلغ حوالي 10%.

ضوضاء

إحدى طرق قياس مستوى الضوضاء هي تحديد انتشار القيم التي تم الحصول عليها من ADC. للقيام بذلك، نطبق جهدًا ثابتًا ثابتًا على أحد المدخلات التناظرية ونستخدم القيم المحولة باستخدام ADC لإنشاء رسم بياني.

دائرة الاختبار

الدائرة في الشكل أدناه توفر جهد الاختبار اردوينو.

الدائرة التي توفر جهدًا مستمرًا منظمًا لمدخل Arduino التناظري

ينتج مصدر الطاقة المنظم المستقر جهدًا قدره 0.55 فولت، وهو نصف الجهد المرجعي البالغ 1.1 فولت. في الصورة أدناه، يمكنك أن ترى أن مقياس الفولتميتر المدمج في مصدر الطاقة المنظم الخاص بي يكذب بوضوح، ويظهر جهد خرج قدره 0.4 فولت .

يتم أيضًا تصفية الإشارة باستخدام سلسلة ر1, ج1, ج2ومتصلة من خلال المقاوم R2، وجود مقاومة 100 أوم للمدخل التناظري أ3 اردوينو. الأرض متصلة بالدبوس جي ان دي اردوينو.

مكون الضوضاء عند الإدخال اردوينوعلى النحو التالي:

يوضح هذا أن الجذر التربيعي لقيمة مربع سعة المكون المتناوب للجهد المقاس عند مدخل ADC اردوينوليست سوى بضعة ميلي فولت.

بينينج

متحكم ADC ATMega328و ATMega2560دقة 2 10 = 1024 بت. فكرة binning هي حساب تكرار ملاحظة قيمة معينة. يتم إنشاء مصفوفة تحتوي على 1024 قيمة، تسمى الصناديق، والتي تمثل كل قيمة من قيم ADC المحتملة. نظرًا لأن الذاكرة المتوفرة محدودة، فلا يمكن إنشاء سوى صناديق بحجم البايت. وبالتالي فإن عدد العينات يقتصر على 255.

البرامج

دعونا نختبر الضوضاء باستخدام الوظيفة قراءة تناظرية، ثم استخدم المقاطعات. يقوم البرنامجان بنفس الشيء بشكل أساسي: حيث يقومان بتحديد مصفوفة تتكون من 1024 خانة. فى مهمة يثبتتتم تهيئة جميع الصناديق إلى الصفر ويتم تحديد جهد مرجعي قدره 1.1 فولت.

يقوم كلا البرنامجين بإجراء 10000 قراءة وهمية للقيمة التناظرية. بعد ذلك، يبدأ التجميع، ولكل نتيجة ADC، تتم زيادة الحاوية المقابلة بمقدار واحد. إذا وصلت إحدى خانات 1024 إلى الحد الأقصى وهو 255 قيمة، يتوقف أخذ العينات ويتم إرسال جميع قيم 1024 خانة إلى الكمبيوتر.

رمز المثال لدمج القيم المقاسة باستخدام الوظيفة قراءة تناظرية:

إظهار/إخفاء الرمز

int AnalogPin = 3; // إدخال الدبوس التناظري int sendStatus = 0; // حالة النقل int startDelay = 0; قيمة البايت؛ // قيم الحاوية إعداد باطلة () (تناظرية (INTERNAL1V1)؛ // حدد الجهد المرجعي 1.1 فولت لـ (int i=0; i<=1023; i++) valueBin[i] = 0; // очищаем бины Serial.begin(9600); Serial.println("Start"); } void loop() { int analogValue = analogRead(analogPin); // выборка аналогового входа if (sendStatus == 0) { // ничего не делаем первые 10000 выборок if (startDelay < 10000) startDelay++; else { valueBin += 1; // увеличиваем значение бина if (valueBin == 255) sendStatus = 1; } } if (sendStatus == 1) { for (int i=0; i<=1023; i++) { // выводим значение бина Serial.print(i); Serial.print("\t"); Serial.println(valueBin[i]); } Serial.println("Done"); sendStatus = 2; } }

إنت التناظرية = 3 ؛ // إدخال دبوس التناظرية

إنت سيندستاتوس = 0؛ // حالة نقل

int startDelay = 0 ;

قيمة البايت [ 1024 ] ; // قيم بن

الإعداد باطل()

مرجع تناظري(INTERNAL1V1); // حدد الجهد المرجعي 1.1 فولت

من أجل (int i = 0؛ i<= 1023 ; i ++ ) valueBin [ i ] = 0 ; // очищаем бины

مسلسل. تبدأ (9600)؛

حلقة فارغة()

intanalogValue =analogRead(analogPin); // عينة من المدخلات التناظرية

إذا (sendStatus == 0)

// لا تفعل شيئًا لأول 10000 عينة

إذا (startDelay< 10000 ) startDelay ++ ;

آخر

valueBin[analogValue] + = 1؛ // زيادة قيمة السلة

// توقف إذا كانت السلة ممتلئة

إذا (valueBin [analogValue] == 255) sendStatus = 1؛

إذا (sendStatus == 1)

من أجل (int i = 0؛ i<= 1023 ; i ++ )

// عرض قيمة السلة

مسلسل. طباعة (ط)؛

مسلسل. طباعة ("\ ر")؛

مسلسل. println(valueBin[i]);

مسلسل. println("تم");

إرسال الحالة = 2 ;

رمز المثال لربط القيم المقاسة باستخدام المقاطعات:

إظهار/إخفاء الرمز

int sendStatus = 0; // حالة النقل int startDelay = 0; قيمة البايت؛ // قيم الحاوية باطلة الإعداد () (TIMSK0 = 0x00؛ // تعطيل المؤقت (بسبب المقاطعات) DIDR0 = 0x3F؛ // تعطيل المدخلات الرقمية ADMUX = 0xC3؛ // القياس على ADC3، بدون تعديل، الجهد المرجعي الداخلي 1.1V ADCSRA = 0xAC; // تمكين ADC، تمكين المقاطعات، المقسم = 128 ADCSRB = 0x40; // تمكين قنوات MUX الخاصة بـ ADC، وضع أخذ العينات الثابت bitWrite(ADCSRA, 6, 1); عن طريق تعيين البت 6 (=ADSC)) في ADCSRA sei(); // تعيين علامة المقاطعة العامة لـ (int i=0; i<=1023; i++) valueBin[i] = 0; // очищаем бины Serial.begin(9600); Serial.println("Start"); } void loop() { if (sendStatus == 1) { for (int i=0; i<=1023; i++) { // выводим значения бинов Serial.print(i); Serial.print("\t"); Serial.println(valueBin[i]); } Serial.println("Done"); sendStatus = 2; } } /*** Процедура обработки прерывания АЦП ***/ ISR(ADC_vect) { int analogValue = ADCL; // сохраняем младший байт АЦП analogValue += ADCH << 8; // сохраняем старший байт АЦП if (sendStatus == 0) { // ничего не делаем первые 10000 выборок if (startDelay < 10000) startDelay++; else { valueBin += 1; // увеличиваем значение бина if (valueBin == 255) sendStatus = 1; { // останавливаемся, если бин полон } } }

إنت سيندستاتوس = 0؛ // حالة نقل

int startDelay = 0 ;

قيمة البايت [ 1024 ] ; // قيم بن

الإعداد باطل()

TIMSK0 = 0x00 ; // تعطيل الموقت (بسبب المقاطعات)

ديدر0 = 0x3F ; // تعطيل المدخلات الرقمية

أدموكس = 0xC3؛ // قياس على ADC3، دون تعديل، الجهد المرجعي الداخلي. 1.1 فولت

أدكسرا = 0xAC ; // تمكين ADC، تمكين المقاطعات، المقسم = 128

أدكسرب = 0x40؛ // تمكين قنوات MUX ADC، وضع أخذ العينات الثابت

bitWrite(ADCSRA, 6, 1); // ابدأ التحويل عن طريق تعيين البت 6 (=ADSC) إلى ADCSRA

sei(); // قم بتعيين علامة المقاطعة العامة

من أجل (int i = 0؛ i<= 1023 ; i ++ ) valueBin [ i ] = 0 ; // очищаем бины

مسلسل. تبدأ (9600)؛

مسلسل. println("ابدأ");

حلقة فارغة()

إذا (sendStatus == 1)

من أجل (int i = 0؛ i<= 1023 ; i ++ )

{ // عرض قيم الصندوق

مسلسل. مطبعة(أنا) ;

مسلسل. مطبعة("\ر") ;

مسلسل. println(valueBin[ أنا] ) ;

}

مسلسل. println("منتهي") ;

sendStatus= 2 ;

// توقف إذا كانت السلة ممتلئة

}

}

}

الترددات التي تم اختبارها

تم إجراء الاختبار باستخدام وظيفة القراءة التناظرية وباستخدام وضع أخذ العينات المستمر. وبما أنه في الحالة الأخيرة يمكن تغيير تردد أخذ العينات، فقد تم اختبار أربعة ترددات مختلفة لأخذ العينات، تم تحديدها عن طريق تغيير القيمة في السطر أدكسرا = 0xAC. الترددات التي تم اختبارها: 9.6 كيلو هرتز (تردد الساعة clk÷128)، 19.2 كيلو هرتز ( clk÷64)، 38.4 كيلو هرتز ( clk÷32) و76.9 كيلو هرتز ( clk÷16). تردد أخذ العينات عند استخدام الوظيفة قراءة تناظرية، كما اكتشفنا أعلاه، يساوي تقريبًا 8.9 كيلو هرتز.

نتائج

وكانت النتائج لكلا الطريقتين وترددات أخذ العينات المختلفة متشابهة. تم تقسيم العينات إلى صندوقين وسقطت بعض قيم العينات فقط في الصندوق الثالث. وهذا يعني أن مستوى الضوضاء منخفض جدًا في جميع الحالات.

التبديل بين المدخلات

يتم اختيار المدخلات التناظرية في الخط AnalogPin=نأين نهو رقم الدبوس التناظري أو تغيير بتات اختيار القناة التناظرية موكسفي السجل أدموكس. يجب توخي الحذر بشكل خاص عند استخدام وضع أخذ العينات المستمر: يجب تحديد القناة التناظرية قبل بدء تحويل تناظري جديد. يقوم روتين المقاطعة بتحديد الإدخال التناظري الذي سيتم قراءته في المقاطعة التالية.

للتحقق من مستوى الضوضاء والخطأ عند تبديل المدخلات، تحتاج إلى تغيير طفيف في البرامج المذكورة أعلاه. يتم تطبيق الجهد الثاني على المدخلات التناظرية 5. وبالإضافة إلى ذلك، يتم تجاهل القيم المقاسة كما هو الحال في اختبار الضوضاء.

= 0xC3;

كثافة العملياتimport org.analogValue= ADCL;

. . .

نتائج

كلا الجهدين المقاسين يظهران على شكل ذروتين في الرسوم البيانية. يوضح الشكل أدناه رسومًا بيانية لخمسة اختبارات: استخدام الوظيفة قراءة تناظريةأخذ العينات المستمر مع clk÷128، clk÷64، clk÷32 و clk÷16. القيم المقاسة للجهد الأول (نتيجة معالجة ADC = 511) لا تنحرف عن اختبار الضوضاء السابق. القياس لا يزال دقيقا. هناك عدد قليل جدًا من الصناديق المحيطة، مما يعني أن مستوى الضوضاء لم يرتفع.

يُظهر كل من الرسوم البيانية الخمسة منطقتين متعرجتين تمثلان الجهدين المقاسين

معدل أخذ العينات والقرار

تُستخدم أيضًا الرموز التي تنفذ binning لتحليل الدقة وتكرار أخذ العينات. لهذا الاختبار، إلى المدخلات التناظرية اردوينوتم توصيل مولد الوظيفة كما هو موضح في الشكل أدناه.

يوفر مولد الوظيفة جهدًا من الذروة إلى الذروة يبلغ 25 مللي فولت وجهد إزاحة (= متوسط ​​القيمة) يبلغ 0.55 فولت. وفي كل قياس، يتم تحديد تردد الإشارة بحيث يكون تردد أخذ العينات أعلى بمقدار 163 مرة.

تم اختيار الإشارة المثلثية لأن كل قيمة تحدث بشكل متساوٍ عند قياسها. عند تجميع مثل هذه الإشارة، يمكن أن تحتوي كل قيمة بن ذات الحد الأدنى والحد الأقصى لقيم الجهد على نفس عدد التكرارات.

نتائج

أظهرت نتائج الاختبار أن الوظيفة قراءة تناظرية، تعمل بمعدل أخذ عينات منخفض وأخذ العينات المستمر على تردد clk÷128 لها قمة مسطحة إلى حد ما: جميع القيم في النطاق تحدث بنفس عدد التكرارات. ولكن بمعدلات أخذ عينات أعلى ( clk÷64، clk÷32 و clk÷16) تحدث الانخفاضات في منطقة binning ويزداد الوضع سوءًا مع زيادة التكرار.

ارتفاع معدلات أخذ العينات يؤدي إلى الانخفاضات

في الوصف الفني لوحدات التحكم الدقيقة أتميجا

توفر هذه المقالة رسمًا تخطيطيًا مثيرًا للاهتمام لأولئك الذين يحبون التجربة والتجربة اردوينو. إنه يتميز بمقياس فولتميتر رقمي بسيط يمكنه قياس جهد التيار المستمر بأمان في نطاق من 0 إلى 30 فولت. يمكن تشغيل لوحة Arduino نفسها من مصدر قياسي 9 فولت.



كما تعلم، باستخدام مدخلات Arduino التناظرية، يمكنك قياس الجهد من 0 إلى 5 فولت (مع جهد مرجعي قياسي يبلغ 5 فولت). ولكن يمكن توسيع هذا النطاق باستخدام مقسم الجهد.


يقوم المقسم بتقليل الجهد المقاس إلى مستوى مقبول للإدخال التناظري. ثم يقوم الكود المكتوب خصيصًا بحساب الجهد الفعلي.



يكتشف المستشعر التناظري في Arduino الجهد عند المدخل التناظري ويحوله إلى تنسيق رقمي يمكن قراءته بواسطة المتحكم الدقيق. نقوم بتوصيل مقسم الجهد المكون من المقاومات R1 (100K) و R2 (10K) بالمدخل التناظري A0. مع قيم المقاومة هذه، يمكن توفير ما يصل إلى 55 فولت إلى Arduino، حيث أن معامل القسمة في هذه الحالة هو 11، وبالتالي 55V/11 = 5V. للتأكد من أن القياسات آمنة للوحة، فمن الأفضل قياس الجهد في النطاق من 0 إلى 30 فولت.



إذا كانت قراءات العرض لا تتطابق مع قراءات الفولتميتر التي تم التحقق منها، فاستخدم مقياسًا رقميًا متعدد الدقة للعثور على القيم الدقيقة لـ R1 وR2. في هذه الحالة، ستحتاج في الكود إلى استبدال R1=100000.0 وR2=10000.0 بالقيم الخاصة بك. ثم يجب عليك التحقق من مصدر الطاقة عن طريق قياس الجهد الموجود على اللوحة بين 5V وGND. يمكن أن يكون الجهد 4.95 فولت. ثم في الكود vout = (القيمة * 5.0) / 1024.0 تحتاج إلى استبدال 5.0 بـ 4.95. يُنصح باستخدام مقاومات دقيقة لا تزيد نسبة الخطأ فيها عن 1%. تذكر أن الجهد الزائد عن 55 فولت قد يؤدي إلى تلف لوحة الاردوينو!



#يشمل شاشات الكريستال السائل السائل (7، 8، 9، 10، 11، 12)؛ int AnalogInput = 0; تعويم vout = 0.0؛ تعويم فين = 0.0؛ تعويم R1 = 100000.0؛ // المقاومة R1 (100K) float R2 = 10000.0؛ // المقاومة R2 (10K) قيمة int = 0؛ إعداد الفراغ ()) ( pinMode (analogInput، INPUT)؛ LCD.begin (16، 2)؛ LCD.print ("DC VOLTMETER")؛ ) حلقة باطلة ()) (/ اقرأ قيمة القيمة التناظرية = AnalogRead (analogInput );<0.09) { vin=0.0;// обнуляем нежелательное значение } lcd.setCursor(0, 1); lcd.print("INPUT V= "); lcd.print(vin); delay(500); }


العناصر المستخدمة:


لوحة اردوينو أونو
المقاوم 100 كيلو أوم
المقاوم 10 كيلو أوم
مقاومة 100 أوم
مقياس الجهد 10 كيلو أوم
شاشة ال سي دي 16×2