آموزش ARMآموزش STM32آموزش الکترونیک

آموزش آنالوگ به دیجیتال در STM32 با کد آردوینو

سلام. آموزش آنالوگ به دیجیتال در STM32 با کد آردوینو را آماده کردیم.

استفاده از ADC در میکروکنترلر STM32 با نرم افزار Arduino

یکی از ویژگی هایی که تقریبا در همه میکروکنترلر ها تعبیه شده، واحد آنالوگ به دیجیتال یا همان ADC است. این مبدل ها آنالوگ به دیجیتال میتوانند ولتاژ را از سنسور های آنالوگ مانند سنسور دما، شتاب سنج، جریان، فلکس و … بخوانند. در این آموزش STM32، می آموزیم چگونه از واحد adc در stm32 استفاده کنیم تا ولتاژ را با استفاده از Energia IDE بخوانیم. ما یک پتانسیومتر کوچک را به برد STM32 Blue Pill متصل می کنیم و ولتاژ متفاوتی را به پین ​​آنالوگ ارائه می دهیم ، ولتاژ را می خوانیم و آن را روی صفحه ال سی دی کاراکتری نمایش می دهیم.

مقایسه ADC در آردوینو و STM32

برد آردوینو ، حاوی 6 کانال (8 کانال در مینی و نانو ، 16 کانال در مگا) ، آنالوگ به دیجیتال 10 بیتی با دامنه ولتاژ ورودی 0V-5V است. این بدان معنی است که ولتاژهای ورودی بین 0 تا 5 ولت را به مقادیر عدد صحیح بین 0 تا 1023 می رساند. اکنون در میکروکنترلر STM32 ما 10 کانال 12 بیتی آنالوگ به دیجیتال با دامنه ورودی 0V -3.3V داریم. یعنی این ممیکروکنترلر مقدار آنالوگ ولتاژهای ورودی بین 0 تا 3.3 ولت را به مقادیر عدد صحیح بین 0 و 4095 تبدیل می کند.

آنالوگ به دیجیتال در STM32

ADC تعبیه شده در میکروکنترلرهای STM32 از اصل SAR (ثبت تقریبی پی در پی) استفاده می کند ، که توسط آن تبدیل در چند مرحله انجام می شود. تعداد مراحل تبدیل برابر است با تعداد بیت های مبدل ADC. هر مرحله توسط ساعت ADC هدایت می شود. هر ساعت ADC یک بیت را از نتیجه به خروجی تولید می کند. طراحی داخلی آنالوگ به دیجیتال در STM32 براساس تکنیک خازن تغییر یافته است.

اگر در زمینه STM32 تازه وارد هستید، مقاله روبرو را مشاهده کنید : STM 32 چیست؟ آموزش برنامه نویسی برد STM32 با آردوینو

وضوح 12 بیتی

این ADC دارای 10 کانال 12 بیتی ADC است. در اینجا اصطلاح 10 کانال حاکی از آن است که 10 پین ADC وجود دارد که با استفاده از آنها می توانیم ولتاژ آنالوگ را اندازه بگیریم. اصطلاح 12 بیتی حاکی از رزولوشن ADC است. 12 بیتی به معنای 2 به توان 12 است که 4096 است. این تعداد نمونه مراحل برای ADC ما است ، بنابراین دامنه مقادیر ADC ما از 0 تا 4095 خواهد بود. مقدار از 0 به 4095 افزایش می یابد.

ولتاژ / مرحله = ولتاژ مرجع / 4096 = 3.3/4096 = 8.056 برای هر واحد

VOLTAGE / STEP = REFERENCE VOLTAGE / 4096 = (3.3/4096= 8.056mV) per unit.

نحوه تبدیل یک سیگنال آنالوگ به قالب دیجیتال

مقادیر آنالوگ برای پروژه های ما باید به فرم دیجیتال تبدیل شوند. زیرا کامپیوتر ها فقط مقادیر باینری / دیجیتال (0 و 1) را ذخیره و پردازش میکنند. بنابراین سیگنال های آنالوگ مانند خروجی سنسور بر حسب ولت باید به مقادیر دیحیتال تبدیل شوند و تبدیل نیز باید دقیق باشد. وقتی یک ولتاژ آنالوگ ورودی به ورودی های آنالوگ به STM32 داده می شود ، مقدار آنالوگ را در یک متغیر عدد صحیح خوانده و ذخیره می کند. . مقدار آنالوگ ذخیره شده (0-3.3V) با استفاده از فرمول زیر به مقادیر عدد صحیح (0-4096) تبدیل می شود :

