|
Low Cost воспроизведение звука на паре выходов PWM |
|
|
|
Dec 4 2016, 11:57
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Хочу поделиться идеей воспроизведения звука на процессоре почти без аналогового тракта. Может уже где-то было. Класс D. Полный мост. У NXP CM0/CM3 и на других линейках есть таймеры с 4-мя MATCH регистрами. На две ножки процессора можно вывести два MATCH-сигнала в режиме PWM, работающих в противофазе от некоторого центра периода. Ещё один MATCH-регистр задаёт период PWM. И ещё один задаёт задержку входа в прерывание таймера для оптимальной позиции перезагрузки двух MATCH-регистров - перед самым обнулением счётчика таймера. Прерывание, конечно же, пишется на ассемблере. Работающих в противофазе это, например, когда при выводе сэмпла, равного 0 будет PWM1=X, PWM2=X, где X примерно половина периода. То есть переключение выходов будет одновременно и в середине и в конце периода. При выводе сэмпла, равного 1 будет PWM1=X+1, PWM2=X. При выводе сэмпла, равного -1 будет PWM1=X-1, PWM2=X. При выводе сэмпла, равного 2 будет PWM1=X+1, PWM2=X-1. При выводе сэмпла, равного -2 будет PWM1=X-1, PWM2=X+1.
Принципиальная схема: к ножкам MATCH подключаётся (ключевой) драйвер на нужное напряжение, а между парой выходов драйвера - один или два LC-фильтра последовательно, и далее громкоговоритель. Громкость регулируется программно.
Сообщение отредактировал GetSmart - Dec 4 2016, 12:08
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 31)
|
Dec 5 2016, 06:39
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(Ydaloj @ Dec 4 2016, 22:35)  У известной IRS2092 тактовая частота 800кГц, она весь звуководй диапазон с лёгкостью переплюнет Ну ок. Только у него способ формирования ШИМ несколько иной - аналоговый, и охвачен глубокой ООС. Да и я бы не ставил его в ряд с усилителями Hi-Fi класса, ну да на 1кГц уровень искажений довольно низкий 0,01%, но вот что там на 20кГц производитель скромно умалчивает  Да и по реализации...никаких ассемблерных вставок не должно быть. Это сразу на порядок (если не на 2) увеличит КНИ и С/Ш. Делается это через DMA и регистры автоматической перезагрузки, тогда все времена будут жесткими, т.к перезагрузка будет происходить сразу после переполнения таймера.
|
|
|
|
|
Dec 8 2016, 09:41
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Сергей Борщ @ Dec 4 2016, 15:46)  Ужас. А что, разве у NXP CM0/CM3 нет буфера на регистры сравнения и обновления рабочих регистров из буфера по событию переполнения? Не знаю какой NXP имеется в виду автором, но у LPC17xx вполне себе есть DMA, принимающий события от таймеров. Вероятно просто ТС "не умеет его готовить"...  В таких задачах - это самое то - заранее просчитать последовательность необходимых значений, сложить в буфер DMA и спокойно заниматься другими полезными делами, вместо того чтобы дёргаться в прерываниях. Цитата(AlexandrY @ Dec 5 2016, 10:20)  Какие-то прерывания все равно будут. Ассемблер только не сильно поможет. Их будет на порядки меньше. Всё что можно делать пакетно, надо делать пакетно. А дёргаться в прерываниях только чтобы загружать данные в регистры периферии - это подход сродни реализации интерфейсов методом ногодрыга. Это лучший способ угробить производительность ARM-ов до уровня какого-нить AVR.
|
|
|
|
|
Dec 8 2016, 11:45
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(GetSmart @ Dec 4 2016, 14:57)  Хочу поделиться идеей воспроизведения звука на процессоре почти без аналогового тракта. Может уже где-то было. Класс D. Полный мост. ...
Принципиальная схема: к ножкам MATCH подключаётся (ключевой) драйвер на нужное напряжение, а между парой выходов драйвера - один или два LC-фильтра последовательно, и далее громкоговоритель. Громкость регулируется программно. Давайте посчитаем... "один или два LC-фильтра последовательно" дадут наклон АЧХ либо -40 либо -80 дб/дек. Это значит, что для того чтобы подавить частоту квантования в 1000 раз нам нужно иметь 60 дб. Это значит что "по горизонтали" нам надо иметь пару декад. Да, еще неплохо учесть "горбик", который даст LC-фильтр... Чтобы на него не попасть.. И чем лучше добротность, тем этот горбик больше... Так вот, сколько там процессор сможет дать период у ШИМ? Если тактовая счетчика 50 Мгц (я точно не знаю, пусть хоть так), то при 1 % ошибки это будет 127 или 7 разрядов... А реально наверное, что регистры имеют 8 разрядов... Следовательно период ШИМ - не лучше чем 5 Мгц, а на самом деле и наверняка не будет выше 1 Мгц. Тогда от этого отступаем влево 2 декады - получим 10 Кгц, это то, что пройдет через фильтр без подавления.... Правда можно наверное программно делать подъем высоких частот...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Dec 10 2016, 03:58
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(zltigo @ Dec 4 2016, 17:50)  Но для мощи надо уже уже реализовывать и защиты, ибо голые ключи для реальной жизни негодны. Простота резко уменьшится  У меня пока предохранитель по питанию стоит. Не знаю, надо ли усложнять. Динамик рядом. От КЗ защитит предохранитель, а от обрыва ничего не надо. Защищать не ключи надо, а динамик, - от постоянки. Это если лоукостить даже на ёмкости последовательно с динамиком ))) Упд. Хотя, для защиты от обрыва тоже паралельно ёмкости в LC-фильтре нужно что-то ставить. Резисторы, супрессор или что-то ещё. Для мощных схем актуально иметь какой-то детектор обрыва.
Сообщение отредактировал GetSmart - Dec 10 2016, 22:28
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Dec 10 2016, 07:52
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(GetSmart @ Dec 10 2016, 05:58)  У меня пока предохранитель по питанию стоит. Предохранители защищают только от пожара. Цитата Не знаю, надо ли усложнять. А что, есть какой-то результат?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 10 2016, 21:38
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE (Ydaloj @ Dec 10 2016, 21:38)  ну да, конечно, катушки плавятся только так
у катушек слишком маленькая индуктивность Да, пожалуй для ВЧ-драйверов актуально. Прикидочный расчет показывает, что для среднепотолочного драйвера с эквивалентным сопротивлением 500ом на частоте 500кГц (ну пусть будет такая частота ШИМа) для усилителя с мощностью в 1кВт отсутствие фильтрации несущей приведет к рассеиванию где-то 15-20Вт на драйвере. Это много, все таки один LC фильтр снимет вопрос полностью, подавив несущую, скажем, на 40дБ (это всего 1.5-2мВт останется).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jan 11 2017, 16:29
|

Практикующий маг
     
Группа: Свой
Сообщений: 3 634
Регистрация: 28-04-05
Из: Дубна, Моск.обл
Пользователь №: 4 576

|
Цитата(GetSmart @ Jan 11 2017, 15:03)  Шум в слышимой полосе даже в младшем бите будет неприятен и неоптимален. А Вы шум от квантования не слышите? А он есть  Цитата Если мипсы некуда девать, то лучше сделать аналог сигма-дельта модуляции младшего бита, через суммирование ошибки округления в каждом сэмпле. Да, да, именно так там и делается...
|
|
|
|
|
Mar 3 2018, 12:19
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Напишуздесь. чтобы не создавать микротему. Однотактный ногодрыг на LPC111x. На других линейках не работает, т.к. юзает оригинальную особенность GPIO LPC111x. Не прерывается прерыванием. Можно дрыгнуть одновременно несколько ножек, кроме нулевого пина порта (до 11-ти одновременно), хоть в противофазе. Код r0 = адрес GPIO_MASK_ACCESS[] stmia r0,[r1,r2] Второе обращение к памяти будет по адресу с установленным битом 0-ого пина выбранного порта GPIO. Это надо учитывать, если этот пин работает на выход в режиме GPIO.
Сообщение отредактировал GetSmart - Mar 3 2018, 12:58
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|