معرفی میکروکنترلرهای ARM

میکروکنترلرهای ARM خانواده‌ای از تراشه‌ها هستند که بر پایه معماری کم‌مصرف و پرقدرت ARM Cortex ساخته شده‌اند و در دستگاه‌های مختلفی مثل گوشی‌ها، ابزارهای صنعتی، پهپادها و بردهای کنترلی استفاده می‌شوند. این میکروکنترلرها نسبت به AVR های معمولی مثل آردوینو، سرعت بسیار بیشتری دارند، از واحدهای جانبی پیشرفته‌تری مثل تایمرهای چندکاناله، ADCهای سریع، PWM دقیق، ارتباطات حرفه‌ای (I2C, SPI, UART, CAN, USB) و حتی پردازشگرهای ریاضی برخوردارند و همین باعث شده انتخاب اول پروژه‌های نیمه‌حرفه‌ای تا حرفه‌ای باشند.

بورد STM32 Blue Pill

STM32 Blue Pill یکی از محبوب‌ترین بوردهای مبتنی بر ARM، است که از میکروکنترلر STM32F103C8T6 با هسته‌ی ARM Cortex‑M3 استفاده می‌کند. این بورد کوچک، ارزان، بسیار سریع (۷۲MHz) و مجهز به امکاناتی مثل ADCهای ۱۲ بیتی، چندین کانال PWM، پورت USB، ارتباطات متنوع و حافظه مناسب است. Blue Pill به دلیل قیمت پایین و امکانات بالا، جایگزینی قدرتمند برای آردوینو در پروژه‌هایی است که به سرعت و دقت بیشتر نیاز دارند، و می‌تواند هم با محیط‌های حرفه‌ای مثل STM32CubeIDE و هم با Arduino IDE برنامه‌ریزی شود، به همین دلیل هم بین مبتدی‌ها و هم مهندسان حرفه‌ای طرفداران زیادی دارد.

افزودن بورد STM32 به نرم افزار آردوینو

افزودن بردهای STM32F1 به آردوینو این امکان را می‌دهد که بدون نیاز به محیط‌های پیچیده‌ای مانند CubeIDE، بتوانید پروژه‌های مبتنی بر STM32 را با سادگی آردوینو برنامه‌نویسی کنید. بوردهایی مثل Blue Pill با وجود قیمت پایین، سرعت بالا و امکانات حرفه‌ای، در ترکیب با Arduino IDE تبدیل به یک پلتفرم قدرتمند و ساده برای ساخت ربات‌ها، پروژه‌های الکترونیکی و سیستم‌های کنترلی می‌شوند. این روش مناسب کسانی است که می‌خواهند قدرت پردازشی STM32 را داشته باشند اما در محیط آردوینو سریع و راحت کدنویسی کنند.

1. ابتدا از قسمت file وارد بخش preferences شده و در قسمت Additional Boards Manager URLs لینک زیر را اضافه کنید و بر روی OK کلیک کنید:

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

2. سپس از منوی tools قسمت Boards گزینه Boards Manager را انتخاب کرده و کلمه stm32f1 boards را جستجو کرده و آن را نصب کید.

3. از منوی tools در قسمت boards لیست STM32F1 Based Boards را باز کرده و Generic STM32F103 C series را انتخاب نمایید.

4. از منوی tools در قسمت upload method گزینه stlink را انتخاب نمایید تا با پروگرامر STlink آپلود انجام شود.

5. نرم افزار درایور ST-Link را از لینک زیر دانلود کرده و نصب کنید.

ST-Link USB Driver درایور پروگرامر STLink دانلود

پروژه چراغ راهنمایی

در این پروژه یک چراغ راهنمایی ساده با استفاده از بورد STM32 Blue Pill ساخته می‌شود که در آن سه LED به ترتیب: قرمز به پایه B12، زرد به پایه B13 و سبز به پایه B14 متصل شده‌اند. برنامه به‌صورت چرخه‌ای ابتدا LED قرمز را روشن نگه می‌دارد، سپس برای هشدار از LED زرد استفاده می‌کند و در نهایت مسیر را با روشن شدن LED سبز باز می‌کند. این پروژه یکی از تمرین‌های پایه برای کار با خروجی‌های دیجیتال و زمان‌بندی در میکروکنترلرهای STM32 در محیط Arduino IDE است و به دانش‌آموز کمک می‌کند مفهوم ترتیب، منطق کنترل و کار با تأخیرها را به‌صورت عملی یاد بگیرد.

trafficlight.ino

void setup() {
  pinMode(PB12, OUTPUT);  // Red
  pinMode(PB13, OUTPUT);  // Yellow
  pinMode(PB14, OUTPUT);  // Green
}

