من الناحية التاريخية لم ينجح الأمر بالنسبة لي مع عائلة STM32F030 ، منذ حوالي 5 سنوات حاولت العمل معهم ، واندهشت لفترة طويلة من العمل الخرقاء لمعظم الأجهزة الطرفية ، ومن ثم سجلتها. وفي اليوم الآخر ، ما زلت مضطرًا للعودة إلى هذه السلسلة ، كان من الضروري قياس الجهد الثابت على بطارية الرصاص (أو تجميع ما يصل إلى 4 قطع متتالية) بأدنى حد من المال من 8 إلى 60 فولت بدقة لا تقل عن frequency 0.1 فولت مع تردد اقتراع منخفض.
لم يُمكن حل مشكلة "وجهاً لوجه" من قياس الجهد بدقة إلا عندما تكون قيمة مدخل ADC أكثر من 1.5 ... 1.6V ، أي فقط في النصف الثاني من النطاق ، مما يعني 30 ... 60V بالنسبة لي بدلاً من 8 المطلوبة .. .60V. كانت المشكلة الرئيسية في النطاق 0 ... 1.6 فولت ، بدا كل شيء وكأن مقسم الجهد الخاص بي كان "عائمًا" أو أن الجهد المرجعي الخاص بـ ADC (
المرجع الخامس) كان غير مستقر للغاية.
كان من الضروري حل المشكلة بسرعة ، وإن لم يكن بطريقة أكثر أناقة ، ولكن على الأقل دون عكازات واضحة. للقيام بذلك ، كان من الضروري أولاً دراسة المشكلة وفهم من أين تنمو "الأرجل" ، ثم تخلص من هذه المشكلة. إذا لم ينجح الأمر ، فاحصل على الأقل من أجل الحصول على جهاز يعمل وإرساله إلى العميل.

