Звуковой дигитайзер

Hacker

Professional
Messages
1,048
Reputation
9
Reaction score
712
Points
113
Эта страница содержит информацию об очень простой электронной схеме, которую я сделал для оцифровки и воспроизведения звуков (голоса и музыки):

Описание схемы

ЦАП-АЦП
Два года назад я был заинтересован в звуковом дигитайзере-плеере, но звуковые карты, такие как SoundBlaster, были довольно дорогими, чтобы купить их и использовать их только время от времени. Некоторое время спустя я обнаружил чрезвычайно простую конструкцию, позволяющую воспроизводить звук с потрясающим качеством (учитывая его простоту). Это был цифро-аналоговый преобразователь (ЦАП), состоящий всего из нескольких резисторов. Его использовали несколько игроков в MOD и несколько игр. Дизайн был широко известен издавна. Его рабочая основа заключается в следующем.

У нас есть определенное количество битов, логические уровни которых характеризуются электрическими уровнями, скажем, логический ноль = 0 вольт и логическая единица = V вольт. Этот набор битов можно интерпретировать как число от нуля до 2 n - 1, и поэтому он может представлять уровни аналогового сигнала. Аналоговый сигнал может быть извлечен непосредственно из цифровых сигналов, если электрические уровни всех битов суммируются с определенными весами. Самый старший бит не имеет веса (то есть имеет вес = 1), следующий за ним бит имеет вес 1/2, следующий бит имеет вес 1/4 и так далее. Младший значащий бит будет иметь вес 1/2 n - 1.. Таким образом, результирующий выходной сигнал является аналоговым (поскольку он не ограничен двумя значениями, 0 или В вольт), а его уровень пропорционален логическому значению, представленному набором битов.

На практике ЦАП применяется к параллельному порту ПК. В этом случае у нас есть 8 бит (но их могло бы быть больше, если бы мы использовали не только выводы данных, но и выводы управления), электрические уровни которых равны 0 вольт (для логического нуля) и приблизительно +5 вольт (для логической единицы). Суммирование и взвешивание битов производятся через резисторы. Самый простой способ - соединить вывод разряда j с резистором номиналом 2 jx R. Для этого потребуется 8 резисторов, каждый в два раза больше предыдущего, чего трудно добиться на практике. Вот почему была разработана более продуманная схема. На рисунке вы можете видеть, что ЦАП состоит из цепочки резисторов, для которой нужны только резисторы двух разных типов. Это делает схему более стабильной и упрощает сборку на практике. Выходной сигнал будет приблизительно составлять от нуля до +5 вольт с 2 8 = 256 различными уровнями, то есть разрешение ЦАП составляет 8 бит.

Я решил попробовать ЦАП и остался вполне доволен, но это была только половина дела. Я также хотел сделать обратную операцию, то есть хотел аналого-цифровой преобразователь (АЦП). Затем я начал думать о том, как можно таким же простым способом оцифровать звук. Я плохо разбирался в электронике (лучше не стал), знал только базовые принципы работы пассивных компонентов и полупроводников. Наконец, я подумал, что проще использовать уже построенный ЦАП в качестве генератора опорного напряжения и сравнивать с ним входной сигнал, который нужно преобразовать в цифровую форму. Один из способов сделать это - добавить опорное напряжение к входному сигналу и посмотреть, не превышен ли определенный порог. Если это так, сигнал выше порогового уровня минус опорный сигнал, и мы должны уменьшить выходной сигнал ЦАП и снова сравнить. Если порог не превышен, ситуация обратная, и мы должны увеличить DAC. Когда мы находим два последовательных значения ЦАП, которые делают порог непревышенным и превышенным соответственно, мы оцифровываем входной сигнал с разрешением, равным разрешению ЦАП.

Основная проблема заключалась в конструкции простого порогового детектора. Должен быть разумным один шаг ЦАП, который составляет 5/256 = 20 мВ. Преобразование небольшого шага напряжения в логический сигнал (например, 5 вольт, если шаг превысил порог, и 0 вольт в противном случае) обычно выполняется через цепочку транзисторов, так что они преобразуют шаг 20 мВ в шаг 5 В (усиление = 5 / 20x10 -3 = 250). Поскольку я хотел, чтобы конструкция была как можно более простой, я пытался использовать только один транзистор, тогда транзистор должен быть тщательно выбран и поляризован. Моих знаний о транзисторах было недостаточно, чтобы сделать это таким образом, поэтому я попробовал другой подход.

Спецификации логических уровней говорят в основном о том, что существует 3 ситуации, когда подается входной сигнал. Если сигнал ниже некоторого уровня, например 1 вольт, он будет интерпретирован как логический 0. Если сигнал выше определенного уровня, скажем 4 вольт, он будет интерпретирован как логический 1. Если сигнал находится между обоими уровнями. тогда ничего нельзя сказать, производитель оборудования не может предсказать поведение, оно будет случайным образом интерпретировано как логический 0 или логический 1. Я сделал ставку на то, что уровень, при котором интерпретация входного сигнала изменяется с логического 0 на логический 1 является фиксированным и достаточно стабильным, хотя он будет случайным образом меняться от компьютера к компьютеру.

Так я подхожу к рисунку. Любой инженер-электрик сочтет эту схему отклонением от нормы, какой-то электрической ересью или богохульством, но поверьте мне, это работает! Общий принцип следующий. Входной сигнал, который должен быть оцифрован, добавляется к сигналу ЦАП и подается на базу транзистора. Коллектор транзистора подключен к входу параллельного порта, а эмиттер - к переменному резистору. Концы переменного резистора подключены к земле и к источнику отрицательного напряжения. Я взял последовательный порт в качестве источника этого отрицательного напряжения, но можно использовать любой другой источник. Последовательный порт использует два электрических уровня, примерно -12 и +12 вольт. Не должно быть риска повреждения, потому что потребление энергии низкое, кроме того, по определению стандарта RS-232C, любой вывод можно замкнуть накоротко с любым другим выводом (включая землю) без повреждений, иначе ваш порт не будет настоящим RS-232C. Когда сигнал в базе транзистора растет, напряжение на коллекторе уменьшается, таким образом, вход параллельного порта устанавливается с 1 на 0. Переменный резистор необходимо отрегулировать так, чтобы при отсутствии сигнала оцифровка приводила к уровень 128 из 256. Регулятор громкости источника звука (микрофон, кассета, радио, компакт-диск и т. д.) должен быть отрегулирован так, чтобы крайние уровни (0 и 255) почти никогда не были достигнуты (во избежание насыщения).

После первых испытаний меня удивила стабильность работы устройства. Моя ставка была верной. После того, как переменный резистор установлен правильно, колебание составляет +/- 1 LSB, то есть как в профессиональных устройствах!

Согласно теореме Найквиста, максимальная частота, которая может быть успешно оцифрована, составляет половину частоты дискретизации. С моими 386/40 МГц, работающими с программой C, я сканировал с частотой 14 кГц. Это устанавливает предел в 7 кГц, что достаточно для человеческого голоса, но не для музыки Hi-Fi. С более быстрым компьютером и программированием непосредственно на ассемблере предел должен быть увеличен. Чтобы исключить неправильно оцифрованные частоты, которые выглядят как шум, я добавил фильтр нижних частот, который можно найти в дизайне. Если ваш компьютер быстрее моего, возможно, вам придется изменить константу фильтра, чтобы она была оптимальной для ваших настроек.

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

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

В заключение интересно отметить, что есть несколько звуковых карт, которые используют параллельный порт, например Disney Sound. По сути, это ЦАП, описанный здесь. Поэтому очень вероятно, что вы сможете воспроизвести пример, приведенный на предыдущей странице, с программным обеспечением там, на любой из этих карт. И наоборот, вы можете использовать дизайн этой страницы с любой программой, которая позволяет подключать звуковые карты к параллельному порту.

