|
|
  |
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 крошечных МК. Вполне возможно, что для вашего случая предложенная реализация будет проще, чем одна плис.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 30 2009, 10:41
|

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

|
Цитата(MrYuran @ Oct 30 2009, 13:02)  Состарьте, подсушите... А поконкретнее можете задачу описать? Может, есть какие-то нюансы, которые упрощают реализацию? Или всё-таки 15 абсолютно независимых сигналов с произвольным (любым) сдвигом фазы (кстати, относительно чего?) с точностью 1 градус? Можно описать поконкретней - 15 каналов меандра приходят на 15 фильтров после которых получаем 15 cos-нысных сигналов (гармоники на 20 кгц) . Один канал - основной он уходит на другую схему где претерпевает небольшую модуляцию и произвольный фазовый сдвиг , потом возвращается в основную схему -где нужно снять привнесенную информацию с помощью АЦП . Но мешает сам основной сигнал , его амплитуда в процессе модуляции существенно не изменится и будет многократно больше полезной информационной составляющей который АЦП будет забивать - что бы его подавить используется фазовый метод пришедший сигнал складывается с таким же , происходит подбор фазы и амплитуды и так мешающая гармоника давится , ну насколько можно , что останется - усиливается и оцифровывается. т.е. по крайней мере один канал подстраивать не нужно .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Oct 30 2009, 10:43
|

Участник

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

|
Цитата(=GM= @ Oct 30 2009, 13:28)  Мысль одна мелькнула, раз вы готовы даже на плис перейти.. Что если взять несколько мелких МК, типа 8-ногих ATtiny25, и сделать меандры на них. В каждой есть по два таймера, так что два аппаратных меандра уже есть. Далее, можно добавить туда 2 программных. Итого, каждая микрушка может дать до 4 меандров с точностью установки фазы примерно в ПОЛГРАДУСА. Для получения 15 меандров потребуется 4 крошечных МК. Вполне возможно, что для вашего случая предложенная реализация будет проще, чем одна плис. останется только вопрос - как их вместе синхронизировать с требуемой точностью ?
Сообщение отредактировал Ronin - Oct 30 2009, 10:48
|
|
|
|
|
Oct 30 2009, 10:45
|

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

|
Цитата(=GM= @ Oct 30 2009, 13:28)  Мысль одна мелькнула, раз вы готовы даже на плис перейти.. Что если взять несколько мелких МК, типа 8-ногих ATtiny25, и сделать меандры на них. В каждой есть по два таймера, так что два аппаратных меандра уже есть. Далее, можно добавить туда 2 программных. Итого, каждая микрушка может дать до 4 меандров с точностью установки фазы примерно в ПОЛГРАДУСА. Для получения 15 меандров потребуется 4 крошечных МК. Вполне возможно, что для вашего случая предложенная реализация будет проще, чем одна плис. спасибо , интересно . Надо посмотреть .МК для меня попроще плисок будут. Цитата(Ronin @ Oct 30 2009, 13:43)  останется только вопрос - как их вместе синхронизировать с требуемой точностью ? у них у всех общий эталон , значит частота и фаза будут у всех синхронны .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Oct 30 2009, 12:07
|

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

|
Цитата(Lmx2315 @ Oct 30 2009, 14:44)  а что за схема подавления несущей ? Вы же сами писали: Цитата(Lmx2315 @ Oct 30 2009, 13:41)  ...что бы его подавить используется фазовый метод пришедший сигнал складывается с таким же ... Часть Вашего устройства, которая складывает сигналы (неправильно мной названная "схема подавления несущей"), наверное, последовательно складывает сигнал с набором сигналов, сдвинутых на разные углы фаз. Можно, наверное, складывать сигнал с одним сигналом, но управляемым по фазе, вместо множества сигналов?
|
|
|
|
|
Nov 1 2009, 16:36
|

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

