- MCP4921 DAC (محول رقمي إلى تناظري)
- المكونات مطلوبة
- تخطيطي
- شرح الكود
- اختبار التحويل الرقمي إلى التناظري باستخدام الموافقة المسبقة عن علم
الرقمية والتناظرية جزء لا يتجزأ من الإلكترونيات. تحتوي معظم الأجهزة على كل من ADC وكذلك DAC ويتم استخدامها عندما تكون هناك حاجة لتحويل الإشارات إما من التناظرية إلى الرقمية أو الرقمية إلى التناظرية. كما أن إشارات العالم الحقيقي مثل الصوت والضوء هي إشارات تناظرية في الطبيعة ، لذلك كلما كان من الضروري استخدام إشارات العالم الحقيقي هذه ، يجب تحويل الإشارات الرقمية إلى إشارات تناظرية ، على سبيل المثال لإنتاج صوت باستخدام مكبرات الصوت أو للتحكم في مصدر الضوء.
نوع آخر من DAC هو مُعدِّل عرض النبض (PWM). يأخذ PWM كلمة رقمية ويولد نبضًا رقميًا بعرض نبض متغير. عندما يتم تمرير هذه الإشارة من خلال مرشح ، ستكون النتيجة تناظرية بحتة. يمكن أن تحتوي الإشارة التناظرية على أنواع متعددة من البيانات في الإشارة.
في هذا البرنامج التعليمي ، سنقوم بواجهة DAC MCP4921 مع Microchip PIC16F877A للتحويل الرقمي إلى التناظري.
سنقوم هنا في هذا البرنامج التعليمي بتحويل الإشارة الرقمية إلى إشارة تمثيلية وعرض القيمة الرقمية للإدخال والقيمة التناظرية للإخراج على شاشة LCD مقاس 16 × 2. سيوفر 1V و 2 V و 3 V و 4 V و 5 V كإخراج تناظري نهائي يظهر في الفيديو المعطى في النهاية. يمكنك التعرف على المزيد حول DAC في برنامجنا التعليمي الثمين لتفاعل DAC مع لوحات Raspberry Pi و Arduino و STM32.
يمكن استخدام DAC في العديد من التطبيقات مثل التحكم في المحرك ، والتحكم في سطوع مصابيح LED ، ومضخم الصوت ، وأجهزة ترميز الفيديو ، وأنظمة الحصول على البيانات وما إلى ذلك. قبل القفز مباشرة إلى جزء الواجهة ، من المهم الحصول على نظرة عامة حول MCP4921.
MCP4921 DAC (محول رقمي إلى تناظري)
MCP4921 عبارة عن DAC 12 بت ، لذا سيوفر MCP4921 12 بت من دقة الإخراج. دقة DAC تعني عدد البتات الرقمية التي يمكن تحويلها إلى إشارة تمثيلية. يعتمد عدد القيم التي يمكننا تحقيقها من هذا على الصيغة. بالنسبة لـ 12 بت ، يكون = 4096. وهذا يعني أن دقة 12 بت DAC يمكن أن تنتج 4096 مخرجات مختلفة.
باستخدام هذه القيمة ، يمكن للمرء بسهولة حساب جهد الخطوة التناظرية الفردية. لحساب الخطوات ، مطلوب الجهد المرجعي. نظرًا لأن الجهد المنطقي للجهاز هو 5 فولت ، فإن جهد الخطوة هو 5/4095 (4096-1 لأن نقطة البداية للرقم الرقمي ليست 1 ، إنها 0) ، وهي 0.00122100122 مللي فولت. لذلك ، سيؤدي تغيير 1 بت إلى تغيير الإخراج التناظري باستخدام 0.00122100122.
لذلك ، كان هذا هو جزء التحويل. و MCP4921 هو 8 دبوس IC. على الرسم البياني دبوس ووصف ويمكن الاطلاع أدناه.
و MCP4921 IC يتصل مع متحكم بواسطة بروتوكول SPI. بالنسبة لاتصال SPI ، يجب أن يكون الجهاز رئيسيًا ، والذي يرسل البيانات أو الأوامر إلى الجهاز الخارجي المتصل باعتباره تابعًا. في نظام الاتصال SPI ، يمكن توصيل عدة أجهزة تابعة بجهاز رئيسي واحد.
لتقديم البيانات والأمر ، من المهم فهم تسجيل الأوامر.
في الصورة أدناه ، يظهر سجل الأوامر ،
في السجل الأمر سجل 16 بت. يتم استخدام bit-15 إلى bit-12 لأمر التكوين. يتم عرض إدخال البيانات والتكوين بوضوح في الصورة أعلاه. في هذا المشروع ، سيتم استخدام MCP4921 كالتكوين التالي-
رقم البت |
ترتيب |
قيمة التكوين |
بت 15 |
DAC أ |
0 |
بت 14 |
غير مخزنة |
0 |
بت 13 |
1x (V OUT * D / 4096) |
1 |
بت 12 |
انتاج الطاقة لأسفل بت التحكم |
1 |
إذن ، الثنائي هو 0011 مع البيانات التي تحددها D11 إلى D0 بتات السجل. يجب تقديم البيانات ذات 16 بت 0011 xxxx xxxx xxxx حيث يكون أول 4 بت من MSB هو التكوين والباقي هو LSB. سيكون أكثر وضوحًا من خلال رؤية مخطط توقيت أمر الكتابة.
وفقًا لمخطط التوقيت وورقة البيانات ، يكون دبوس CS منخفضًا طوال فترة كتابة الأمر بالكامل إلى MCP4921.
حان الوقت الآن لربط الجهاز بالأجهزة وكتابة الرموز.
المكونات مطلوبة
لهذا المشروع ، المكونات التالية مطلوبة-
- MCP4921
- PIC16F877A
- 20 ميجا هرتز كريستال
- شاشة عرض LCD مقاس 16 × 2 حرفًا.
- 2 كيلو المقاوم -1 جهاز كمبيوتر
- مكثفات 33pF - 2 قطعة
- 4.7 كيلو المقاوم - 1 جهاز كمبيوتر
- متعدد الأمتار لقياس جهد الخرج
- لوح التجارب
- مزود طاقة 5 فولت ، يمكن لشاحن الهاتف أن يعمل.
- الكثير من أسلاك التوصيل أو أسلاك بيرغ.
- بيئة برمجة Microchip مع مجموعة مبرمج و IDE مع مترجم
تخطيطي
مخطط الدائرة لربط DAC4921 بمتحكم PIC موضح أدناه:
الدائرة مبنية في اللوح-
شرح الكود
رمز كاملة ل تحويل الإشارات الرقمية إلى تناظرية مع PIC16F877A تعطى في نهاية المقال. كما هو الحال دائمًا ، نحتاج أولاً إلى ضبط بتات التكوين في الميكروكونترولر PIC.
// PIC16F877A إعدادات بت التكوين // عبارات تكوين سطر المصدر 'C' // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer تمكين البت (WDT معطل) # pragma config PWRTE = إيقاف // Power-up Timer تمكين بت (PWRT معطل) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR تمكين) #pragma config LVP = OFF // Low-Voltage (Single-Supply) بت تمكين البرمجة التسلسلية داخل الدائرة (دبوس RB3 / PGM به وظيفة PGM ؛ تم تمكين برمجة الجهد المنخفض) #pragma config CPD = إيقاف // بت حماية رمز الذاكرة EEPROM (إيقاف حماية رمز EEPROM للبيانات) #pragma config WRT = إيقاف // Flash Program Memory Write Enable bits (اكتب الحماية ، يمكن كتابة كل ذاكرة البرنامج بواسطة EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code Protection off)
تُستخدم خطوط الكود أدناه لدمج ملفات رأس LCD و SPI ، كما تم الإعلان عن تردد XTAL ووصلة CS الخاصة بـ DAC.
يمكن العثور على البرنامج التعليمي والمكتبة PIC SPI على الرابط المحدد.
#تضمن
تم تعديل الوظيفة SPI_Initialize_Master () بشكل طفيف لتكوين مختلف مطلوب لهذا المشروع. في هذه الحالة ، يتم تكوين سجل SSPSTAT بحيث يتم أخذ عينات بيانات الإدخال في نهاية وقت إخراج البيانات وأيضًا تحدث ساعة SPI التي تم تكوينها على أنها إرسال عند الانتقال من وضع الساعة النشط إلى وضع الساعة الخامل. الآخر هو نفسه.
باطل SPI_Initialize_Master () { TRISC5 = 0 ؛ // تعيين كإخراج SSPSTAT = 0b11000000 ؛ // ص 74/234 SSPCON = 0b00100000 ؛ // ص 75/234 TRISC3 = 0 ؛ // تعيين كإخراج للوضع التابع }
أيضًا ، بالنسبة للوظيفة أدناه ، تم تعديل SPI_Write () بشكل طفيف. سيحدث نقل البيانات بعد مسح المخزن المؤقت لضمان نقل البيانات بشكل مثالي عبر SPI.
باطل SPI_Write (شار وارد) { SSPBUF = وارد ؛ // اكتب بيانات المستخدم المعطاة في المخزن المؤقت أثناء (! SSPSTATbits.BF) ؛ }
الجزء المهم من البرنامج هو برنامج التشغيل MCP4921. إنه جزء صعب بعض الشيء حيث يتم تجميع الأوامر والبيانات الرقمية معًا لتوفير بيانات 16 بت كاملة عبر SPI. ومع ذلك ، يظهر هذا المنطق بوضوح في تعليقات التعليمات البرمجية.
/ * هذه الوظيفة لتحويل القيمة الرقمية إلى التناظرية. * / void convert_DAC (قيمة int غير موقعة) { / * حجم الخطوة = 2 ^ n ، لذلك 12bit 2 ^ 12 = 4096 بالنسبة لمرجع 5V ، ستكون الخطوة 5/4095 = 0.0012210012210012V أو 1mV (تقريبًا) * / حاوية int غير موقعة ؛ MSB int MSB غير موقعة ؛ غير موقعة Int LSB ؛ / * الخطوة: 1 ، تخزين بيانات 12 بت في الحاوية لنفترض أن البيانات هي 4095 ، في النظام الثنائي 1111 1111 1111 * / الحاوية = القيمة ؛ / * الخطوة: 2 إنشاء دمية 8 بت. لذلك ، بقسمة 256 ، يتم التقاط 4 بت العلوية في LSB LSB = 0000 1111 * / LSB = حاوية / 256 ؛ / * الخطوة: 3 إرسال التكوين مع تثقيب بيانات 4 بت. LSB = 0011 0000 أو 0000 1111. النتيجة هي 0011 1111 * / LSB = (0x30) - LSB ؛ / * الخطوة: 4 لا تزال قيمة الحاوية 21 بت. استخراج 8 بت أقل. 1111 1111 و 1111 1111 1111. النتيجة هي 1111 1111 وهي MSB * / MSB = 0xFF & container؛ / * الخطوة: 4 إرسال بيانات 16 بت عن طريق تقسيمها إلى وحدتي بايت. * / DAC_CS = 0 ؛ // CS منخفض أثناء نقل البيانات. حسب ورقة البيانات ، يلزم SPI_Write (LSB) ؛ SPI_Write (MSB) ؛ DAC_CS = 1 ، }
في الوظيفة الرئيسية ، يتم استخدام "for loop" حيث يتم إنشاء البيانات الرقمية لإنشاء خرج 1V و 2 V و 3 V و 4 V و 5 V. يتم حساب القيمة الرقمية مقابل جهد الخرج / 0.0012210012210012 ملي فولت.
void main () { system_init () ؛ مقدمة الشاشة () ؛ عدد int = 0 ؛ كثافة العمليات فولت = 0 ؛ بينما (1) { لـ (volt = 1 ؛ volt <= MAX_VOLT ؛ volt ++) { number = volt / 0.0012210012210012 ؛ شاشة واضحة()؛ lcd_com (FIRST_LINE) ؛ lcd_puts ("البيانات المرسلة: -") ؛ lcd_print_number (رقم) ؛ lcd_com (SECOND_LINE) ، lcd_puts ("الإخراج: -") ؛ lcd_print_number (فولت) ؛ lcd_puts ("V") ؛ convert_DAC (رقم) ؛ __delay_ms (300) ؛ } } }
اختبار التحويل الرقمي إلى التناظري باستخدام الموافقة المسبقة عن علم
يتم اختبار الدائرة المبنية باستخدام متعدد العدادات. في الصور أدناه ، يتم عرض جهد الخرج والبيانات الرقمية على شاشة LCD. المتر المتعدد يظهر قراءة قريبة.
تم إرفاق الكود الكامل مع فيديو العمل أدناه.