В поисках чего бы ещё собрать в плане изучения МК, нашел датагорскую статью «Стрелочный индикатор на микроконтроллере Attyny13: "показометр" для вашего усилителя».
Идея понравилась, в том числе со своей практической стороны, т.к. иногда бывает трудно убедить слушателей, что звучит всего 1-2 Вт, а не намного больше. В общем идея была сделать индикатор, который при необходимости подключается параллельно АС и показывает уровень подводимой мощности.
Схема была взята из указанной статьи практически без изменений, за исключением одной доработки, о которой чуть ниже. Собрал на макете, прошил программой из статьи, подключил и тут нашёлся подводный камушек.
В оригинальной прошивке, для построения логарифмической кривой использовался способ «с помощью отрезков прямых»:
if (n>=141) x=2*n+2020;
else if (n>=66) x=5*n+1600;
else if (n>=38) x=9*n+1330;
else if (n>=21) x=15*n+1110;
else if (n>=5) x=40*n+600;
else if (n>0) x=160*n+50;
if (n==0) x=0;
У меня движение стрелки индикатора оказалось ступенчатым. Т.е. при плавном прибавлении уровня сигнала, стрелка как бы замирает на определённом значении, а затем перескакивает на следующее деление. Т.е. нет плавного движения стрелки.
Там же есть формула другого алгоритма:
Y=-8196/(X+28)+284.
Я перекомпилировал программу на расчёт по этой формуле, а не отрезками, и всё стало плавно и красиво. Чуть позже формулу немного подправил:
Y =-7168/(X+28)+256;
Мне так больше понравилось.
В окончательном моём варианте стрелочка дёргается не по чистому алгоритму, а по предложенной в той же статье идее усреднения логарифма и линейной функции.
Все что оставалось — это настроить максимальное отклонение стрелки на нужный уровень сигнала. Я себе выбрал максимальное отклонение при 15 В на входе.
Далее подаём на вход разные уровни сигнала и создаём табличку соответствия показания индикатора с входным сигналом.
В итоге получился вот такой индикатор:
Но на этом история не заканчивается. В процессе эксплуатации выяснилось, что не очень удобно смотреть на индикатор, а потом в табличку. Захотелось чего-то большего. Например, передавать данные по UART в терминал.
Нужно сказать, что Attyny13 не имеет встроенного UART. Порывшись в Интернете, нашёл несколько примеров программной реализации UART. Взял один из примеров и соединил с программой «показометра». Всё заработало и если передавать просто значения ADC, то памяти хватает, и в Attyny13 все помещается. Но нам-то хочется, чтобы всё передавалось в «расшифрованном» виде, т.е. напряжение и мощность на выходе УМЗЧ. Но тут программа раздувается довольно сильно и в Attyny13 не помещается.
Схема полностью совпадает с оригинальной схемой из статьи «Стрелочный индикатор на микроконтроллере Attyny13». Я просто использовал свободную ногу номер 7.
Упрощенная схема для проверки работы ШИМа в зависимости от входного напряжения и работы UART.
Выходом стала замена Attyny13 на Attyny45. По ногам они совпадают, осталось только переткнуть в панельке.
Собственно это и есть та самая небольшая доработка, упомянутая мной в начале.
Для вывода сигнала Tx используется свободный вывод PB2 (7 нога). Снимается сигнал через переходник, подключаемый к разъёму для программирования (7 нога).
Информации на терминал выводится в виде:
L_напряжение/мощность
R_напряжение/мощность
Мощность рассчитана применительно к нагрузке 6 Ом.
При необходимости, можно поменять пересчёт на другую нагрузку в строках программы:
// перевод в ваты на нагрузке 6 Ом
vaw=(vav*vav)/6;
vbw=(vbv*vbv)/6;
Выводятся средние значения с периодом измерения примерно 1 сек.
Вывод по UART настроен на скорость 19200. При необходимости можно поменять в softUart.h в строке:
/*скорость обмена*/
#define SUART_BAUD_RATE 19200L
Питается устройство через разъем mini-USB, от любого подходящего ЗУ от телефона, в случае работы автономно (без подключения к UART). Либо через разъем для программирования, питание при этом берётся с платы UART (у меня внешняя плата UART).
Чуть позже появилась идея использовать в качестве терминала не компьютер, а собрать устройство на базе МК Atmega и дисплея от телефона. Что и было сделано. Правда кроме мини-терминала получился ещё мини-осциллограф и генератор. Но об этом в следующий раз.
Данную идею (Attyny13 + UART) можно использовать, например, для контроля тока выходных ламп или неких напряжений в усилителе. Подключаем ADC-входы Attyny13 к катодным резисторам выходных ламп и снимаем по UART показания. Причём сама Attyny13 включается только если подать на неё питание в момент съёма информации. В остальное время Attyny13 спит и ни на что не влияет.
Файлы:
Архив с программой, отладочной схемой в Proteus и платой в DipTrace.🎁 w-metr_45.zip 176.19 Kb ⇣ 87
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.