|
Цитата(singlskv @ Oct 31 2009, 18:10)  А Вы так и не озвучили какая частота смены фазовых сдвигов, те откалибровали и крутим до "посинения"(след. калибровки) или сдвиги фаз могут измениться в любой момент ? правильно - откалибравали и крутим до следующей калибровки , в любой момент фазы менятся не должны . Цитата(Огурцов @ Oct 31 2009, 21:07)  Так может все должно быть гораздо проще ? И сдается мне, что не нужно формаировать 15 сигналов с настраиваемым фазовым сдвигом, а потом этот сдвиг подбирать. Нужно просто перемножить каждый канал на стабильный синус и косинус, и посмотреть на результат - в результате как раз и будет искомый сдвиг фаз. А как тогда ? ...вот у меня есть несколько каналов и в каждом стоит вредная палка , мне нужно палку задавить как можно сильнее . Из наличных средств я уже имею частоту когерентную с "вредной" палкой - моя идея подогнать по фазе и подавить её таким путём . А если я буду в каждом канале комплексный перемножитель строить - то это мою схему сильно усложнит , да и на выходе этого перемножителя будет просто фазовая ошибка и всё - её ещё как-то использовать нужно . Или я чего не понял ?
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Nov 1 2009, 19:23
|

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

|
Цитата(Огурцов @ Nov 1 2009, 21:59)  ... Но как я догадываюсь, у вас полезный сигнал слаб по отношению к несущей ? Которую вы хотите задавить перед усилением. Но похоже, тут есть одна проблема - на выходе таймера у вас будет не синус, а меандр, и даже если точно подобрать уровень компенсирующего сигнала, все равно останется третья (и т.д.) гармоника, которая забьет усилитель. Может вместо усиления увеличить разрешение АЦП ? я после меандра фильтр ставлю на первую гармонику - там косинус у меня будет , без гармоник ,насколько можно -фильтр будет n-ного порядка от MAX.
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Nov 1 2009, 19:30
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Вы бы побольше данных привели. Типа уровень несущей, уровень сигнала, какое разрешение на выхрде АЦП должно быть. И вообще, как оно потом будет использоваться. В АДСЛ-модемах, например, задачка по-круче, кажется, но решают. Цитата(Lmx2315 @ Nov 1 2009, 19:23)  я после меандра фильтр ставлю на первую гармонику - там косинус у меня будет , без гармоник ,насколько можно -фильтр будет n-ного порядка от MAX. Т.е. все равно +15 фильтров ? Неэстетично.
|
|
|
|
|
Nov 1 2009, 19:57
|

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

