در این قسمت از آموزش میکروکنترلرهای STM32 به معرفی و راه اندازی واحد ADC میکروکنترلر stm32f4xx و نمونه برداری با نرخ مشخص، (30KHz ) از سیگنال خروجی DAC میپردازیم. در این قسمت از سیگنال آنالوگ (موج سینوسی خروجی DAC) به کمک ADC و با نرخ نمونه برداری 30Ksample/sec نمونه برداری می کنیم.
معرفی واحد ADC میکروکنترلر
ADC به معنای Analog to Digital convertor است و از این peripheral (جانبی) برای نمونه برداری از سیگنال های آنالوگ و تبدیل آنها به داده دیجیتال در میکروکنترلر، استفاده می شود. در میکروکنترلر stm32f407zgt6 سه مبدل آنالوگ به دیجیتال داریم که باید فرکانس کاری هر کدام و دقت نمونه برداری آنها را مشخص کنیم . واحد ADC در این میکروکنترلر می تواند داده آنالوگ را به یک عدد دیجیتال 6 تا 12 بیتی تبدیل کند و مثلا برای تبدیل داده آنالوگ به یک عدد دیجیتال 8 بیتی به 11 سیکل کلاک نیاز داریم که اگر کلاک ADC برابر با 84MHz باشد زمان لازم برای یک تبدیل آنالوگ به دیجیتال توسط واحد ADC به صورت زیر محاسبه می شود:
روش های متداول به کارگیری مبدل آنالوگ به دیجیتال در میکروکنترلر های ARM عبارتند از:
- Single conversion
- Continues conversion
- With timer trigger
در روش اول یک تبدیل توسط میکروکنترلر انجام می شود، داده نمونه برداری ذخیره می شود و ADC متوقف می شود، در روش دوم نمونه برداری به طور پیوسته انجام می شود و در روش سوم با هر اینتراپت تایمر نمونه برداری انجام می شود.
که در این پروژه ما از روش سوم استفاده می کنیم که در ادامه به شرح کامل آن می پردازیم.
نرم افزار Stm32CubeMX :
در ابتدا تنظیمات مربوط به دقت نمونه برداری مبدل آنالوگ به دیجیتال و روش نمونه برداری که ADC with timer trigger است، را انجام می دهیم:
ADC configuration
و تنظیم کردن واحد DMA برای مبدل آنالوگ به دیجیتال در Normal Mode :
DMA for ADC
و تنظیمات مربوط به تایمر 2 که با هر اینتراپت آن مبدل آنالوگ به دیجیتال داده ای را نمونه برداری می کند که ما فاصله ی زمانی بین هر دو نمونه برداری (هر دو اینتراپت تایمر) را به گونه ای تنظیم کرده ایم که نرخ نمونه برداری ADC برابر با 30Ksample/sec باشد.
Timer2 configuration
فعال کردن اینتراپت تایمر2
چگونگی تنظیم نرخ نمونه برداری ADC با روش Timer trigger :
با مراجعه به دیتاشیت Stm32f407 متوجه می شویم که تایمر 2 نیز مانند تایمر4 بر روی باس APB1 قرار دارد که ما فرکانس آن را 42MHz تنظیم کرده ایم (مطابق شکل 3 ) و هدف ما این است که نرخ نمونه برداری واحد ADC برابر با 30Ksample/sec باشد، بنابراین برای تنظیم زمان اینتراپت تایمر داریم:
کامپایلر Keil :
پس از ایجاد کد در نرم افزار Stm32CubeMx ،نرم افزار Keil را باز می کنیم و برای راه اندازی واحد ADC و تایمر2، کد های زیر را در تابع main اضافه می کنیم. اگر دوست داشته باشید توضیحات بیشتری درباره ی توابع استفاده شده بدانید، می توانید با استفاده از کلید میانبر Ctrl+Tab در نرم افزارKeil ، تعریف و توضیحات مربوط به هر تابع را مطالعه کنید.
شکل 16: راه اندازی و استفاده از ADC و timer2
با توجه به این که راه اندازی واحد DMA مبدل آنالوگ به دیجیتال در حالت Normal بود، مبدل آنالوگ به دیجیتال از 512 داده نمونه برداری می کند و آنها را درآرایه buffout ذخیره می کند. حال برای بررسی عملکرد صحیح ADC می توان داده های ADC را از طریق UART به کامپیوتر منتقل کرد و در صفحه نمایش کامپیوتر نشان داد که در بخش بعدی به بررسی این نکته می پردازیم.
نویسنده مطلب : مهسا مهدیه نجف آبادی
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
خوب و روان توضیح دادن یه هنره!
درود به شما.
عالی بود