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

Low Cost воспроизведение звука на паре выходов PWM

Хочу поделиться идеей воспроизведения звука на процессоре почти без аналогового тракта. Может уже где-то было. Класс 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

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


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

Хочу поделиться идеей воспроизведения звука....

Идея, как идея. Класс D сами-же написали. Ничего необычного. Тут имеет стоимость конкретная реализация. Если сделаете реализацию моноканала ватт на 25-50 в речевом диапазоне, то можем поговорить о стоимости :). Хотя, пожалуй сначала устроит и "линейный выход" нагруженный на трансформатор.

 

 

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


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

Прерывание, конечно же, пишется на ассемблере.
Ужас. А что, разве у NXP CM0/CM3 нет буфера на регистры сравнения и обновления рабочих регистров из буфера по событию переполнения?

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


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

в чём преимущество по отношению к ШИМ-2, которая на одном выходе?

ноль - открыта одна диагональ моста

единица - другая диагональ

скважность =2 - диагонали работают попеременно, нет звука

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


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

Ничего необычного. Тут имеет стоимость конкретная реализация.

Это же лазер полный мост. При одинаковом питании и сопротивлении нагрузки - выходная мощь выше в 4 раза. Относительно класса D на одном PWM-выходе. Но из-за полного моста динамик нежелательно (из-за ЭМИ) далеко располагать от выходных ключей. И эта схема не для т.н. линейного выхода, а для управления относительно мощной нагрузкой с предельно высоким КПД. Стоимость схемотехники как раз минимальна.

Изменено пользователем GetSmart

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


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

И эта схема не для т.н. линейного выхода, а для управления относительно мощной нагрузкой с предельно высоким КПД.

Я же написал "сначала устроит" - так сказать для отработки идеи. А про уровень мощности, которая интересует, тоже уже писал. Но для мощи надо уже уже реализовывать и защиты, ибо голые ключи для реальной жизни негодны. Простота резко уменьшится :(

 

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


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

Искажений будет целый вагон. Посмотрите область применения класса Д - это сабвуферы, т.е частоты на порядки ниже частоты ШИМ.

А в усилителях в интегральном исполнении применяются различные методы для снижения КНИ, как например ООС.

А так достаточно одного канала ШИМ, второй получается в противофазе обычным драйвером MOSFET, т.е берется двухканальный драйвер, один канал у которого прямой, другой инверсный (вы ведь не предполагаете качать MOSFET напрямую ножкой контроллера?)

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


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

Посмотрите область применения класса Д - это сабвуферы.

Да ну? :). Значит, например, у меня в машине один сплошной сабвуфер на 605W JBL впихнул :), а про 7.1 и 14 динамиков наврал :)

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


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

zltigo, +1. У известной IRS2092 тактовая частота 800кГц, она весь звуководй диапазон с лёгкостью переплюнет

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


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

У известной IRS2092 тактовая частота 800кГц, она весь звуководй диапазон с лёгкостью переплюнет

Ну ок. Только у него способ формирования ШИМ несколько иной - аналоговый, и охвачен глубокой ООС. Да и я бы не ставил его в ряд с усилителями Hi-Fi класса, ну да на 1кГц уровень искажений довольно низкий 0,01%, но вот что там на 20кГц производитель скромно умалчивает :rolleyes:

 

Да и по реализации...никаких ассемблерных вставок не должно быть. Это сразу на порядок (если не на 2) увеличит КНИ и С/Ш. Делается это через DMA и регистры автоматической перезагрузки, тогда все времена будут жесткими, т.к перезагрузка будет происходить сразу после переполнения таймера.

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


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

Да и по реализации...никаких ассемблерных вставок не должно быть. Это сразу на порядок (если не на 2) увеличит КНИ и С/Ш. Делается это через DMA и регистры автоматической перезагрузки, тогда все времена будут жесткими, т.к перезагрузка будет происходить сразу после переполнения таймера.

 

Какие-то прерывания все равно будут. Ассемблер только не сильно поможет.

Я бы уже думал над фазовым ругилированием многканальных PWM. Чтобы делать направленный звук.

Скажем 8-мь динамиков и отслеживать слушателя по сигналу Bluetooth с его смартфона. :biggrin:

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


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

Ужас. А что, разве у NXP CM0/CM3 нет буфера на регистры сравнения и обновления рабочих регистров из буфера по событию переполнения?

Не знаю какой NXP имеется в виду автором, но у LPC17xx вполне себе есть DMA, принимающий события от таймеров. Вероятно просто ТС "не умеет его готовить"... ;)

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

 

Какие-то прерывания все равно будут. Ассемблер только не сильно поможет.

Их будет на порядки меньше.

Всё что можно делать пакетно, надо делать пакетно. А дёргаться в прерываниях только чтобы загружать данные в регистры периферии - это подход сродни реализации интерфейсов методом ногодрыга.

Это лучший способ угробить производительность ARM-ов до уровня какого-нить AVR.

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


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

Хочу поделиться идеей воспроизведения звука на процессоре почти без аналогового тракта. Может уже где-то было. Класс D. Полный мост. ...

 

Принципиальная схема:

к ножкам MATCH подключаётся (ключевой) драйвер на нужное напряжение, а между парой выходов драйвера - один или два LC-фильтра последовательно, и далее громкоговоритель. Громкость регулируется программно.

 

Давайте посчитаем...

"один или два LC-фильтра последовательно" дадут наклон АЧХ либо -40 либо -80 дб/дек. Это значит, что для того чтобы подавить частоту квантования в 1000 раз нам нужно иметь 60 дб. Это значит что "по горизонтали" нам надо иметь пару декад. Да, еще неплохо учесть "горбик", который даст LC-фильтр... Чтобы на него не попасть.. И чем лучше добротность, тем этот горбик больше... Так вот, сколько там процессор сможет дать период у ШИМ? Если тактовая счетчика 50 Мгц (я точно не знаю, пусть хоть так), то при 1 % ошибки это будет 127 или 7 разрядов... А реально наверное, что регистры имеют 8 разрядов... Следовательно период ШИМ - не лучше чем 5 Мгц, а на самом деле и наверняка не будет выше 1 Мгц. Тогда от этого отступаем влево 2 декады - получим 10 Кгц, это то, что пройдет через фильтр без подавления.... Правда можно наверное программно делать подъем высоких частот...

 

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


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

Но для мощи надо уже уже реализовывать и защиты, ибо голые ключи для реальной жизни негодны. Простота резко уменьшится :(

У меня пока предохранитель по питанию стоит. Не знаю, надо ли усложнять. Динамик рядом. От КЗ защитит предохранитель, а от обрыва ничего не надо. Защищать не ключи надо, а динамик, - от постоянки. Это если лоукостить даже на ёмкости последовательно с динамиком )))

 

Упд.

Хотя, для защиты от обрыва тоже паралельно ёмкости в LC-фильтре нужно что-то ставить. Резисторы, супрессор или что-то ещё.

Для мощных схем актуально иметь какой-то детектор обрыва.

Изменено пользователем GetSmart

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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