استخدام مقياس الجهد الرقمي MCP41xx مع Arduino

جرب أداة القضاء على المشاكل





في هذا المشروع ، سنقوم بربط مقياس جهد رقمي مع اردوينو. في هذا العرض التوضيحي ، يتم استخدام مقياس الجهد MCP41010 ولكن يمكنك استخدام أي مقياس جهد رقمي من سلسلة MC41 **.

بقلم عنكيت نيجي



مقدمة إلى MC41010

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

تين. MC41010 IC pinout

تين. MC41010 IC pinout



MC41010 عبارة عن حزمة IC ذات 8 أسنان ثنائية الخط. تمامًا مثل أي مقياس جهد تناظري ، يأتي هذا IC بأحجام 5 كيلو و 10 كيلو و 50 كيلو و 100 كيلو. في هذه الدائرة ، يتم استخدام مقياس جهد 10 كيلو
MC4131 لديها 8 محطات التالية:

دبوس لا. اسم الدبوس وصف صغير

1 CS يستخدم هذا الدبوس لتحديد الرقيق أو الجهاز المحيطي المتصل بـ arduino. إن كان هذا
Low يتم تحديد MC41010 وإذا كان هذا مرتفعًا ، يتم إلغاء تحديد MC41010.

2 SCLK Shared / Serial Clock ، يعطي اردوينو ساعة لتهيئة نقل البيانات من
Arduino إلى IC والعكس صحيح.

3 يتم نقل البيانات التسلسلية SDI / SDO بين اردوينو و IC من خلال هذا الدبوس
4 VSS الأرضي من اردوينو متصل بهذا الدبوس من IC.

5 PA0 هذه محطة واحدة لمقياس الجهد.

6 PW0 هذه المحطة هي طرف ممسحة لمقياس الجهد (لتغيير المقاومة)
7 PB0 هذه محطة أخرى لمقياس الجهد.

يتم إعطاء 8 VCC Power إلى IC من خلال هذا الدبوس.

يحتوي هذا IC على مقياس جهد واحد فقط. يحتوي بعض IC على مقياسين للجهد يحمل في ثناياه عوامل. هذه
يتم تغيير قيمة المقاومة بين الماسحة وأي طرف آخر في 256 خطوة ، من 0 إلى 255. نظرًا لأننا نستخدم قيمة المقاوم 10k ، فقد تم تغيير قيمة المقاوم في خطوات:
10 كيلو / 256 = 39 أوم لكل خطوة بين 0 و 255

عناصر

نحتاج إلى المكونات التالية لهذا المشروع.

1. أردوينو
2. MC41010 إيك
3. 220 أوم المقاوم
4. LED
5. توصيل الأسلاك

قم بإجراء التوصيلات كما هو موضح في الشكل.

1. قم بتوصيل دبوس cs بالدبوس الرقمي 10.
2. قم بتوصيل دبوس SCK بالدبوس الرقمي 13.
3. قم بتوصيل طرف SDI / SDO بالدبوس الرقمي 11.
4. VSS إلى دبوس الأرض من اردوينو
5. دبوس pa0 إلى 5v اردوينو
6. PB0 على أرض الواقع من اردوينو
7. PWO إلى دبوس A0 التناظري من اردوينو.
8. VCC إلى 5 v من اردوينو.

كود البرنامج 1

يقوم هذا الرمز بطباعة تغير الجهد عبر طرف الماسحة والأرض على Serial Monitor الخاص بـ Arduino IDE.

#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)

الشرح 1:

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

في الإعداد الفارغ ، يتم تعيين المسامير كإخراج أو إدخال. كما يتم إعطاء أوامر لبدء SPI والاتصال التسلسلي بين arduino و ic وهي:

#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}

في الحلقة الفارغة ، يتم استخدام for loop لتغيير مقاومة الوعاء الرقمي في إجمالي 256 خطوة. أولاً من 0 إلى 255 ثم مرة أخرى إلى 0 مع تأخير قدره 10 مللي ثانية بين كل خطوة:

SPI.begin() and Serial.begin(9600)

تقوم وظيفة digitalPotWrite (i) بكتابة هذه القيمة لتغيير المقاومة عند عنوان معين لـ ic.

يمكن حساب المقاومة بين الماسحة والطرف النهائي باستخدام هذه الصيغ:

R1 = 10 كيلو * (256 مستوى) / 256 + رو
و
R2 = 10k * المستوى / 256 + Rw

هنا R1 = المقاومة بين ممسحة وطرف واحد
R2 = المقاومة بين الممسحة والمحطة الأخرى
المستوى = خطوة في لحظة معينة (المتغير 'I' مستخدم في حلقة for)
RW = مقاومة طرف المساحات (يمكن العثور عليها في ورقة بيانات IC)
باستخدام وظيفة digitalPotWrite () ، يتم تحديد رقاقة مقياس الجهد الرقمي عن طريق تعيين جهد منخفض إلى دبوس CS. الآن بعد تحديد IC ، يجب استدعاء العنوان الذي سيتم كتابة البيانات عليه. في الجزء الأخير من الكود:

SPI.transfer (B00010001)

يسمى العنوان وهو B00010001 لتحديد طرف المسح الخاص بـ ic التي سيتم كتابة البيانات عليها. ومن ثم فإن قيمة الحلقة ، أي ، أنا مكتوب لتغيير المقاومة.

عمل الدائرة:

طالما أن قيمة i تستمر في تغيير المدخلات إلى A0 pin من arduino تتغير أيضًا بين 0 و 1023. يحدث هذا لأن طرف الماسحة متصل مباشرة بدبوس A0 ، ومحطة أخرى من مقياس الجهد متصلة بـ 5 فولت والأرض على التوالي. الآن عندما تتغير المقاومة ، يتغير الجهد عبرها والذي يتم أخذه مباشرة بواسطة arduino كمدخل وبالتالي نحصل على قيمة جهد على الشاشة التسلسلية لقيمة معينة للمقاومة.

المحاكاة 1:

هذه بعض صور المحاكاة لهذه الدائرة بقيم مختلفة لـ i:

الآن ما عليك سوى توصيل مصباح LED في سلسلة بمقاوم 220 أوم إلى طرف ممسحة IC كما هو موضح في الشكل.

الكود 2:

for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)

الشرح 2:

هذا الرمز مشابه للكود 1 فيما عدا أنه لا توجد أوامر تسلسلية في هذا الرمز. لذلك لن تتم طباعة أي قيم على الشاشة التسلسلية.

شرح العمل

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

المحاكاة 2

المحاكاة 3




السابق: كيفية التحكم في محرك سيرفو باستخدام جويستيك التالي: اجعل مقياس التيار الرقمي المتقدم هذا باستخدام Arduino