جوهر المهمة
بشكل عام ، كنت أحاول عدم معالجة مثل هذا التافه لفترة طويلة ، ولكن بعد ذلك اقترب مني أحد الأقارب ، وشخص غير متفرغ يعمل بدوام جزئي في مواضيع قريبة مني - فهو يجمع SES صغير في مكان ما في منطقة موسكو. لم أكن أرغب في الرفض ، وحتى هذه اللحظة بدت لي هذه المهمة "بضع ساعات من الحديد + بضع ساعات من الكود". استغرق المشروع في Altium Designer حقًا ساعتين ، لكن المعركة ضد ADC قد تم تناولها طوال المساء ، لذلك قررت مشاركة المعلومات حتى لا يضيع الآخرون الوقت.
الجهاز نفسه بسيط للغاية ، الخوارزمية هي كما يلي:- قياس الجهد على تجميع 1 ... 4 بطاريات الرصاص سلسلة متصلة ؛
- إذا كان الجهد أقل من "الحد الأدنى" ، فقم بإغلاق التتابع وتشغيله على المولد الذي يشحن بطارياتنا ؛
- إذا ارتفع الجهد فوق "التخلف الأدنى + التخلف" ، أي ، يتم شحن البطاريات إلى العتبة المحددة ، ثم قم بإيقاف تشغيل المولد ؛
- إذا كان الجهد أعلى من "العتبة العليا" ، فإننا نمنع تشغيل المولد فقط في حالة.
هذا كل شئ! مثال: هناك بطارية واحدة 12V ويتم تشغيل العاكس منها. إذا انخفض التيار الكهربائي عن "العتبة الدنيا" ، يكون الإعداد الافتراضي هو 10.2 فولت ، ثم قم بتشغيل المولد. إذا زاد الجهد الكهربائي للبطارية إلى "انخفاض العتبة + التباطؤ" ، فقم بإيقاف تشغيله. بشكل افتراضي ، يتم تعيين التباطؤ على 2 فولت وهو ضروري حتى لا يتم تقليل مولد البنزين بمجرد شحن البطارية قليلاً إلى 10.3 فولت. من ثابت التشغيل / الإيقاف ، سيموت المولد ببساطة. حسنًا ، فقط في حالة الحماية: إذا كان الجهد الكهربائي للبطارية أعلى من 14.4 فولت ، فلا تقم بتشغيل المولد تمامًا.
الخوارزمية بسيطة ومباشرة ؛ بالإضافة إلى ذلك ، كان من الضروري إعداد قائمة صغيرة بحيث يمكن تغيير ثلاثة متغيرات: "الحد الأدنى" ، "التخلفية" ، "العتبة العليا". لا شيء معقد ، لكن الشيطان موجود في التفاصيل.
في البداية ، استخدمت الشركة التي يعمل فيها الأقرباء جهازًا صينيًا ذا وظائف مماثلة. من العيوب الطفيفة - كان من المستحيل تغيير التباطؤ ، لأن الطاقة تحتاج إلى مصدر إضافي 5V وقياس 30V فقط ، أي لبطارية واحدة أو بطاريتين. من السلبيات
الكبيرة - يتجمد الجهاز الصيني ويعيد تشغيله في بعض الأحيان عند بدء مولد البنزين الذي يتحكم فيه. أصبحت "الميزة" الأخيرة مجرد سبب لمحاولة التخلي عن القرار الصيني.
لقد أرادوا التخلص من كل هذه العيوب مني وأن سعر الجهاز كان مثل سعر الصينيين ، أي 10 دولارات. كان "تافه شيطاني" في هذه الحالة أنهم يريدون شراء جهاز منتهي مني مقابل 10 دولارات على دفعات من 20-30 قطعة فقط ، على الرغم من أنها كانت مستقرة وكثيرا ما تكون كافية. وهذا هو ، كان علي أن أجعل الجهاز أفضل بكثير وأرخص بكثير من الصينيين في سلسلة صغيرة ، كما أنني بحاجة لكسب المال في المستقبل. نعم ، كنت مضحكة أيضًا في الدقائق العشرة الأولى ، ولكن بحلول الوقت الذي أدركت فيه هذا الموقف ، قلت بالفعل "نعم" ، أي أنه لم تكن هناك أرض خارج نهر الفولغا بالنسبة لي ...
حل مشاكل الحديد
كما كتبت أعلاه ، فإن المشكلة الرئيسية هي التشغيل غير المستقر للجهاز خلال بداية المولد. نتيجة لذلك ، تم شراء جهاز صيني مع aliexpress للاختبار والبحث. لم يكن السبب الرئيسي وراء "هدم الرأس" في المولد ، ولكن في التتابع :)) في وقت التبديل على مصدر الطاقة ، مرت نبضة بسعة تبلغ حوالي 25V من خلال ناقل 3.3V ، أي نوع من التلميح ... ذهب التداخل أيضًا إلى دوائر الإشارة. في الدارة الصينية ، لمكافحة مثل هذه المشكلة ، كانت هناك ثنائيات LL4148 ، والتي منعت مسار مسار التداخل. اتضح أن هذا يكفي لتشغيل الجهاز بشكل طبيعي على الطاولة ، ولكن ليس في كومة من التداخل الإضافي الخارجي مثل المولد وغيرها من المعدات. من أجل التخلص نهائيًا مما سبق ، قررت استخدام
العزلة الكلفانية من خلال مجموعة من "optocoupler + dc / dc" ، التي قضت تمامًا على الاتصال الكهربائي ومسار التداخل بين ملف ترحيل التحكم وبقية الدائرة.

كان بديل لهذا الحل هو استخدام ثنائيات TVS الواقية مع اختناق الوضع المشترك ، بالإضافة إلى تعقيد مرشح مزود الطاقة. ولكن لماذا هذه مزرعة جماعية؟ أصبح وضع العاصمة / العاصمة أسهل ، ولكن في الممارسة العملية تبين أنها أرخص - الوحدة الصينية Mornsun B0505S-1WR2 كلفتني 0.4 دولارًا بتكلفة خنق وضع مشترك لكل دفعة صغيرة تبلغ حوالي 0.32 دولار.
ونتيجة لذلك ، وبعد هذا القرار واختبار النموذج الأولي ، بدأ الجهاز في العمل كبندقية هجومية من طراز كلاشينكوف وانتهت مشاكل إعادة التشغيل. بشكل عام ، لقد فوجئت قليلاً بأن التتابع + قليلاً ما زال المولد يجبر على إعادة تشغيل الجهاز stm-ku ، قام المطورون الصينيون ، من حيث المبدأ ، بعمل كل شيء جيدًا: 10 kOhm + 0.1 uF لإعادة التعيين ، ومنع المكثفات من الطاقة ، والخرز الفريت ، كان كل شيء ، ولكن اتضح أن الأمر نفسه على أي حال ليس كافي
وكان ناقص الثاني من "الصينية" الحاجة إلى طاقة إضافية ، على ما يبدو حفظها على العاصمة / العاصمة. لقد قمت بحل المشكلة في الجبهة - توليت السلطة من إشارة الإدخال ، مباشرة من موصل واحد. للقيام بذلك ، كان عليك فقط وضع العاصمة / العاصمة ، والتي سوف تهضم ما لا يقل عن 4 * 14.4V ، أي 57.6V. سقط خياري على LMR16010PDDAR. أولاً ، هذه ولاية تكساس وهذا كل شيء. ثانياً ، اقترح الرفاق الآسيويون أن أحمل هذه الشريحة بثمن بخس.
قررت الفقرة السابقة بشكل شامل ناقص الثالث - القدرة على توصيل ما يصل إلى 4 بطاريات في السلسلة. DC / DC يهضم بسهولة 60V ، ويبدأ في محاولة حرق خارج فقط عند 72 ... 73V ، وبالتالي فإن 57.6V كحد أقصى هو بالتأكيد ليس مخيفا بالنسبة له. لا يهتم مقسم الجهد بشكل عام بكمية المدخلات ، لذلك تم تحديد كل شيء بأقل جهد ممكن.
يمكنك أن ترى كيف يتم تنفيذ كل هذا في الرسم البياني هنا -
PDF . مخطط كبير بما فيه الكفاية ، لذلك أنا لم تملأ مع صورة. بالمناسبة ، في pdf ، يمكنك أيضًا رؤية الأبعاد مع لوحة دوائر مطبوعة ، لكن لا يوجد شيء خارق للطبيعة.
نتيجةً لذلك ، تم طلب مكونات 10 أجهزة لأول دفعة تجريبية ، وبعد التجميع اتضح كما يلي:

