Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: "Хрипы" при оцифровке сигнала
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Вопросы аналоговой техники
KolyanV
Здравствуйте!

Суть проблемы следующая. Разрабатываю устройство для многоканальной оцифровки сигналов звуковых частот. В качестве АЦП использую (пока для эксперементов) CS5368 - 8-ми канальный звуковой АЦП фирмы Cirrus Logic. Приемником оцифрованных данных является процессор AT91SAM7X256 (на отладочной плате AS-SAMX-256). Интерфейс передачи данных TDM (использую SSC контроллер вышеупомянутого контроллера). АЦП распаян на самодельной платке, обвязка АЦП согласно даташита. На вход подаю звуковой тракт звуковоспроизводящего устройства. Входной буфер аналогового сигнала (преобразование сигнала в диференциальный) выполнен согласно даташита на макетной плате. В контроллере находится программа, которая передает полученные от АЦП данные в компьютер. На стороне компьютера звук может сохраняться в WAV файл или воспроизводиться в реальном времени.
Так вот, оцифрованный звук - "хрипит". Сначала грешил на аналоговый буфер (преобразовывающий сигнал в диференциальный), так как собран на макетке с "первым попавшимся" ОУ и с длинноногими резисторами/кондерами. Но проверка показала, что звук на выходе аналогового буфера "правильный". Проверял путем подключения к Line-In входу звуковой платы - звук чистый, без хрипов и прочих искажений.

А теперь, конкретные примеры:

1. На вход в АЦП подается синусоида с частотой 500 Гц. После оцифровки получаю следующую картину:
Нажмите для просмотра прикрепленного файла

2. Тот же сигнал только с другим масштабом отображения:
Нажмите для просмотра прикрепленного файла

3. Еще пример
Нажмите для просмотра прикрепленного файла

Далее фрагменты сигнала частотой 500 Гц с разной амплитудой

4. 500 Гц с "малой" амплитудой
Нажмите для просмотра прикрепленного файла

5. 500 Гц с чуть большей амплитудой
Нажмите для просмотра прикрепленного файла

6. 500 Гц - еще больше
Нажмите для просмотра прикрепленного файла

7. Фрагменты 4, 5, 6 "вырваны" из сигнала, который после оцифровки имеет такую огибающую:
Нажмите для просмотра прикрепленного файла

8. При подаче на вход АЦП этот сигнал (500 Гц) имеет следующую огибающую:
Нажмите для просмотра прикрепленного файла

В общем, - уже целую неделю бъюсь над проблемой, не могу понять в чем причина.
Направьте на путь истинный, кто знает !
aaarrr
Цитата(KolyanV @ Sep 20 2008, 22:37) *
АЦП распаян на самодельной платке

А к основной он как подключен? Очень похоже на проблемы с интерфейсом.
KolyanV
Цитата(aaarrr @ Sep 20 2008, 21:43) *
А к основной он как подключен? Очень похоже на проблемы с интерфейсом.

Подключен IDE шлейфом длиною 18 см. Наверно проблема в длине кабеля ?
Рабочая частота шины 6 Мгц. Я вот только не могу понять, какая связь с амплитудой входного аналогового сигнала. При отсутствии оного, на выходе АЦП едва слышные шума.
aaarrr
Цитата(KolyanV @ Sep 20 2008, 22:49) *
Подключен IDE шлейфом длиною 18 см. Наверно проблема в длине кабеля ?

Земли между сигналами пропущены?

Цитата(KolyanV @ Sep 20 2008, 22:49) *
Я вот только не могу понять, какая связь с амплитудой входного аналогового сигнала. При отсутствии оного, на выходе АЦП едва слышные шума.

Нет единичек в старших битах, а на младших ошибки не заметны.
KolyanV
Цитата(aaarrr @ Sep 20 2008, 22:02) *
Земли между сигналами пропущены?

Да, специально только-что проверил - земли между платками соеденены.

Провел еще один эксперемент: взял 2 мобильника с одного набрал другой и колдавал ими вокруг шлейфа. Ситуация не изменилась (хуже не стало).

Цитата(aaarrr @ Sep 20 2008, 22:02) *
Нет единичек в старших битах, а на младших ошибки не заметны.

Я так понял, стоит попробовать укоротить шлейф. Пожалуй попробую.
aaarrr
Цитата(KolyanV @ Sep 20 2008, 23:28) *
Да, специально только-что проверил - земли между платками соеденены.

Не между платками, а между сигнальными проводами в шлейфе. То есть должно быть GND-CLK-GND-SO-GND- и т.д.
orthodox
Перепутаны старшие и младшие разряды?
aaarrr
Цитата(orthodox @ Sep 20 2008, 23:50) *
Перепутаны старшие и младшие разряды?