INPUT VOLTAGE = (ADC Value / ADC Resolution) * Reference Voltage

ولتاژ ورودی = (مقدار ADC / وضوح ADC) * ولتاژ مرجع

وضوح = 4096

اگر میخواهید آردوینو را به صورت اصولی و پروژه محور (ساخت ربات، ارتباط با اندروید، اینترنت اشیا، برنامه نویسی حرفه ای) یاد بگیرید، حتما دوره آموزش آردوینو را مشاهده کنید.

ولتاژ مرجع = 3.3 ولت

پین های ADC در STM32F103C8T6

جزئیات پین های STM32
10 پین آنالوگ در STM32 از PA0 تا PB1 وجود دارد.

توضیحات مدار پروژه راه اندازی ADC

شماتیک مدار مربوط به پروژه راه اندازی آنالوگ به دیجیتال STM32 در صتویر زیر نشان داده شده است.

مدار پروژه راه اندازی ADC

اتصالات بین STM32 و ال سی دی کاراکتری را مانند جدول زیر انجام دهید. همانطور که در تصویر میبیند، دو پتانسیومتر در مدار وجود دارد. یک پتانسیومتر برای تغییر ولتاژ و ارائه ورودی آنالوگ به STM 32 استفاده میشود.و پتانسیومتر دیگر برای تغییر کنتراست ال سی دی استفاده میشود. اتصالات بین LCD و STM 32 را مانند جدول زیر انجام دهید. منبع تغذیه STM32 از طریق منبع تغذیه USB از رایانه شخصی یا لپ تاپ تهیه می شود.

همچنین اگر در مورد این مطلب سوالی داشتید در انتهای صفحه در قسمت نظرات بپرسید
شماره پین LCD  نام پین LCD نام پین STM32
1 Ground Ground
2 VCC 5V
3 VEE پین پتانسیومتر
4 RS PB11
5 RW Ground
6 EN PB10
7 DB0 بدون اتصال
8 DB1 بدون اتصال
9 DB2 بدون اتصال
10 DB3 بدون اتصال
11 DB4 PB0
12 DB5 PB1
13 DB6 PC13
14 DB7 PC14
15 LED مثبت 5V
16 LED منفی Ground

قطعات مورد نیاز

  1. STM32 – برد توسعه (BluePill) (STM32F103C8T6)
  2. ال سی دی کاراکتری 16*2
  3. پتانسیومتر 100 کیلو اهم

برنامه نویسی STM32 برای خواندن مقادیر ADC

در آموزش قبلی ما درباره برنامه نویسی STM32F103C8T6 با استفاده از درگاه USB آموختیم. بنابراین اکنون دیگر به یک پروگرامر FTDI احتیاج نداریم. نگران نباشید ، آن را از طریق درگاه USB STM32 به رایانه متصل کنید و برنامه ریزی را با ARDUINO IDE انجام دهید برنامه ریزی STM32 در ARDUINO IDE برای خواندن ولتاژ آنالوگ بسیار ساده است. این کار دقیقا مانند راه اندازی آنالوگ به دیجیتال در برد های آردوینو است و نیازی به تغییر جامپر روی برد STM32 نیست.

در این برنامه مقدار آنالوگ را می میخوانیم و سپس مقادیر آنالوگ و دیجیتال را روی صفحه LCD نمایش می دهید.

ابتدا پین های LCD را تعریف میکنیم. این قسمت معرفی میکند کدام پین stm32 به LCD متصل میشود. شما میتوانید این پین ها را مطابق نیاز خود اصلاح کنید یا از همین پین ها استفاده کنید.

const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;

در مرحله بعد، ما کتابخانه کریستال مایع که مربوط به نمایشگر ال سی در در Arduino است را فراخوانی میکنیم. این کتابخانه ارتباط stm 32 با lcd کاراکتری را بسیار ساده میکند.

#include <LiquidCrystal.h> 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

در داخل تابع setup () ، فقط یک پیام مقدمه برای نمایش در صفحه LCD قرار می دهیم.

lcd.begin(16, 2); //از ال سی دی 16*2 استفاده میکنیم
lcd.clear(); //پاکسازی ال سی دی
lcd.setCursor(0, 0); //ردیف اول ستون اول
lcd.print("IRENX"); //نمایش این متن
lcd.setCursor(0, 1); //ردیف دوم ستون اول
lcd.print("STM32F103C8"); //نمایش این متن
delay(2000); //تاخیر 2 ثانیه ای
lcd.clear(); //پاکسازی ال سی دی
lcd.setCursor(0, 0);  //ردیف اول ستون اول
lcd.print("USING ADC IN");//نمایش این متن
lcd.setCursor(0,1); //ردیف دوم ستون اول
lcd.print("STM32F103C8");//نمایش این متن
delay(2000); //تاخیر 2 ثانیه ای
lcd.clear(); //پاکسازی ال سی دی