لم يكن الأمر بدون حوادث - عندما قمت بإنشاء مكون لوحدة dc / dc قمت بخلط الساقين 1 و 2 في أماكن ، كان علي أن آخذ مزرعة صغيرة. على الرغم من أنني قمت بذلك بعناية أكبر على اللوحات اللاحقة بحيث لم يلاحظها أحد ، بقيت اللوحة الموجودة في الصورة معي كأداة لتصحيح الأخطاء فقط أو لتحسينات البرامج إذا توصل العميل إلى شيء أثناء الاختبار.
مكافحة دقة ADC
الآن دعنا ننتقل إلى الجزء الرئيسي من المقال. كما كتبت في بداية المقال ، اتضح أن F030 ADC غير دقيق ، أي أنه يصل إلى 30 ... 32V عند إدخال الجهاز ، تطفو القراءات بانحراف يصل إلى 15 ... 20 ٪ ، ثم اختفى الخطأ تدريجياً. لقد سرني شيء واحد - للوهلة الأولى ، كان للانحرافات بعض الانتظام ، مما يعني أن هذا ليس خطأ عشوائيًا ويمكنك تتبعه ومحاولة تصحيحه.
لنأخذ المزيد من التفاصيل حول الخطأ ... بعد التحويل ، يرسل ADC البيانات الأولية إلى سجل
DR ، الذي يحتوي على قيمة من 0 إلى 4095 (2
12 ). لتحويل هذه القيمة إلى جهد ، تحتاج إلى ضربها بواسطة خطوة القياس. في حالتي ، كان الجهد عند دبوس VDDA ، والذي يأخذ منه ADC الدعم ، هو 3.3072V ، وبالتالي ، فإن الخطوة هي 3.3072V / 4096 = 0.000807V ، لقد قمت بتقريبها إلى 0.0008. للحصول على الجهد عند إدخال الجهاز ، يجب مضاعفة الجهد الناتج بواسطة معامل مقسم الجهد ، وفي حالتي يكون المقاوم في الذراع العلوي 100 كيلو أوم ، وفي الذراع السفلي 4.7 كيلو أوم ، والذي يعطي الفاصل 22.2765. بناءً على ذلك ، تم العثور على الجهد عند إدخال الجهاز ، أي جهد البطارية ، باستخدام الصيغة:
float voltageReference = 0.0008; float voltageDivider = 22.2765; adcVoltageResult = (float)adcData * voltageReference * voltageDivider;
اتضح أنه بعد قراءة البيانات
ADC1-> DR ، يتم تحويلها إلى نوع
الطفو ويتم ضربها ببساطة بالمعاملات ، والتي هي ثوابت ، ونحصل على النتيجة في فولت المعتاد. في الممارسة العملية ، اتضح أن كل شيء سيء للغاية مع الدقة.
أتذكر حلاقة هانلون ، بدأت أبحث عن المكان الذي ارتكبت فيه خطأ. أولاً ، قمت بفحص الجهد على ساق VDDA ، اعتقدت أنه يطفو بطريقة ما ويعتمد على جهد الدخل ، على سبيل المثال ، LDO معيب. قام مسلحًا بمقياس سطح المكتب المتعدد ، بمراقبة الجهد على VDDA وتغيير جهد الدخل من 8 إلى 60 فولت ، في حين بقي الجهد على ساق VDDA ميتًا عند 3.3072V ، ولم تطفو سوى اللافتات التالية ، وهي جيدة جدًا بالنسبة للمقياس الخطي البالغ 10 سنتات.
المكان التالي للخطأ المحتمل هو مقسم الجهد. على الرغم من أنه بدا غريبا بالنسبة لي أن المقاومات من Bourns عائمة ± 0.1 ٪ بحيث تحتوي البيانات على خطأ يصل إلى 20 ٪ وهذا الخطأ غير خطي. لقد أجريت التجربة نفسها: قمت بقياس الجهد بعد المقسم بمقياس متعدد ، وقمت بتغيير جهد الدخل في خطوات 0.5 فولت ، ونتيجة لذلك ، تم تثبيت معامل التقسيم بإحكام أيضًا عند 22.2768.
في تلك اللحظة ، بدأت تصبح مثيرة للاهتمام. كان هناك مكون واحد فقط يمكنني الشك فيه - مكبر للصوت التشغيلي LMV611MFX. يتم تضمين هذا المرجع أمبير باعتباره تابعا الجهد. الجهد قبل وبعد أن كان هو نفسه يصل إلى 4 المنازل العشرية. غريب ... من ورقة البيانات ، ليس سيئًا ، وهو نفس TI ، لقد شككت في ذلك ، لكنني قررت التحقق منه ، لأنه هذا هو opamp لم تستخدم قط. فقط في حالة ، تم اختباري المفضل لدي واختباره في كومة من مشاريع OPA320 ، التي لدي في لفائف ، في مكانه وأظهر نفس النتيجة.
بقي المكون الأخير - MK ، وهي ADC لها. على مدار سنوات من استخدام STM ، اعتدت على الوثوق بمنتجاتها ، خاصة وأنني لا أقتني إلا النسخ الأصلية ، لذلك فكرت في MK الماضي. أول شيء اعتقدت أنني نسيت المعايرة أو قمت به بشكل خاطئ. مفيدة في الدليل المرجعي ، طالبوا ليس فقط لخفض ADC عن طريق كتابة صفر إلى بت
ADEN ، ولكن أيضا لتعيين 1 إلى بت
ADDIS و 0 إلى بت
DMAEN . لم يتم اتخاذ الخطوتين الأخيرتين ، عادةً ما أقوم بخفض ADC وكل شيء يعمل بشكل جيد ، ونتيجة لذلك ، قمت بتصحيح جزء من التعليمات البرمجية مع المعايرة:
if (ADC1->CR & ADC_CR_ADEN) { ADC1->CR |= ADC_CR_ADDIS; while (ADC1->CR & ADC_CR_ADEN) {} } ADC1->CR |= ADC_CR_ADCAL; while(ADC1->CR & ADC_CR_ADCAL) {} ADC1->CFGR2 = 0; ADC1->CR = ADC_CR_ADEN; while(!(ADC1->ISR & ADC_ISR_ADRDY));
لسوء الحظ ، لم يساعد ذلك وقررت إجراء التجربة التالية ... لقد قمت بالفعل بالتحقق من المعاملات وهي صحيحة بنسبة 100٪ ، لذلك سأقوم بتطبيق الجهد من مصدر طاقة المختبر إلى المدخلات ، وتغييرها وعرض النتائج الأولية لقياس ADC على مؤشر من سبعة أجزاء ، ثم مقارنتها بما ينبغي ليكون هناك مع ما تقاس حقا. نتيجة لذلك ، تلقيت النتائج التالية:

