Модуль усилителя мощности звука pam8403

Прошивка

Прошивка для данных часов состоит из двух частей:

  1. Управляющая программа для МК STM32
  2. Дамп для SPI-FLASH памяти с музыкальными фрагментами

После сборки часов первым делом необходимо прошить микроконтроллер STM32. Для этого нам понадобится программатор ST-Link, который подключается к 4-х контактной гребенке на отладочной плате. Нам понадобятся только 3 пина: GND, CLK, DIO. С небольшой инструкцией можно ознакомиться тут или на каком-либо стороннем ресурсе. После успешной загрузки прошивки в МК, отключаем питание часов и снова включаем, при этом часы должны запуститься и начать отсчет времени.

Теперь наступает время для следующего шага: загрузка дампа с музыкальными фрагментами в SPI-FLASH память AT45DB321. Для этого нам понадобится переходник USB-UART, либо RS232-UART с логическими уровнями 3,3 вольта. Я для этих целей использую китайский переходник на базе PL-230HX. Не самый лучший выбор, так как у него имеются некоторые проблемы с драйверами, но вариант рабочий. Подключается он к разъему XP3 на плате часов. Распиновка разъема представлена на рисунке ниже:

Рис. 10. Распиновка разъема UART

Подключение переходника выполняется так: GND->GND, RX->TX, TX->RX. Затем необходимо перевести часы в режим прошивки SPI-FLASH. Для этого отключаем питание часов, зажимаем кнопки «Alarm» и «-» (две крайние на верхней панели) и включаем питание. Если все сделано правильно, то дисплей часов гореть не должен.

Перейдем к программе для прошивки дампа SPI-FLASH на стороне ПК. Для этих целей служит консольная утилита tc_flasher.exe. На вход она принимает несколько параметров, включая имя файла с дампом и номер COM-порта, через который будет производиться загрузка этого дампа. Для удобства я написал два .bat файла, один для загрузки дампа в SPI-FLASH (programm.bat), другой для чтения (read.bat). Перед запуском соответствующего .bat файла, необходимо его немного подправить, а именно указать правильный номер COM-порта.

Для примера рассмотрим programm.bat. Нажимаем на нем правой клавишей мыши, выбираем пункт «Изменить». Файл открывается в блокноте и его содержимое имеет следующий вид:

tc_flasher.exe dump.bin COM5 w

Рис. 11. Загрузка дампа флеш-памяти с помощью утилиты tc_flasher.exe

После завершения процесса в консоль будет выведено соответствующее сообщение:

Рис. 12. Сообщение о завершении загрузки

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

Итак, после успешной загрузки дампа, отключаем питание часов, отключаем все переходники и подаем питание снова. Часы готовы к работе

Дополнение ко 2-й части

Сначала хочу сделать несколько дополнений к прошлой статье.

1. Модуль усилителя на PAM8403

Так как в данном модуле не выведен сигнал отключения усилителя, необходимо произвести некоторую доработку модуля. Для начала открываем Datasheet на микросхему PAM8403 и находим вот эту картинку:

Рис. 1. Микросхема PAM8403 

Нас интересует вывод 12, который называется SHDN. Если на этом выводе установить уровень логического нуля, то усилитель PAM8403 отключается. Задача состоит в отключении этого вывода от +5 вольт на плате и подпайки к нему куска гибкого провода для последующего подключения этого сигнала к основной плате часов.

Доработку производил следующим образом. Сначала паяльным феном снимаю микросхему с платы:

Рис. 2. Перемычка между 12 и 13 выводами микросхемы

Между 12 и 13 выводами видим перемычку, которую необходимо удалить:

Рис. 3. Место перемычки

После этого запаиваю микросхему PAM8403 обратно и припаиваю проводок к 12-му выводу:

Рис. 4. Модуль PAM8403 после доработки

На этом доработка завершена. Все это можно было выполнить каким-либо другим способом, но я решил сделать именно так.

После этого устанавливаем разъемы типа «гребенка» в отверстия на плате и запаиваем их как показано на фото:

Рис. 5. Модуль усилителя перед установкой на основную плату часов

Так как в моем случае места в корпусе оказалось очень мало и динамик часов упирался в модуль усилителя, необходимо удалить желтые пластиковые элементы с «гребенок» перед установкой модуля на основную плату. Это позволяет выиграть лишние 2 миллиметра пространства, которых не хватало. После установки модуля необходимо срезать лишнюю длину гребенок с обеих сторон:

Рис. 6. Модуль PAM8403 установлен на основную плату