سرانجام ، در loop()، خواندن ولتاژ آنالوگ را که از پتانسیومتر به پین ​​PA7 وارد می شود ، شروع می کنیم. همانطور که قبلاً بحث کردیم ، میکروکنترلر یک دستگاه دیجیتالی است و نمی تواند مستقیماً سطح ولتاژ را بخواند. با استفاده از تکنیک SAR ، سطح ولتاژ بین 0 تا 4096 تبدیل می شود. برای دریافت این مقدار ADC، از خط زیر استفاده میکنیم.

int val = analogRead(A7); 

در اینجا تابع analogRead () برای خواندن مقدار آنالوگ پین مورد نظر استفاده می شود. سرانجام ما این مقدار را در متغیری به نام “Val” ذخیره می کنیم. نوع این متغیر عدد صحیح است زیرا ما فقط مقادیری از 0 تا 4096 دریافت خواهیم کرد تا در این متغیر ذخیره شوند.

مرحله بعدی محاسبه مقدار ولتاژ از مقدار ADC خواهد بود. برای این کار فرمول های زیر را داریم :

ولتاژ = (مقدار ADC / وضوح ADC) * ولتاژ مرجع

Voltage = (ADC Value / ADC Resolution) * Reference Voltage

ما می دانیم که وضوح ADC میکروکنترلر ما 4096 است. مقدار ADC در خط قبلی نیز یافت می شود و آن را در متغیری به نام val را ذخیره می کند. ولتاژ مرجع برابر با ولتاژ میکروکنترلر است. هنگامی که برد STM32 از طریق کابل USB تغذیه می شود ، ولتاژ 3.3 ولت است. همچنین می توانید ولتاژ کار را با استفاده از مولتی متر در سراسر Vcc و پین زمین روی تخته اندازه گیری کنید. بنابراین فرمول فوق مطابق شکل زیر در پرونده ما متناسب است

float voltage = (float(val)/4096) * 3.3;

پس از محاسبه مقدار و ولتاژ ADC ، تمام آنچه باقی مانده است نمایش نتایج در صفحه LCD است که می تواند با استفاده از خطوط زیر انجام شود

  lcd.setCursor(0, 0);   // ردیف اول ستون اول
  lcd.print("ADC Val:");
  lcd.print(val); //نمایش مقدار ADC
  lcd.setCursor(0, 1);   // ردیف دوم ستون اول
  lcd.print("Voltage:");
  lcd.print(voltage); //نمایش ولتاژ

کد کامل :

#include <LiquidCrystal.h> 
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 
const int analogip = PA7;
void setup() 
{
  lcd.begin(16, 2); 
  lcd.clear(); 
  lcd.setCursor(0, 0);
  lcd.print("IRENX.IR");
  lcd.setCursor(0, 1);
  lcd.print("STM32F103C8"); 
  delay(2000); 
  lcd.clear();
  lcd.setCursor(0, 0); 
  lcd.print("USING ADC IN");
  lcd.setCursor(0,1); 
  lcd.print("STM32F103C8");
  delay(2000); 
  lcd.clear();
}
void loop()
{   
  int val = analogRead(PA7);
  float voltage = (float(val)/4096) * 3.3; 
  lcd.setCursor(0, 0); 
  lcd.print("ADC Val:");
  lcd.print(val);
  lcd.setCursor(0, 1); 
  lcd.print("Voltage:");
  lcd.print(voltage); 
}

فیلم عملکرد تبدیل آنالوگ به دیجیتال در STM32

فیلم زیر نحوه عملکرد پروژه تبدیل ADC در stm 32 را نشان میدهد.

نظرتان را در مورد این مطلب با ستاره دادن اعلام کنید
امیدوارم این مطلب برای شما مفید بوده باشد. نظرات ، مشکلات و پیشنهادات خود را در پایین صفحه اعلام کنید
محمد رحیمی

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید را قرار دهم. مالکیتی بر مطالب ارائه شده ندارم. اکثر فعالیت بنده در زمینه ترجمه است. (در خصوص سوال در مورد این مطلب از قسمت نظرات همین مطلب اقدام کنید)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *