Blue pill (синя таблетка) STM32F103 як ПЛК

Введення
Напевно у кожного, хто колись починав або тільки починає вивчати мікроконтролери STM32, залишилася в запасі ось така налагоджувальна плата китайського виробництва, влучно названа інтуристами Blue Pill (синя таблетка).

Така плата побудована на основі чіпа STM32F103C8T6, який представляє з себе 32 бітний процесор на базі ядра Cortex — M3. Нижче на малюнку показана класична плата і призначення виводів.

Зовнішній вигляд класичної плати

Призначення висновків

Як за 5 хвилин зробити ПЛК з підручних засобів?
Як часто буває, уроки з інтернету навчили працювати з таймерами, USART — му, перемикати стану виходів і навіть з DMA вийшло попрацювати! І після всіх тестів плата благополучно займає місце на полиці запасних частин — річ хороша, але поки не знайшлося гідного застосування.

Якщо ви читаєте цю статтю настав час дістати плату з полиці і здути з неї пил, адже зараз на її основі ми будемо робити програмований логічний контролер, який буде відповідати міжнародному стандарту IEC61131-3.

Після того, як мікропроцесор буде прошитий додається прошивкою (на жаль, поки публікації джерел в планах не є), він зможе працювати вже як ПЛК. І найцікавіше, що плату можна буде програмувати за допомогою стандартного програмного забезпечення GX Developer FX, призначеного для програмування контролерів Mitsubishi FX2N. Це програмне забезпечення (причому русифіковане) я вільно скачав з офіційного сайту Mitsubishi після реєстрації.

Отже, які ж нові функції після прошивки придбала наша невеличка синя плата?

Перше — тепер її можна підключити до комп’ютера, використовуючи роз’єм micro-USB. Для того, щоб забезпечити обмін даними між середовищем програмування і контролером, ви повинні встановити драйвер віртуального COM-порту. Їх можна завантажити за посиланням з документа bluepill_update.pdf-файлу. Після установки драйвера і підключення плати до USB у вас в пристроях персонального комп’ютера з’явиться новий пристрій — так, як показано на картинці.

Вид апаратної конфігурації контролера після установки драйверів

Тепер можна запускати встановлений нами GX Developer FX. Після запуску програми у вас буде таке вікно:

Перший запуск програми GX Developer FX

Наступний крок — створення нового проекту. У меню Проект — Новий проект. У вас відкриється ось таке вікно:

Новий проект в GX Developer FX

Тут можна нічого не змінювати, і натиснути кнопку ОК. Отже — у нас порожній проект, і тепер нам треба налаштувати онлайн-підключення до плати.

Для цього вибираємо в меню Онлайн — Налаштування передачі. У вас відкриється ось таке вікно:

Читайте також  Big Data resistance 1 або невловимий Джо. Інтернет анонімність, антидетект, антитрекинг для анти-вас і анти-нас

Налаштування підключення до GX Developer FX

Тут можна нічого не змінювати, і натиснути кнопку ОК. Отже — у нас порожній проект, і тепер нам треба налаштувати онлайн-підключення до плати.

Для цього вибираємо в меню Онлайн — Налаштування передачі. У вас відкриється ось таке вікно:

Налаштування підключення до GX Developer FX

У ряді Інтерфейс ПК вибираємо Порядковий (тут некоректно переведено повинно бути

Послідовний) і у вас відкриється ось таке вікно:

Налаштування послідовного порту

Тут вибираємо номер СОМ – порту, відповідний тому, який у нас видно в пристрої персонального комп’ютера. Називається він STMicroelectronics Virtual COM Port (COM2) в нашому випадку. Тепер ми можемо перевірити, чи є підключення насправді. Для цього натиснемо кнопку Перевірка зв’язку в попередньому діалозі. Якщо все в порядку, то у вас буде повідомлення як на малюнку нижче:

Перевірка підключення

І ось тепер ми можемо спокійно приступити до найцікавішого — програмування контролера. У даній версії реалізована підтримка трьох мов:IL — мова інструкцій, рядковий тип відображення. LAD — мова сходової логіки, візуальний тип відображення. SFC — мова послідовних блоків, візуальний тип відображення. Причому завжди можна переключитися між відображенням мов IL і LAD і навпаки. Нижче показана типова програма на мові LAD:

Програма управління – мова LAD

А ось так виглядає ця ж програма, але на мові IL:

Програма управління – мова IL

Звичайно, це все добре, але хочеться заглянути і в логіку програми — зрозуміти, що ж там відбувається. Для цього треба натиснути кнопку F3 — і якщо програма записана в контролер, то буде переключено відображення в режим онлайн -моніторингу. Для запису програми вам треба вибрати в меню Онлайн — Записати в контролер.

Буде показано ось таке вікно:

Вибір елементів проекту для запису в контролер

У вікні вибираємо параметри запису (тут вибрана вся програма і параметри контролера), і натискаємо кнопку Виконати. Програма сповістить вас, що для запису контролер буде переведений в режим СТОП (ви це побачите потухання світлодіода, підключеного до висновку PC13), зробить запис і переведе контролер у режим RUN.

А ось так буде показаний в онлайні ісходник програми на мові LAD:

Вид частині програми на мові LAD в режимі онлайн – моніторингу

