реклама на сайте
подробности

 
 
> Генерация пачки импульсов, Нужны идеи
KSN
сообщение Aug 18 2008, 01:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Надо сгенерить N(10-1000000) импульсов частотой f(20-1000 кГц) на контроллере meag128. Какие есть решения?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KSN
сообщение Aug 18 2008, 06:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Динамику разгона/торможения исследовать конечно придется.
На малых частотах я делал подсчет импульсов (таймер в режиме ШИМ, прерывание по сравнению) - все работало. Но здесь предполагаемая частота не 1000Гц, а 1000 кГц, поэтому такой фокус не пройдет. Может как вариант: один таймер ШИМ выдвет, далее этот сигнал заводится на второй таймер, который
считает импульсы(понятно, что разрядности таймера может не хватить, тогда введем 32разрядный программный счетчик). По прерыванию переполнения таймера 2 судить о том: все импульсы посланы или нет.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 18 2008, 07:17
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(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-ми разрядных МК нужно пройти через уж слишком большое количество ненужных извращений. Причем реализация задуманного девайса не гарантируется.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 18 2008, 12:55
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(zhevak @ Aug 18 2008, 06:17) *
Поскольку частота очень высокая...Если АВР-ка работает на частоте 16 МГц, то за 8 тактов должны выполнить описанные чуть выше действия. Вердикт однозначный -- программно это сделать невозможно.

Что касается использования аппаратных таймеров, то тут те же самые проблемы -- исчерпание (или переполнение) двухбайтового таймера (TIMER1) должно приводить к прерыванию, которое должно перезапустить таймер на очередную порцию 65536 импульсов. Так или иначе, при формировании длинной пачки мегагерцовых импульсов будут возникать гапы (gap), т.е. кратковременные паузы.

Боюсь, что на Меге это задачу не решить

Частота на самом деле высокая, но задача легко решаема на меге.

Цитата(KSN @ Aug 18 2008, 05:26) *
Может как вариант: один таймер ШИМ выдвет, далее этот сигнал заводится на второй таймер, который считает импульсы (понятно, что разрядности таймера может не хватить, тогда введем 32разрядный программный счетчик)

Именно так и можно сделать. Берёте таймер1 (16-бит) и к нему один программный байт, поскольку вам нужен 3-х байтный счётчик, а не 4-х байтный.

Теперь внимание, записываете в свой счётчик инверсное число, до которого надо досчитать. По переполнению счётчика увеличиваете значение в 3-ем байте, и проверяете его на 0, это две команды на ассемблере, 3 такта. Как только его содержимое окажется равным 0, останавливаете процесс выдачи шагов. Вот такая простая идея.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- KSN   Генерация пачки импульсов   Aug 18 2008, 01:54
- - haker_fox   Цитата(KSN @ Aug 18 2008, 10:54) Надо сге...   Aug 18 2008, 03:15
- - KSN   добавлю: генерировать надо прямоугольные импульсы.   Aug 18 2008, 03:18
|- - Павлик   Цитата(KSN @ Aug 18 2008, 05:18) добавлю:...   Aug 18 2008, 03:26
|- - KSN   Цитата(Павлик @ Aug 18 2008, 10:26) Я поз...   Aug 18 2008, 04:47
- - zhevak   Цитата(KSN @ Aug 18 2008, 07:54) Надо сге...   Aug 18 2008, 05:09
|- - KSN   Цитата(zhevak @ Aug 18 2008, 12:09) Это -...   Aug 18 2008, 05:27
|- - zhevak   Цитата(KSN @ Aug 18 2008, 11:27) Нет, это...   Aug 18 2008, 05:48
|- - domowoj   Цитата(KSN @ Aug 18 2008, 12:27) Нет, это...   Aug 18 2008, 16:19
|- - zhevak   если закрыть глаза, что при герерации пачки мпульс...   Aug 18 2008, 13:51
|- - Maik-vs   Цитата(zhevak @ Aug 18 2008, 17:51) тольк...   Aug 18 2008, 14:20
||- - zhevak   Цитата(Maik-vs @ Aug 18 2008, 20:20)...   Aug 18 2008, 14:42
|- - =GM=   Цитата(zhevak @ Aug 18 2008, 12:51) если ...   Aug 18 2008, 14:38
- - KSN   Я начал с малого - с AVR. Также в зоне внимания: ...   Aug 18 2008, 07:53
|- - SasaVitebsk   Цитата(KSN @ Aug 18 2008, 10:53) Я начал ...   Aug 18 2008, 09:25
- - GDI   А нельзя применить в качестве 3го байта 8битный сч...   Aug 18 2008, 13:07
|- - =GM=   Цитата(GDI @ Aug 18 2008, 12:07) А нельзя...   Aug 18 2008, 14:25
- - GDI   ЦитатаБыло бы хорошо, если бы у таймеров был выход...   Aug 18 2008, 14:36
|- - =GM=   Цитата(GDI @ Aug 18 2008, 13:36) OCR чем ...   Aug 18 2008, 14:51
- - KSN   Коллеги, вношу ясность 1МГц - это МАКСИМАЛЬНАЯ вхо...   Aug 19 2008, 02:53
- - Maik-vs   Цитата(KSN @ Aug 19 2008, 06:53) Коллеги,...   Aug 20 2008, 06:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01511 секунд с 7
ELECTRONIX ©2004-2016