Мысли всегда у нескольких людей рождаются одновременно.
Буквально на той неделе решил все-таки попробовать сделать "генератор шагов" , правда на atmege328 для linuxcnc.Но раз есть человек, который работает с более мощными микроконтроллерами, то пока поделюсь идеей.
Связь через usb. Тема такая была и основная проблема известна - нет гарантий передачи пакета за сервопериод.
Решение по этапам:
1)stepgen заменяется своим компонентом, который работает только в сервопериоде. Потребность в функции, работающей в базовом периоде, отпадает. Самописный stepgen каждый сервопривод собирает массив перемещей в ед.времени и конвертирует их в понятные для микроконтроллера величины для настройки таймера. Дальше этот массив передается на микроконтроллер.
2) микроконтроллер получает эти данные и с задержкой начинает их последовательно пережевывать(генерировать шаги). Задержка должна гарантировано компенсировать неопределенность по времени передачи по usb-порту. Возможно задержки в 10мс хватит.
3) Обратно на пк периодически передается инфа о количестве генерированных шагов для контроля. Естественно все события , требующие мгновенной реакции(лимит, хомы и т.д.) отрабатываются микроконтроллером.
4) так же микроконтроллер используется для расширения входов/выходов.