Binary (Bit) Angle Modulation (BAM) довольно интересная альтернатива ШИМ. А в случаях, когда каналов много и они используются для управления светодиодами - просто незаменимая вещь!
sshot-2.png [ 14.75 КБ | Просмотров: 16311 ]
Не буду описывать суть метода (это тема для целой статьи) просто нужно знать, что BAM позволяет более "правильно" для человеческого глаза засвечивать светодиоды и при этом на его реализацию расходуется намного меньше процессорного времени.
- Для каждого канала уровень BAM задается в переменной Bri* (где * - номер канала).
- Все действия производятся в прерываниях таймера0 (или другого по выбору). Для основной программы работа программного BAM незаметна. Менять уровень канала можно в любое время, в любом месте программы.
- Обработка одного канала занимает 7 слов памяти и 8 тактов процессорного времени (для обеспечения частоты BAM в 120Гц необходимо каналы обрабатывать 120*8=960 раз в секунду).
- Теоретически (при частоте задающего генератора 20МГц) можно организовать до 3000 таких каналов!
Комментарий к файлу: Организация произвольного количества BAM каналов.
BAM-test.zip [21.15 КБ]
Скачиваний: 840
- Зачастую при реализации BAM забывают о том, что при переходе значений от 127 к 128 и наоборот возникают артефакты в виде заметного моргания. Такое получается из за того, что при смене вышеуказанных значений соседние периоды ВАМ образуют облась с одним уровнем (в зависимости от напрвления перехода 0 или 1) с периодом равным целому периоду ВАМ.
127 --> 128 #b0{1111111 --> #b1}0000000
Для того, чтобы этого избежать, в этой реализации, в каждый следующий период работы ВАМ меняется направление обработки.
Т.е.: 1 период = b7, b6 ... b1 b0; 2 период = b0, b1 ... b6 b7; 3 период = b7, b6 ... b1 b0; и т.д.
Такой способ работы еще называют зеркальным BAM (MiBAM) Mirror Imaged Bit Angle Modulation/