إنشاء إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32: 3 خطوات
إنشاء إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32: 3 خطوات
Anonim
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32
توليد إشارة PWM عالية الدقة لأجهزة RC مع أجهزة STM32

حاليًا ، أقوم ببناء جهاز إرسال / مستقبل RC استنادًا إلى شريحة SX1280 RF. أحد أهداف المشروع هو أنني أريد دقة مؤازرة 12 بت من العصي كلها إلى الماكينات. يرجع ذلك جزئيًا إلى أن الماكينات الرقمية الحديثة تتمتع بدقة 12 بت ثانيًا ، يستخدم جهاز إرسال متطور 12 بت على أي حال. كنت أبحث في كيفية إنشاء إشارات PWM عالية الدقة على أجهزة STM32. أنا أستخدم حبة سوداء (STM32F103C8T8) في الوقت الحالي للنموذج الأولي.

الخطوة 1: قائمة الأجزاء

المعدات

  • أي لوحة تطوير STM32F103 (حبة زرقاء ، حبة سوداء ، إلخ.)
  • بنك طاقة USB كمصدر طاقة
  • مبرمج STM32 (Segger j-links أو ST-LINK / V2 أو ببساطة استنساخ st-link)

برمجة

  • STM32CubeMX
  • Atollic TrueSTUDIO لـ STM32
  • مصدر المشروع من جيثب

الخطوة الثانية: الحل الواضح

الحل الواضح
الحل الواضح
الحل الواضح
الحل الواضح
الحل الواضح
الحل الواضح

ربما يكون الحل الأسهل هو استخدام أحد أجهزة ضبط الوقت التي يمكنها إنشاء إشارات PWM ، مثل TIM1-3 على STM32F103. بالنسبة إلى المؤازرة الرقمية الحديثة ، يمكن أن ينخفض معدل الإطارات إلى 5 مللي ثانية أو نحو ذلك ، ولكن بالنسبة إلى المؤازرة التناظرية القديمة ، يجب أن يكون 20 مللي ثانية أو 50 هرتز. لذلك ، كسيناريو أسوأ حالة ، دعنا ننتج ذلك. مع ساعة 72 ميجا هرتز ودقة عداد 16 بت ، نحتاج إلى ضبط المقياس المسبق للمؤقت على 23 كحد أدنى من أجل تغطية معدل الإطارات البالغ 20 مللي ثانية. لقد اخترت 24 لأنه لمدة 20 مللي ثانية أحتاج إلى ضبط العداد بالضبط على 60000. يمكنك رؤية إعداد CubeMX وإشارات PWM التي تم إنشاؤها 1 و 1.5 مللي ثانية في لقطات الشاشة. لسوء الحظ ، يجب ضبط عداد المؤقت على 3000 مللي ثانية ، مما يمنحنا دقة 11 بت فقط. ليس سيئًا ، لكن الهدف كان 12 بتًا ، لذا دعونا نجرب شيئًا آخر.

بالطبع إذا اخترت وحدة تحكم صغيرة مع عداد مؤقت 32 بت ، مثل STM32L476 ، يمكن أن يكون هذا القرار أعلى بكثير وسيتم حل المشكلة.

ولكن هنا ، أود أن أقترح حلاً بديلاً سيزيد من الدقة حتى على STM32F103.

الخطوة 3: الموقتات المتتالية للحصول على دقة أعلى

متتالية الموقتات للحصول على دقة أعلى
متتالية الموقتات للحصول على دقة أعلى
الموقتات المتتالية للحصول على دقة أعلى
الموقتات المتتالية للحصول على دقة أعلى
متتالية الموقتات للحصول على دقة أعلى
متتالية الموقتات للحصول على دقة أعلى

تكمن المشكلة الرئيسية في الحل السابق في أن معدل الإطارات (20 مللي ثانية) مرتفع نسبيًا مقارنة بإشارة PWM التي تم إنشاؤها بالفعل (بين 1 و 2 مللي ثانية) ، لذلك فإننا نهدر بعض البتات القيمة لمدة 18 مللي ثانية المتبقية عندما ننتظر الإطار التالي. يمكن حل ذلك عن طريق تعاقب مؤقتات باستخدام ميزة ارتباط المؤقت للمزامنة.

الفكرة هي أنني سأستخدم TIM1 كسيد لتوليد معدل الإطارات (20 مللي ثانية) و TIM2 ، TIM3 للتعامل مع إشارات PWM كعبيد. عندما يقوم السيد بتشغيل العبيد ، فإنهم يولدون فقط إشارة PWM في وضع نبضة واحد. لذلك أحتاج فقط إلى تغطية 2 مللي ثانية في تلك المؤقتات. لحسن الحظ ، يمكنك تسلسل هذه الموقتات في الأجهزة بحيث لا تحتاج هذه المزامنة إلى أي تدخل من المعالج وهي دقيقة جدًا أيضًا ، حيث يكون الارتعاش في منطقة ps. يمكنك رؤية إعداد CubeMX على لقطات الشاشة.

كما ترون ، لقد اخترت 3 كسابق تقويم ، لذا بالنسبة إلى 2 مللي ثانية ، أحتاج إلى ضبط 48000 في عداد المؤقت. هذا يعطينا 24000 لـ 1 مللي ثانية وهو في الواقع أكثر ما نحتاجه لدقة 14 بت. تداعى …

يرجى إلقاء نظرة على لقطات شاشة الذبذبات في المقدمة للحصول على النتيجة النهائية. القناة 3 (أرجوانية) هي مقاطعة المؤقت الرئيسي والتي ستطلق المرهم لتوليد نبضة واحدة. القناة 1 و 4 (الشعاع الأصفر والأخضر) هي إشارات PWM الفعلية الناتجة عن أجهزة توقيت مختلفة. لاحظ أنها متزامنة ولكن تتم مزامنتها عند الحواف اللاحقة ، وذلك بسبب وضع PWM 2. هذه ليست مشكلة ، لأن معدل PWM لأجهزة معينة لا يزال صحيحًا.

فائدة أخرى لهذا الحل هي أن تغيير معدل الإطارات سيعني تغيير الفترة في TIM1 فقط. بالنسبة إلى الماكينات الرقمية الحديثة ، يمكنك النزول حتى 200-300 هرتز ، ولكن يرجى الرجوع إلى دليل المؤازرة إذا كنت تريد الضبط الدقيق.