Прикидывал по сигма-дельта модуляторам на досуге. Для 12 бит нужен отрезок в 4096 тактов. Для частоты дискретизации 48кГц, без оверсэмплинга, надо 196 608 000 тактов в секунду. Чего обычный stm с 72МГц тактовой явно не потянет. Разве что, stm405/407 с его 168МГц тактовой частоты чего-то сможет. Для 12 бит при 72МГц тактовой можно получить теоритическую частоту дискретизации 17.5кГц, что не так уж и много.
Выходит, что идея смешивания 2х 8битных ШИМ каналов не так уж и плоха. Можно попробовать слукавить и применить автокалибровку, заведя фильтрованную сумму ШИМ на АЦП.
Суммарный сигнал (пускай и 12 бит, 8+4) у нас условно состоит из "старшего байта", от которого нам нужен младший бит (или два). И "младшего байта", от которого нас интересует старший бит, или два.
При пуске устройства проводится автокалибровка. Суммарный сигнал, допустим, усиливаем в 256 раз и заводим на АЦП. Ставим младший бит старшего байта в "1", измеряем. Ставим старший бит младшего байта, измеряем. Проверяем на соотношение 1:2. При необходимости, корректируем остальные биты младшего байта, благо на дробную часть остается еще 4 бита. (старший бит тоже придется корректировать, мы не знаем, куда сопротивления микшера уведет).
Подозреваю, что трусы через голову, но может и заработать. Тем более, дабы не возиться с совсем крохотными величинами, можно обыгрывать не 8+4, а 7+5 (что уже логичнее) или 6+6 бит (запас на дробь меньше, но можно и дитерингом обыграть или еще как, ибо остается запас для oversampling'a) или задействовать большее число ШИМ каналов, 3, или 4.
Теоретический итог: при тактовой 72МГц, ШИМ8 бит даст частоту дискретизации 281,25кГц. Из расчета оверсемплинга 6х, частота дискретизации будет 46,875 кГц. С дитерингом особо не разгонишься, но скромный запас имеется. Из затрат - один-два ОУ и стабилитрон, чтобы вход АЦП не сжечь.
|