|
Цитата(Огурцов @ Nov 1 2009, 22:30)  Вы бы побольше данных привели. Типа уровень несущей, уровень сигнала, какое разрешение на выхрде АЦП должно быть. И вообще, как оно потом будет использоваться. В АДСЛ-модемах, например, задачка по-круче, кажется, но решают.
...
Т.е. все равно +15 фильтров ? Неэстетично. А куда деваться ? ..если есть другие варианты - с радостью схему поменяю , меня даже не число фильтров раздражает а то что скорее всего всё это количество будет некуда ставить . Ну это вторая задача. Данные такие: вредная палка - порядка 1-5 Вольт , полезный сигнал - порядка сотен микровольт - единиц милливольт Полезное разрешение по сигналу хотелось бы разрядов 8 , прям сейчас поставил 12 разрядный АЦП . Из этого можно прикинуть с какой точностью давить нужно , было б здорово если б знающие люди ткнули бы меня где у меня узкие места  , с какой точностью фазу подстраивать. Так получается что АЦП с большим разрешением не поставить , за ним будет идти блекфин 533 . Конструкция такая - 12 бит АЦП , 4 бита - номер канала - это всё идёт к блекфину на PPI. А он у него всего -16 бит . Если увеличить разрядность - надо мудрить как блекфину сообщать какой канал сейчас оцифровывается , у меня временное мультиплексирование . Т.е. несколько каналов идут на мультиплексор и с него на АЦП , потом на DSP. Мультиплексор перебирает каналы и те по очереди оцифровываются , ну само собой быстро-быстро . Сам блекфин будет стоять далеко , туда информация через лвдс-ную пару после сериалайзера уйдёт с АЦП. каналы + адресс канала . Применяться будет просто - нужно распознать сигнал он будет стандартный - есть ,выдать ОК! Если не похож - выдать - нет . Форма сигнала после цифровой обработки должна выделится.Ну это не моя задача. Цитата(ILYAUL @ Nov 1 2009, 22:45)  Кстати , а модулирующий сигнал периодический или как бог на душу положит ..случайный , если пропустил -повторов не будет .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Nov 1 2009, 22:33
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Lmx2315 @ Nov 1 2009, 19:36)  правильно - откалибравали и крутим до следующей калибровки , в любой момент фазы менятся не должны . Ну вроде как 15 каналов все равно не уместить в 1 МК, но если 2 МК по 8 каналов то наверное почти можно.... Смысл в том что на сомом деле менять выход нам нужно очень не часто т.к. частота на всех каналах одинакова. Если мы имеем возможность сначала готовить данные а потом "крутить каналы", то вывод на 8 каналах должен выглядеть примерно так: Код movw r31:r30, r1:r0 out PORTx, r14 r_14: dec r30 brne r14
out PORTx, r15 r_15: dec r31 brne r_15
movw r31:r30, r3:r2 out PORTx, r16 r_16: dec r30 brne r16
out PORTx, r17 r_17: dec r31 brne r_17
.......................... регистры r0-r??? заранее подготовлены и содержат в себе длительности неизменного вывода в порт регистры r14-r??? заранее подготовлены и содержат выводимое значение длительности перегружаются в текущие счетчики попарно movw(для экономии) нужно конечно это все уравнять по тактам да, и еще, для 8 сигналов нужно брать выводимые значения с запасом(для уравнивания всего цикла), те какое-то состояние порта будет два раза забито в регистрах с разными длительностями
|
|
|
|
|
Nov 1 2009, 23:25
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата 'Lmx2315' ] Данные такие: вредная палка - порядка 1-5 Вольт , полезный сигнал - порядка сотен микровольт - единиц милливольт Ну во вредной палке сигнал всё равно потерян навсегда , почему бы не "резануть " её компаратором. Сотношение частот несущей и модуляции? Если большое, не проще аналоговый фильтр 2-3 порядка и отсечь несушую. Или сначала умножить , что бы разнести их подальше , если соотношение маленькое, фильтрануть, и оцифровать Ацп многих MEGA имеют встроенный усилитель т.ч. можно поднять полезный сигнал с мировольт до вольт.
Сообщение отредактировал ILYAUL - Nov 1 2009, 23:33
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Nov 2 2009, 06:37
|

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

