تداخل کارکرد ADC با Touchgfx در میکروی stm32h743bit6

با سلام

مشکلی که الان باهاش مواجه هستم در رابطه با کارکرد همزمانADCوTouchgfxهستش

میبایستی مقداری که باADCمیخونم رو ، در صفحه نمایش بدم به صورتrealtime که به این منظور از فایلmodel.cppموجود در این آدرس استفاده کردم (TouchGFX\gui\src\model)

الان داستان اینکه هرچه قدر فرکانس ADC رو بیاریم پایین تر و سمپلینگ تایمش رو زیاد کنیم ADC دقیق تر عمل می‌کنه ولی کندتر میشه ADC ، همین کند شدن ADC روی سرعت gui هم تاثیر میذاره و GUI رو کند میکنه، خیلی کن د

اگرم فرکانس ADC رو بالا ببریم و سمپلینگ تایمش رو کم کنم دقت ADC میادش پایین و از اون طرف سرعت کارکرد GUI افزایش پیدا میک نه

در یک پروژه جداگونه فقط ADC رو راه اندازی کردم(بدون استفاده ازTouchgfx)فرکانس کاری ADC رو اوردم پایین و سمپلینگ تایم رو بردم بالا و ADC دقیق عمل می‌کرد ولی یه خورده ای کند بودش ولی مثلا اگر بهش ولتاژ نمیدادم دقیق 0 رو نشون میداد(رزولوشن روی 12 بیت بو دش)

در حالی که الان زمانی کههم زمانADCوTouchgfxرو ران می‌کنم روی تمام کانال هایی که استفاده می‌کنم چهADC1و یا چهADC3بدون اینکه به پایه ها ولتاژی بدم یک مقدار اولیه ای رو کانال ها نشون میدن

ADCها رو کالیبره نیز کردم.ADCها رو در مدDMA Circular Modeراه اندازی کردم.



HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED);


یه مورد اذیت کننده دیگه این هستش که روی پایه‌یPH4که میشه کانال 15،ADCشماره 3 یک ولتاژی حدودا 141 میلی ولت دارم(زمانی که همزمان ازADCوTouchgfx) استفاده می‌کنم این درحالی هستش که در اون پروژه خامی که فقط ازADCها استفاده می‌کردم چنین ولتاژی وجود نداشتش

کانفیگCubeMXمربوط ب هADCه ا

ADC1

ADC3

فرکانس کاریADC

راه حلی وجود داره برای مش کل پیش آمده؟

یعنی باید هم سرعت کارکرد GUI حفظ بشه و هم دقت اندازه گیری ADC پایین نیادش و ولتاژی هم الکی سر پایه های مربوط به کانال های ADC نباشه

تشکر از وقتی که میذارید

از dma استفاده کنید و سر زمان مشخص نمونه رو از رم بخونید و نمایش بدید اینطوری لود روی پردازنده برداشته میشه

10 بیت شیفت روی oversampling رو حذف کن و نتیجه رو بررسی کن.

از چه سخت افزاری استفاده میکنی؟ برد درست طراحی شده؟ pcb داری یا ماژولار کار کردی؟

یک بافر بزار و بعد با هر سرعتی که کمترین تاثیر روی Touchgfx میزاره adc رو راه اندازی کن، مقادیر adc رو با dma داخل بافر بریز.

اسم فرمول رو یادم رفته، راهش به این شکل هست که یک متغیر x تعریف میکنی ، هر بار یک مقداری رو از بافر برمیداری و با ضریبی از مقدار قبلی درون x (که در اولین بار مقدارش صفر هست) تاثیر میدی به مقدار جدید و مجددا درون x ذخیره میکنی.

اینجوری adc با یک سرعت نرم حرکت میکنه و مقدر پایداری بهت میده ، و نویز کمترین تاثیر رو روش میزاره. میزان تاثیر پذیری مقدار قدیمی در مقدار جدید با یک ضریب آلفا تنظیم میشه بین 0.01 تا 1

با ضریب آلفا میتونی سرعت adc رو افزایش یا کاهش بدی بدون تاثیر در عملکرد Touchgfx.


البته نکته مهم اینه که میگی روی یکی ار پین ها مقدار ولتاژ داری ؟

دیتاشیت این پین رو بررسی کن ببین چه تداخلی با سخت افزار بخش Touchgfx داره، این اتفاق عجیبه.

نکته: از ولتاژ مرجع برای کالیبراسیون استفاده کردی؟ بدست اوردن یک ولتاژ مرجع دقیق ، عملکرد adc رو برای کارهای مهم خیلی بالا میبره