adc.gif


Схема в формате Micro-cap III
Code:
2
Микрокап III
Программное обеспечение Spectrum
ЗППП
52
Резистор
12,11,7,1,1,2, R1
Резистор
18,11,7,1,3,4, R1
Резистор
24,11,7,1,5,6, R1
Резистор
30,11,7,1,7,8, R1
Резистор
36,11,7,1,9,10, R1
Резистор
42,11,7,1,11,12, R1
Резистор
48,11,7,1,13,14, R1
Резистор
54,11,7,1,15,16, R1
Резистор
12,17,0,1,2,4, R2
Резистор
18,17,0,1,4,6, R2
Резистор
24,17,0,1,6,8, R2
Резистор
30,17,0,1,8,10, R2
Резистор
36,17,0,1,10,12, R2
Резистор
42,17,0,1,12,14, R2
Резистор
48,17,0,1,14,16, R2
Резистор
6,17,0,1,0,2, R1
Земля
4,17,7, -1,
Короткие2
4,17,0, -1,
Конденсатор
47,29,3,1,17,18, C1
Резистор
47,29,7,1,17,0, R1
Резистор
53,29,2,1,19,17, R3
Резистор
59,29,2,1,20,19, R3
Резистор
65,29,2,1,21,20, R3
Конденсатор
53,35,3,1,0,19, С2
Конденсатор
59,35,3,1,0,20, С2
Конденсатор
65,35,3,1,0,21, С2
Короткие12
59,35,2, -1,
Короткие6
59,35,4, -1,
Земля
47,35,7, -1,
NPN
31,29,6,2,22,23,24, 1 квартал
Конденсатор
31,38,5,1,25,23, С3
Короткие6
22,32,4, -1,
Резистор
19,35,0,1,26,0, VR
Земля
26,35,7, -1,
Короткие2
22,32,7, -1,
Короткие4
24,26,0, -1,
Короткие4
15,35,0, -1,
Короткие1
26,35,2, -1,
Короткие6
31,29,5, -1,
Короткие1
31,39,3, -1,
Короткие4
31,28,1, -1,
Короткие4
69,29,2, -1,
Земля
60,14,7, -1,
Короткие3
60,14,5, -1,
Короткие4
43,23,0, -1,
Короткие4
35,23,2, -1,
Короткие1
39,21,3, -1,
Короткие12
39,20,0, -1,
Короткие3
51,20,0, -1,
Короткие3
54,20,3, -1,
Короткие4
15,40,4, -1,
Земля
19,40,7, -1,
0
36
3,34, -1, вывод 4
3,36, -1, последовательный порт
10,25, -1, вывод 15
10,27, -1, параллельный порт
29,41, -1, Аудиовход
70,29, -1, Аудио
50,38, -1, фильтр низких частот
37,27, -1, Высокая
37,29, -1, пасс
37,31, -1, фильтр
12,11,1,2
18,11,3,3
24,11,5,4
30,11,7,5
36,11,9,6
42,11,11,7
54,11,15,9
48,11,13,8
24,8, -1, контакты параллельного порта
4,11, -1, ЦАП
28,23, -1, АЦП
70,31, -1, выход
60,11,0,18
36,23, -1, переключатель
47,23,18, ЦАП
3,41, -1, последовательный порт
3,39, -1, вывод 7
4,48, -1, R1 = 2 R2 = 22 кОм
4,50, -1, R3 = 1 кОм
25,48, -1, C1 = 22 мкФ
25,50, -1, C2 = 220 нФ
25,52, -1, C3 = 560 пФ
4,52, -1, VR = 10 кОм
41,48, -1, Q1 = Любой биполярный кремний
46,50, -1, NPN транзистор
15,4, -1, ЦАП-АЦП Л. Падиллы (1995)
7

12

7

5
10

3
0
3
0
0
5

3
6,2,53,77
0
0
0
0
0
 
Top