Белочка приходит к людям после разговора с электросчетчиком

Этим летом на даче, в конце августа, добившись наконец нормального обмена устройства, которое будет описано ниже, с электросчетчиком, я сидел на крылечке и слушал разговор двух белок, одна сидела на большой туе, а вторая — на яблоне. Тут позвонил мой друг, только что вернувшийся из автопохода на Белое море. На его вопрос «как дела?» я ответил, пребывая все еще погруженным в проект: «поговорил со счетчиком, сижу вот, слушаю разговор двух белок». Друг помолчал и сказал: «Ну про белочек после литра выпитой я конечно знаю, но после разговора со счетчиком???» :)))

В статье описано устройство (далее — «Говорилка»), предназначенное для снятия показаний с электросчетчика и проговаривания их синтезированным голосом в телефонную линию. Кроме собственно показаний потребленной энергии Говорилка считывает текущие дату, напряжения по фазам, токи по фазам, потребление общее и по фазам и отображает эти данные на встроенном TFT дисплее. Также к Говорилке подсоединены датчики температуры, влажности, атмосферного давления и освещенности.

На рис. 1 приведена фотография устройства. Белыми цифрами помечены следующие узлы:
1. Модуль RS232
2. Разъем RJ45 для подключения 1Wire датчиков
3. Разъем RJ45 для подключения I2C датчиков
4. Зона формирования аналогового речевого сигнала
5. WT588D-U
6. Дисплей на базе ILI9341
7. Зона размещения 2-х DAC
8. Плата Blue Pill на STM32F103R8C6
9. Узел защиты по питанию
10. Модуль DTMF
11. DC/DC преобразователь 15 — 5 вольт
12. Плоский кабель 6 проводов для присоединения к разъему гарнитуры CCU6225LT

4b796df0516b4f8ba4bbecb5365b9186.png

Рис. 1 Внешний вид Говорилки

Использован корпус G2113С с размерами240×120х60 мм, с прозрачной крышкой. На фото корпус показан без прозрачной крышки. Фотография устройства с крышкой приведена на рис. 2.

9ccf8ff7fa054eb6a5abf9d8ae62ec5d.JPG

Рис. 2 Устройство в собранном корпусе.

Потребность в этом устройстве появилась после заключения индивидуального договора с МОЭСК на электроснабжение в результате длительной работы нашего председателя СНТ. Это действие повлекло за собой множество последствий. Чтобы заключить договор с МОЭСК надо поставить новый счетчик в щите учета на столбе. Новый счетчик — следовательно новый подвод к дому. Раз новый подвод — тогда почему бы не взять три фазы и 15 квт за 500 рублей?

В результате в старом дачном домике появился новый трехфазный ввод на 15 квт и вся внутренняя проводка в доме была заменена. Появился новый щит, в котором помимо стандартного набора автоматов и ВДТ (УЗО) были смонтированы четыре контактора для управления подачей электричества. Три контактора управляют включением обогрева, четвертый — подачей питания на освещение\бытовые розетки. При выключении всех четырех контакторов электричество остается только внутри стального закрытого щита, все внешние цепи обесточиватся. Контакторы управляются симисторными ключами с оптической развязкой S202S02. Симисторы управляются от охранного контроллера CCU6225LT тульской фирмы RADS. Контроллеру лет наверно 10, работает безукоризненно в режиме 24×7, управляя электрическим отоплением и формируя СМС при срабатывании дверных датчиков. Единственной проблемой за эти годы стала необходимость в смене сим-карты. В какой-то момент устройство исчезло из сети. Перестановка сим карт из телефона в устройство и наоборот показала, что в телефоне работают обе сим-карты, а в CCU6225 — только свежая из телефона. Консультация с провайдером и замена сим-карты проблему решило полностью. Пришлось также заменить свинцовую батарею резервного питания, но 7 лет — это хороший срок службы для такой батареи.