void loop() {
  // Red ON
  digitalWrite(PB12, HIGH);
  digitalWrite(PB13, LOW);
  digitalWrite(PB14, LOW);
  delay(4000);

  // Yellow ON
  digitalWrite(PB12, LOW);
  digitalWrite(PB13, HIGH);
  digitalWrite(PB14, LOW);
  delay(1500);

  // Green ON
  digitalWrite(PB12, LOW);
  digitalWrite(PB13, LOW);
  digitalWrite(PB14, HIGH);
  delay(4000);
}

راه اندازی سون سگمنت با STM32

در این پروژه از یک نمایشگر 7-Segment نوع Common Cathode استفاده می‌شود که هر بخش آن به یکی از پایه‌های بورد STM32 Blue Pill متصل شده است. اتصالات به‌صورت زیر انجام شده‌اند:

a → PB12, b → PB13, c → PB1, d → PB10, e → PB11, f → PB15, g → PB14.

با این تنظیمات، می‌توان اعداد 0 تا 9 را با روشن و خاموش کردن ترکیب مناسب از این پایه‌ها نمایش داد. این پروژه برای آموزش نحوه‌ی کنترل خروجی‌های دیجیتال و شناخت نحوه‌ی عملکرد سگمنت‌ها بسیار مناسب است و پایه‌ای برای ساخت شمارنده‌ها و تایمرها در پروژه‌های بعدی محسوب می‌شود.

trafficlight.ino

// 7-Segment Display on STM32 Blue Pill
// Connections:
// a=B12, b=B13, c=B1, d=B10, e=B11, f=B15, g=B14

// تعریف پایه‌های سگمنت
int segA = PB12;
int segB = PB13;
int segC = PB1;
int segD = PB10;
int segE = PB11;
int segF = PB15;
int segG = PB14;

// الگوهای نمایش برای اعداد 0 تا 9
// 1 = روشن, 0 = خاموش
byte numbers[10][7] = {
  {1,1,1,1,1,1,0}, // 0
  {0,1,1,0,0,0,0}, // 1
  {1,1,0,1,1,0,1}, // 2
  {1,1,1,1,0,0,1}, // 3
  {0,1,1,0,0,1,1}, // 4
  {1,0,1,1,0,1,1}, // 5
  {1,0,1,1,1,1,1}, // 6
  {1,1,1,0,0,0,0}, // 7
  {1,1,1,1,1,1,1}, // 8
  {1,1,1,1,0,1,1}  // 9
};

void setup() {
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);
}

void loop() {
  for (int num = 0; num <= 9; num++) {
    digitalWrite(segA, numbers[num][0]);
    digitalWrite(segB, numbers[num][1]);
    digitalWrite(segC, numbers[num][2]);
    digitalWrite(segD, numbers[num][3]);
    digitalWrite(segE, numbers[num][4]);
    digitalWrite(segF, numbers[num][5]);
    digitalWrite(segG, numbers[num][6]);
    delay(1000);
  }
}

راه اندازی نمایشگر گرافیکی OLED SH1106

نمایشگر SSD1306 یا SH1106 یکی از پرکاربردترین نمایشگرهای کوچک و هوشمند در پروژه‌های الکترونیکی است. این نمایشگر معمولاً در ابعاد کوچک و با کیفیت بالا برای نمایش تصاویر و متن در سیستم‌های کنترلی و ربات‌ها مورد استفاده قرار می‌گیرد. این نمایشگر دارای رزولوشن 128 در 64 پیکسل است، که این ابعاد مناسب برای نمایشگرهایی با ابعاد کوچک می‌باشد. SSD1306 معمولاً از رابط کاربری I2C برای ارتباط با میکروکنترلر یا سیستم‌های مختلف استفاده می‌کند که این ارتباطات راحتی در استفاده و اتصال را فراهم می‌کند. این نمایشگر به دلیل استفاده از کتابخانه‌های مختلف، مانند Adafruit SSD1306 library در Arduino IDE، بسیار آسان در استفاده و برنامه‌نویسی است. به طور کلی، نمایشگر گرافیکی SSD1306 به دلیل ابعاد کوچک، کیفیت بالا و پشتیبانی از رابط‌های استاندارد، یکی از انتخاب‌های محبوب برای اعمال الکترونیکی کوچک و متوسط است.

اتصالات

پایه های تغذیه یعنی GND و VCC طبق معمول به تغذیه برد بورد متصل می‌شوند. پس از آن پایه های ارتباط i2c یعنی پایه های SDA و SCL را به پایه های B11 و B10 وصل می‌کنیم. بهتر است با یک مقاومت 10 کیلو این دو پایه را پول-آپ کنیم.