كما ترون ، يحتوي الرسم البياني النظري على خطية ممتازة ، لأنه لا تعلق على الحديد. الرسم البياني القائم على البيانات الحقيقية هو أيضًا خطي تقريبًا مع الحد الأدنى من الانحرافات. في الواقع ، يمكن دمج الرسم البياني مع البيانات الحقيقية مع الرسم البياني النظري عن طريق النقل الموازي إلى ثابت معين. يتحدث بلغة الالكترونيات ،
ADC لديه إزاحة!وفقًا للبيانات التي بنيت عليها الرسوم البيانية ، اكتشفت أن ADC لديها إزاحة عند نقاط مختلفة من 71 ... 73 خطوة. كانت هذه هي المشكلة ، واعتقدت "عدم الخطية" لأن التحول من 71 خطوة في 10V هو حوالي 14 ٪ ، وفي 30V هو بالفعل 4 ٪. بمعنى أنه إذا قمت بإنشاء رسم بياني للانحرافات في٪ ، فسيكون للاعتماد نموذجًا أسيًا ، لكن هذا الرسم البياني ليس مثيرًا للاهتمام.
لقد تقرر أنه لتوضيح النتائج ، حاول إدخال متغير آخر في الصيغة ، مما سيؤدي إلى زيادة قيمتي ولديها الشكل التالي:
uint16_t offsetVoltage = 72; float voltageReference = 0.0008; float voltageDivider = 22.2765; adcVoltageResult = ((float)(adcData+offsetVoltage))*voltageReference*voltageDivider;
بعد هذه المعالجة البسيطة ، بدأ جهازي في قياس الجهد بدقة وتوقفت البيانات عن الحركة. حتى تلك اللحظة ، كذب على
72 * 0.0008V * 22.2768 = 1.28V ، وهو أمر بالغ الأهمية في حالة السيطرة على بطارية واحدة. من المؤكد أن بطارية الرصاص لا تنفجر مثل Li-ion ، لكنها لا تزال تعطل بسرعة ، خاصة إذا تم تفريغها باستمرار ليس إلى 10.2V ، ولكن إلى 8.92V.
هذه قصة صغيرة عن قطعة صغيرة من الحديد. آمل أن يجد شخص ما هذه المادة مفيدة أو على الأقل مثيرة للاهتمام للقراءة. كن حذرا مع كل هذه الشركات وغيرها من الأشياء السيئة :))
UPD. يطلب
olartamonov بحماسة شديدة عدم خداع الناس واستخدام رمز المعايرة من الدليل المرجعي - جعل التغيير بسرور. لسوء الحظ ، في حالتي ، لم يغير هذا الوضع ولم يغير التحول أي مكان. ربما كانت المشكلة في الشريحة نفسها.
وفقا لتوجيهات من وزارة الخارجية رمى المنتجات المزيفةمنافسة
تجري
مسابقة بين المشاريع الفنية بين رفاق
PCBway ، يمكن لأي شخص المشاركة. القواعد بسيطة. سوف لوحات الدوائر المطبوعة لمشروعك القيام به مجانا. والأهم من الجوائز! هذه بعض الأوراق الخضراء مع السادة الأمريكيين على عملتك الافتراضية الخاصة بـ paypal + والتي يمكنك من خلالها طلب لوحات الدوائر المطبوعة + الشرف والاحترام + فرصة الحصول على عرض عمل في مكان ما خارج رابطة الدول المستقلة :)) أوصي بشكل خاص الطلاب بالمشاركة ، المستوى الفني ليس مرتفعًا جدًا هناك على الرغم من تجربة المسابقات السابقة ، هناك مشاريع قوية للغاية ، لذلك يمكن لصندوق DIY "قوي" الدخول بسهولة إلى الفائزين!