Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Имитация работы АЦП
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
TigerSHARC
Привет всем!

Суть проблемы лежит в http://electronix.ru/forum/index.php?showt...mp;#entry813362

Посоветуйте контроллер для реализации.

Дело в том, что нужно отправлять в главный процессор в реальном времени выборки синусоидального сигнала (предположительно по SPI).

Сначала хотел на винде это сделать, но она не реалтайм... такчто частота дискретизации сигнала может иметь случайный большой джиттер....

Вобщем сейчас планирую так: относительно простой микроконтроллер заполняет программно циклически массив (синусоидальный сигнал) и отправляет выборки одну за другой порт SPI, через равные промежутки времени (т.е. интервал дискретизации).

Так вот возникают следующие сложности:

1)частота дискретизации такого генератора должна быть 100кГц максимум, т.е. числа должны выдаваться по SPI строго раз в 0,00001 сек. (если проц не потянет можно и меньше)
2) получается контроллер должен посчитать синус и выдать 16-битный ответ за 0,00001сек и выдать его в порт SPI и так циклически....
3) требования к контроллеру: максимально дешёвый, в DIP-корпусе(по возможности), и немаловажное требование - максимум инфы по работе с контроллером (типа AVR кокой-нить).


Для чего всё это нужно написано по ссылке выше.

Главный процессор - числомолотилка, которая будет складывать числа от "генератора" в циклический буфер (в SD-RAM) и производить ЦОС-алгоритмы над сигналом (ему передаёт мой контроллер-генератор выборки синуса по SPI)
Tanya
Цитата(TigerSHARC @ Sep 21 2010, 18:58) *
2) получается контроллер должен посчитать синус и выдать 16-битный ответ за 0,00001сек и выдать его в порт SPI и так циклически....
3) требования к контроллеру: максимально дешёвый, в DIP-корпусе(по возможности), и немаловажное требование - максимум инфы по работе с контроллером (типа AVR кокой-нить).

2 - Это Вы сами на большом компьютере вычислите таблицу и засунете в контроллер через последовательный порт или заранее через программатор.
3 - Смотрите цену программатора в первую очередь.
TigerSHARC
у меня есть AutoProg.

мне же нужно непрерывно выдавать синусоиду. мне нужно записать как минимум 10 периодов синусоиды с частотой в нужном интервале (эти 10 периодов будут как бы базовые и повторятся при бесконечном выводе в порт SPI)

Данные 16 битные.
тогда при частоте дискретизации 100 кГц я имею 320 кБит таблицу, т.е. для хранения только таблицы мне нужно 40кб памяти.

может посоветуете контроллер?
Alexashka
Идея хорошая, но имхо можно упростить себе задачу. Если уж Вы отказываетесь от использования непосредственно АЦП (с его особенностями и возможными +/-), и согласны работать с цифровым потоком, то поток ведь этот придется в АРМе сохранять в какойто буфер. И ЦОС уже будет работать с этим буфером. Логично? Ну так запишите в этот буфер то что Вам надо- пойдет любой интерфейс, который уже есть а АРМе. А судя по всему там их навалом smile.gif Наверняка есть UART и USB. И в проце наверняка предполагается использовать ОСРВ. Так добавьте ей еще один процесс, который будет по команде с компа подгружать в буфер новые данные!
TigerSHARC
Цитата(Alexashka @ Sep 21 2010, 20:50) *
Идея хорошая, но имхо можно упростить себе задачу. Если уж Вы отказываетесь от использования непосредственно АЦП (с его особенностями и возможными +/-), и согласны работать с цифровым потоком, то поток ведь этот придется в АРМе сохранять в какойто буфер. И ЦОС уже будет работать с этим буфером. Логично? Ну так запишите в этот буфер то что Вам надо- пойдет любой интерфейс, который уже есть а АРМе. А судя по всему там их навалом smile.gif Наверняка есть UART и USB. И в проце наверняка предполагается использовать ОСРВ. Так добавьте ей еще один процесс, который будет по команде с компа подгружать в буфер новые данные!