کتابخانه Adafruit_STM32_SH110x.h را از لینک زیر دانلود کرده و در نرم افزار آردوینو از منوی sketch قسمت include library گزینه Add .zip file را انتخاب نموده و سپس فایل دانلود شده را انتخاب کنید. توجه داشته باشید که در این کتابخانه پایه های B10 و B11 برای ارتباط i2c در تنظیم شده و اگر کتابخانه را از جای دیگری دانلود کنید ممکن است پایه های متفاوتی برای اینکار تنظیم شده باشد.

Adafruit_STM32_SH110x کتابخانه OLED مخصوص STM32 دانلود
Adafruit_BusIO کتابخانه پروتوکل های ارتباطی دانلود
Adafruit_GFX کتابخانه توابع گرافیکی دانلود

کد:

در این برنامه از نمایشگر OLED SH1106 در حالت I2C و کتابخانه‌ی Adafruit_STM32_SH110x.h استفاده می‌شود. پس از مقداردهی اولیه‌ی صفحه، چند نمونه‌ از امکانات اصلی مانند نمایش متن، رسم خط، رسم دایره و رسم مربع اجرا می‌شود. این برنامه یک الگوی پایه برای پروژه‌های گوناگون با STM32 Blue Pill است و به‌خوبی نشان می‌دهد که چگونه می‌توان از قابلیت‌های گرافیکی OLED برای ساخت منو، نشانگرها، وضعیت سنسورها و رابط‌های کاربری استفاده کرد.

oled.ino
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_STM32_SH110x.h"

Adafruit_STM32_SH1106 display(-1);

void setup() {
  Wire.begin();

  // راه‌اندازی نمایشگر
  display.begin(0x3C);
  display.clearDisplay();
  display.setTextColor(WHITE);

  // نمایش متن
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("STM32 + SH1106");
  display.setCursor(0, 12);
  display.println("Graphics Demo");

  // رسم خط
  display.drawLine(0, 25, 127, 25, WHITE);

  // رسم مستطیل
  display.drawRect(10, 35, 40, 20, WHITE);

  // رسم دایره
  display.drawCircle(90, 45, 15, WHITE);

  display.display();
}

void loop() {
  // چیزی در loop لازم نیست
}

ارتباط i2c:

ارتباط I2C (Inter‑Integrated Circuit) یک پروتکل ارتباطی سریال است که برای اتصال چندین قطعه الکترونیکی به میکروکنترلر با استفاده از تنها دو خط استفاده می‌شود. این دو خط شامل SDA برای انتقال داده و SCL برای تولید سیگنال کلاک هستند. در این روش یک دستگاه به عنوان Master (مانند آردوینو یا STM32) عمل می‌کند و بقیه دستگاه‌ها به عنوان Slave به باس متصل می‌شوند و هرکدام دارای یک آدرس مشخص هستند. مستر با ارسال آدرس دستگاه موردنظر می‌تواند با آن ارتباط برقرار کرده و داده ارسال یا دریافت کند. سادگی سیم‌کشی، امکان اتصال چندین ماژول روی یک باس مشترک و سرعت مناسب باعث شده است I2C در بسیاری از ماژول‌ها مانند نمایشگرهای OLED، سنسورها، حافظه‌ها و RTC بسیار پرکاربرد باشد.

از آنجا که I2C از آدرس دهی استفاده می کند ، Slave های متعدد را می توان از یک Master کنترل کرد. با یک آدرس 7 بیتی ، 128 آدرس منحصر به فرد در دسترس هستند. یعنی میتوان بیشتر از 100 Slave را به یک Master متصل کرد. برای اتصال چندین Slave به یک Master واحد ، آنها را به این صورت سیم کشی کنید. با مقاومت های پول آپ 4.7K اهم خطوط SDA و SCL را به Vcc متصل کنید.

تمرین 24: در نمایشگر گرافیکی OLED یک دایره کوچک تو پر رسم کنید. سپس برنامه ای بنویسید که این دایره به طرف راست حرکت کند و وقتی به انتهای صفحه رسید مسیر حرکت خود را تغییر داده و به چپ حرکت کند. مجدد وقتی به انتهای صفحه رسید برگردد و این کار را تکرار کند.

تمرین 25: با استفاده از یک نمایشگر گرافیکی OLED و دو کلید فشاری بازی زیر را بسازید.

تمرین 26: با استفاده از یک نمایشگر گرافیکی OLED یک ساعت عقربه ای بسازید.

تمرین 27: با استفاده از یک نمایشگر گرافیکی OLED و یک کلید فشاری بازی dinachrome را بسازید. در این بازی کاکتوس ها به از راست به چپ حرکت می‌کنند و دایناسور باید از روی کاکتوس ها بپرد.

دیدگاه کاربران

1000 دیدگاه
4.7 (میانگین امتیاز کاربران)