|
|
  |
Atmega128 и таймер |
|
|
|
Oct 30 2009, 07:27
|

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

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

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

|
Цитата(Палыч @ Oct 30 2009, 10:27)  Вы сами то прикиньте - лучше Вас задачу тут, вряд ли, кто знает. Сигналы прийдётся генерить программно. Если, сдвиги фаз заданы раз и навсегда, то, наверное, можно. Но, наверное, сдвиги фаз (а, может быть, и частоту) необходимо менять внешними командами - вот, в этом случае, наверное, это если и реализуемо (это ещё большой вопрос), то с массой ограничений и задача - не тривиальная. Наверное, всё же, на МК возложены и другие задачи кроме генерации частоты - иначе зачем выбран mega128? ..я так мыслю - запускаю один таймер и внутрь помещаю 15 переменных . Каждая переменная инкрементируется каждое срабатывание таймера. После обнуления соответствующей переменной - соответствующая её ножка МК меняет состояние . Если все растут одновременно - фазы одинаковы на ножках , если какая либо переменная пропускает счёт - соответствующий сигнал запаздывает во времени . Разрешение по фазе - зависит от потолка счёта . Соответственно чем больше разрешение тем ниже максимально достижимая частота. Вот у меня и вопрос к знающим людям - можно ли при такой методе достичь 20 кгц на каждом канале (числом 15 штук) чтоб точность перестройки фазы была 1 градус . При этом чтоб микруха потянула уарт и обработку несложных команд - типа получил команду - дёрнул ножкой , ответил что всё ОК! ...да, важное уточнение - один раз отрегулированные фазы сигналов должны сохранятся по крайней мере до следующей калибровки . Т.е . фазы не нужно крутить в реальном времени .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Oct 30 2009, 08:22
|

отэц
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 30 2009, 08:26
|
Гуру
     
Группа: Участник
Сообщений: 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 градус ? Что-то нужно урезать, либо число каналов, либо разрешение фаз, либо частоту сигнала.
|
|
|
|
|
Oct 30 2009, 09:48
|

Гуру
     
Группа: Свой
Сообщений: 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 такую задачу - не потянет, как не мудри...
|
|
|
|
|
Oct 30 2009, 10:02
|

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

|
Цитата(Lmx2315 @ Oct 30 2009, 13:50)  боязно как-то , новая и сырая . Состарьте, подсушите... А поконкретнее можете задачу описать? Может, есть какие-то нюансы, которые упрощают реализацию? Или всё-таки 15 абсолютно независимых сигналов с произвольным (любым) сдвигом фазы (кстати, относительно чего?) с точностью 1 градус?
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Oct 30 2009, 10:11
|

Участник

Группа: Свой
Сообщений: 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 такую задачу - не потянет, как не мудри... да, насчёт других действий прийдется забыть  так можно под задачу отдельно тини-20мгц сбоку прикрутить  я ж логику работы не знаю. таблиц столько не надо - ибо в #3 сообщении указано что в реальном времени фазы меняться не будут. просто каждый раз новую засылать при калибровке. то что АВР не тянет - не спорю, просто привёл самый экстремальный вариант, который и то не обеспечит 1 градуса. с плис тоже разные вариации есть. в общем случае, например 9-битный счётчик и 15ть 9-итных регистров хранящих каждый фазу соотв. канала потребуют 144 триггера, т.е. минимум 7256 или пара 7128, если не влезать во всякие фпга.
Сообщение отредактировал Ronin - Oct 30 2009, 10:13
|
|
|
|
|
Oct 30 2009, 10:28
|

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

|
Цитата(Lmx2315 @ Oct 30 2009, 08:22)  Хочется именно на атмеге128 заделать , может пере раскидать часть сигналов на аппаратные таймеры , только боюсь на её (атмеги) ШИМах мне меандры со сдвигом не получить . На нужной частоте .
не подскажете конкретно на какую микруху посмотреть ? ..я не ставил никогда мелких - не знаю. Так чтоб попроще было работать с ней. Мысль одна мелькнула, раз вы готовы даже на плис перейти.. Что если взять несколько мелких МК, типа 8-ногих ATtiny25, и сделать меандры на них. В каждой есть по два таймера, так что два аппаратных меандра уже есть. Далее, можно добавить туда 2 программных. Итого, каждая микрушка может дать до 4 меандров с точностью установки фазы примерно в ПОЛГРАДУСА. Для получения 15 меандров потребуется 4 крошечных МК. Вполне возможно, что для вашего случая предложенная реализация будет проще, чем одна плис.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|