skyvmicro 0 19 октября, 2010 Опубликовано 19 октября, 2010 · Жалоба Всем доброго дня. Есть несколько вопросов по работе с сигма-дельта модулятором. Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации выходного сигнала Fd = 10кГц. Число разрядов – 16. 1. Во многих примерах видел обработку данных модулятора плиской или DSP. Как оценить необходимую производительность контроллера типа ARM7? 2. Каким интерфейсом контроллера принимать поток данных модулятора? 3. В даташите на модулятор есть пример фильтра-дециматора на VHDL. Где найти аналогичный пример на С? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 19 октября, 2010 Опубликовано 19 октября, 2010 · Жалоба ИМХО программно обработать такую частоту весьма проблематично. И в периферии МК нет аппаратной возможности, чтобы впрямую принять поток от сигма-дельта модулятора. Хотя, если модулятор тактируется от того же МК или есть возможность тактировать таймер МК этой частотой, то можно попробовать capture-ить поток с выхода модулятора. Вход захвата должен быть настроен на оба фронта. Результат capture от одного фронта следует суммировать, а от противоположного вычитать. Понадобится еще один канал в режиме compare или match или второй таймер, тактируемый опять же той же самой частотой, чтобы отмерять интервал суммирования (измерения). Как-то так по-моему. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 19 октября, 2010 Опубликовано 19 октября, 2010 · Жалоба А какие интерфейсы существуют в DSP. По поводу интервала суммирования. Если я правильно понял, Вы предлагаете прямой метод накопления, который подходит для медленно меняющихся входных сигналов ( дословно из DSP-ПРОЕКТ «НАРОДНЫЙ УЧЕБНИК»). При таком способе обработки частота моего выхода будет определяться: Fd = 16.0e+06 / 65536 (Гц) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 19 октября, 2010 Опубликовано 19 октября, 2010 · Жалоба У меня тоже есть мысль приладить сигма-дельта модулятор AD7401A(похожая штука есть у TI) к микроконтроллеру LPC17xx с ядром Cortex-M3. У AD740x кроме потока данных с модулятора есть ещё и клок, так что таймер с Capture вовсе необязательно. Гуры рекомендуют для первичной децимации делать цифровой Sinc3 фильтр. В даташите на AD7401 есть код на верилоге (3 сумматора -> дециматор -> 3 дифференциатора), поток с него передаётся на DSP для дальнейшей обработки. Самый прямй путь - поставить CPLDшку, которая будет этот Sinc3 делать, потом поток с неё направить на МК или DSP. Альтернативный путь(ещё не изведан): хочу поток принять на SSP (что-то типа SPI, только можно гнать непрерывным потоком + DMA). Будет поток байт, биты которых - выход сигма-дельта модулятора. Самая затратная по ресурсам часть - реализация трёх сумматоров битового потока (если брать Sinc3 фильтр). Её можно оптимизировать, составив предварительно таблицы инкрементов для всех трёх сумматоров в зависимости от принятого байта. Размер таблицы: 256*3 байт. Теперь можно работать с байтами, а не битами. Для такого Sinc3 фильтра коэфф. децимации надо будет брать кратным восьми. Дальше на дифференциаторы и по тексту реализации Sinc3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Именно этот модулятор я и рассматриваю. Подобная идея обработки прокручивалась в голове. Спасибо sysel за достаточно подробное описание Вашей едеи. Подозреваю, что в DSP данная задача реализуется аналогично. Для себя хочу рассмотреть возможность приема непрерывного потока по SPI с использованием двух буферов + ДМА. Софт будет поочередно обрабатывать эти буферы. ПЛИС + МК как-то накладно. Тогда уже просто использовать одну ПЛИС без МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Именно этот модулятор я и рассматриваю. ... Для себя хочу рассмотреть возможность приема непрерывного потока по SPI с использованием двух буферов + ДМА. Получается, что SPI должен работать в режиме MASTER, чтоб генерировать клок для модулятора (проверить, потянит ли SPI тактовую 16 МГц). Судя по даташиту на AD7401 минимальная частота 5 МГц, так что м.б. и исходить из 5 МГц. Также необходимо убедиться, что SPI не будет между байтами (или словами) пропускать биты (за счет вставки CS=1 между передачами). На моём МК (LPC1754) к SPI DMA не прикручивается... Через пару дней мне придут образцы AD7401A, так что если будет свободное время - обязательно поиграюсь с ними. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Так точно, SPI - мастер. У меня, на SAM9, максимум выходного клока до 50 МГц. По поводу использования SPI план такой: - Сигнал CS не дергать вообше. Один раз сформировать выбор устройства и все. - Настроить SPI на прием слов или байт и паузы между ними не делать. - У SAM7,9 есть два указателя на приемные буферы. Вот теперь надо разобраться можно ли их использовать для организации непрерывного потока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба [рассказ] Отпишите, пожалуйста, что у Вас выйдет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Пока лучше опишу чего не выходит. Посмотрел текст фильтра на VHDL и возникают вопросы. 1. Сигнал reset нужен только для начальной инициализации и в процессе работы он не нужен? 2. Не пойму комментарий. if(mdata1==0) ip_data1 <= 0; /* change from a 0 to a -1 for 2's comp */ else ip_data1 <= 1; Если mdata1==0, то всегда ip_data1 = 0, а где и когда получаем -1? 3.Долее, не пойму как могут работать интеграторы если ip_data1 всегда 0 или 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Пока лучше опишу чего не выходит. Посмотрел текст фильтра на VHDL и возникают вопросы. 1. Сигнал reset нужен только для начальной инициализации и в процессе работы он не нужен? Замечание: там не VHDL код, а Verilog. VHDL приводиться в документации на TIшную м/сх AMC1203. Сигнал "reset" только для начальной инициализации. 2. Не пойму комментарий. if(mdata1==0) ip_data1 <= 0; /* change from a 0 to a -1 for 2's comp */ else ip_data1 <= 1; Если mdata1==0, то всегда ip_data1 = 0, а где и когда получаем -1? В интернетах об этот комментарий много копий сломано на буржуйских форумах. Я эту штуковину моделировал в Delphi. Брал "0" и "1" как в тексте. 3.Долее, не пойму как могут работать интеграторы если ip_data1 всегда 0 или 1. К Acc1 либо прибавляется единичка, либо нет. В схеме с интеграторами нас интересует только изменение Acc3 за промежуток между децимацией. Ну да, случаются переполнения, ну и аллах с ними, нас же интересует только приращение Acc3 и всё. А при должной разрядности сумматоров (чтоб между моментами выборки дециматора не произошло 2 или более переполнения Acc3) одно переполнение ни как не скажется на вычислении приращения. При моделировании я использовал беззнаковые числа с фиксированной точкой. На вход подавал засигмодельтированную синусоиду, на выходе получал синусоиду на фоне постоянной составляющей в полшкалы. Мне пока не совсем понятны частотные характеристики этого чуда. Есть такой чип AMC1210, который может сам всё отфильтровать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба За ответы на вопросы спасибо. Моделировать фильтр для себя я тоже планирую, но когда все более менее определится. АЧХ фильтра будет зависеть от Fsample и Fd. В даташите на AD7705 приведено описание sinc3 фильтра. Там есть картинка АЧХ. Софт для интеграторов требует шорошего быстродействия и я уже параллельно смотрю на CPLD от Atmel. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Софт для интеграторов требует шорошего быстродействия и я уже параллельно смотрю на CPLD от Atmel. Лучше на Atmel не смотрите, смотрите что-нибудь от Altera или Xilinx. У них средства разработки удобнее. Я бы посоветовал MAX II (Altera) младший, хотя можно поискать что-то более бюджетное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Есть несколько вопросов по работе с сигма-дельта модулятором. Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации выходного сигнала Fd = 10кГц. Число разрядов – 16. 3. В даташите на модулятор есть пример фильтра-дециматора на VHDL. Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 5кГц и взять каждый 16000 отсчёт, то чем это плохо? Типа ресурсов много сожрёт или некачественно будет? А то я в этих сигма дельта ничего не понимаю, особенно когда они имеют порядок. Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sysel 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 5кГц и взять каждый 16000 отсчёт, то чем это плохо? Типа ресурсов много сожрёт или некачественно будет? Как раз это и надо сделать. Вопрос в реализации этого фильтра и дециматора. Суть в том, чтобы с поток с большой частотой семплирования (16MГц) максимально простым фильтром и дециматором привести к меньшей частоте семплирования, а потом на этой частоте семплирования строить фильтр со срезом 5кГц и ещё разок проводить децимацию до Fs = 10 кГц. Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей... Значит по входу у Вас сигнал больше чем полшкалы. Хорошее подспорье для понимания - MATLAB + Delta Sigma Toolbox Там есть документация и "How it works" на одном листке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hobgoblin 0 20 октября, 2010 Опубликовано 20 октября, 2010 · Жалоба Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 5кГц и взять каждый 16000 отсчёт, то чем это плохо? Типа ресурсов много сожрёт или некачественно будет? При очень большом соотношении частоты дискретизации к полосе использовать простые децимирующие FIR фильтры неэкономично по ресурсам. По этой причине в сигма-дельта модуляторах повсеместно используют CIC фильтры или комбинацию CIC и FIR (для исправления завала АЧХ CIC). В даташите на модулятор есть пример фильтра-дециматора на VHDL. Где найти аналогичный пример на С? http://www.analog.com/static/imported-file.../EE-350rev1.pdf http://www.analog.com/static/imported-file...es/EE350v01.zip но лучше, ИМХО, простую плисину прикрутить, благо написать CIC-дециматор не составляет особых проблем Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться