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

 
 
> Генерация пачки импульсов, Нужны идеи
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
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 23)
Maik-vs
сообщение Aug 18 2008, 14:20
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(zhevak @ Aug 18 2008, 17:51) *
только автор вопроса может сказать, что допустимо, а что нет. Поскольку он ничего не говорит про гапы, то я предполагаю, что их быть не должно.

Он говорит, что "есть драйвер двигателя, на него надо подать только импульсы шага и сигнал направления, а уж он все отработает дальше сам". То есть "драйвер двигателя" - это контроллер, который и занимается ускорением/замедлением etc. Тогда вопрос сводится к генерации пачки N импульсов с любой скважностью.

Цитата(zhevak @ Aug 18 2008, 17:51) *
И в самом деле, ротор двигателя -- достаточно инерционная шткуа, а еще если нагружена, то можно представить себе какая будет инерционность. ... Но мне самому стало интересно, как автор сможет разгонять движек до мегагерца и точно исполнять заданное количество шагов?

Это вот всем интересно! ИМХО, мегагерц на обмотках шаговика - многовато smile.gif. Скорее, "драйвер двигателя" может получить импульсы на этой скорости, а потом потратит секунды на исполнение.

Реализация собственно задачи простая. Таймер генерит ШИМ (на частоте 1МГц), по прерыванию его переполнения (через 256мкс или 65.536 мс) вычитается программный счётчик. Как только он стал 0, загружаем в регистр(ы) таймера (TCNT, ага) заранее вычисленный "хвостик". В следующем прерывании (переход программного счётчика в ff или ffff) останавливаем генерацию битами WGM. Поскольку загрузка TCNT происходит в прерывании, "пролёт" количества импульсов будет всегда одинаковый, его нужно скорректировать при вычислении "хвостика".
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 18 2008, 14:25
Сообщение #17


Ambidexter
*****

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



Цитата(GDI @ Aug 18 2008, 12:07) *
А нельзя применить в качестве 3го байта 8битный счетчик с внешним тактированием? Здорово было бы применить его в качестве пост-делителя, т.е. 3-го байта, остается придумать как половчее обработку сделать

Было бы хорошо, если бы у таймеров был выход наружу сигнала переполнения, но он формирует только флаг прерывания.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 18 2008, 14:36
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
Было бы хорошо, если бы у таймеров был выход наружу сигнала переполнения, но он формирует только флаг прерывания.

OCR чем вам не выход? Причем его можно настроить как на ТОР, так и на BOTTOM.
Цитата
Как только он стал 0, загружаем в регистр(ы) таймера (TCNT, ага) заранее вычисленный "хвостик"

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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Aug 18 2008, 14:38
Сообщение #19


Ambidexter
*****

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



Цитата(zhevak @ Aug 18 2008, 12:51) *
если закрыть глаза, что при герерации пачки мпульсов будут возникать пауза

Ну вы всё-ж-таки читайте, что было предложено в посте #13. Записывается инверсное число, ну скажем для 100000 шагов пишется -100000 в допкоде, ПЕРВЫЙ цикл будет неполным, зато все прерывания по переполнению будут равноправны, последнее прерывание возникнет, когда счётчик полностью обнулится, так что никаких пауз не будет.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 18 2008, 14:42
Сообщение #20


Знающий
****

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



Цитата(Maik-vs @ Aug 18 2008, 20:20) *
То есть "драйвер двигателя" - это контроллер, который и занимается ускорением/замедлением etc.

Не, что-то не вяжется. Если "это" -- контроллер, который занимается воросами ускорения и торможения, то, согласитесь, глупо былобы ему задавать шаги в виде импульсов. Было бы разумнее послать ему двоичное закодированние число шагов и подождать флаг готовности. Скорее всего "это" -- это просто тупой бустер, который занимается вопросами подачи импульсов на фазные обмотки, занимается вопросами исключения сквозных токов и т.д. Никакого другого интеллекта в нем нет. Впрочем, это чисто мои догадки.

Цитата
Это вот всем интересно! ИМХО, мегагерц на обмотках шаговика - многовато smile.gif

