مع متحكم جيد والوقت يطير بسرعة أو الذبذبات عطلة نهاية الأسبوع

منذ بعض الوقت ، تعهد مؤلف هذه الخطوط بتطوير مسجل مضغوط لإشارة تناظرية أحادية القطبية خلال 3 فولت بأعلى سرعة قراءة ممكنة بأقل تكاليف وأحجام ممكنة. في قائمة أقل التكاليف الممكنة ، دخلت أيضًا في صداعي واخترت لي STM32F303 المعروفة. هذا ، أذكر ، Cortex-M4 72 ميغاهرتز من شركة معروفة ، مع محولات مدمجة 12 بت ، ذكية ، تمثيلية إلى رقمية (ADC أو ADC ، كما تريد) ومع واجهة CAN على متنها.


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


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


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


والآن ، ظهرت سلسلة STM32G4 مؤخرًا بتردد على مدار الساعة يصل إلى 170 ميجا هرتز مع خيار في حزمة صغيرة ، ومع نفس ADC السريعة تقريبًا على متن الطائرة بمبلغ خمس قطع. كان من الضروري أن تفعل شيئا.


لا أحد يقف فوق الروح الآن ولا داعي للقلق بشأن المواعيد النهائية والخطط.


في الواقع ، إذا كنت لا تفكر في ذلك ، يمكنك الاستمتاع حتى العمل. لكن ، بصراحة ، كان علي أن أفكر في الوقت. للتفكير لفترة طويلة حول وقت صغير (وماذا ، شعري).


اقترح التفكير نفسه أننا يجب أن نبدأ قليلاً من الطرف الآخر. بمعنى ، يجب أن ننتقل من أقصر وقت ممكن لأخذ عينات ADC ، والتي ، بناءً على الوصف ، تستغرق دورات 2.5 ساعة وتصل إلى 62.5 نانوثانية بسرعة 40 ميجاهرتز (160 ميجاهرتز / 4). ثم تقترح خطوة أخذ العينات من 100 نانو ثانية نفسها. الرقم مستدير ، والأهم من ذلك ، صغير جدًا وجميل ، لماذا لا نجربه؟


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



هناك ، أدناه ، هناك العديد من الأسلاك والمقاوم مع مكثف ، خذ كلامي لذلك.


الآن تحتاج إلى تطبيق إشارة كهربائية مناسبة على جميع ADC الأربعة في وقت واحد ، ثم تشغيلها واحدة تلو الأخرى مع خطوة ثابتة (في البداية ، عند التصحيح ، وليس قصيرة جدا). لماذا أربعة؟ وفقًا للوصف ، يقضي كل ADC 15 دورة على مدار الساعة لكل تحويل ، أو 0.025 * 15 = 375 نانو ثانية (حوالي 400). لذلك ، في الخطوة 100 ، يلزم نقل أربعة ADC.


تم استخدام دارة RC كإشارة إدخال ، والتي تم توفير الجهد لها ببساطة من قاعدة التحكم. لقد عيّنت هذه الساق للتحكم في مؤقت TIM5 في وضع النبض الفردي.


يشبه الرسم البياني الحد الأدنى من الأسلاك الصورة أدناه.



شاركت ADC1-ADC4. يمكن تخفيض عمق البت لبعض الزيادة في السرعة ، ولكن تفوق 12 بت ، لأنني لم أرغب في فقدان دقة القياسات. لبدء كل ADC بالترتيب اللازم وبالخطوة المطلوبة ، يتم استخدام ثلاثة أجهزة توقيت (TIM2 ، TIM3 ، TIM4) ويستخدم مؤقت آخر (TIM1) لمزامنة الثلاثة أعلاه. يوضح الشكل 2 أدناه الإشارات التي تم بناء كل شيء حولها.



تشير الأسهم الخضراء إلى حافة النبضات التي يتم تشغيل محولات ADC1-ADC4 الخاصة بها.


للحصول على 100 نانو ثانية المخطط لها ، كان علينا خفض تردد الساعة إلى 160 ميجا هرتز ، بحيث يتم تقسيم كل شيء كما ينبغي. في البداية ، تم تعيين الخطوة أبطأ بكثير ، 4 ميكروثانية ، للتحقق بهدوء من تشغيل أجهزة ضبط الوقت باستخدام المقاطعات ، ومنافذ الإخراج ومنظار الذبذبات. ثم ، بالمقاطعة ، تم تصحيحه وحصل على وصول مباشر إلى الذاكرة. في النهاية ، تتم معالجة مقاطعة واحدة فقط - وهذا هو مقاطعة نهاية العمل من القناة الرابعة (الأخيرة) للوصول المباشر إلى الذاكرة. يوضح الشكل أدناه اتصالات وحدات الأجهزة المتورطة في العملية ، بالإضافة إلى أربعة مخازن ذاكرة مؤقتة.



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


في وحدة التحكم هذه ، بخلاف STM32F303 ، توجد وحدة تبديل للطلب (DMAMUX) ، والتي تتيح لك إعادة توجيه عدد كبير من الطلبات من الأجهزة الطرفية إلى 16 قناة DMA1 و 16 قناة DMA2 فقط. في الدليل المرجعي ، يتم حساب طلبات الإخراج DMAMUX من 0 ، ويتم حساب مدخلات قنوات قناة DMA من 1. لم أغيرها ، وتركتها كما في المصدر الأصلي.


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



يوضح رسم الذبذبات أن صعود النبضة يدوم 10 ميكروثانية ، مما يعني أنه ينبغي أن يستوعب حوالي 100 عينة.


تم تنفيذ المشروع في IAR 8.4 يدويًا (أي بدون كوبا والكرة) ، لكن آمل أن يتم فهمه من قبل مجموعة متنوعة من الأديان. يمكنك أن ترى ذلك هنا .


فيما يلي صورة لمحتويات مخزن مؤقت ADC1 منفصل والنتيجة تم جمعها من أربعة مصادر للمخزن المؤقت في منطقة بداية نبض الإدخال.



لكن محتويات هذه المخازن المؤقتة موجودة في منطقة ذروة النبض (حيث تصل القيمة إلى 2508).



كما ترون ، تم إنفاق 196-95 = 101 حساب على المقطع من بداية النبضة إلى ذروتها.


وبالتالي فإن معدل أخذ العينات هو 10 ميغاهيرتز. لم ينجح بهذه السرعة على الفور.


لتحقيق ذلك ، اضطررت إلى إيقاف المعالج قبل بدء الوصول المباشر للذاكرة (DMA1). من الجيد أن يحتوي Cortex-M4 على تعليمات مجمّع خاصة WFI (انتظر المقاطعة). إذا لم يتم ذلك ، فسيبدأ المعالج في طريقه تحت أقدام DMA وسيشغل الحافلة بوصلات ذاكرة قد تنتظر جيدًا.


إذا قمت بزيادة خطوة العد إلى 200 نانوثانية ، فستتوقف عن الدفع والشفاء بسلام وسعادة.


إذا قمنا بإشراك المقارنة COMP4 في عملها وقمنا بتوصيل مدخلاتها الإيجابية (المنفذ PB0) بإشارة الدخل ، ثم استخدم DAC (DAC1) وقم بتوصيل مخرجاتها (CH1) بالإدخال السلبي للمقارن (داخل وحدة التحكم) ، فسنحصل على عتبة ذات عتبة قابلة للتعديل. ستسمح لك الانقطاعات الناتجة عن تشغيل المقارنة ببدء مؤقت الساعة العامة TIM1 والحصول على وضع الاستعداد ، كما هو الحال في الذبذبات.

Source: https://habr.com/ru/post/ar468393/


All Articles