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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Atmega128 и таймер
Lmx2315
сообщение Oct 30 2009, 07:01
Сообщение #1


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Такой вопрос , уважаемый All!

Можно ли с атмеги128-16 МГц получить с 15 ног , 15 меандров 20 кгц , с возможностью задерживать один относительно другого на фазу с точностью хотя бы 1 градус ?


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 30 2009, 07:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Вы сами то прикиньте - лучше Вас задачу тут, вряд ли, кто знает. Сигналы прийдётся генерить программно. Если, сдвиги фаз заданы раз и навсегда, то, наверное, можно. Но, наверное, сдвиги фаз (а, может быть, и частоту) необходимо менять внешними командами - вот, в этом случае, наверное, это если и реализуемо (это ещё большой вопрос), то с массой ограничений и задача - не тривиальная.
Наверное, всё же, на МК возложены и другие задачи кроме генерации частоты - иначе зачем выбран mega128?
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Oct 30 2009, 07:43
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(Палыч @ Oct 30 2009, 10:27) *
Вы сами то прикиньте - лучше Вас задачу тут, вряд ли, кто знает. Сигналы прийдётся генерить программно. Если, сдвиги фаз заданы раз и навсегда, то, наверное, можно. Но, наверное, сдвиги фаз (а, может быть, и частоту) необходимо менять внешними командами - вот, в этом случае, наверное, это если и реализуемо (это ещё большой вопрос), то с массой ограничений и задача - не тривиальная.
Наверное, всё же, на МК возложены и другие задачи кроме генерации частоты - иначе зачем выбран mega128?



..я так мыслю - запускаю один таймер и внутрь помещаю 15 переменных .
Каждая переменная инкрементируется каждое срабатывание таймера. После обнуления соответствующей переменной - соответствующая её ножка МК меняет состояние .
Если все растут одновременно - фазы одинаковы на ножках , если какая либо переменная пропускает счёт - соответствующий сигнал запаздывает во времени . Разрешение по фазе - зависит от потолка счёта . Соответственно чем больше разрешение тем ниже максимально достижимая частота.


Вот у меня и вопрос к знающим людям - можно ли при такой методе достичь 20 кгц на каждом канале (числом 15 штук) чтоб точность перестройки фазы была 1 градус . При этом чтоб микруха потянула уарт и обработку несложных команд - типа получил команду - дёрнул ножкой , ответил что всё ОК!

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


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 30 2009, 07:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Lmx2315 @ Oct 30 2009, 10:43) *
..я так мыслю - запускаю один таймер и внутрь помещаю 15 переменных...
Прикидываем (грубо, конечно): на каждый период у Вас 16 000 000 / 20 000 = 800 тактов; всего - 15 каналов: 800 / 15 = 53 такта; взять переменную+нарастить её+сохранить+сравнить+изменить выход = не менее 10 тактов... При таком подходе - за период Вы сможете поменять выходы не более пяти раз (реально ещё меньше: отъест UART, сохранение/востановление контекста при прерываниях от таймера и т.д.). Итого 360 /5 = 72 градуса. Очень далеко от точности в 1 градус... Всё это - могли бы и Вы сомастоятельно прикинуть.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 30 2009, 08:01
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



20кГц ~ 50мкс - это период.
Что такое 1 градус? Ещё на 360 поделить?
0,138 мкс получается.
Железно на выходах таймера такую точность ещё реально получить, программно - сомневаюсь.
Советую для этих целей поставить простенькую плисину, забить в неё 15 программируемых счётчиков (или один с 15-ю защёлками) и спать спокойно.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Oct 30 2009, 08:22
Сообщение #6


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(Палыч @ Oct 30 2009, 10:59) *
Прикидываем (грубо, конечно): на каждый период у Вас 16 000 000 / 20 000 = 800 тактов; всего - 15 каналов: 800 / 15 = 53 такта; взять переменную+нарастить её+сохранить+сравнить+изменить выход = не менее 10 тактов... При таком подходе - за период Вы сможете поменять выходы не более пяти раз (реально ещё меньше: отъест UART, сохранение/востановление контекста при прерываниях от таймера и т.д.). Итого 360 /5 = 72 градуса. Очень далеко от точности в 1 градус... Всё это - могли бы и Вы сомастоятельно прикинуть.


спасибо , да я и сам прикидывал ...просто надеялся может кто подскажет чего. Хочется именно на атмеге128 заделать , может пере раскидать часть сигналов на аппаратные таймеры , только боюсь на её (атмеги) ШИМах мне меандры со сдвигом не получить . На нужной частоте .



Цитата(MrYuran @ Oct 30 2009, 11:01) *
20кГц ~ 50мкс - это период.
Что такое 1 градус? Ещё на 360 поделить?
0,138 мкс получается.
Железно на выходах таймера такую точность ещё реально получить, программно - сомневаюсь.
Советую для этих целей поставить простенькую плисину, забить в неё 15 программируемых счётчиков (или один с 15-ю защёлками) и спать спокойно.



спасибо за идею , не подскажете конкретно на какую микруху посмотреть ? ..я не ставил никогда мелких - не знаю. Так чтоб попроще было работать с ней.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Oct 30 2009, 08:26
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(Палыч @ Oct 30 2009, 08:59) *
16 000 000 / 20 000 = 800 тактов

Плюс 360 градусов с разрешением 1 градус, делим еще на 360, т.е. 2+ такта. Что можно сделать за 2 такта, можно легко догадаться, посмотреть таблицу с ассемблерными инструкциями.