Похоже, в этом месте KSN нас не плохо развел! Делаю повторную ревизию максимальной частоы.
Допустим, у KSN движек с шагом в 1°. Т.е. количество шагов для полного оборота равно 360. Значит, двигатель дожен будет разгоняться до скорости ... э-э 100000 / 360 = 2777 оборотов в секунду. Ого и нифига себе!!! Это более 160 тысяч оборотов в минуту. Для сравнения винчестеры имеют 7200 и 10000 об/мин. Разгоняются они несколько секунд... А тут такое, да еще и уметь правильно отсчитывать количество шагов... Нет, тут что-то не так!

АФТОРА Ф СТУДИЮ!!! -- Теперь мне интересно знать, где он взял такие цифры? А так же, где и почем он покупает такие двигатели?

Меня не интересует, где они используются, иеня не интересует на какой секунде их разрывает центробежными силами. Мне просто интересно знать откуда такие цифры : один миллион шагов в секунду?

Цитата
Ну вы всё-ж-таки читайте, что было предложено ...

O-ops! Пардон. Прочитал только сейчас.

Сообщение отредактировал zhevak - Aug 18 2008, 14:52


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


Ambidexter
*****

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



Цитата(GDI @ Aug 18 2008, 13:36) *
OCR чем вам не выход? Причем его можно настроить как на ТОР, так и на BOTTOM

Ну, речь шла о таймере. Если нет задачи экономить периферию, то вполне можно использовать выход OCRn.
Цитата(GDI @ Aug 18 2008, 13:36) *
Тут можно ничего не загружать в TCNT, а просто тогда когда первый раз запускается таймер записать этот хвостик в регистр сравнения, и после выполнения последнего полного прохода просто включить прерывание по совпадению, хотя тут надо как то прикинуть что будет быстрее, загрузить 16-разрядный регистр TCNT или установить биты в регистре(ах) конфигурации

Ну, если так, то лучше хвостик записать в таймер1, выход OCRn подключить к счётчику 2, а в счетчик2 предварительно записать инвертированное число переполнений. Тогда ПЕРВОЕ переполнение счётчика2 даст искомое количество шагов. Таким способом можно считать ЛЮБОЕ количество шагов (до 2^24-1) на любой частоте вплоть до Fclk/2, равное 8 МГц в нашем случае. Задача автора топика решена на меге, причём аппаратно.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
domowoj
сообщение Aug 18 2008, 16:19
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Цитата(KSN @ Aug 18 2008, 12:27) *
Нет, это не дипломная работа. Просто оцениваю возможность реализации управления двигателем.

А какой же двигатель будет работать с такой частотой(1МГц)???


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
KSN
сообщение Aug 19 2008, 02:53
Сообщение #23


Местный
***

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



Коллеги, вношу ясностьsmile.gif
1МГц - это МАКСИМАЛЬНАЯ входная частота управляющего сигнала(fупр). Максимальное кол-во оборотов - 5000 об/мин, который может выдать драйвер (производители драйверов разные, например, Panasonic, Fuji). У драйвера есть поправочные коэффициенты альфа и бетта, таким образом F ~= fупр*альфа/бетта. 1МГц не обязательно подавать, просто я хочу выяснить, какими способами возможно с помощью меги генерить пачку импульсов на максимальной частоте.

Спасибо всем за обсуждение и высказывание идей. Если есть новые идеи - буду рад выслушать.
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Aug 20 2008, 06:25
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(KSN @ Aug 19 2008, 06:53) *
Коллеги, вношу ясностьsmile.gif
1МГц - это МАКСИМАЛЬНАЯ входная частота управляющего сигнала(fупр). Максимальное кол-во оборотов - 5000 об/мин.


Ну вот, а я уже подумал, что это НАНОШАГОВИК из 45 молекул smile.gif

Цитата(=GM= @ Aug 18 2008, 18:51) *
Ну, если так, то лучше хвостик записать в таймер1, выход OCRn подключить к счётчику 2, а в счетчик2 предварительно записать инвертированное число переполнений. ... Задача автора топика решена на меге, причём аппаратно.
a14.gif a14.gif

Сообщение отредактировал Maik-vs - Aug 20 2008, 06:26
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:16
Рейтинг@Mail.ru


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