- المكونات مطلوبة
- وحدة MCP4725 DAC (محول رقمي إلى تناظري)
- اتصالات I2C في MCP4725
- مخطط الدائرة وشرحها
- برمجة STM32F103C8 للتحويل الرقمي إلى التناظري
- اختبار DAC مع STM32
نعلم جميعًا أن Microcontroller تعمل فقط مع القيم الرقمية ولكن في العالم الحقيقي علينا التعامل مع الإشارات التناظرية. هذا هو السبب في وجود ADC (المحولات التناظرية إلى الرقمية) لتحويل القيم التناظرية في العالم الحقيقي إلى شكل رقمي حتى تتمكن وحدات التحكم الدقيقة من معالجة الإشارات. ولكن ماذا لو احتجنا إلى إشارات تناظرية من القيم الرقمية ، هنا يأتي DAC (محول رقمي إلى تناظري)
مثال بسيط على المحول الرقمي إلى التناظري هو تسجيل أغنية في الاستوديو حيث يستخدم مغني فنان الميكروفون ويغني أغنية. يتم تحويل موجات الصوت التناظرية هذه إلى شكل رقمي ثم يتم تخزينها في ملف تنسيق رقمي وعندما يتم تشغيل الأغنية باستخدام الملف الرقمي المخزن يتم تحويل هذه القيم الرقمية إلى إشارات تمثيلية لإخراج السماعة. لذلك في هذا النظام يتم استخدام DAC.
يمكن استخدام DAC في العديد من التطبيقات مثل التحكم في المحرك ، والتحكم في سطوع مصابيح LED ، ومكبر الصوت ، وأجهزة ترميز الفيديو ، وأنظمة الحصول على البيانات ، إلخ.
لقد قمنا بالفعل بتوصيل وحدة MCP4725 DAC مع Arduino. اليوم سوف نستخدم نفس MCP4725 DAC IC لتصميم محول رقمي إلى تناظري باستخدام متحكم STM32F103C8.
المكونات مطلوبة
- STM32F103C8
- MCP4725 DAC IC
- 10 كيلو الجهد
- شاشة LCD مقاس 16 × 2
- اللوح
- توصيل الأسلاك
وحدة MCP4725 DAC (محول رقمي إلى تناظري)
MCP4725 IC عبارة عن وحدة محول رقمية 12 بت إلى أنالوج يتم استخدامها لتوليد جهد تناظري ناتج من (0 إلى 5 فولت) ويتم التحكم فيه باستخدام اتصال I2C. يأتي أيضًا مع ذاكرة EEPROM غير المتطايرة على متنها.
هذا IC لديه دقة 12 بت. هذا يعني أننا نستخدم (من 0 إلى 4096) كمدخل لتوفير خرج الجهد فيما يتعلق بالجهد المرجعي. أقصى جهد مرجعي 5 فولت.
صيغة لحساب جهد الخرج
الجهد O / P = (الجهد المرجعي / الدقة) x القيمة الرقمية
على سبيل المثال ، إذا استخدمنا 5 فولت كجهد مرجعي ولنفترض أن القيمة الرقمية هي 2048. لذلك لحساب خرج DAC.
الجهد O / P = (5/4096) × 2048 = 2.5 فولت
Pinout من MCP4725يوجد أدناه صورة MCP4725 مع الإشارة بوضوح إلى أسماء الدبوس.
دبابيس MCP4725 |
استعمال |
خارج |
مخرجات الجهد التناظري |
GND |
GND للإخراج |
SCL |
خط الساعة التسلسلي I2C |
SDA |
I2C خط البيانات التسلسلية |
VCC |
مدخلات الجهد المرجعي 5V أو 3.3V |
GND |
GND للإدخال |
اتصالات I2C في MCP4725
يمكن ربط DAC IC مع أي متحكم باستخدام اتصال I2C. يتطلب اتصال I2C سلكين فقط SCL و SDA. بشكل افتراضي ، يكون عنوان I2C الخاص بـ MCP4725 هو 0x60. اتبع الرابط لمعرفة المزيد عن اتصالات I2C في STM32F103C8.
دبابيس I2C في STM32F103C8:
SDA: PB7 أو PB9 ، PB11.
SCL: PB6 أو PB8 ، PB10.
مخطط الدائرة وشرحها
التوصيلات بين STM32F103C8 و 16x2 LCD
رقم دبوس LCD |
اسم دبوس LCD |
اسم دبوس STM32 |
1 |
الأرض (Gnd) |
مطحون (G) |
2 |
VCC |
5 فولت |
3 |
VEE |
دبوس من مركز مقياس الجهد للتباين |
4 |
اختيار التسجيل (RS) |
PB11 |
5 |
قراءة / كتابة (RW) |
مطحون (G) |
6 |
تمكين (بالإنكليزية) |
PB10 |
7 |
بت البيانات 0 (DB0) |
لا يوجد اتصال (NC) |
8 |
بت البيانات 1 (DB1) |
لا يوجد اتصال (NC) |
9 |
بت البيانات 2 (DB2) |
لا يوجد اتصال (NC) |
10 |
بت البيانات 3 (DB3) |
لا يوجد اتصال (NC) |
11 |
بت البيانات 4 (DB4) |
PB0 |
12 |
بت البيانات 5 (DB5) |
PB1 |
13 |
بت البيانات 6 (DB6) |
PC13 |
14 |
بت البيانات 7 (DB7) |
PC14 |
15 |
LED إيجابي |
5 فولت |
16 |
سلبي LED |
مطحون (G) |
الاتصال بين MCP4725 DAC IC و STM32F103C8
MCP4725 |
STM32F103C8 |
المقياس المتعدد |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
خارج |
PA1 |
مسبار إيجابي |
GND |
GND |
مسبار سلبي |
VCC |
3.3 فولت |
NC |
يتم توصيل مقياس الجهد أيضًا ، مع توصيل الدبوس المركزي بالمدخل التناظري PA1 (ADC) من STM32F10C8 ، والدبوس الأيسر متصل بـ GND والأيمن متصل بـ 3.3 فولت من STM32F103C8.
في هذا البرنامج التعليمي ، سنقوم بتوصيل MCP4725 DAC IC بـ STM32 واستخدام مقياس جهد 10 كيلو لتوفير قيمة إدخال تمثيلية لـ STM32 ADC pin PA0. ثم استخدم ADC لتحويل القيمة التناظرية إلى شكل رقمي. بعد ذلك ، أرسل هذه القيم الرقمية إلى MCP4725 عبر ناقل I2C. ثم قم بتحويل هذه القيم الرقمية إلى تمثيلية باستخدام DAC MCP4725 IC ثم استخدم دبوس ADC آخر PA1 من STM32 للتحقق من الإخراج التناظري لـ MCP4725 من دبوس OUT. أخيرًا اعرض قيم ADC و DAC مع الفولتية في شاشة LCD مقاس 16 × 2
برمجة STM32F103C8 للتحويل الرقمي إلى التناظري
ليس هناك حاجة إلى مبرمج FTDI الآن لتحميل الكود إلى STM32F103C8. ما عليك سوى توصيله بجهاز الكمبيوتر عبر منفذ USB من STM32 وابدأ البرمجة باستخدام ARDUINO IDE. قم بزيارة هذا الرابط لمعرفة المزيد حول برمجة STM32 في Arduino IDE. يتم تقديم البرنامج الكامل لهذا البرنامج التعليمي STM32 DAC في النهاية.
تشمل أول مكتبة للI2C وLCD باستخدام wire.h ، SoftWire.h و liquidcrystal.h المكتبة. تعرف على المزيد حول I2C في متحكم STM32 هنا.
#تضمن
بعد ذلك ، قم بتحديد وتهيئة دبابيس LCD وفقًا لدبابيس LCD المتصلة بـ STM32F103C8
const int rs = PB11 ، en = PB10 ، d4 = PB0 ، d5 = PB1 ، d6 = PC13 ، d7 = PC14 ؛ LiquidCrystal LCD (rs، en، d4، d5، d6، d7) ؛
ثم حدد عنوان I2C الخاص بـ MCP4725 DAC IC. عنوان MCP4725 DAC الافتراضي I2C هو 0x60
#define MCP4725 0x60
في إعداد الفراغ ()
ابدأ أولاً اتصال I2C عند المسامير PB7 (SDA) و PB6 (SCL) في STM32F103C8.
Wire.begin () ؛ // يبدأ الاتصال I2C
بعد ذلك ، اضبط شاشة LCD في وضع 16x2 واعرض رسالة ترحيب.
lcd.begin (16.2) ؛ lcd.print ("CIRCUIT DIGEST") ؛ تأخير (1000) ؛ lcd.clear () ؛ lcd.setCursor (0،0) ؛ lcd.print ("STM32F103C8") ؛ lcd.setCursor (0،1) ؛ lcd.print ("DAC مع MCP4725") ؛ تأخير (2000) ؛ lcd.clear () ؛
في الحلقة الفارغة ()
1. أولاً في المخزن المؤقت ضع قيمة بايت التحكم (0b01000000).
(010 مجموعات MCP4725 في وضع الكتابة) المخزن المؤقت = 0b01000000 ؛
2. تقرأ العبارة التالية القيمة التناظرية من pin PA0 وتحولها إلى قيمة رقمية تتراوح من 0 إلى 4096 لأن ADC هي دقة 12 بت وتخزينها في المتغير adc .
adc = analogRead (PA0) ؛
3. هذه العبارة التالية هي معادلة تستخدم لحساب الجهد من قيمة إدخال ADC (0 إلى 4096) مع الجهد المرجعي 3.3V.
تعويم ipvolt = (3.3 / 4096.0) * adc ؛
4. ضع قيم البت الأكثر أهمية في المخزن المؤقت عن طريق إزاحة 4 بتات إلى اليمين في متغير ADC ، وقيم البت الأقل أهمية في المخزن المؤقت عن طريق إزاحة 4 بتات إلى اليسار في متغير adc .
المخزن المؤقت = adc >> 4 ؛ المخزن المؤقت = adc << 4 ؛
5. تقرأ العبارة التالية القيمة التناظرية من ADC pin PA1 الخاص بـ STM32 الذي يمثل إخراج DAC (دبوس الإخراج MCP4725 DAC IC). يمكن أيضًا توصيل هذا الدبوس بالمقياس المتعدد للتحقق من جهد الخرج.
غير موقعة int analogread = analogRead (PA1) ؛
6. علاوة على ذلك ، يتم حساب قيمة الجهد من المتغير التناظري باستخدام الصيغة مع البيان التالي.
تعويم opvolt = (3.3 / 4096.0) * مؤشر ترابط تناظري ؛
7. في نفس الحلقة الفارغة () هناك القليل من العبارات الأخرى الموضحة أدناه
يبدأ الإرسال بـ MCP4725:
Wire.beginTransmission (MCP4725) ؛
يرسل بايت التحكم إلى I2C
Wire.write (المخزن المؤقت) ؛
يرسل MSB إلى I2C
Wire.write (المخزن المؤقت) ؛
يرسل LSB إلى I2C
Wire.write (المخزن المؤقت) ؛
ينهي الإرسال
Wire.endTransmission () ؛
اعرض الآن هذه النتائج على شاشة LCD 16x2 باستخدام lcd.print ()
lcd.setCursor (0،0) ؛ lcd.print ("A IP:") ؛ lcd.print (شركة تطوير العقبة) ؛ lcd.setCursor (10،0) ؛ lcd.print ("V:") ؛ lcd.print (ipvolt) ؛ lcd.setCursor (0،1) ؛ lcd.print ("D OP:") ؛ lcd.print (تمثيلي) ؛ lcd.setCursor (10،1) ؛ lcd.print ("V:") ؛ lcd.print (opvolt) ؛ تأخير (500) ؛ lcd.clear () ؛
اختبار DAC مع STM32
عندما نغير قيمة المدخلات ADC والجهد عن طريق تدوير مقياس الجهد ، تتغير أيضًا قيمة خرج DAC والجهد. هنا تظهر قيم الإدخال في الصف الأول وقيم الإخراج في الصف الثاني من شاشة LCD. يتم توصيل مقياس متعدد أيضًا بـ MCP4725 Output Pin للتحقق من الجهد التمثيلي.
كود كامل مع الفيديو التوضيحي أدناه.