Провод от 12-го вывода микросхемы припаивается вот в это отверстие на плате:

Рис. 7. Отверстие подключения управляющего провода от PAM8403

2. Конденсатор С2 и С10

Конденсатор С10 диаметром 4 мм, емкость 22 мкф устанавливается боком. С2 диаметром 5 мм, емкость 100 мкф устанавливается с обратной стороны платы так же боком.

Рис. 8. Электролитические конденсаторы C2 и С10

После сборки всей конструкции нижняя часть динамика немного упирается в конденсатор C10, что предотвращает сильное прогибание корпуса часов и не допускает короткое замыкание от прикосновения динамика к модулю усилителя DA2.

3. Отладочная плата с МК STM32

Перед запайкой «гребенок» на отладочную плату STM32, желательно удалить из этой «гребенки» контакты выводов C15, C14 и C13 как показано на рисунке:

Рис. 9. Выводы, которые необходимо удалить на разъеме крепления отладочной платы

К этим выводам подключен часовой кварцевый резонатор на 32768 Гц и лишняя емкость в виде болтающихся в воздухе контактов разъема на этих линиях противопоказана.

На этом с дополнениями все, переходим к основной теме статьи

Создание дампа с музыкальными фрагментами

Итак, мы разобрались с процедурой загрузки всех необходимых файлов в наши свежесобранные часики. Но что если мы хотим изменить голос озвучки часов или добавить новые сигналы будильника? Для начала давайте разберемся, как устроен дамп с музыкальными фрагментами.

Дамп SPI-FLASH в себе содержит следующее:

  1. Звуковые семплы речевого информатора
  2. Звуки будильников

Описание речевого информатора можно найти тут, он почти не изменился с предыдущей версии часов. Если кратко, то для создания звукового сообщения речевой информатор последовательно включает нужные звуковые фрагменты в нужном порядке. Например, чтобы озвучить время «12:23», информатор последовательно включит следующие звуковые фрагменты:

  1. двенадцать
  2. часов
  3. двадцать
  4. три
  5. минуты

Или для «21:31»

  1. двадцать
  2. один
  3. час
  4. тридцать
  5. одна
  6. минута

Идея, думаю, понятна.

Для замены озвучки часов на свою необходимо записать все используемые фрагменты и пересобрать дамп заново. Это выглядит следующим образом. Сначала готовятся все необходимые звуковые фрагменты в формате .wav. Затем, с помощью специальной утилиты dump_builder_tc_v2.0.exe производится объединение .wav-фрагментов в файл dump.bin, который в дальнейшем нужно загрузить в часы.

Требования к .wav-файлам следующие:

  • Формат: PCM
  • Частота дискретизации: 22050 Гц
  • Количество каналов: 1 (Моно)
  • Разрешение: 8 бит
  • Скорость потока: 176 кбит/сек

Для удобства утилита dump_builder_tc_v2.0.exe имеет конфигурационный файл config.txt, в котором указывается какому музыкальному семплу соответствует данный .wav-файл. Файл config.txt имеет следующий вид:

; Test configuration file
; for build TalkingClock_v1.1 dump file

SAMPLE_0 =      "wav\0.wav"
SAMPLE_1m =     "wav\1m.wav"
SAMPLE_1w =     "wav\1w.wav"
SAMPLE_2m =     "wav\2m.wav"
SAMPLE_2w =     "wav\2w.wav"
SAMPLE_3 =      "wav\3.wav"
SAMPLE_4 =      "wav\4.wav"
SAMPLE_5 =      "wav\5.wav"
SAMPLE_6 =      "wav\6.wav"
SAMPLE_7 =      "wav\7.wav"
SAMPLE_8 =      "wav\8.wav"
SAMPLE_9 =      "wav\9.wav"
SAMPLE_10 =     "wav\10.wav"
SAMPLE_11 =     "wav\11.wav"
SAMPLE_12 =     "wav\12.wav"
SAMPLE_13 =     "wav\13.wav"
SAMPLE_14 =     "wav\14.wav"
SAMPLE_15 =     "wav\15.wav"
SAMPLE_16 =     "wav\16.wav"
SAMPLE_17 =     "wav\17.wav"
SAMPLE_18 =     "wav\18.wav"
SAMPLE_19 =     "wav\19.wav"
SAMPLE_20 =     "wav\20.wav"
SAMPLE_30 =     "wav\30.wav"
SAMPLE_40 =     "wav\40.wav"
SAMPLE_50 =     "wav\50.wav"
SAMPLE_rovno =  "wav\rovno.wav"
SAMPLE_chas =   "wav\chas.wav"
SAMPLE_chasov = "wav\chasov.wav"
SAMPLE_chasa =  "wav\chasa.wav"
SAMPLE_minut =  "wav\minut.wav"
SAMPLE_minuta = "wav\minuta.wav"
SAMPLE_minuty = "wav\minuty.wav"
SAMPLE_bell =   "wav\bell.wav"
SAMPLE_minus =           "wav\minus.wav"
SAMPLE_gradus =          "wav\gradus.wav"
SAMPLE_gradusa =         "wav\gradusa.wav"
SAMPLE_gradusov =        "wav\gradusov.wav"
SAMPLE_temperatura_out = "wav\temperatura_out.wav"
SAMPLE_temperatura_in =  "wav\temperatura_in.wav"

