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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> сигма-дельта модулятор + МК
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
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

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 18:12
Рейтинг@Mail.ru


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