|
Цитата(ILYAUL @ Nov 2 2009, 02:25)  Ну во вредной палке сигнал всё равно потерян навсегда , почему бы не "резануть " её компаратором. Сотношение частот несущей и модуляции? Если большое, не проще аналоговый фильтр 2-3 порядка и отсечь несушую. Или сначала умножить , что бы разнести их подальше , если соотношение маленькое, фильтрануть, и оцифровать Ацп многих MEGA имеют встроенный усилитель т.ч. можно поднять полезный сигнал с мировольт до вольт. ..резануть компаратором ? ..это идея вообщем-то . Я одно время даже думал наплевать на палку - у меня полезный сигнал проявляется скажем так у нулей синусоиды (когда через ноль идёт) .Но побоялся что если всё так просто оставить - каскады АЦП будут в насыщении и отсюда частотные или ещё какие проблемы полезут . Я думал просто диодами уровень ограничить и сказать математикам что когда Ацп забит - не обрабатывать и выгрести что есть около нулей. Но что-то уж мне всё это коряво как-то показалось. Спасибо за идею  . Только придётся порог компаратора очень низко ставить - порядка ну порядка 1 мВольта , как бы там чего не лпавало уж очень сильно ...даже если честно не знаю как себя будет вести компаратор . Потом ведь после него ещё усиливать всё . ....модуляций там несколько , так как типов полезных сигналов тоже несколько у кого-то полоса примерно килогерцы , у кого-то сотни - десятки герц . Аналоговым фильтром всем не угодишь - в цифре можно всё лишнее отрезать , но до не ещё довести надо. Умножать в аналоге - такие дебри даже лезть не хочется . АЦП в мегах имеет уж очень дискретный усилитель - если бы я использовал АЦП меги - всё равно поставил бы внешний регулируемый операционничек . Но АЦП меги мне для обработки не пригодится - в рабочем режиме каналы очень быстро переключаются 1 мкс на канал . Никакая Атмега не успеет обмерить . Цитата(Огурцов @ Nov 2 2009, 01:54)  Даже если подготовить данные заранее, то максимум чего можно достичь, это 14.8 кгц на 8 каналов. Т.е. как я и говорил, осетра нужно урезать. Если взять разрешение в 1.5 градуса, то 8 каналов уже вполне можно тянуть. Либо 15, но на XMega. Либо еще более другой камень. Но это только по генерации, а не по решению задачи. прошу прощения а не помните случайно - погрешность в пусть 1.5 градуса это сколько Дб подавления у синфазных каналов ? Цитата(singlskv @ Nov 2 2009, 01:33)  Ну вроде как 15 каналов все равно не уместить в 1 МК, но если 2 МК по 8 каналов то наверное почти можно.... Смысл в том что на сомом деле менять выход нам нужно очень не часто т.к. частота на всех каналах одинакова. Если мы имеем возможность сначала готовить данные а потом "крутить каналы", то вывод на 8 каналах должен выглядеть примерно так: Код movw r31:r30, r1:r0 out PORTx, r14 r_14: dec r30 brne r14
out PORTx, r15 r_15: dec r31 brne r_15
movw r31:r30, r3:r2 out PORTx, r16 r_16: dec r30 brne r16
out PORTx, r17 r_17: dec r31 brne r_17
.......................... ...боюсь выглядеть смешным клоуном  - а в codevision теоретически сильно тормознее код сделает на Си ? Я в асемблере не очень , вовсе не очень . Нет выглядит понятно 0 но знаете так бывает - не знаешь даже как подступится , потому кодевиженом и пользовался - мастер всё за тебя делает .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Nov 2 2009, 09:56
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
А вот такая идейка: По прикидкам ( поверхостным) понадобятся два ЦАП+ компаратор( возможно два)+таблица синуса( косинуса)+ MEGA Вы формируете свою несущую на первом ЦАП по табличным данным , на одну полуволну ,например , 256 отсчётов. Весь период 512. Но собственно Вам нужна в таблице только полуволна. Вы получаете очень стабильную несущую и точку отсчёта 0 по Х и 0 по Y/. На втором ЦАП Вы формируете полуволну , которую можно сдвигать относительно первой аж 256 раз т.е стартовать ее с координат 0,0 или 1 по X 0-Y ....234 по X - 0 по Y и т.д. На 180 градусов шаг 0,7 градуса. Но Вам это и не понадобится. Здесь можно применить ( по прикидкам ) маленькую хитрость, но не зная сигнала сужу так , что сигнал не имеет постоянной составляющей и имет соответсвенно положительную и отрицательную полуволну. Например, Вы инвертируете отрицательную полуволну, что бы относительно нуля у Вас шли одна за другой положительные полуволны. И на втором ЦАП для каждой из этих полувол Вы формируете полуволну со сдвигом ( но здеть ещё надо продумать). Компаратор отработает на резонансе. Ну дальше понятно , инверсия на втором и несущей нет, но я бы сохранил сигал с перевёрнутой отрицательной полуволной полезного сигнала. Зная все точки отсчёта Вы можете потом восстановить исходный сигнал и оцифровать положительную и отрицательную полуволны всеми 10 разрядами АЦП не заморачиваясь на знак тем самым повысить точность оцифровки. Наверно Вы помните советские приемники с настройкой ручкой. Настраивались примерно так быстро крутилась ручка , по проскочившему звуку определялось наличие станции и медленно вовращаясь назад подстраивались под эту станцию. Здесь можно применить тот же принцип . Идти с шагом 2-3 градуса и по отработке 1-го компаратора засечь точку и уже точно зная , что нужная Вам фаза осталась "позади" потихоньку вернутся к данной точке , что бы отработали сразу два компаратора. Считаем , что попали в фазу. Попробуйте посчитать , по временам , я смогу это проделать , только вечером дома . Да и писать я думаю придётся асмом - затрат меньше. Вот такая идейка.  Да и я не понял , зачем порог для отсечки выставлять в миливольтах , если столб , как вы писали от 1-5 вольт и самое простое выставить 0, 5-0, 2 вольта порог и сажать сигнал в этот момент на землю. Конечно не зная схемы судить трудновато.
Сообщение отредактировал ILYAUL - Nov 2 2009, 10:00
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Nov 2 2009, 10:51
|

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