CCU6225 дает возможность управлять нагрузкой независимо по смс, по телефону посредством DTMF, либо выключателем в доме. Несколько выключателей обеспечили местное управление контакторами, создав дополнительное удобство и гибкость в управлении оборудованием дома. Выключатель «я дома» позволил управлять через CCU6225 контактором подачи питания на цепи света и бытового оборудования. При выходе достаточно перевести его в положение «я ушел» и вся техника в доме будет обесточена. При приходе — переключить в положения «я дома» и будет подано питание на все внутренние цепи. CCU6225 позволяет запрограммировать выключение цепей при выходе из дома и включение только одной (освещения) при входе. Смысл в том, что, уходя следует выключить обогрев, но не факт, что при входе его надо включить.

Также в щите установлены четыре автомата для аварийного принудительного включения контакторов путем прямой подачи тока на катушки параллельно симисторным ключам. Это сделано на случай отказа либо симисторов, либо CCU6225.

Договор с МОЭСК привел к необходимости подавать показания потребленного электричества раз в месяц. Т.е. надо раз в месяц снять показания счетчика. Летом это не проблема, но осенью-зимой-весной там никто не живет и ездить на дачу только ради считывания показаний неразумно.

Счетчик Меркурий 231 имеет инфракрасный порт для дистанционного считывания показаний, есть программа «Конфигуратор» для общения с такими счетчиками, т.е. техническая возможность электронно считать показания существует. Автор «конфигуратора» ведет блог и доступен по электропочте.

Выбор способа передачи показаний.

Для передачи показаний существуют готовые промышленные решения (системы АСКУЭ) — и софт и железо. Но они достаточно дороги для единичного некоммерческого использования и требуют организации линии связи. Как правило, используется какая-то разновидность канала сотовой связи. Оплата за такой канал на сегодня — примерно 300 р в месяц. Т.е. для передачи 24 показаний (я попросил двухтарифный режим при заключении договора) надо будет заплатить за год 300 р * 12 = 3600 р.

С одной стороны, это немного. С другой стороны — и эти деньги надо заработать. Также очевидна техническая избыточность инет-канала через сотовую связь. Дом застрахован, рассматривать лица крадунов, если что случится, особого смысла не имеет, контроль 24×7 не нужен. Для передачи показаний желателен самый дешевый вид связи, чтобы платить по минимуму.

Такой вариант есть — это аудиоканал в уже имеющейся CCU6225LT. Входящий вызов бесплатен, голосом передать показания займет минуту-другую, т.е. несколько рублей в месяц будет стоить такой режим передачи данных. Экономия на пару порядков — это серьезно, несмотря на абсолютные значения сумм :).

Получается такая схема: надо сделать контроллер, который будет считывать показания со счетчика через инфракрасный порт и проговаривать их в телефонную линию.

Размещение счетчика

Счетчик Меркурий 231 и инфракрасный адаптор размещены в щите на столбе. От щита до места размещения Говорилки в доме проложена витая пара FTP для наружного размещения суммарной длиной около 35 м. Витая пара была проложена одновременно с установкой нового счетчика и заменой однофазной подводки к дому на трехфазную. Кабель состоит из 4-х стандартных витых пар в общем экране и защитной оболочки черного цвета. Внешняя оболочка черного цвета — признак кабеля для наружной эксплуатации. Пластик черного цвета содержит добавки, повышающие устойчивость пластика к Солнечной радиации. Инфракрасный адаптор размещен в корпусе размером 60 на 40 на 30 мм и со стороны Говорилки выглядит как стандартный порт RS232.

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

На обратной стороне кабеля в доме смонтировано устройство защиты из пяти диодов типа 1.5KE18CA (Защитный диод двунаправленный, 1500Вт, 18В, [DO-201]), стандартная вилка DB9 и разъем USB для подачи питания на инфракрасный адаптор. Это конечно не полноценная грозозащита, но сколько-то энергии может поглотить. На принципиальной схеме Говорилки устройство защиты от статики обозначено как «модуль защиты».

Стандартный разъем RS232 и стандартный USB разъем позволяют помимо Говорилки подключить обычный ноутбук и воспользоваться программой «Конфигуратор» для, например, подстройки часов или считывания данных счетчика для анализа потребления по месяцам. Таким подключением я пользовался чтобы посмотреть обмен программы со счетчиком, записать команды счетчику и ответы счетчика. Из доступной в сети технической документации не всегда можно правильно понять какую команду надо выдать счетчику и как правильно расшифровать ответ. Сравнивая же запомненные скриншоты, например, чтения энергии или тока из счетчика и запомненного побайтового обмена достаточно просто выделить команду и расшифровать ответы.

Попутно замечу, что ноутбуком с программой-сниффером очень удобно смотреть за обменом Говорилки и счетчика при отладке скетча, достаточно подсоединить параллельно вход RX Говорилки и вход RX ноутбука. Я использовал для выполнения этих соединений электротехнические быстрозажимные клеммы Wago на три и пять позиций. Фото такой клеммы приведено на рис. 3. Эти клеммы оказались чрезвычайно удобными для быстрого монтажа соединений из жил витой пары.

9197df145d7b49ae9aaced941910a38a.jpg
Рис. 3 Клемма Wago

Выбор элементной базы Говорилки

На этом этапе проектирования я задумался над основой Говорилки — на какой элементной базе делать систему? Вариантов несколько:

• Использовать старый компьютер из наличия, снимать данные и проговаривать программно.
• Использовать что-то на базе Ардуино.

Первый вариант интересен невысокой трудоемкостью разработки и огромными возможностями расширения функционала. Но поскольку зимой дом не отапливается, то надо обеспечить работу компьютера и при сильно отрицательных температурах. Причем не столько работу саму по себе, сколько перезапуск компа после прекращения подачи электричества. Это бывает нечасто, но раз в месяц электричество исчезает на время, достаточное, чтобы компьютер остыл до температуры окружающей среды. Запуск компьютера при температурах ниже +5 градусов Цельсия проблематичен.

Первая серьезная проблема — старт винчестера. В мануалах указывают допустимый диапазон от +5 градусов. Т.е. при более низкой температуре ничего не гарантируется. Личный опыт эксплуатации сервера на балконе тоже говорит, что винчестеры не стартуют при низких температурах. Причины банальны — загустевание смазки в подшипниках и недостаточный момент шпиндельного мотора для страгивания с места пакета блинов. Это явление для ненового, поработавшего винчестера усугубляется.

Вторая проблема — резкое изменение параметров электрорадиоэлементов (ЭРЭ) с падением температуры. Так, можно ожидать резкого ухудшения емкости разнообразных конденсаторов в цепях питания, что приведет к заметному увеличению уровня помех по цепям питания при низких температурах и возможно к другим странным эффектам, таким как нестабильность работы, зависания и пр., что для автономно и удаленно работающего компьютера недопустимо. Бытовые компьютеры предназначены для использования при плюсовых температурах и ставить в них ЭРЭ с большим температурным диапазоном излишне расточительно.

Очевидно, что обе эти проблемы можно обойти, поместив компьютер в термостабилизированный кожух и, возможно, добавив сторожевой таймер для перезагрузки зависшей машины. Но это уже слишком дорогое решение. Замену обычного винчестера на SSD также не имеет смысла рассматривать — нецелесообразно дорого.

При использовании Ардуино подобных проблем нет — дисков там нет, сам кристалл рассчитан на работу от -40 до +105С°, а фильтрующие конденсаторы по питанию легко дублируются элементами, пригодными для работы в расширенном температурном диапазоне. Сторожевой таймер уже встроен.

Есть и третья проблема. Раз уж делается расширение возможностей дистанционного управления, разумно остановиться не только на считывании показаний счетчика, но и поставить несколько других датчиков — температуры внутри и снаружи дома, влажности, освещенности, атмосферного давления. Все эти датчики имеют как правило интерфейс типа I2C или 1Wire, т.е. так или иначе требуется преобразователь данных, полученных по этим интерфейсам, в понятные для компьютера. Один из разумных вариантов — Ардуино.
Таким образом получается, что разумно использовать Ардуино для считывания показаний счетчика и всех подключенных датчиков и передачи их голосом по речевому каналу CCU6225.
Я мог использовать стандартную Ардуину Нано на процессоре ATMEL 328p, но у меня лежали 4 платы на процессоре STM32F103C8T6 (рис. 4) и я решил, что будет интересно использовать этот более продвинутый 32-х битный процессор. STM32F103C8T6 имеет 64 кб флеш-памяти для программы и 20 кб ОЗУ и может работать с тактовой частотой 72 МГц. В реальности флеш-памяти больше вдвое. На форуме www.stm32duino.com были сообщения об успешной работе модулей и программ при выборе опции »128 кб памяти».