с компа не годится же... можно не успеть (на компе винда стоит).... я и планировал поток данных отправлять с какого нибудь простенького контроллера, а принимать на мощном проце (тот же ARM), естесственно помещать данные в кольцевой буфер в SDRAM на плате главного проца (тот же ARM) и уже работать с ЦОС...

выбираю теперь контроллер...

P.S. Работа имеет сугубо макетно-учебный характер... но интересно же!
rezident
Непонятно. Если задача стоит только в отработке алгоритма(ов) ЦОС, то для этого не нужен ни АЦП, ни контроллер. Алгоритмы вполне успешно и главное удобно отлаживаются на компьютере.
Если же задача в исследовании какого-то "железа", то используйте нормальный генератор сигналов с качественной синусоидой и не занимайтесь "вырезанием гландов через задний проход".
Alexashka
Цитата(TigerSHARC @ Sep 21 2010, 23:19) *
с компа не годится же... можно не успеть (на компе винда стоит).... я и планировал поток данных отправлять с какого нибудь простенького контроллера, а принимать на мощном проце (тот же ARM), естесственно помещать данные в кольцевой буфер в SDRAM на плате главного проца (тот же ARM) и уже работать с ЦОС...

И чем же промежуточный контроллер компенсирует задержку, которая может произойти при передачи потока с Писи? Ничем, если он не обладает достаточным буфером. Но этот буфер точно также можно реализовать в АРМе, т.е высылать данные с РС заблаговременно, сохранять в доп.буфере АРМа и когда ему понадобятся - подсовывать, как будто тока что полученные. smile.gif
Тем более склоняет к реализации буфера в АРМе то, что 40кБ уже приличный объем, кот.предпочтительно разместить во внешней ОЗУ (кот.уже имеется). Вот и заполняйте его пакетами по USB, а программе -обработчику потока скармливайте по-байтно, как будто из АЦП
kamil_yaminov
40кБ может и не надо, если использовать линейную интерполяцию
Клим
Какой частоты синус ?
Используйте любой DDS-генератор, например http://www.remexpert.com/ipb/index.php?aut...mp;showentry=96
TigerSHARC
Цитата(rezident @ Sep 21 2010, 23:50) *
Непонятно. Если задача стоит только в отработке алгоритма(ов) ЦОС, то для этого не нужен ни АЦП, ни контроллер. Алгоритмы вполне успешно и главное удобно отлаживаются на компьютере.
Если же задача в исследовании какого-то "железа", то используйте нормальный генератор сигналов с качественной синусоидой и не занимайтесь "вырезанием гландов через задний проход".


генератор сигналов это хорошо, только придётся опять заморачиваться с АЦП....

Цитата(Клим @ Sep 22 2010, 12:41) *
Какой частоты синус ?
Используйте любой DDS-генератор, например http://www.remexpert.com/ipb/index.php?aut...mp;showentry=96


классное решение, но опять же в цифру переводить надо как-то, а мне нужно 16 бит на выборку... (ну 14 минимум)...

и несовсем понятно качестов выдаваемого сигнала на таких генераторах.

А вот просто если в цифровом виде выдавать ранее записаный сигнал, то можно и идеальный синус сгенерировать (предварительно в Matlab например)
И потом, если надо мне не чистый синус а отсчёты какого-то сигнала сложного передавать. Тогда мне думается что интереснее будет просто программатором записать эти отсчёты массивом в ПЗУ и оттуда циклически бесконечно их выдавать по SPI в хост... но по моим требованиям получается что память данных должна быть несколько десятков килобайт (это только для отсчётов сигнала).
подскажите такое решение, чтобы простое было и дешёвое... может AVR с внешней ПЗУ...???
XVR
Цитата
подскажите такое решение, чтобы простое было и дешёвое
Уже подсказывали - сделать все ВНУТРИ главного ЦПУ. Попытка приделать AVR для снабжения ARM'а данными выглядит слегка диковато 07.gif
iosifk
Цитата(TigerSHARC @ Sep 21 2010, 19:35) *
у меня есть AutoProg.

мне же нужно непрерывно выдавать синусоиду.
Данные 16 битные.
тогда при частоте дискретизации 100 кГц
может посоветуете контроллер?

Вообще то, если надо генерировать синусоиду, то в таблицу записывается только одна четвертинка. И хранится отдельно признак знака/квадранта... А если процессор более шустрый, то в таблицу пишется не сам синус, а его разность относительно линейного сигнала - "горбушка"...
Так что памяти нужно не так уж много... А примеров - полно. Посмотрите, производители микроконтроллеров предлагают примеры синусоид или DTMF генераторов....
Клим
Цитата(TigerSHARC @ Sep 22 2010, 17:12) *
классное решение, но опять же в цифру переводить надо как-то, а мне нужно 16 бит на выборку... (ну 14 минимум)...

Ну так а кто мешает чуть переделать программу и выдавать цифру по SPI ?
Кстати, так и не услышал, синусоида идет определенной частоты или необходима переменная. Частота дискретизации, как я понял -100кгц, а какая (какие) частоты синусоидального сигнала нужны ?
khach
Делали одни раз такое- нужен был имитатор АЦП для проверки USB канала до компа и проверки потерь пакетов и сбоя фазы оцифрованного сигнала. Эммулируемый АЦП был с SPI интерфейсом. Взяли какую-то демоборду с АРМом (тогда они только появились), загнали во флеш таблицы синусов и написали простенькую программку. Отработав свое, симулятор был успешно разобран. А, была еще версия с внешним флешем, когда отлаживали 24 битный поток, потому что таблица синусов во внутреннюю флешь невлезала.
TigerSHARC
Цитата(Клим @ Sep 23 2010, 14:38) *
Ну так а кто мешает чуть переделать программу и выдавать цифру по SPI ?
Кстати, так и не услышал, синусоида идет определенной частоты или необходима переменная. Частота дискретизации, как я понял -100кгц, а какая (какие) частоты синусоидального сигнала нужны ?


частоты нужны всего лишь от 2 до 100 гц. (неплохо было бы иметь возможность зашумлять сигнал гармониками)

Цитата(khach @ Sep 23 2010, 14:52) *
Делали одни раз такое- нужен был имитатор АЦП для проверки USB канала до компа и проверки потерь пакетов и сбоя фазы оцифрованного сигнала. Эммулируемый АЦП был с SPI интерфейсом. Взяли какую-то демоборду с АРМом (тогда они только появились), загнали во флеш таблицы синусов и написали простенькую программку. Отработав свое, симулятор был успешно разобран. А, была еще версия с внешним флешем, когда отлаживали 24 битный поток, потому что таблица синусов во внутреннюю флешь невлезала.


вот вот ! То то и надо мне. Вот только мне нужно 16 битные данные отправлять. Допустим записали таблицу отсчётов в ПЗУ (отсчёты 16 битные) и выдаём их с определённым временным интервалом по очереди и покругу. Справиться ли с этим AVR??? (пусть это и выглядит диковато)

.... думаю что внутри самого ARM'а это будет сделать проще... НО! если потом реальную АЦПшку присобачить первый вариант будет практичнее, так как всё для приёма данных уже готово... АЦПшка ведь тоже по SPI может общаться.
VCO
Цитата(TigerSHARC @ Sep 23 2010, 17:17) *
вот вот ! То то и надо мне. Вот только мне нужно 16 битные данные отправлять. Допустим записали таблицу отсчётов в ПЗУ (отсчёты 16 битные) и выдаём их с определённым временным интервалом по очереди и покругу. Справиться ли с этим AVR??? (пусть это и выглядит диковато)

Задача элементарно решается одним крутым Spartanом или провинутым Virtexом, хошь по параллельному, хошь по последовательному порту! Только и надо, что соответствующий интерфейс поддержать и нужный FIFO организовать! Никакие AVRы и ARMы даже рядом не стоят. Vivat FPGA!!! santa2.gif
khach
Цитата(TigerSHARC @ Sep 23 2010, 16:17) *
вот вот ! То то и надо мне. Вот только мне нужно 16 битные данные отправлять. Допустим записали таблицу отсчётов в ПЗУ (отсчёты 16 битные) и выдаём их с определённым временным интервалом по очереди и покругу. Справиться ли с этим AVR??? (пусть это и выглядит диковато)

Ну так посчитайте. Надо понять размер таблицы в памяти и чисто тактов между посылками по SPI. Хватает ли времени на матетматику и интерполяцию или нет. Если будете интерполировать а потом гонять фурье или проверять интермодуляции- то сначала проверьте алгоритм интерполяции в матлабе, а то можно такого потом намерять... А полная таблица синусов 16 бит- это как минимум 128 К. Т.е разве что на атмеге 128 делать, да и то четвертушку синуса только хранить во флеше. Тактовая то SPI какая? Кто мастер на шине?


TigerSHARC
Цитата(YIG @ Sep 23 2010, 19:25) *
Задача элементарно решается одним крутым Spartanом или провинутым Virtexом, хошь по параллельному, хошь по последовательному порту! Только и надо, что соответствующий интерфейс поддержать и нужный FIFO организовать! Никакие AVRы и ARMы даже рядом не стоят. Vivat FPGA!!! santa2.gif


А это идея! Думаю Spartan 3 подойдёт.

Цитата(khach @ Sep 23 2010, 19:25) *
Ну так посчитайте. Надо понять размер таблицы в памяти и чисто тактов между посылками по SPI. Хватает ли времени на матетматику и интерполяцию или нет. Если будете интерполировать а потом гонять фурье или проверять интермодуляции- то сначала проверьте алгоритм интерполяции в матлабе, а то можно такого потом намерять... А полная таблица синусов 16 бит- это как минимум 128 К. Т.е разве что на атмеге 128 делать, да и то четвертушку синуса только хранить во флеше. Тактовая то SPI какая? Кто мастер на шине?


Нет, с интерполяцией связыватсья не буду. Это уже всё не то. Алгоритм должен принимать честный 16-битный синус.
Alexashka
Цитата(TigerSHARC @ Sep 23 2010, 18:17) *
.... думаю что внутри самого ARM'а это будет сделать проще... НО! если потом реальную АЦПшку присобачить первый вариант будет практичнее, так как всё для приёма данных уже готово... АЦПшка ведь тоже по SPI может общаться.

Зря вы думаете что в ARMах нет шины SPI, более того она в них ничем не отлается от SPI в AVR, разве что настроек побольше smile.gif я уж не говорю о том что тактовая частота поболе, а соответствующие задержки-поменее.
И флешь в ARMe потолще будет, можно легко в мегабайт найти, туда что годно войдет, даже сигнал произволльной формы
TigerSHARC
Цитата(Alexashka @ Sep 23 2010, 23:33) *
Зря вы думаете что в ARMах нет шины SPI, более того она в них ничем не отлается от SPI в AVR, разве что настроек побольше smile.gif я уж не говорю о том что тактовая частота поболе, а соответствующие задержки-поменее.
И флешь в ARMe потолще будет, можно легко в мегабайт найти, туда что годно войдет, даже сигнал произволльной формы


Разве я говорил что в ARM нету SPI?
Просто делать генератор на ARM а потом общаться c другим ARM (вы это имели ввиду?) дороговато выходит...

Идея просто заполнять массив в самомо арме без всякого SPI - хороша (т.е. ввсё в одном процессоре)

Идея о том что более слабый(и дешёвый) контроллер будет посылать по SPI выборки в ARM мне нравиться больше, так как потом вместо более дешёвого контроллера можно зацепить АЦП и передовать уже реальные выборки.

С чего вы взяли что я решил буд-то в армах нету SPI?
Alexashka
Цитата(TigerSHARC @ Sep 24 2010, 08:22) *
Разве я говорил что в ARM нету SPI?

