Ревью кода для stm32f401, управление шаговыми двигателями

Цена договорная
17 декабря 2021, 23:00 • 3 отклика • 36 просмотров
Здравствуйте Требуется доработать код для stm32f401 Код - порт AN446 от Atmel (управление шаговыми двигателями). Написан с использованием Cube и HAL.

Ожидаемая логика работы: есть 8 шд, но одновременно могут идти только 4, но которые - неизвестно. Поэтому каналы таймеров сложены в кольцевой буфер, надо пойти - берём канал из буфера, остановились - вернули канал. Шаги рассчитываются внутри прерывания, там же крутится управляющий конечный автомат. Задержка может быть двух типов: четная короткая, чтобы драйвер an4988 или аналог успел осознать получение step, и длинная нечётная - задержка между шагами.

Что не так: в отладчике в регистр ccr записываются правильные значения, но на логическом анализаторе я вместо ожидаемой картины видел меандр с периодом 50мс и скважностью 50%, чему удивлён. ШД двигался значительно медленнее, чем когда управлялся кодом из an446, ускорения не заметил.

Что надо сделать: найти ошибку, не меняя алгоритм, и объяснить мне. Оплата не ранее понедельника, когда я смогу проверить ответ.

Код https://disk.yandex.ru/d/KPGyGTfObQyNGw