Цитата(Lmx2315 @ Oct 30 2009, 08:01) *
Можно ли с атмеги128-16 МГц получить с 15 ног , 15 меандров 20 кгц , с возможностью задерживать один относительно другого на фазу с точностью хотя бы 1 градус ?

Что-то нужно урезать, либо число каналов, либо разрешение фаз, либо частоту сигнала.
Go to the top of the page
 
+Quote Post
Ronin
сообщение Oct 30 2009, 09:29
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 10-02-05
Из: Краснодар
Пользователь №: 2 558



Конечно 0.138мкс точно не получить, но можно так по кругу:

ld r0,z+
out porta,r0
ld r0,z+
out portb,r0
... ; повтор 133 раза
...

Итого - при 16мгц частота 20кгц (изменяется количеством повторов указанной конструкции).
разрешение - 360/133=2.7 градуса, фазировка каналов задаётся таблицей в озу (266 байт).
Для синхронного вывода в каналы портов А/В можно использовать 16й бит канала В и внешний регистр-защёлку.
Если взять 20мгц аврку точность до 2.15 градуса можно улучшить.
Go to the top of the page
 
+Quote Post
МП41
сообщение Oct 30 2009, 09:42
Сообщение #9


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



А как насчет ATXmega...?


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 30 2009, 09:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Ronin @ Oct 30 2009, 12:29) *
...но можно так по кругу...
Так можно было бы, если бы МК ничем другим занят не был. МК ещё, например, обменивается по UART, а, значит, приведённый Вами участок программы будет прерываться на некое время процедурой обработки прерываний...

Цитата(Ronin @ Oct 30 2009, 12:29) *
...фазировка каналов задаётся таблицей в озу (266 байт)...
Только таких таблиц на все возможные сдвиги потребуется 16384 штуки. Весь этот массив займёт 16384 * 266 = 4358144 байт = 4.4Мбайт.
P.S. Ой! На число шагов сдвига фазы забыл ещё умножить: 4.4*360= 1.58 Гбайт

AVR такую задачу - не потянет, как не мудри...
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Oct 30 2009, 09:50
Сообщение #11


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



Цитата(МП41 @ Oct 30 2009, 12:42) *
А как насчет ATXmega...?

боязно как-то , новая и сырая .
Кто-нибудь её использовал ?


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 30 2009, 10:02
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Lmx2315 @ Oct 30 2009, 13:50) *
боязно как-то , новая и сырая .

Состарьте, подсушите... biggrin.gif

А поконкретнее можете задачу описать?
Может, есть какие-то нюансы, которые упрощают реализацию?

Или всё-таки 15 абсолютно независимых сигналов с произвольным (любым) сдвигом фазы (кстати, относительно чего?) с точностью 1 градус?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Ronin
сообщение Oct 30 2009, 10:11
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 10-02-05
Из: Краснодар
Пользователь №: 2 558



Цитата(Палыч @ Oct 30 2009, 12:48) *
Так можно было бы, если бы МК ничем другим занят не был. МК ещё, например, обменивается по UART...

Только таких таблиц на все возможные сдвиги потребуется 16384 штуки. Весь этот массив займёт 16384 * 266 = 4358144 байт = 4.4Мбайт.
P.S. Ой! На число шагов сдвига фазы забыл ещё умножить: 4.4*360= 1.58 Гбайт

AVR такую задачу - не потянет, как не мудри...


да, насчёт других действий прийдется забыть smile.gif так можно под задачу отдельно тини-20мгц сбоку прикрутить wink.gif я ж логику работы не знаю.
таблиц столько не надо - ибо в #3 сообщении указано что в реальном времени фазы меняться не будут. просто каждый раз новую засылать при калибровке.
то что АВР не тянет - не спорю, просто привёл самый экстремальный вариант, который и то не обеспечит 1 градуса.

с плис тоже разные вариации есть. в общем случае, например 9-битный счётчик и 15ть 9-итных регистров хранящих каждый фазу соотв. канала потребуют 144 триггера, т.е. минимум 7256 или пара 7128, если не влезать во всякие фпга.

Сообщение отредактировал Ronin - Oct 30 2009, 10:13
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 30 2009, 10:21
Сообщение #14


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Есть ещё один вариант - ПСоК-и (PSoC), нарпимер, от Cypress
То есть процессорное ядро плюс конфигурируемая периферия на одном кристалле.
Конкретно сказать не могу, т.к. сам не пробовал, только рекламные листовки читал


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 30 2009, 10:28
Сообщение #15


Ambidexter
*****

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



Цитата(Lmx2315 @ Oct 30 2009, 08:22) *
Хочется именно на атмеге128 заделать , может пере раскидать часть сигналов на аппаратные таймеры , только боюсь на её (атмеги) ШИМах мне меандры со сдвигом не получить . На нужной частоте .

не подскажете конкретно на какую микруху посмотреть ? ..я не ставил никогда мелких - не знаю. Так чтоб попроще было работать с ней.

Мысль одна мелькнула, раз вы готовы даже на плис перейти.. Что если взять несколько мелких МК, типа 8-ногих ATtiny25, и сделать меандры на них. В каждой есть по два таймера, так что два аппаратных меандра уже есть. Далее, можно добавить туда 2 программных. Итого, каждая микрушка может дать до 4 меандров с точностью установки фазы примерно в ПОЛГРАДУСА. Для получения 15 меандров потребуется 4 крошечных МК. Вполне возможно, что для вашего случая предложенная реализация будет проще, чем одна плис.


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

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:26
Рейтинг@Mail.ru


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