Дословно -нет rolleyes.gif но Вы так упорно твердите AVR AVR, что у меня сложилось именно такое мнение)) Извените если не правильно Вас понял
Цитата
Просто делать генератор на ARM а потом общаться c другим ARM (вы это имели ввиду?) дороговато выходит...

Да я это имел ввиду.
Ну почемуже, вот например (разброс цен очень большой, но тенденция думаю Вам будет видна)
Прайс на Atmega128: http://www.deltel.ru/shop/products/search?...p;search_type=1
и прайс на STM32F100RBT6B (по количеству памяти такаяже) http://www.deltel.ru/shop/products/search?...p;search_type=1
32 бита вытесняют 8битники практически во всех областях, это де-факто, хотя многие еще в это не верят
TigerSHARC
я понимаю, про то что голые процы по цене одинаковы... а отладочная плата, а средства отладки...

Я планировал купить AVR в DIP корпусе и своять наскоро платку...))
Alexashka
Цитата(TigerSHARC @ Sep 24 2010, 18:47) *
я понимаю, про то что голые процы по цене одинаковы... а отладочная плата, а средства отладки...

Тоже не проблема, покупаете универсальную макетку в ЧИП-ДИПЕ, распаиваете LQFP процессора, неск.кондеров, разъем для отладки и все. Можно и утюгом сделать при желании.
STM32 сам хочу попробовать smile.gif, незнаю, вроде у него тока JTAG, а в SAM7 например отладку можно вести через UART или USB интерфейс. Бесплатные средства тоже есть -тотже GCC+Eclips
VCO
Однако, как всё усложнили!.. ARM для генерации простейших 16-разрядных кодов! cranky.gif Из пушки по воробьям: maniac.gif ПЛИ!!! 1111493779.gif
А Вам не кажется, что для параллельного пОрта всё резко упрощается? Как смотрите на платку PCI со спартанчиком?
TigerSHARC
Цитата(YIG @ Sep 24 2010, 21:54) *
Однако, как всё усложнили!.. ARM для генерации простейших 16-разрядных кодов! cranky.gif Из пушки по воробьям: maniac.gif ПЛИ!!! 1111493779.gif
А Вам не кажется, что для параллельного пОрта всё резко упрощается? Как смотрите на платку PCI со спартанчиком?


Ну вы не томите... здесь же не чат. )) Что за плата? мне тоже кажется ARM для такой задачки немного крутоват. Хочеться своять чего-то совсем простое...

Опыто вообще говоря мало, и по большому счёту всё это нужно для самообразования...
VCO
Цитата(TigerSHARC @ Sep 24 2010, 21:08) *
Ну вы не томите... здесь же не чат. )) Что за плата? мне тоже кажется ARM для такой задачки немного крутоват. Хочеться своять чего-то совсем простое...

Да и опыта мало с процами.

Да нет, всё много проще и дешевле: сделать такую плату самому на базе имеющейся убитой мультикарты или живой карты с LPT-портом (от прототипа нужна только планка). Вместо DRB-25FB влепить DHR-44F. Если такие платы и есть, то они много дороже обойдутся, да и сроки поставки на подобные вещи велики. Если же Вы хотите что-либо готовое для Вашей задачи - не смею мешать ARM, но это далеко неоптимальное решение!
Alexashka
Цитата(YIG @ Sep 24 2010, 22:35) *
Да нет, всё много проще и дешевле: сделать такую плату самому на базе имеющейся убитой мультикарты или живой карты с LPT-портом (от прототипа нужна только планка). Вместо DRB-25FB влепить DHR-44F. Если такие платы и есть, то они много дороже обойдутся, да и сроки поставки на подобные вещи велики. Если же Вы хотите что-либо готовое для Вашей задачи - не смею мешать ARM, но это далеко неоптимальное решение!

А Спартан для генерации 16битных кодов это вообще ядреная бомба против комара biggrin.gif
Ну, кто на чем привык делать, тот то и считает оптимальным...
2 TigerSHARC: может АРМ и через чур для этого, но почему бы и нет? запас ведь не мешает, зато можно какуюто математику прикрутить, да еще и освоить новый класс контроллеров!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.