d5d05722bc8f48188266212874bf68b6.JPG
Рис. 4 Внешний вид платы на процессоре STM32F103C8T6 (Blue Pill)

Платы STM32F103C8T6 приходят без загрузчика, но процедура зашивки загрузчика несложна, после чего плата может программироваться посредством стандартного Ардуиновского IDE. На форуме www.stm32duino.com имеется подробное описание действий, которые надо предпринять для установки IDE и прошивки загрузчика.

Плата («Blue pill») c STM32F103C8T6 имеет часовой кварц (32768 Гц) на борту и может хранить текущее время при подключении backup батареи с напряжением около 3В к контакту VBATT. В моем проекте эта возможность не использована, поскольку время можно считать из счетчика.

В момент принятия решения о платформе Говорилки я еще не располагал реальным опытом работы с процессором STM32F103C8T6. Тем не менее я принял решение использовать именно этот процессор и не пожалел — работать с ним оказалось ничуть не сложнее, чем с Atmel328р, а возможностей и ресурсов существенно больше, процессор быстрее. Работа с дисплеем оказалась проще — не нужны преобразователи уровня 5 — 3.3 вольт, все датчики также подключаются напрямую. Изображение на экране формируется существенно быстрее даже в обычном режиме обмена без использования DMA.

На рис. 5 приведена схема электрическая принципиальная.

a5373547b2764c04a049e012639835f6.GIF
Рис. 5 Говорилка. Схема электрическая принципиальная

В STM32F103C8T6 имеется два аппаратных контроллера I2C и я хотел разнести разные группы датчиков по разным каналам. Так, на один канал я хотел присоединить датчики внешней температуры и влажности, а на второй — остальные, размещенные внутри корпуса Говорилки. Я хотел таким образом увеличить надежность и живучесть системы, чтобы при коллизиях с внешними датчиками отказал только один канал, а все остальное осталось в рабочем состоянии. Первый канал заработал сразу и без проблем (на выводах PB6, PB7), как в аппаратном режиме с тактовой частотой 400 КГц, так и с использованием программного обмена. Запустить второй канал I2C (на выводах PB10, PB11) с использованием библиотеки HARDWIRE, адаптированной под Blue Pill, оказалось непросто. Сейчас я считаю, что в библиотеке HARDWIRE имеются особенности, проявляющиеся именно при работе со вторым каналом. После долгой борьбы второй канал I2C запустить удалось. Ситуация парадоксальная — при подключении какого-либо датчика к первому каналу и загрузке тестовой программы например, сканера I2C — все работает сразу. Переключение датчика на второй канал и замена цифры 1 на цифру 2 в команде создания объекта (HardWire H2Wire (2, I2C_FAST_MODE);) приводит к полной неработоспособности системы. Плата наглухо виснет и выводится из этого состояния только кнопкой Reset. Детальные исследования проблемы с применением отладочных точек после каждого оператора и логического анализатора для просмотра сигналов, генерируемых на шине I2C2, позволили найти место зависания и устранить его. Для меня решением проблемы послужило задание точного размера всех критичных переменных, используемых в обмене по I2C2 (int16_t вместо int и т.п.). Очень осторожно предположу, что неверный размер переменных, используемых для обмена с подпрограммами библиотеки HARDWIRE, приводит к записи (или чтению) неверных областей памяти, что в свою очередь дает непредсказуемые результаты. Почему это проявляется при использовании второго канала I2C и не проявляется при использовании первого — я не знаю. Также эта гипотеза не объясняет странности с сигналами SDA и SCL, один из которых при уже при загрузке скетча ушел в ноль и так там и оставался до сброса. Как это связано с объявлением переменных и их разным размером — я даже предположить не могу.

Генерация звука

После анализа всех желаний (ака хотелок) стало понятно, что фраз для произношения надо много (до сотни). В текущем варианте использовано 76 фрагментов. Использовать под это невеликую память Ардуино неразумно. Поиск по инету способов генерировать звук дал неожиданно замечательные результаты: в продаже в интернете имеются модули WT588D-U с памятью 32 мегабита, которые могут запомнить до 220 фрагментов звука суммарной продолжительностью несколько минут при наилучшем качестве. Модули оснащены разъемом мини USB и могут работать в разных режимах: воспроизводить звук по команде от МК, от кнопок. Фото модуля представлено на рис. 10 поз 1. В модуле имеется встроенный 13 битный ЦАП и PWM усилитель для динамика мощностью 0.5 Вт на 8 ом. Этот модуль понимает только формат WAV с частотой дискретизации от 6 до 22 КГц. Напряжение питания модуля 2,8 — 5,5 вольт, сопряжение с МК — 3.3 вольта. Если надо использовать МК с логическими уровнями 5 вольт — надо применить конвертор (годятся от простейших резисторных делителей до микросхемных).

Программно модуль может управляться либо по однопроводному интерфейсу, либо по трехпроводному. Подробнее см voice-chip.ru/waytronic2.htm. Любопытной особенностью модуля является метод формирования звуковых фрагментов: они могут состоять из произвольного количества загруженных в память звуков и пауз. Паузы места в памяти не занимают, т.е. можно загрузить в память много атомарных звуков и конструировать из них разные фрагменты, разнообразно соединяя одни и те же звуки. Для воспроизведения конкретного фрагмента (или голоса, как это названо в мануале) надо передать в модуль номер этого фрагмента, дождаться появления сигнала BUSY и дождаться пропадания сигнала BUSY. Именно в этой последовательности — сигнал BUSY появляется с довольно большой задержкой после получения команды. Конкретный тип сигнала BUSY (низкий, высокий, с открытым коллектором) определяется при создании проекта. Можно переключать эти опции в готовом проекте, но требуется перекомпилировать проект заново перед записью в модуль. Галка «Pull high resistor» (рис. 5) управляет типом выхода «Busy» — полноценный двухтактный пуш-пулл или открытый коллектор. Режим ОК полезен при подключении сигнального светодиода, а пуш-пулл — при подаче сигнала на управляющий МК. Проект создается программой, которую можно скачать, например, yadi.sk/d/WV3W64rdzp4tV тут (версия 1.6 beta) или найти в инете самостоятельно. Тут (voice-chip.ru/prog//wt588d_soft.rar) есть версия 1.0.
Я использовал версию 1.6 бета, просто потому что она попала ко мне в руки первой.
Режим проговаривания я использовал упрощенный. Так, числа проговариваются просто по одной цифре без разбиения на сотни, тысячи, не учитываются рода и склонения\падежи и пр. Например, число 397.45 будет проговорено как «Три девять семь точка четыре пять», а фраза про число обнаруженных датчиков 18b20 будет выглядеть так: «обнаружено один датчиков температуры». Такой способ использует свойство значительной информационной избыточности русского языка, однозначность восприятия информации на слух не уменьшается, хотя неверные падежи и склонения конечно режут слух. Но простота программирования такого режима перевесила желание сделать академически правильное произношение. Замечу, что никакой rocket science в программировании правильных склонений и спряжений нет, есть масса примеров, где числа преобразуются в числа прописью, во всех мыслимых вариантах: от искусных таблиц и макросов в Экселе до отдельно стоящих dll на Си, но трудоемкость вопроса велика. Исходя из этих факторов я решил максимально упростить программу собственно проговаривания на первом этапе работы, уделив максимум внимания функционированию программы в целом и оставив доработки второго порядка для занятий темными зимними вечерами :). Свободной памяти в WT588D-U и STM32F103C8T6 осталось достаточно для любых мыслимых изысков в организации правильного произношения. На рис. 5 в правом нижнем углу видно, что весь мой проект занял менее 23% памяти модуля WT588D-U при суммарной длительности всех фрагментов 78 секунд.

Звуковые файлы можно попытаться записать самому либо сгенерировать одной из программ синтеза речи. Имея некоторый опыт записи приветствий для офисных телефонных станций, я выбрал второй вариант без колебаний. Опыт говорит, что самостоятельно сделать качественный звуковой файл непросто — нужен хороший студийный микрофон, помещение с хорошей звукоизоляцией и определенная тренировка в произношении. Среди интернет-проектов с синтезом русского голоса мне больше всего понравилась Ивонна.

Я подготовил список фраз (yadi.sk/i/WO64jsXRzp5XF) и за небольшое время получил набор нужных звуков. Есть некоторые недостатки: в некоторых фразах неверны ударения, какие-то слова произносятся непривычно. Например, слово «ампѐр» машина говорит, как «а̀мпер». Разборчивость фраз очень хорошая и на перечисленные недостатки я закрыл глаза, хотя наверняка есть способы тонкой настройки речевых синтезаторов, которые позволят добиться идеального результата. Основная задача Говорилки — разборчиво произнести цифры потребления и выходных данных датчиков.

Преобразование полученных файлов в формат WAV я сделал конвертором из комплекса AIMP. Методом проб и ошибок выяснилось, что в batch-конверторе надо явно указывать все параметры выходного файла, явно включая все опции, иначе программа записи данных в wt588 не позволяет импортировать файл с сообщением «неверный формат». Детально я не разбирался, возможно проблема в отсутствии какого-либо параметра в заголовке файла, что программой импорта воспринимается как неверный формат. Естественно, можно использовать и разнообразные онлайн конверторы.
Попутно выяснилось, что с кириллицей в названиях файлов проблем нет.

Работа с этой программой имеет некоторые особенности. Сначала надо создать проект (рис. 6).
В проект на левую панель надо набрать звуковые файлы. Это исходные звуки, из которых можно конструировать фрагменты. Звуковые файлы требуются в формате WAV с частотой дискретизации от 6 до 22 кГц с шагом 2 кГц. Программа при импорте файла проверяет эти параметры и не позволит импортировать файл с недопустимой частотой дискретизации.
Для создания фрагмента в правой части надо выбрать номер фрагмента (Equation No) и в строки правой панели набрать файлов с левой панельки. Фрагмент может включать всего один звуковой файл из правой панели или состоять из многих звуков и пауз. В разные позиции справа можно набирать одни и те же файлы из левой панельки. Т.е. внутри модуля хранится одна копия файла и ее можно использовать в нескольких фрагментах. В моем проекте все фрагменты содержат только один звуковой файл. Для запуска воспроизведения, например, фрагмента номер 0xD0 надо передать в модуль команду 0xD0.

026653810cb04b508d32933451953855.PNG
Рис. 6 Скриншот проекта

Пока фрагмент играется — выход BUSY прижат к нулю (или напротив — к питанию, опция в настройках). На рис. 7 представлены опции создания проекта.

b324bf70987d499199aeeab96a4b5ea7.PNG
Рис. 7 Опции создания проекта

Также в опциях проекта задается и тип выходного устройства — ЦАП (DAC) или PWM усилитель. Выход ЦАПа подавать на динамик не следует, надо использовать дополнительный усилитель.
Я усилитель делать не стал, а приготовил два проекта — один с ЦАП, другой с PWM и переставлял модули в Говорилке при отладке. В модулях следующих поколений оба выхода работают одновременно — т.е. можно и присоединить динамик и использовать выход ЦАПа.
После создания проекта и набора нужных фрагментов надо скомпилировать проект. На рис. 8 представлен результат компиляции проекта.

fa1ec04fa9c0467abc24af3d08ed3bf8.PNG
Рис. 8 Результат компиляции проекта

Далее надо подсоединить модуль к компьютеру и через меню открыть модуль кнопкой «Connect» (индикатор «Status» станет зеленым), стереть память модуля («Erase») и записать проект («Download»). Можно сделать это одной кнопкой «OnekeyDownLoad».

82afb16cda894af68dab776b47406153.PNG
Рис. 9 Запись проекта в модуль

Готовый проект можно скачать тут yadi.sk/d/cSzqFg8gzp66T

Управление WT588D-U от микропроцессора

