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

 
 
> сигма-дельта модулятор + МК
skyv
сообщение Oct 19 2010, 11:57
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Всем доброго дня.
Есть несколько вопросов по работе с сигма-дельта модулятором.
Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации
выходного сигнала Fd = 10кГц. Число разрядов – 16.
1. Во многих примерах видел обработку данных модулятора плиской или DSP. Как оценить необходимую производительность контроллера типа ARM7?
2. Каким интерфейсом контроллера принимать поток данных модулятора?
3. В даташите на модулятор есть пример фильтра-дециматора на VHDL.
Где найти аналогичный пример на С?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 27)
rezident
сообщение Oct 19 2010, 12:25
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



ИМХО программно обработать такую частоту весьма проблематично. И в периферии МК нет аппаратной возможности, чтобы впрямую принять поток от сигма-дельта модулятора. Хотя, если модулятор тактируется от того же МК или есть возможность тактировать таймер МК этой частотой, то можно попробовать capture-ить поток с выхода модулятора. Вход захвата должен быть настроен на оба фронта. Результат capture от одного фронта следует суммировать, а от противоположного вычитать. Понадобится еще один канал в режиме compare или match или второй таймер, тактируемый опять же той же самой частотой, чтобы отмерять интервал суммирования (измерения). Как-то так по-моему. laughing.gif
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 19 2010, 12:54
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



А какие интерфейсы существуют в DSP.
По поводу интервала суммирования.
Если я правильно понял, Вы предлагаете прямой метод накопления,
который подходит для медленно меняющихся входных сигналов
( дословно из DSP-ПРОЕКТ «НАРОДНЫЙ УЧЕБНИК»).
При таком способе обработки частота моего выхода будет определяться:
Fd = 16.0e+06 / 65536 (Гц)
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 19 2010, 15:53
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



У меня тоже есть мысль приладить сигма-дельта модулятор AD7401A(похожая штука есть у TI) к микроконтроллеру LPC17xx с ядром Cortex-M3.

У AD740x кроме потока данных с модулятора есть ещё и клок, так что таймер с Capture вовсе необязательно.

Гуры рекомендуют для первичной децимации делать цифровой Sinc3 фильтр. В даташите на AD7401 есть код на верилоге (3 сумматора -> дециматор -> 3 дифференциатора), поток с него передаётся на DSP для дальнейшей обработки.

Самый прямй путь - поставить CPLDшку, которая будет этот Sinc3 делать, потом поток с неё направить на МК или DSP.

Альтернативный путь(ещё не изведан): хочу поток принять на SSP (что-то типа SPI, только можно гнать непрерывным потоком + DMA).
Будет поток байт, биты которых - выход сигма-дельта модулятора.
Самая затратная по ресурсам часть - реализация трёх сумматоров битового потока (если брать Sinc3 фильтр).
Её можно оптимизировать, составив предварительно таблицы инкрементов для всех трёх сумматоров в зависимости от принятого байта. Размер таблицы: 256*3 байт. Теперь можно работать с байтами, а не битами.
Для такого Sinc3 фильтра коэфф. децимации надо будет брать кратным восьми.
Дальше на дифференциаторы и по тексту реализации Sinc3.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 07:33
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Именно этот модулятор я и рассматриваю.
Подобная идея обработки прокручивалась в голове.
Спасибо sysel за достаточно подробное
описание Вашей едеи.
Подозреваю, что в DSP данная задача реализуется аналогично.
Для себя хочу рассмотреть возможность приема непрерывного потока
по SPI с использованием двух буферов + ДМА. Софт будет
поочередно обрабатывать эти буферы.
ПЛИС + МК как-то накладно. Тогда уже просто использовать одну ПЛИС без МК.
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 20 2010, 08:56
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 20 2010, 11:33) *
Именно этот модулятор я и рассматриваю.
...
Для себя хочу рассмотреть возможность приема непрерывного потока
по SPI с использованием двух буферов + ДМА.


Получается, что SPI должен работать в режиме MASTER, чтоб генерировать клок для модулятора (проверить, потянит ли SPI тактовую 16 МГц). Судя по даташиту на AD7401 минимальная частота 5 МГц, так что м.б. и исходить из 5 МГц.
Также необходимо убедиться, что SPI не будет между байтами (или словами) пропускать биты (за счет вставки CS=1 между передачами).
На моём МК (LPC1754) к SPI DMA не прикручивается...

Через пару дней мне придут образцы AD7401A, так что если будет свободное время - обязательно поиграюсь с ними.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 09:47
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Так точно, SPI - мастер. У меня, на SAM9, максимум выходного клока до 50 МГц.
По поводу использования SPI план такой:
- Сигнал CS не дергать вообше. Один раз сформировать
выбор устройства и все.
- Настроить SPI на прием слов или байт и паузы между ними не делать.
- У SAM7,9 есть два указателя на приемные буферы. Вот теперь надо
разобраться можно ли их использовать для организации непрерывного
потока.
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 20 2010, 10:04
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 20 2010, 13:47) *
[рассказ]


Отпишите, пожалуйста, что у Вас выйдет
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 10:34
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Пока лучше опишу чего не выходит.
Посмотрел текст фильтра на 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.
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 20 2010, 11:19
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 20 2010, 14:34) *
Пока лучше опишу чего не выходит.
Посмотрел текст фильтра на VHDL и возникают вопросы.
1. Сигнал reset нужен только для начальной инициализации и в
процессе работы он не нужен?

Замечание: там не VHDL код, а Verilog.
VHDL приводиться в документации на TIшную м/сх AMC1203.
Сигнал "reset" только для начальной инициализации.
Цитата(skyv @ Oct 20 2010, 14:34) *
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" как в тексте.
Цитата(skyv @ Oct 20 2010, 14:34) *
3.Долее, не пойму как могут работать интеграторы если ip_data1 всегда
0 или 1.

К Acc1 либо прибавляется единичка, либо нет.
В схеме с интеграторами нас интересует только изменение Acc3 за промежуток между децимацией.
Ну да, случаются переполнения, ну и аллах с ними, нас же интересует только приращение Acc3 и всё.
А при должной разрядности сумматоров (чтоб между моментами выборки дециматора не произошло 2 или более переполнения Acc3) одно переполнение ни как не скажется на вычислении приращения.

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

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

Есть такой чип AMC1210, который может сам всё отфильтровать.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 11:36
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



За ответы на вопросы спасибо.
Моделировать фильтр для себя я тоже планирую,
но когда все более менее определится.
АЧХ фильтра будет зависеть от Fsample и Fd.
В даташите на AD7705 приведено описание sinc3 фильтра.
Там есть картинка АЧХ.
Софт для интеграторов требует шорошего быстродействия
и я уже параллельно смотрю на CPLD от Atmel.

Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 20 2010, 11:46
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 20 2010, 15:36) *
Софт для интеграторов требует шорошего быстродействия
и я уже параллельно смотрю на CPLD от Atmel.

Лучше на Atmel не смотрите, смотрите что-нибудь от Altera или Xilinx. У них средства разработки удобнее.
Я бы посоветовал MAX II (Altera) младший, хотя можно поискать что-то более бюджетное.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Oct 20 2010, 12:02
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(skyv @ Oct 19 2010, 15:57) *
Есть несколько вопросов по работе с сигма-дельта модулятором.
Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации
выходного сигнала Fd = 10кГц. Число разрядов – 16.
3. В даташите на модулятор есть пример фильтра-дециматора на VHDL.


Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 5кГц и взять каждый 16000 отсчёт, то чем это плохо?
Типа ресурсов много сожрёт или некачественно будет?

А то я в этих сигма дельта ничего не понимаю, особенно когда они имеют порядок.
Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей...
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 20 2010, 12:17
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(_4afc_ @ Oct 20 2010, 16:02) *
Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 5кГц и взять каждый 16000 отсчёт, то чем это плохо?
Типа ресурсов много сожрёт или некачественно будет?

Как раз это и надо сделать. Вопрос в реализации этого фильтра и дециматора. Суть в том, чтобы с поток с большой частотой семплирования (16MГц) максимально простым фильтром и дециматором привести к меньшей частоте семплирования, а потом на этой частоте семплирования строить фильтр со срезом 5кГц и ещё разок проводить децимацию до Fs = 10 кГц.
Цитата(_4afc_ @ Oct 20 2010, 16:02) *
Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей...

Значит по входу у Вас сигнал больше чем полшкалы.

Хорошее подспорье для понимания - MATLAB + Delta Sigma Toolbox
Там есть документация и "How it works" на одном листке.
Go to the top of the page
 
+Quote Post
hobgoblin
сообщение Oct 20 2010, 12:25
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881



Цитата
Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 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-дециматор не составляет особых проблем
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 12:35
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(hobgoblin @ Oct 20 2010, 16:25) *
но лучше, ИМХО, простую плисину прикрутить, благо написать CIC-дециматор не составляет особых проблем


Реализация на ПЛИС сомнений не вызывает, но хотелось бы
оценить требования к МК для этой задачи.
Go to the top of the page
 
+Quote Post
hobgoblin
сообщение Oct 20 2010, 12:54
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881



Цитата(skyv @ Oct 20 2010, 16:35) *
Реализация на ПЛИС сомнений не вызывает, но хотелось бы
оценить требования к МК для этой задачи.

В принципе, в той статье, на которую я ссылку дал, есть описание расчета ресурсов. Но во-первых, как здесь уже говорили, есть проблема с вводом данных в МК на такой частоте (в статье используется последовательный порт блэкфина, но у него частота тактовая может быть довольно высокая, не уверен что в ARMе есть что-то подобное). Во-вторых, делать CIC, который напрямую будет, децимировать в 16000 раз, нежелательно. а) Разрядность на выходе будет большой: ceil(K*log2(M)). K -порядок фильтра, M - коэффициент децимации. Например, для CIC третьего порядка, арифметика должна быть для чисел с разрядностью больше 32 бит (3*15). б) у Вас все равно останется много внеполосного шума, который по любому надо будет отфильтровать, например halfband фильтром.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 20 2010, 13:27
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



По поводу ресурсов увидел, что использован BF533 с частотой 594 MHz.
SAM9 у меня по SPI работает на 25 MHz без проблем, но под другой задачей.
А для этой похоже ему не дотянуть.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 21 2010, 07:58
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(sysel @ Oct 20 2010, 14:04) *
Отпишите, пожалуйста, что у Вас выйдет


Решил посмотреть в симуляторе какое число тактов затратит SAM9
на вычисление трех интеграторов sinc3 фильтра. Ядро ARM9 работает на 200 МГц,
т. е. 1 такт = 5нс.
Условия для себя принял следующие:
- Частота модулятора = 20 МГц. Частота формирования выходных отсчетов
примерно 10 кГц. Из этих условий я нахожу необходимый размер буфера = 1984 бит
или 62 32-х разрядных слова. Время заполнения буфера составит 1984 * 0.05 мкс = 99.2 мкс.
- В программе я обрабатываю весь буфер = 1984 бит за 10305 тактов, а это соответствует
времени 10305 * 5нс = 51.5мкс. Программный код на обработку 1-го бита такой:
Integr_3 += Integr_2; - 1 такт
Integr_2 += Integr_1; - 1 такт
Integr_1 += ( input >> .... ) & 0x00000001; - 4 такта
Когда использовал цикл по битам, то получил 18672 такта (99 мкс). Пришлось
его развернуть.
Итого из 99.2 мкс потратили 51.5 мкс. Запас в 50 мкс обнадеживает.





Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 25 2010, 09:25
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Мой результат, используя таблицу инкрементов

Фильтр CIC (4 интегратора -> децимация в 200 раз -> 4 дифференциатора) -> Фильтр FIR (компенсация CIC + НЧ для дальнейшей децимации) (36 коеф. 32 бита) с децимацией в 5 раз.
Итого децимация в 1000 раз.

Алгоритмы реализованы на С, компилятор из IAR, оптимизация по скорости.

Процессор LPC1754 (Cortex-M3) на частоте 100 МГц.

На вычисление одного выходного отсчета сигнала (CIC+FIR) требуется 53 мкс.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 25 2010, 11:14
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Цитата(sysel @ Oct 25 2010, 13:25) *
...
Процессор LPC1754 (Cortex-M3) на частоте 100 МГц.

