Перейти к содержанию
    

сигма-дельта модулятор + МК

Всем доброго дня.

Есть несколько вопросов по работе с сигма-дельта модулятором.

Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации

выходного сигнала Fd = 10кГц. Число разрядов – 16.

1. Во многих примерах видел обработку данных модулятора плиской или DSP. Как оценить необходимую производительность контроллера типа ARM7?

2. Каким интерфейсом контроллера принимать поток данных модулятора?

3. В даташите на модулятор есть пример фильтра-дециматора на VHDL.

Где найти аналогичный пример на С?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО программно обработать такую частоту весьма проблематично. И в периферии МК нет аппаратной возможности, чтобы впрямую принять поток от сигма-дельта модулятора. Хотя, если модулятор тактируется от того же МК или есть возможность тактировать таймер МК этой частотой, то можно попробовать capture-ить поток с выхода модулятора. Вход захвата должен быть настроен на оба фронта. Результат capture от одного фронта следует суммировать, а от противоположного вычитать. Понадобится еще один канал в режиме compare или match или второй таймер, тактируемый опять же той же самой частотой, чтобы отмерять интервал суммирования (измерения). Как-то так по-моему. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какие интерфейсы существуют в DSP.

По поводу интервала суммирования.

Если я правильно понял, Вы предлагаете прямой метод накопления,

который подходит для медленно меняющихся входных сигналов

( дословно из DSP-ПРОЕКТ «НАРОДНЫЙ УЧЕБНИК»).

При таком способе обработки частота моего выхода будет определяться:

Fd = 16.0e+06 / 65536 (Гц)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

Альтернативный путь(ещё не изведан): хочу поток принять на SSP (что-то типа SPI, только можно гнать непрерывным потоком + DMA).

Будет поток байт, биты которых - выход сигма-дельта модулятора.

Самая затратная по ресурсам часть - реализация трёх сумматоров битового потока (если брать Sinc3 фильтр).

Её можно оптимизировать, составив предварительно таблицы инкрементов для всех трёх сумматоров в зависимости от принятого байта. Размер таблицы: 256*3 байт. Теперь можно работать с байтами, а не битами.

Для такого Sinc3 фильтра коэфф. децимации надо будет брать кратным восьми.

Дальше на дифференциаторы и по тексту реализации Sinc3.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно этот модулятор я и рассматриваю.

Подобная идея обработки прокручивалась в голове.

Спасибо sysel за достаточно подробное

описание Вашей едеи.

Подозреваю, что в DSP данная задача реализуется аналогично.

Для себя хочу рассмотреть возможность приема непрерывного потока

по SPI с использованием двух буферов + ДМА. Софт будет

поочередно обрабатывать эти буферы.

ПЛИС + МК как-то накладно. Тогда уже просто использовать одну ПЛИС без МК.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно этот модулятор я и рассматриваю.

...

Для себя хочу рассмотреть возможность приема непрерывного потока

по SPI с использованием двух буферов + ДМА.

 

Получается, что SPI должен работать в режиме MASTER, чтоб генерировать клок для модулятора (проверить, потянит ли SPI тактовую 16 МГц). Судя по даташиту на AD7401 минимальная частота 5 МГц, так что м.б. и исходить из 5 МГц.

Также необходимо убедиться, что SPI не будет между байтами (или словами) пропускать биты (за счет вставки CS=1 между передачами).

На моём МК (LPC1754) к SPI DMA не прикручивается...

 

Через пару дней мне придут образцы AD7401A, так что если будет свободное время - обязательно поиграюсь с ними.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так точно, SPI - мастер. У меня, на SAM9, максимум выходного клока до 50 МГц.

По поводу использования SPI план такой:

- Сигнал CS не дергать вообше. Один раз сформировать

выбор устройства и все.

- Настроить SPI на прием слов или байт и паузы между ними не делать.

- У SAM7,9 есть два указателя на приемные буферы. Вот теперь надо

разобраться можно ли их использовать для организации непрерывного

потока.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока лучше опишу чего не выходит.

Посмотрел текст фильтра на 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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока лучше опишу чего не выходит.

Посмотрел текст фильтра на 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, который может сам всё отфильтровать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За ответы на вопросы спасибо.

Моделировать фильтр для себя я тоже планирую,

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

АЧХ фильтра будет зависеть от Fsample и Fd.

В даташите на AD7705 приведено описание sinc3 фильтра.

Там есть картинка АЧХ.

Софт для интеграторов требует шорошего быстродействия

и я уже параллельно смотрю на CPLD от Atmel.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Софт для интеграторов требует шорошего быстродействия

и я уже параллельно смотрю на CPLD от Atmel.

Лучше на Atmel не смотрите, смотрите что-нибудь от Altera или Xilinx. У них средства разработки удобнее.

Я бы посоветовал MAX II (Altera) младший, хотя можно поискать что-то более бюджетное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть несколько вопросов по работе с сигма-дельта модулятором.

Исходно имеем частоту модулятора Fsampl = 16МГц и частоту дискретизации

выходного сигнала Fd = 10кГц. Число разрядов – 16.

3. В даташите на модулятор есть пример фильтра-дециматора на VHDL.

 

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

Типа ресурсов много сожрёт или некачественно будет?

 

А то я в этих сигма дельта ничего не понимаю, особенно когда они имеют порядок.

Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Типа ресурсов много сожрёт или некачественно будет?

Как раз это и надо сделать. Вопрос в реализации этого фильтра и дециматора. Суть в том, чтобы с поток с большой частотой семплирования (16MГц) максимально простым фильтром и дециматором привести к меньшей частоте семплирования, а потом на этой частоте семплирования строить фильтр со срезом 5кГц и ещё разок проводить децимацию до Fs = 10 кГц.

Тем более, что в одном из имеющихся у меня - количество единиц превышает количество нулей...

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

 

Хорошее подспорье для понимания - MATLAB + Delta Sigma Toolbox

Там есть документация и "How it works" на одном листке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скажите, а если этот поток с модулятора прогнать через НЧ фильтр с частотой среза 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-дециматор не составляет особых проблем

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...