Продолжение квеста с регулем бормашинки и PlatformIO

Переписали математику в регуле на фиксированную точку. В принципе неплохо вышло. “Сложных” делений осталось 3 штуки на итерацию. Это когда F16 (sign + 15 bits + 16 bits) делим на F16. Если надо делить на целое число - это обычное целочисленное деление. Умножение F16 на F16 и так быстрое. При условии, что процессор поддерживает аппаратное умножение и деление, операции с фиксированной точкой сводятся к ним довольно эффективно. Кому интересно - смотрите исходники github.com/PetteriAimonen/libfixmath. Еще надо было считать арккосинус, чтобы “линейно” откусывать “напряжение” от синусоиды, это просто забил в таблицу, сразу с нужным смещением и масштабом.

Проца на глаз жрется около 25-40%. Это при частоте квантования 40 килогерц. Есть подозрение, что частоты хряпнули с изрядным запасом, но кроить пока не хочется. Если будет настроение - попробую привернуть еще медианные фильтры к АЦП. Была еще мысль запустить всё это на совсем дохлом кристалле типа stm32f030c6t6 (он аж на пол бакса дешевле, гы), но видимо не судьба. Там нема аппаратного деления, а ковыряться с оптимизациями некогда - другие проекты ждут. Кому охота поупарываться из спортивного интереса - исходники открыты.

Дальше частично разобрались с выхлопом отладчика. Иногда при отладке хочется выводить сообщения. Лепить их в UART/USB конечно можно, но давно уже не модно. Сейчас все современные кристаллы имеют разухабистые отладочные интерфейсы, и выхлоп printf модные пацаны гонят по тому же шлангу, что шьют фирмварь. Всего вариантов есть 3:

  • через semihosting - медленный, но работает через самый дешевый stlink, по 4-проводному SWD.
  • через SWO - быстрый, но надо более аккуратно выбирать программатор (тоже дешевый), плюс требует дополнительный пин, который я продолбал из-за нехватки места
  • Через RTT (segger) - надо либо китайский J-Link с проприетарным софтом, либо ручками собирать openocd, т.к. патч с поддержкой еще не не приняли.

Пояснять все эти умные слова не буду, подробности есть в гугле.

В общем, на скорую руку прилепили semihosting. Он хоть с подвывертами, но пашет. А больше такой мелкой плате и не надо. Потом может еще проверим SWO и если получится - добавлю где-нибудь сбоку недостающие пины для любителей отладки. Флаги сборки в PlatformIO пришлось добавлять через питоновский скрипт, правда в нем всего 2 строчки.

Вроде с писаниной закончили, осталось отладить и уточнить коэффициенты пида. Архитектуру уже перепроверили вдоль и поперек, что надо прогнали в симуляторах, лажать там больше негде. Я конечно не жду, что прошивка прям с первого раза взлетит, но и особых проблем тоже не предвидится.

Что отложили до лучших времен (некогда совсем):

  • Автокалибровку мотора.
  • Web Wizard для быстрой кастомизации параметров.

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

  • 572