История изменений
Исправление KivApple, (текущая версия) :
Думаю, что проблема ещё в том, что он может задать лишь тот период, который получится целочисленным делением. Объясню на пальцах: допустим, у нас тактовая частота 1 кГц. Мы можем легко получить на выходе 10, 20, 50 и т. п. Гц, потому что существует целое число, на которое можно поделить тактовую частоту. А вот, скажем 40 Гц получить проблематично, потому что 1000 на 40 не делится нацело.
Насколько я помню схему тактирования UART в MSP430, там применялась следующая аппаратная фишка, чтобы получить точную частоту UART при некратных частотах кварца - применялся некий паттерн тактирования. Вроде того, что все такты используют предделитель 100, а каждый 3-ий - 99. В даташите даже была куча таблиц и схем, показывающих как это работает.
Я думаю это вполне допустимо и в этой ситуации, с учётом того, что у шаговика самого есть погрешность шага порядка 5% (разве что у ТС какие-то очень дорогие и прецезионные шаговики), так что неравномерность будет в любом случае, но если менять предделитель, то можно избежать накопления рассогласования.
Исходная версия KivApple, :
Думаю, что проблема ещё в том, что он может задать лишь тот период, который получится целочисленным делением. Объясню на пальцах: допустим, у нас тактовая частота 1 кГц. Мы можем легко получить на выходе 10, 20, 50 и т. п. Гц, потому что существует целое число, на которое можно поделить тактовую частоту. А вот, скажем 40 Гц получить проблематично, потому что 1000 на 40 не делится нацело.
Насколько я помню схему тактирования UART в MSP430, там применялась следующая аппаратная фишка, чтобы получить точную частоту UART при некратных частотах кварца - применялся некий паттерн тактирования. Вроде того, что все такты используют предделитель 100, а каждый 3-ий - 99. В даташите даже была куча таблиц и схем, показывающих как это работает.