SAMPLE_alarm1 = "wav\katusha.wav"
SAMPLE_alarm2 = "wav\chip_i_deil.wav"
SAMPLE_alarm3 = "wav\Pirates.wav"
SAMPLE_alarm4 = "wav\ku-ka-re-ku.wav"
SAMPLE_alarm5 = "wav\alarm_electro.wav"
SAMPLE_alarm6 = "wav\alarm_radioclock.wav"
SAMPLE_alarm7 = ""
SAMPLE_alarm8 = ""
SAMPLE_alarm9 = ""
SAMPLE_alarm10 = ""
SAMPLE_alarm11 = ""
SAMPLE_alarm12 = ""
SAMPLE_alarm13 = ""
SAMPLE_alarm14 = ""
SAMPLE_alarm15 = ""
SAMPLE_alarm16 = ""

; End of file
SAMPLE_alarm7 = ""

Рис. 13. Сообщение утилиты dump_builder_tc_v2.0.exe об неверном формате wav-файла

После завершения сборки дампа, необходимо проверить его размер: он не должен превышать объема флеш-памяти часов (4 МБайта).

На этом пока все, в конце статьи дам ссылку на полный проект часов на GitHub и на архив на ЯндексДиск.

Особенности PAM8403

  • Стереоусилитель max 3 Вт (динамик 4 Ом, питания 5 В)
  • Напряжение питания от 2,5 до 5,5В
  • Защиты: тепловая защита и защита от короткого замыкания
  • Возможность отключения звука (mute) (потребление тока 3,5 мА)
  • Возможность выключения модуля (shutdown) (энергопотребление ниже 1мкА)
  • Требуется небольшое количество внешних компонентов
  • Низкая цена модуля
  • В зависимости от версии модуля дополнительные выводы (отключение звука, выключение модуля) или потенциометр для регулировки громкости

Примечание

Создавая макет FM-радио при более высоком уровне управления усилителем у меня появилась вибрация в динамике (6 Ом, 7 Вт). Я не решил проблему полностью. С одной стороны я ограничил уровень входного сигнала, а с другой — добавил конденсатор большей емкости по питанию.

Из принципиальной схемы видно, что есть конденсатор емкостью 470 мкФ. Глядя на имеющийся у меня модуль, мне сложно поверить, что использовался конденсатор именно такой емкости.

Минусы выходов динамиков (-OUT_L и -OUT_R) это не то же самое, что минус питания микросхемы и поэтому их нельзя соединять вместе. Это означает, что к выходу не удастся подключить наушники, потому что они имеют общую массу.

Тем не менее, в теме «Экономичное решение при использовании PAM8403 в качестве усилителя для наушников» на сайте electronics.stackexchange.com есть интересная модификация, которая допускает такое подключение.

Короче говоря, наушники через конденсаторы емкостью 10 мкФ подключены плюсами к положительным выходам модуля (+ OUT_L, + OUT_R) с одной стороны и заземлению схемы с другой. Отрицательные выходы модуля остаются не подключенными.

Я хотел бы добавить от себя информацию о возможности управлять системой (например, по шине I2C). Я имею в виду настройку громкости, отключение звука, выключение модуля или запоминание последнего уровня громкости. Недостающую функциональность (кроме запоминания последней установленной громкости) предлагает описываемый мной регулятор громкости на PT2257.

Помимо описанного здесь модуля PAM8403, на AliExpress можно найти еще «более сильные» варианты усилителей звука. Фото двух, которые у меня есть, я разместил выше. Это:

PAM8406 (слева)

  • Мощность 2×5Вт
  • Напряжение питания 2,5-5В

PAM8610 (справа)

  • Мощность 2×15Вт
  • Напряжение питания 6 — 12В

Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…

Подробнее