Например TDA7294
Z
Z
Z
2
2
2
2
2
2
16 ? !

РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Теги статьи: Добавить тег

Регулятор скорости бормашинки, со стабилизацией оборотов

Автор: pvit
Опубликовано 01.09.2021
Создано при помощи КотоРед.

Вступление

Идея подобного регулятора витала в голове давно, но заниматься ей стали в рамках более масштабной задачи - разобраться как нынче можно делать качественные и повторяемые хоббийные проекты под эмбеды. Пропустим описание творческих метаний, и сформулируем результат:

  • Схемы и платы есть смысл рисовать в EasyEDA
    • Да, в локальных программах фич больше, спорить глупо. Но вот в конце, когда доходит до распространения, изиеда рулит и педалит. Да и совместно работать там менее хлопотно, чем постоянно обмениваться файлами.
    • Там можно сразу заказать не только платы, но и детали. Это серьезный плюс, если хочется чтобы проект могли повторить не только профессиональные разработчики, но и любой человек, умеющий просто аккуратно паять.
  • Софт очень хотелось написать на Rust. К сожалению, при всей прекрасности, инфраструктура под эмбеды еще не окончательно доведена до ума. Поэтому пока все на “Си с классами”.
  • В качестве среды разработки выбрали PlatformIO:
    • Работает на всех операционках.
    • Легко ставить и прошивать.

О бормашинках

Те, кто пользовался бормашинками, знают про их “беды”:

  • Дешевые мелкие “не тянут” нагрузку (там обычный универсальный коллекторник с последовательными обмотками, у которого весьма фиговая характеристика, и обычный диммер).
  • Мощные машинки тянут получше, но весьма увесисты и не очень практичны (если вы конечно не профессиональный точильщик деревянных скульптур).
  • Более навороченные бормашинки типа Proxxon и Dremel 4000+ работают получше, но и стоят уже нарядно.

Хотелось понять, можем ли мы взять самый дешевый китайский “шлак”, занедорого поменять в нем электронику и получить конфету. Понятно что чудес не бывает, поэтому оставим в стороне вопросы механики, точности, и извечный философский вопрос “стоит ли брендовый инструмент своих денег”. Очень многим хватит за глаза и китайских “поделок”, если они будут уверенно держать обороты.

Изначально плата делалась под популярную модель Hilda 180W. Но те бормашинки постепенно пропали с рынка, и текущие платы сделаны под Newacalox и BDCAT.

Естественно, сама железка универсальная. Так что при желании вы можете внести посильный вклад в улучшение мира и развести плату под что-нибудь еще.

Железо

Ссылки на схемы и платы смотрите в инструкции по сборке. Они могут отличаться для разных бормашинок.

В железе нет ничего принципиально нового. Просто куча мелких нюансов, вроде одностороннего монтажа SMD и заливки прошивки по USB, которые упрощают жизнь. Гальваническая развязка тут не нужна, поэтому можно прилично сэкономить. А желающие подебажить рабочий девайс по USB, всегда могут воспользоваться изолирующим переходником за 10 долларов. Но простым пользователям отладка в реалтайме без надобности, поэтому упростили все что можно.

Блок питания сделан на индуктивной “понижайке” LNK3204. Можно было бы сделать конденсаторное питание, но использованая схема намного надежнее, и без изменений будет работать даже в американской сети. По габаритам и нагреву тоже получается не хуже.

Управление симистором после многих переделок стало “прямым”, через конденсатор. Максимально дешево и сердито, без заморочек с разводкой высоковольтных снабберных цепочек для оптрона.

Напряжение сети меряется только для положительной полу-волны - тоже максимально простое согласование, через делитель.

Токовый шунт сделан с усилителем 50x на INA213. Это пожалуй единственная микросхема, которую не очень удобно паять, но результат того стоит. Цена всего пол бакса, и в результате шунт полностью холодный. Плюс не понадобится ничего менять под американскую сеть - запаса навалом. Правда, есть нюанс - хоть у операционника и низкое смещение, но оно есть. Поэтому АЦП никогда не покажет ровно ноль тока (в отличие от цепочки измерения напряжения). Надо это учитывать в софте.

Процессор изначально был STM32F103C8T6, но в итоге все вписалось в STM32F042F6P6. Можно взять еще проще, выкинув заливку по USB, но смысла в такой копеечной экономии уже мало.

Софт

Общие моменты

Все тактируется от АЦП. В прерываниях происходит:

  • Фильтрация шума.
  • Детектирование zero-cross.
  • Эмуляция отрицательной полуволны напряжения (железо умеет мерить только положительную).
  • Управление триаком.

То есть, все realtime операции выполняются в прерываниях, а дальше данные через очередь сообщений улетают в main loop. Там находятся менее критичные к отклику вещи:

  • Вычислитель скорости.
  • ADRC-регулятор.
  • Калибратор мотора.

До третей версии софта, в регуляторе использовался PID. Но для нормальной работы ему требовалась “линеаризация” мотора. Что само по себе не очень просто, а с учетом влияния крыльчатки обдува - совсем грустно. Переход на ADRC позволил избавиться от “костылей”, и сделал настройку на разные моторы намного проще.

Математику пришлось делать с фиксированной точкой. Для этого использовали прекрасную библиотеку libfixmath. Хочется еще отметить библиотеку ETL, где грамотно реализованы типовые паттерны (например - очереди).

Также обратите внимание на protothreads. А точнее, на способы реализации YIELD, который избавляет код от конских switch-ей и упрощает чтение очень длинной логики (такой как в калибраторе). ETL + YIELD позволяют не тащить RTOS без особой нужды. И при этом код не превращается в ад.

Базовую конфигурацию MCU сделали с помощью CubeMX. Поскольку мы не зарабатываем на жизнь разработкой железа и не варимся в этой кухне ежедневно, тратить время на детальное изучение мануалов по каждому процессору было не интересно. Конечно CubeMX странноват, и генерирует странноватые конструкции. Но альтернатив получше пока не наблюдается. В общем, задвинули все что связано с CubeMX в отдельные папки, куда можно больше не заглядывать (чтобы глаза не лопнули).

У PlaformIO есть встроенные версии stm32 hal. Но они старые, и без некоторых middlewares. Поэтому мы используем целиком то, что генерирует CubeMX. Чтобы при апгрейдах не было конфликтов версий.

Математика

В папке документации выложены все подробности:

  • Замеры с реального девайса
  • Формулы и результаты вычислений, с графиками
  • Модели для scilab

Обратите внимание, предполагалось, что на подобных "мелких" моторах статор не входит в насыщение. Иначе выводить выражения в аналитическом виде было бы совсем грустно.

Автокалибровка

По большому счету, если делать регулятор только под конкретную “хильду”, можно было бы просто забить в конфиг константы. Но это не наш метод. Хотелось чтобы регулятор работал с любыми моторами, и в любой сети (и 220 и 110 вольт). Заявлять живым людям “подкрутите параметры в исходниках” - это пионерлагерь и стыдоба. В идеале у нормального девайса должна быть максимум одна кнопка - “сделать все круто”. А лучше вообще без нее, чтобы круто было сразу.

Поэтому решили потратить время на автокалибровку. Для этого надо:

  • Определить активное сопротивление (отвечает за все потери)
  • Определить коэффициент нормализации скорости (грубо говоря, масштабирование противо-ЭДС, которое зависит от конструктивных особенностей мотора)
  • Определить настройки ADRC-регулятора.

Но сначала потребовалось придумать удобный способ запуска автокалибровки. В итоге остановились на том, что надо установить ручку скорости в ноль, и быстро дернуть ее три раза туда-сюда.

Саму математику можно посмотреть в исходниках, они подробно прокомментированы. Ну и конечно в папке документации записаны все алгоритмы и рекомендации - на случай если кому-то понадобится повторить подобное.

Для хранения констант используем внутренний flash. Т.к. eeprom в нашем чипе нет, то написали стандартный эмулятор для экономного расходования ресурсов flash-памяти. Сами константы для простоты храним в формате float (по 4 байта на константу). Даже там, где такая точность не требуется - нет смысла экономить ценой усложнения софта.

По времени калибровка занимает около полутора минут. Учитывая, что подобное нужно проделать только однажды - нормально.

Сборка

https://github.com/speedcontrols/ac_sc_grinder - весь процесс описан на странице проекта, добавить особо нечего.

 

Если вкратце:

  • Снимаем со старой платы резистор и разъемы мотора
  • Собираем новую плату и промываем. Лучше без резистора, чтобы не смыло надписи на ручке.
  • Ставим плату в корпус, припаиваем выключатель и провода (можно подключить через терминальные контакты, но если собираете одну штуку, то смысла нет).
  • Шьем плату (обязательно с выдернутой вилкой питания).
  • Свинчиваем девайс, включаем, запускаем калибровку.
  • Ура!

Имейте в виду, что бормашинка во время работы бодро всасывает пыль, поэтому лучше покрыть плату защитным лаком (в магазинах радиодеталей такое добро есть). Особо стараться не надо, можно хоть кисточкой обмазать. Плата без лака вовсе не обязательно навернется, но лучше не рисковать.

По деньгам электроника обойдется меньше 10 долларов. Правда, для одной штуки точно никто не считал. Плат ведь будет сразу пять, резисторов меньше сотни не продают, и т.п. С другой стороны, можно ведь сразу собрать платы еще и друзьям :).

При желании можно разориться на трафарет для паяльной пасты. Он стоит всего 7 долларов. Вообще мы такие платы собираем феном (чего и вам желаем), но паяльником тоже вполне реально.

Авторы: Олег Капитонов и Виталий Пузрин.



Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

28 4 1
1 1 0