Цитата(KSN @ Aug 18 2008, 12:26)

Динамику разгона/торможения исследовать конечно придется.
На малых частотах я делал подсчет импульсов (таймер в режиме ШИМ, прерывание по сравнению) - все работало. Но здесь предполагаемая частота не 1000Гц, а 1000 кГц, поэтому такой фокус не пройдет. Может как вариант: один таймер ШИМ выдвет, далее этот сигнал заводится на второй таймер, который
считает импульсы(понятно, что разрядности таймера может не хватить, тогда введем 32разрядный программный счетчик). По прерыванию переполнения таймера 2 судить о том: все импульсы посланы или нет.
Опаньки! Мои извинения! Я даже как-то и не подумал, что на движек будут поступать
мегагерцовые импульсы. Вах! Это действительно -- очень серьезно. Просто любопытно становится, как Вы собираетесь затолкать в обмотку двигателя 1 МГц? На сколько я понимаю, что бы получить достаточный (для толкания нагрузки) ток в обмотке двигателя, нужно будет поднять напряжение до ... хрен знает какой величины (dI ~ dU/dt).
Поскольку частота очень высокая, все мои предложения по программному формированию импульсов надо пересмотреть заново.
Давайте попробуем начать со счетчика количества импульсов. Как было сказано ранее, максимальное количество импульсов -- один миллион. Значит, для организации счетчика понадобится как минимум три байта. (Двух байт не хватит. Два байта это -- 65536, а нам надо один миллион.) А это значит, что при переполнении младшего байта, нужно будет выполнять операции по инкрементированию среднего байта, при переполнении среднего -- инкрементировать старший. Иначе говоря, при формировании двух смежных импульсов мы должны успевать в самом худшем случае оценивать переполнение двух байт, инкрементировать три байта и успевать сравнивать три байта с заданным значением (заданным количеством импульсов).
Давайте попробуем прикинуть, формирование фронтов импульсов должно происходить каждые 500 нс. Если предположить, что АВР-ка будет работать на частоте 16 МГц, т.е. один такт равет 62.5 нс, то мы за 500 / 62.5 = 8 тактов должны выполнить описанные чуть выше действия. Вердикт однозначный -- программно это сделать невозможно.
Что касается использования аппаратных таймеров, то тут те же самые проблемы -- исчерпание (или переполнение) двухбайтового таймера (TIMER1) должно приводить к прерыванию, которое должно перезапустить таймер на очередную порцию 65536 импульсов. Так или иначе, при формировании длинной пачки мегагерцовых импульсов будут возникать гапы (gap), т.е. кратковременные паузы.
Боюсь, что на Меге это задачу не решить. Вы не рассматривали идею использовать LPC2103 на максимальной частоте? Там аппаратные 32-х разрядные таймеры. Мне кажется, Вы там сможете быстрее создать свой генератор импульсов. На 8-ми разрядных МК нужно пройти через уж слишком большое количество ненужных извращений. Причем реализация задуманного девайса не гарантируется.