На вычисление одного выходного отсчета сигнала (CIC+FIR) требуется 53 мкс.

Вот интересно как 100 МГц МК LPC1754 вычисляет быстрее, чем 200 МГц SAM9?
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 25 2010, 11:23
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 25 2010, 15:14) *
Вот интересно как 100 МГц МК LPC1754 вычисляет быстрее, чем 200 МГц SAM9?

Я использую таблицу инкрементов и оперирую в алгоритме байтами, а не битами. Что само по себе быстрее.
Как допишу алгоритм полностью, вышлю Вам реализацию.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 25 2010, 11:38
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Тогда еще один вопрос. Просто для себя я его пока не рассматривал детально.
Данный АЦП предназначен для непосредственного подключения к шунтам с целью
измерения тока. У Вас АЦП также используется или нет? Я собираюсь его использовать для
измерения напряжений +- 10В.
Go to the top of the page
 
+Quote Post
sysel
сообщение Oct 25 2010, 11:43
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(skyv @ Oct 25 2010, 15:38) *
Тогда еще один вопрос. Просто для себя я его пока не рассматривал детально.
Данный АЦП предназначен для непосредственного подключения к шунтам с целью
измерения тока. У Вас АЦП также используется или нет? Я собираюсь его использовать для
измерения напряжений +- 10В.


Я тоже мерю ток с шунта.
По ТЗ Rшунт = 1 Ом и он находиться внутри девайса, так что я его могу разбить на несколько последовательно включенных резисторов.

Для измерения напряжения я эту схему не рассматривал. Хотя что-т подобное видел в даташите на TI.
Скорее всего Вам нужно будет перед модулятором ставить буфер на операционнике.
Go to the top of the page
 
+Quote Post
skyv
сообщение Oct 25 2010, 12:09
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



С вашей схемой понятно. В моем случае надо будет оценить
итоговое разрешение после приведения входного сигнала с помощью ОУ.
У TI как раз видел использование различных АЦП в схеме привода.
Go to the top of the page
 
+Quote Post
Spider
сообщение May 20 2012, 13:11
Сообщение #26


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Ребят, можно разворошить старое? Чем всё кончилось? sm.gif
Нет ли у кого PDM -> PCM ?
Go to the top of the page
 
+Quote Post
sysel
сообщение May 25 2012, 11:00
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(Alexey Belyaev @ May 20 2012, 17:11) *
Ребят, можно разворошить старое? Чем всё кончилось? sm.gif

Кончилось всё запуском этого решения в серию. Довольно удачно получилось:
LPC1754, 96 Мгц.
AD7401A подключен на SSP порт.
клок на модулятор 6МГц.

Поток обработки:
Вход(6 MSPS, 1-bit) -> CIC (3 секции, децимация 80) -> CIC (5 секций, децимация 5) -> FIR (порядок = 54, разрядность коэф. 32 бита, децимация 5) -> Выход (3 KSPS, 24 bit)
т.е. произвожу децимацию в 2000 раз.

Загрузка процессора = 22 % (оценивал осциллографом)
т.е. на обработку одного бита с модулятора затрачивается 3.5 такта (с учетом всех трёх секций фильтра).

Цитата(Alexey Belyaev @ May 20 2012, 17:11) *
Нет ли у кого PDM -> PCM ?

У меня нет.
Go to the top of the page
 
+Quote Post
dumb
сообщение Dec 14 2012, 11:55
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 10-10-08
Пользователь №: 40 839



Цитата(sysel @ May 25 2012, 14:00) *
Кончилось всё запуском этого решения в серию. Довольно удачно получилось:
LPC1754, 96 Мгц.
AD7401A подключен на SSP порт.
клок на модулятор 6МГц.

Поток обработки:
Вход(6 MSPS, 1-bit) -> CIC (3 секции, децимация 80) -> CIC (5 секций, децимация 5) -> FIR (порядок = 54, разрядность коэф. 32 бита, децимация 5) -> Выход (3 KSPS, 24 bit)
т.е. произвожу децимацию в 2000 раз.


Тоже разворошу былое sm.gif
И сколько получилось реальное разрешение из этих 24 бит?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 16:34
Рейтинг@Mail.ru


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