Поиск по инету готовой библиотеки для управления WT588 дал довольно скудные результаты — нашлась одна приемлемая библиотека, работающая с модулем в режиме 3-х проводного интерфейса. Модуль может управляться от процессора либо по однопроводному интерфейсу, либо по трехпроводному. В реальности требуется еще считывать состояние вывода BUSY и управлять выводом CS, т.е. суммарно нужно 5 выводов от МК. То, что в китайском мануале называется «однопроводным интерфейсом» в реальности требует три вывода МК.
В тестовой схеме модуль заработал, но выяснилась неприятная особенность — если систему выключить и включить — модуль переставал реагировать на команды. Экспериментальным путем я выяснил, что отключать питание надо более чем на 30 секунд, после чего модуль опять работает. Манипуляции выводом «reset» не помогали, модуль на это не реагировал вовсе. Ничего не найдя в инете по этой проблеме, я написал в фирму «Sound technologies» письмо с просьбой о техподдержке. К моему удивлению, я получил вполне вменяемый ответ. Оказалось, что модулей WT588D-U было несколько модификаций и более ранние версии как раз и отличались замеченным мной поведением при быстром отключении-подаче питания. Стала понятна низкая цена купленных мной модулей :).

При обсуждении вопросов коллега из «Sound technologies» рассказал, что сейчас есть более интересные модели этой фирмы, мы пообщались и он прислал мне несколько модулей на тестирование. Фотографии модулей приведены на рис. 10.

44b6eadd472a4a179e3434ef944200a2.JPG
Рис. 10 Звуковоспроизводящие модули, 1 — WT588D-U, 2 — WT200302, 3 — WT2003M03

Присланный модуль WT588D–U действительно не зависал при быстром выключении\включении питания. Внешне новый и старый совершенно одинаковы, я их тщательно сравнил под микроскопом, видимо отличаются номиналы конденсаторов по цепям формирования импульса сброса при подаче питания.

В посылке также были и новые модули, более интересные. Так, модуль WT200302 со встроенной флеш-памятью (рис. 10 поз 2) в два раза меньше, работает с форматом MP3, и не требует отдельного программатора. Значительно увеличено максимальное количество звуковых фрагментов — 3584. Его очень просто программировать — достаточно просто подключить модуль к компьютеру по USB и записать нужные звуковые файлы как на обычную флешку. Управляется модуль одновременно кнопками и командами по одному проводу. Режима управления по трем проводам нет. Точно так же, как и у предшественника, вывод BUSY активен, пока играется звуковой файл. В отличие от предыдущего модуля BUSY только низкий, т.е. когда звук воспроизводится — сигнал BUSY падает к нулю. У модуля есть любопытная особенность — при подключении по USB он становится звуковой картой, т.е. можно прямо с компьютера послушать свои фрагменты.

Еще один модуль WT2003M03 (рис. 10 поз 3) может работать со стандартной микро флеш картой размером от 32 мб до 32 гб. Управляется точно так же — по одному проводу. Возможности модуля еще шире: он поддерживает как WAV, так и MP3 и может использовать до 65487 фрагментов.

В посылке также оказались модули в минималистичном исполнении и программатор для них, фото представлено на рис. 11. Эти модули содержат необходимый аппаратный минимум — одну микросхему флеш-памяти и управляющий контроллер wt588. Для их программирования требуется внешний контроллер. Их можно использовать при жестких требованиях по стоимости и размерам к устройству. Подробности, детали комплектаций, возможные напряжения питания и пр. техническая информация обильно представлена на сайте voice-chip.ru

1fb4bfc3cfb547ec9d5b8eb20aedc554.JPG
Рис. 11 Минималистичные модули

Все звуковые модули имеют разъемы с круглыми ножками (DIP цанговые), которые почти не держатся в DIN планках. У меня в хозяйстве таких разъемов не нашлось, специально покупать их неразумно. Поэтому для тестовых целей были приспособлены уже имевшиеся маленькие разъемы.

Для использования независающего модуля в Говорилке я перепаял разъем. Поскольку оборудования для выпаивания таких разъемов у меня нет, я поступил так: сначала бокорезами раскусил разъем на плате на мелкие части, затем выпаял эти части, очистил отверстия стальной иглой и запаял новый DIN разъем со стандартными квадратными ножками, плотно входящими в разъем на плате.

Технологический хинт: очистка стальной иглой отверстий, залитых припоем, делается так: нагревается отверстие и без флюса! (это важно) в отверстие быстро вставляется стальная игла. Олово застывает трубочкой, игла вынимается — отверстие готово. Припой без флюса плохо липнет к стальной игле, что и позволяет заново формировать отверстия в печатной плате. Если олово начинает прилипать — достаточно остывшую иглу повращать в пальцах, тонких слой жира с рук ухудшит смачиваемость припоем поверхности иглы. Если есть вакуумный оловоотсос — все намного проще:).

Уже после отладки Говорилки я занялся подключением модуля WT588D-U по однопроводному интерфейсу. В процессе отладки c применением логического анализатора обнаружились две неточности в мануале. Первая проблема — после поступления команды модуль выставляет сигнал BUSY через примерно 34 мс (а не 5, как в мануале). Вторая — вывод RESET нельзя оставлять неприсоединенным, он должен быть присоединен либо к питанию 3.3 в, либо к выходу МК. Это с одной стороны общее правило, с другой — об этом всегда явно пишут в мануалах.

Я до этого додумался не сразу и довольно долго не мог понять, отчего система издает странный хрипящий звук вместо нормальных фраз.

Модули WT2003M2 и M3 отличается от WT588 размером управляющего слова и порядком передачи бит в слове. У WT588 слово управления 8 бит и первым надо передавать младший бит, а у WT2003M2 и M3 — слово 16 битное и первым надо передавать старший бит.

Также отличаются времена задержки выдачи звука и реакции вывода BUSY — у WT588 задержка относительно последнего бита команды около 30 мС (в мануале ошибочно указано 5 мС), у WT2003M2 и M3 — около 200 мС. Эти задержки надо учитывать, если программа конструирует составные фразы, например, «температура за бортом» + «два» + «пять» + «градусов». Чтобы фразы не наезжали друг на друга надо запустить воспроизведение первой фразы, дождаться ее окончания анализируя появление и пропадание сигнала BUSY, запустить следующую фразу и т.д. В моем случае анализ BUSY и ожидание окончания воспроизведения заложены в подпрограмме воспроизведения.

Запустить по однопроводному каналу платы WT2003M2 и M3 удалось, поменяв порядок выдачи бит команды. По мануалу надо выводить младшим битом вперед. На самом деле — старшим битом вперед. Архивы с тестовыми программами для модулей — тут: yadi.sk/d/I46yR7JvzpZGV. В тестовой программе предусмотрена выдача импульса запуска для логического анализатора, чтобы посмотреть, что реально формируется на выводе управления и когда реально появляется и исчезает сигнал BUSY.

Модули WT2003M2 и M3 оказались довольно капризными к параметрам MP3 файлов. Сконвертированные из wav произносятся замедленно. Полученные от text-to-speech on-line конвертора произносятся со «сглатыванием» последнего слога. Естественно, все файлы нормально проигрываются на компьютере. Явление «сглатывания» имеет место и при команде от МК и при запуске воспроизведения кнопкой. Впрочем, это неточности второго порядка и наверняка можно подобрать такие параметры mp3, с которыми все будет хорошо, добавить тишины до и\или после фрагмента. Проблема очевидно связана с невысоким быстродействием mp3 декодера и может рассматриваться как особенности реализации: «это не баг, это фича».

Последняя особенность этих модулей, о которой следует упомянуть, это то, что сигнал от PWM (т.е. прямо с динамика) подавать на вход сотового модуля не следует. Результат будет ужасным. На вход сотового модуля следует подавать сигнал с ЦАПа после соответствующих цепей фильтрации. В моей схеме сигнал дополнительно ослабляется до уровня, соответствующего уровню стандартного микрофона, т.е. 20–30 мВ. На выходе ЦАПа сигнал имеет размах, близкий к уровню питания, т.е. 3 вольта. Упоминаю я об этом вот почему: поначалу я хотел сделать универсальный вариант, чтобы звук шел и в сотовый модуль и на динамик при надобности. Я сделал схему для подачи сигнала ШИМ на динамик или нагрузочный резистор через выключатель и этот же сигнал профильтровал для подачи на сотовый модуль. Практическая проверка показала, что простыми средствами отфиль

© Geektimes