07.gif В последовательном интерфейсе?
orthodox
Цитата(aaarrr @ Sep 20 2008, 22:06) *
07.gif В последовательном интерфейсе?

Извините, я не знал, что там кроме интерфейса - ничего нету больше...
aaarrr
Цитата(orthodox @ Sep 21 2008, 00:09) *
Извините, я не знал, что там кроме интерфейса - ничего нету больше...

Да практически и нет. Иначе надо специально вредительством заниматься - биты в словах вручную переставлять.
orthodox
Цитата(aaarrr @ Sep 20 2008, 22:14) *
Да практически и нет. Иначе надо специально вредительством заниматься - биты в словах вручную переставлять.
Ну, тогда и проблемы нет. ...Все нормально smile.gif
KolyanV
Цитата(aaarrr @ Sep 20 2008, 22:32) *
Не между платками, а между сигнальными проводами в шлейфе. То есть должно быть GND-CLK-GND-SO-GND- и т.д.


Спасибо за совет!

Сделал следующим образом:
Вместо IDE шлейфа взял 3 витых пары. По каждой паре пускаю сигнальный - землю.
Т.е, 1-я: Data - GND, 2-я: CLK - GND, 3-я FCK - GND. Кроме того укоротил - каждая витая пара по 12 см.

... Но тем не менее лучше не стало, хрипит как раньше ...

Цитата(orthodox @ Sep 20 2008, 22:50) *
Перепутаны старшие и младшие разряды?

Ничего не перепутано.

Цитата(orthodox @ Sep 21 2008, 00:54) *
Ну, тогда и проблемы нет. ...Все нормально smile.gif

Вот как раз проблема есть, она описана в стартовом топике.
Евгений Германович
Попробуйте,если возможно,подать постоянку разной амплитуды.те несколько измерений с разным уровнем.вы про питание ничего не сказали.
Сергей Борщ
Цитата(KolyanV @ Sep 21 2008, 11:54) *
Вот как раз проблема есть, она описана в стартовом топике.
Может аппаратная часть не при чем, а проблема в программе? Если попробовать вместо результата чтения АЦП подставлять программе константу или табличнй синус - каким будет выход?
KolyanV
Цитата(Сергей Борщ @ Sep 21 2008, 12:46) *
Может аппаратная часть не при чем, а проблема в программе? Если попробовать вместо результата чтения АЦП подставлять программе константу или табличнй синус - каким будет выход?

Подставлять табличное значение синуса уже пробовал. Работает отлично, без помех.


Цитата(Евгений Германович @ Sep 21 2008, 12:43) *
Попробуйте,если возможно,подать постоянку разной амплитуды.те несколько измерений с разным уровнем.вы про питание ничего не сказали.

Дело в том, что CS5368 - это сигма дельта АЦП заточенный для аудиоаппаратуры. В него включен фильтр отсекающий постоянную составляющую. Правда этот фильтр управляемый, но тем не менее, мне кажется, постоянка не будет измеряться адекватно. Хотя я попробую, ведь хуже от того не станет.

По поводу питания:
у CS5368 5 видов питания:
VA - аналоговый VA=5В (при меньшем, согласно даташита не работает)
VX - пистание осцилятора VX=5В
VD - цифровое питание VD=3.3В
VLS - питание последовательного интерфейса VLS=3.3В
VLC - питание управляющейо логики (SPI интерфейс и логика управления микросхемой) VLC=3.3В
Питание 3.3 В беру с отладочной платы. При измерении осцилографом - измеряемый уровень напряжения (под нагрузкой) адекватный.
Питание 5 В - с отдельного блока питания. Уровень напряжения под нагрузкой адекватный.
Земли всех питаний соеденены, земли АЦП и отладочной платы соеденены.
orthodox
Интересно, смог бы кто-то получить идентичную показанной форму сигнала с "хрипами", иным способом, чем поменять разряды при обработке сигнала, полученного с АЦП ?
Давайте делать ставки... Или просто угадывать, какой с каким разрядом обменялся.
Мое предположение: старший разряд с младшим. За счет сдвига в цикле обработки . С АЦП и интерфейса сигнал правильный.

Кто точнее?
KolyanV
Цитата(orthodox @ Sep 21 2008, 13:16) *
Интересно, смог бы кто-то получить идентичную показанной форму сигнала с "хрипами", иным способом, чем поменять разряды при обработке сигнала, полученного с АЦП ?
Давайте делать ставки... Или просто угадывать, какой с каким разрядом обменялся.
Мое предположение: старший разряд с младшим. За счет сдвига в цикле обработки . С АЦП и интерфейса сигнал правильный.

Кто точнее?

Т.е Вы имеете в виду, что данные "к ногам" контроллера попадают правильно, но он не всегда "точно ловит" старт фрейма ? Что ж, идея интересная, требует проверки.
orthodox
Либо ашипка в тексте программы мк, либо мк не так отрабатывает программу как задумано (глюк или особенность мк), либо программа не соответствует формату приходящих данных.

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

Поскольку эффект немножко похож также на сбои во внутреннем перекодировщике АЦП(ооочень маловероятно, но все же...),для этого тестом может быть пропускание через ЦАП с аналогичным входным форматом...
Stanislav_S
попробуйте подать на вход АЦП прямоугольник, а вторым лучом скопа анализировать данные на интерфейсе ( на данных ) сразу должно быть видно, глючит АЦП или проблема дальше.
_4afc_
Цитата(KolyanV @ Sep 21 2008, 14:08) *
По поводу питания:
Земли всех питаний соеденены, земли АЦП и отладочной платы соеденены.

Я обычно между цифровой и аналоговой землёй фильтр-бусинку ставлю.

А вы данные сдвигаете на бит влево при приёме? Там какойто кривой TDM у цируса.
Закоротите\отключите другие каналы - чтоб там нули шли.
Проверьте что у вас пересекает линии данных на платах, была похожая проблема с SSC, оказалось ниже шёл USB у которого разъём был плохо припаян и "искрил".
Евгений Германович
Цитата(KolyanV @ Sep 21 2008, 13:08) *
Подставлять табличное значение синуса уже пробовал. Работает отлично, без помех.
Дело в том, что CS5368 - это сигма дельта АЦП заточенный для аудиоаппаратуры. В него включен фильтр отсекающий постоянную составляющую. Правда этот фильтр управляемый, но тем не менее, мне кажется, постоянка не будет измеряться адекватно. Хотя я попробую, ведь хуже от того не станет.

По поводу питания:
у CS5368 5 видов питания:
VA - аналоговый VA=5В (при меньшем, согласно даташита не работает)
VX - пистание осцилятора VX=5В
VD - цифровое питание VD=3.3В
VLS - питание последовательного интерфейса VLS=3.3В
VLC - питание управляющейо логики (SPI интерфейс и логика управления микросхемой) VLC=3.3В
Питание 3.3 В беру с отладочной платы. При измерении осцилографом - измеряемый уровень напряжения (под нагрузкой) адекватный.
Питание 5 В - с отдельного блока питания. Уровень напряжения под нагрузкой адекватный.
Земли всех питаний соеденены, земли АЦП и отладочной платы соеденены.

А вы наблюдали за питанием посредством осциллографа.Возможно пакостит какое то из питаний.И про земли -вы их правильно развели.Я про пульсации.А va & vx у вас это одно напряжение?
Сергей Борщ
Цитата(KolyanV @ Sep 21 2008, 13:08) *
Подставлять табличное значение синуса уже пробовал. Работает отлично, без помех.
Именно подменяя им считанное из АЦП значение? Я имею в виду, что при этом система загружена так же, в ней происходят те же прерывания, и т.д.
KolyanV
Извиняюсь, что долго не отписывал, обо всем по порядку:

Цитата
А вы данные сдвигаете на бит влево при приёме? Там какойто кривой TDM у цируса.

Да, бит влево сдвигаю, интерфейс настроил в точности с описанием цирусовского TDM в даташите. Об этом подробнее - далее

Цитата
А вы наблюдали за питанием посредством осциллографа.Возможно пакостит какое то из питаний.И про земли -вы их правильно развели.Я про пульсации.А va & vx у вас это одно напряжение?

VA И VX - одно напряжение. Осцилографом проверял, пульсации есть. Если верить моему китайскому осцилографу PDS-5022, амплитуда ВЧ шумов около 200 мВ. Судя по всему, проблема не в питании, об этом ниже.

Цитата
Именно подменяя им считанное из АЦП значение? Я имею в виду, что при этом система загружена так же, в ней происходят те же прерывания, и т.д.


Прием данных осуществляется в slave режиме (АЦП выступает мастером), для приема используется PDC с двумя буферами. В прерывании осуществляется "подсовывание"контроллеру PDC следующего буфера и отправка сообщения обрабатывающей зааче. По данному сообщению отдельная задача приложения "потрошит" буфер c принятыми данными, перекладывает его в другой буфер и готовит на отправку в компьютер. Так вот, подстановка табличного синуса осуществлял не в прерывании, а в задаче, которая "потрошит". В этом случае переданный в компьютер звуковой тракт с табличным синусом был без искажений.

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

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

Всем спасибо за внимание и советы!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.