Сервопривід і плата розширення — чому це не працює
Плата PCA9685 у всіх туторіалах світу керує сервоприводами — шістнадцятьма одразу, з двох пінів. Логічний хід думки після такого туторіалу: поставити сервомашинку на голчастий кран відбору, підключити її до вільного каналу і керувати краном зі сценарію.
Не вийде. Причина не в тому, що «ще не зробили», а в тому, як влаштована сама мікросхема. Ця стаття показує, де саме ламається схема, і що ставити на кран замість сервоприводу.
Що насправді потрібно сервоприводу#
Сервопривід керується не рівнем напруги й не потужністю, а тривалістю імпульсу. Схема така:
- кожні 20 мілісекунд (тобто 50 разів на секунду) на сигнальний провід приходить один короткий імпульс;
- тривалість цього імпульсу — і є команда: приблизно 0.5 мс означає крайнє положення в один бік, 1.5 мс — середину, 2.5 мс — крайнє положення в інший;
- решту часу в кадрі сигнал лежить у нулі, і це нормально: сервопривід чекає наступного імпульсу.
Мікросхема PCA9685 уміє це робити чудово. При частоті 50 Гц її 12-бітна шкала розкладає кадр у 20 мс на 4096 кроків по 4.9 мкс, і весь робочий діапазон сервоприводу займає кроки приблизно від 102 до 512. Решта шкали не використовується — саме тому мікросхему й ставлять у робототехніку: точності з запасом, а процесор вільний.
Де ламається схема в oCBot#
Частота ШІМ у PCA9685 — один регістр на всю мікросхему. Не на канал, а на всі шістнадцять одразу. Це властивість заліза: змінити частоту одного каналу, не зачепивши решту, неможливо в принципі.
Прошивка oCBot виставляє цим шістнадцяти каналам 1 кГц і робить це при кожному підключенні плати. Частота обрана під наше навантаження: насос, вентилятор і мішалка через драйвер затвора на 1 кГц не гудуть, а підсвітка не мерехтить.
Тепер порахуйте: 1 кГц — це період 1 мілісекунда. Сервоприводу потрібен імпульс тривалістю до 2.5 мс. Імпульс, довший за весь період, не існує — і жодним налаштуванням шпаруватості цього не обійти.
| Що вимагає сервопривід | Що дає канал плати в oCBot |
|---|---|
| кадр 20 мс (50 Гц) | кадр 1 мс (1000 Гц) |
| імпульс 0.5–2.5 мс | максимум 1 мс, і той — не імпульс, а частка періоду |
| команда = тривалість імпульсу | команда = відсоток потужності |
Це не помилка налаштування й не те, що вмикається галочкою. Один регістр частоти на всю мікросхему — фізика PCA9685; вибір 1 кГц у прошивці — рішення на користь того навантаження, заради якого плата й додана в oCBot.
Друга плата «під сервоприводи» не рятує#
Ідея виглядає розумною: поставити другу плату з адресою 0x41 і крутити на ній
50 Гц, лишивши першу на кілограмі герців.
Прошивка так не робить. Кожна плата, яку вона піднімає на шині, отримує ті самі 1 кГц — це закладено в процедуру підключення плати, а не в налаштування конкретного слота. Друга плата дасть іще шістнадцять каналів того самого типу, і не більше.
Прошивка не знає пристрою «сервопривід»#
Навіть якби частота була правильна, лишилась би друга половина проблеми — у контролері немає поняття «кут».
Пристрої, які можна прив'язати до каналу плати розширення, — це насос, нагрівач, мішалка, вентилятор. Усі вони керуються однією величиною: потужністю від 0 до 100%. Сценарій каже «насос на 40%», прошивка перераховує це у шпаруватість каналу.
Сервоприводу така команда не потрібна взагалі. Йому треба «поверни на 37 градусів», і 37 градусів — це не 37% потужності, а конкретна тривалість імпульсу з таблиці конкретної моделі машинки. Двох цих сутностей у прошивці немає й не передбачено.
Що ставити на кран замість сервоприводу#
Задача, заради якої зазвичай згадують сервопривід, — керувати відбором. Вона вирішується, просто іншим залізом:
| Задача | Рішення | Де читати |
|---|---|---|
| Відбирати дозовано, регулюючи швидкість | Електромагнітний клапан + ШІМ-відбір: клапан циклічно відкривається, швидкість задається шпаруватістю | ШІМ-відбір |
| Відкрити або закрити лінію повністю | Клапан NC/NO через транзисторний ключ | Вибір та підключення клапанів |
| Плавно змінювати оберти мішалки чи насоса | Канал плати розширення в штатному режимі, 0–100% | Плата розширення PCA9685 |
| Керувати краном із фіксованими положеннями | Моторизований кран або двигун через частотний перетворювач по Modbus | Промисловий протокол RS485 |
Перший рядок — той самий, що закриває 90% випадків. ШІМ-відбір дає рівно те, чого від сервоприводу й хотіли: плавно керовану швидкість відбору зі сценарію, — і робить це дешевшим і надійнішим залізом, без механіки, яка розхитується від пари й вібрації.
Ще один аргумент проти сервомашинки в дистиляційній обв'язці: це пластикові шестерні поруч із гарячою парою й конденсатом. Клапан або моторизований кран розраховані на цю середу, хобі-сервопривід — ні.
Якщо сервопривід усе одно потрібен#
Буває задача, де без сервомашинки не обійтись — наприклад, механічний покажчик або заслінка з довільним кутом. Чесна відповідь: oCBot цього не вміє, і обходити це через плату розширення не варто.
Робочий шлях — винести сервопривід на окремий вузол: свій мікроконтролер, своя плата PCA9685 на 50 Гц, а з oCBot вони спілкуються командою по MQTT або Modbus. Тоді кожна частина системи працює на своїй частоті й нічого нікому не заважає.
Суміжні статті#
- Плата розширення PCA9685 — що плата вміє в oCBot і як прив'язати до каналу насос чи нагрівач.
- Плата PCA9685 зблизька — розбір плати по деталях, зокрема силового кола, придуманого саме під сервоприводи.
- ШІМ-відбір: як налаштувати клапан правильно — робочий спосіб керувати швидкістю відбору зі сценарію.
- Промисловий протокол RS485 (Modbus RTU) — двигуни й приводи, які контролер уміє вести.