Читайте також  Навіщо вчити цей Garbage Query Language?

І той же самий шматок програми на мові IL в режимі онлайн:

Вид частині програми на мові IL в режимі онлайн – моніторингу

А ось так виглядає оригінал мовою SFC:

SFC – зовнішній вигляд програми

Для зручності тестування я використовую старі тестові розробки апаратної частини контролера, які з тих чи інших причин не були використані. Одна з таких плат показано на малюнку нижче:

Налагоджувальна плата – проміжна версія контролера

Ця плата забезпечує гальванічну ізоляцію для UART1, UART2 і для шини 1-wire. Також гальванічно ізольовані дискретні входу і виходу. Для програми прийняті наступна мнемоніка:X1 — це вхід з адресою 1, Y2 — вихід з адресою 2, M104 — бітовий операнд з адресою 104, D1000 — регістр загального призначення за адресою 1000. Версія прошивки, яка знаходиться у вкладенні, має наступні обмеження: Кількість кроків програми — 1000 (максимально можлива — 8000).
Кількість регістрів — 2000 (діапазон D0000-D1999).Кількість бітових змінних — 3072 (діапазон М0-М3071).UART1 — підтримка Modbus RTU master/slave, кількість слейвов в режимі майстра -2 (максимально можлива — 128 ).UART2 — підтримка Modbus RTU master/slave, кількість слейвов в режимі майстра -2 (максимально можлива — 128).

За замовчуванням параметри обміну по послідовному порту 57600, 8N1. UART1 — в режимі слейв з адресою 1, UART2 — теж в режимі слейва з адресою 2.

Для шини 1-wire на даний момент підтримка тільки датчиків типу DS18B20, кількість слейвов -2 (максимально можлива — 128 ).

Також підтримується вивантаження програми з контролера і перетворення її в зручний для читання людиною вигляд (я віддаю перевагу LAD).

Програма побудована з використанням операційної системи реального часу ChibiOS RT.

Налаштування обміну даними по шинам modbus RTU і 1 – wire проводиться за допомогою програми, яку ви можете знайти у вкладенні. Для прикладу розглянемо налаштування і пошук датчиків з невідомими нам адресами. Після запуску програми у вас буде ось таке вікно:

Зовнішній вигляд програми після запуску конфігуратора

Переходимо на закладку 1-wire і вибираємо 1-wire master, і обов’язково натискаємо кнопку Write to PLC для запису в контролер:

Налаштування майстра 1-wire

А тепер після натискання кнопки Search slave відкриється вікно, де можна вибрати адресу в області D0000-D2000, починаючи з якого буде відбуватися запис отриманих значень температури з датчиків у вигляді числа з плаваючою комою.

Читайте також  UE4 | Інвентар для Multiplayer #2 | Підключення Blueprint до C++

Вікно пошуку слейвов шини 1-wire

А нижче показано вікно після успішного пошуку всіх датчиків, підключених до шини обміну даними.

Вікно пошуку слейвов – знайдено 3 підключеного датчика температури

Тут ми можемо додати знайдені датчики до поточної конфігурації або повністю замінити поточну на нову. У нашому випадку дані температури будуть передаватися в область регістрів контролера за адресами D1500, D1502 і D1504 у вигляді числа з плаваючою комою. Залишається тільки натиснути кнопку Write to PLC і перезапустити плату для активації нової апаратної конфігурації.

Завантаження нової конфігурації в контролер

Що ще примітного можна додати про програму конфігурації? Є один момент — це представлення чисел з плаваючою комою в контролері FX2N. Для спрощення введення констант в цьому форматі довелося використовувати запис константи з модифікатором H. Як тільки інтерпретатор контролера зустріне такий модифікатор, він розуміє, що з ним буде передано числа у форматі з плаваючою комою, але у формі запису IEE754 з одинарною точністю. Нижче показано вікно програми на закладці Converter.

Перетворення форматів чисел з плаваючою комою

Висновок — що ж ми отримали:

Настав час для запитання — а власне, яке ж швидкодія такого ось контролера? Тут все просто — при опитуванні обох портів обміну даними по modbus RTU (контролер в режимі слейва — обидва порти) на швидкості 500 kbps і довжині запиту 122 регістру, опитуванні 17 датчиків температури і виконання самої «важкої» (складається з бінарних операндів) програми з 7745 кроків цикл виконання дорівнював 21 мсек. І звичайно ж є і мінуси в такому ось контролері. Перший — це те, що сині плати відрізняються невисокою якістю комплектуючих, і тому я рекомендую подавати зовнішнє живлення на плату до підключення mini-USB. Другий — це звісно ж, що тут немає енергонезалежної пам’яті (точніше, вона є, але всього лише 9 регістрів в області, підтримуваної батарейкою). І ви самі розумієте, що таке пристрій краще не застосовувати для відповідальних застосувань або на виробництві. А ось для будинку або для навчання — це саме те, дешево, доступно та зрозуміло.

Я постарався зробити огляд великим — і якщо у вас будуть якісь проблеми, пишіть. Особливо буду радий, якщо ви знайдете помилки у реалізації програми. Сподіваюся, стаття буде пізнавальною і ви не даремно витратили час на її прочитання.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *