|
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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
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
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|