|
Цитата(ILYAUL @ Nov 2 2009, 12:56)  А вот такая идейка: ....... Вот такая идейка.  Да и я не понял , зачем порог для отсечки выставлять в миливольтах , если столб , как вы писали от 1-5 вольт и самое простое выставить 0, 5-0, 2 вольта порог и сажать сигнал в этот момент на землю. Конечно не зная схемы судить трудновато. тут мне надо подумать сильно над идеей, так всё сразу и не переварю. Спасибо заранее  . ----------------------------------------------------------------------------------- А касательно порога утрирую - полезный сигнал 1 мВ , палка - 1 Вольт , чтобы её компаратором на землю посадить - порог нужно ставить сравнимый с входным полезным сигналом и с запасом больше его примерно ну пусть - 100 мВольт. Ведь потом ещё полученный сигнал нужно раскачивать усилителем до уровня хотя бы 8-бит АЦП ( у АЦП 12 бит шкала - 2 Вольта) . С компаратором по моему идея хорошая .
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
|
Nov 3 2009, 00:59
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Ronin @ Oct 30 2009, 12:11)  то что АВР не тянет - не спорю, просто привёл самый экстремальный вариант, который и то не обеспечит 1 градуса. Самый экстремальный вариант будет когда таблица зашита непосредственно в команды: LDI rd, A0 OUT PORTx, rd LDI rd, A1 OUT PORTx, rd ... LDI rd, Ai OUT PORTx, rd ... и нативно зациклена (тобиш вся память программ забита этими парами команд). С таким подходом тиня2313 даст 8-ми канальный 10Mhz ШИМ при Fosc 20Mhz, что для сигнала в 20kHz даст точность выше одного градуса ---> 360 / (10 000 / 20) = 0.72 градуса. Ну а дальше дело техники, две tiny2313 - 16каналов, а мега128 пусть их программирует по ISP  Только, а нафига там контроллер?  Почему бы просто не взять параллельный OTPROM или FLASH, зашить таблицу, да и инкрементировать адрес с требуемой частотой (как раньше музыкальные звонки делали), все синхронно и никакой контроллер не нужен.
|
|
|
|
|
Nov 4 2009, 00:56
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата defunct Почему бы просто не взять параллельный OTPROM или FLASH, Цитата Огурцов Не подходит, т.к. фаза каждого канала должна подстраиваться в процессе. Фазу крутить смещением адреса.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|