» » Возвращаясь к напечатанному. Стрелочный индикатор на микроконтроллере Attyny13

 
 
 

Возвращаясь к напечатанному. Стрелочный индикатор на микроконтроллере Attyny13

Разместил bdna 25 июля 2015. Просмотров: 5205

6
Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13

В поисках чего бы ещё собрать в плане изучения МК, нашел датагорскую статью «Стрелочный индикатор на микроконтроллере 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 В на входе.

Далее подаём на вход разные уровни сигнала и создаём табличку соответствия показания индикатора с входным сигналом.

В итоге получился вот такой индикатор:
Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13


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

Нужно сказать, что Attyny13 не имеет встроенного UART. Порывшись в Интернете, нашёл несколько примеров программной реализации UART. Взял один из примеров и соединил с программой «показометра». Всё заработало и если передавать просто значения ADC, то памяти хватает, и в Attyny13 все помещается. Но нам-то хочется, чтобы всё передавалось в «расшифрованном» виде, т.е. напряжение и мощность на выходе УМЗЧ. Но тут программа раздувается довольно сильно и в Attyny13 не помещается.

Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13
Схема полностью совпадает с оригинальной схемой из статьи «Стрелочный индикатор на микроконтроллере Attyny13». Я просто использовал свободную ногу номер 7.

Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13
Упрощенная схема для проверки работы ШИМа в зависимости от входного напряжения и работы UART.


Выходом стала замена Attyny13 на Attyny45. По ногам они совпадают, осталось только переткнуть в панельке.
Собственно это и есть та самая небольшая доработка, упомянутая мной в начале.
Для вывода сигнала Tx используется свободный вывод PB2 (7 нога). Снимается сигнал через переходник, подключаемый к разъёму для программирования (7 нога).
Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13


Информации на терминал выводится в виде:
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).
Возвращаясь к напечатанному.  Стрелочный индикатор на микроконтроллере Attyny13


Чуть позже появилась идея использовать в качестве терминала не компьютер, а собрать устройство на базе МК Atmega и дисплея от телефона. Что и было сделано. Правда кроме мини-терминала получился ещё мини-осциллограф и генератор. Но об этом в следующий раз.

Данную идею (Attyny13 + UART) можно использовать, например, для контроля тока выходных ламп или неких напряжений в усилителе. Подключаем ADC-входы Attyny13 к катодным резисторам выходных ламп и снимаем по UART показания. Причём сама Attyny13 включается только если подать на неё питание в момент съёма информации. В остальное время Attyny13 спит и ни на что не влияет.

Файлы:

Архив с программой, отладочной схемой в Proteus и платой в DipTrace.
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

Об авторе

Дмитрий (bdna)
РФ. г.Москва
О себе автор ничего не сообщил.
 

Понравилось? Палец вверх!

  • всего лайков: 45

Поделись с друзьями!


Связанные материалы:


Kaspersky FREE. Бесплатная годовая лицензия для России, Белоруссии и Украины

Привет, друзья! Очередной подарок от kaspersky.ru — антивирус «Kaspersky FREE». Спасибо...

Пусть всегда будет солнце!

Сегодня День Победы. Мы так долго живём без войны, что начали забывать, что это...

Гитарный преамп Tomato - исправленная печатка. Tomato updated pcb. Обновлено.

Маленькая заметочка в стиле «возвращаясь к напечатанному» для устранения замеченных...

17/01 киберсубботник на портале

Привет, дрУги! В ближайщую субботу на нашем портале и в магазине будет...

Стрелочный частотомер 5 Гц – 30 мГц на микроконтроллере PIC16F628A

Этот частотомер не требует цифрового индикатора и, из-за отсутствии динамической...

Сэмплы гитарного комбоусилителя U-96

Как и обещал, записал пару сэмплов на скорую руку с моего комбика...

Библиотеки Diptrace +3D. Разъёмы PBS (розетки)

Продолжая тему библиотек для Diptrace, хочу предложить розетки однорядные PBS для пайки...

Схемка в блокнот. Индикатор разрядки аккумуляторной батареи

При выездах и эксплуатации радиоаппаратуры от аккумуляторных батарей в полевых...

Датагорскiя Вѣдомости №1 (2012)

Здравствуйте, уважаемые сограждане-датагорцы и гости нашего электронного города! Спешу...

Сделай сам преобразователь сигналов для механического энкодера, v.2

Хотелось бы дополнить и продолжить мою статью про энкодер «Преобразователь сигналов...

Transformer: программа расчета маломощного (до 500 Вт) силового трансформатора на

Предлагаю начинающим очень простую программулину для расчета силовых трансформаторов. Автор...

Датагорская Ярмарка электроники v.2 открылась!

Уважаемые граждане Датагории и гости нашего кибер-города! После обновления открылась...
<
  • Гражданин
27 июля 2015 11:58

Радик / galrad

  • Регистрация: 23.08.2011
  • Публикаций: 12
  • Комментариев: 84
 
  • 0
Идея доработки вполне оправдана, если часто приходиться оценивать мощность выходных каскадов усилителя, и удобнее делать "выносной" прибор с "реальными" показаниями. А если индикатор встроен в усилитель, я думаю, что выводить показания на компьютер уже лишне, достаточно отмечать пиковые значения. Конечно-же с применением Attyny45 возможности прибора возрастают. Автору статьи за творческий подход Респект!

<
  • Гражданин
27 июля 2015 14:58

Дмитрий / bdna

  • Регистрация: 20.03.2013
  • Публикаций: 6
  • Комментариев: 38
 
  • 0
Радик, Спасибо! устройство именно выносное. не встроенное. хотя там и оставлен выход на второй индикатор, на всякий случай, но используется с одним индикатором как подключаемое к разным усилкам. для встроенного устройства UART мне тоже кажется лишним. по крайней мере для передачи уровня сигнала.

<
  • Гражданин
29 июля 2015 16:40

Игорь / AudioKiller

  • Регистрация: 10.01.2012
  • Публикаций: 3
  • Комментариев: 293
 
  • 0
Очень интересно. Особенно про "дергающуюся" стрелку. А не разбирался, отчего это?

Все равно непонятно - если сопротивление нагрузки будет другим, то надо перепрошивать контроллер. Может сразу взять МК с бОльшим числом ног и поставить переключатель сопротивления?

И еще. Для "показометра" эта схема подходит отлично. А если пытаться реально измерять, то надо учитывать, что:
1. Однополупериодного выпрямления для реального звука недостаточно, уж очень сложной форы сигнал. Для синуса вполне подходит.
2. На малых уровнях нелинейность диодов дает погрешность просто огромную.

<
  • Гражданин
29 июля 2015 17:44

Дмитрий / bdna

  • Регистрация: 20.03.2013
  • Публикаций: 6
  • Комментариев: 38
 
  • 0
Добрый день, Игорь!
С замечаниями согласен, но нужно учитывать что это в общем больше оценочный прибор, чем для точных измерений.
но тем не менее: при проверке на вход подавался сигнал (синусоида) разного уровня с цифрового генератора который показывает величину напряжения. параллельно он еще измерялся тестером и сравнивалось с показанием по UART: расхождения во втором знаке. ну и сильно малые напряжения тут не меряются. менее 1 вольта (0,16Вт) в общем не сильно интересно. а вообще обвязку по входу можно сделать любую нужную, в зависимости от целей.
Идея каким то образом показывать контролеру, какая нагрузка. тоже была. но в итоге я просто вывел из расчета 6 Ом. просто у меня такая нагрузка. При необходимости можно умножить/поделить на 1,5. Хотя тут тоже по UART можем выводить например 3 значения, для разных нагрузок. В самой табличке распечатаны значения для 4 и 6 ом. (можно и больше, но мелковато получается smile )
Что касается дергающейся стрелки - то тут сложно сказать. математически вроде "дергаться" не должна. Но по факту у меня получилось с замираниями. Хотя на реальном сигнале замирания не заметно (если как показаметр использовать). возможно это как то связано с работой ШИМа именно с этим индикатором.

<
  • Гражданин
29 июля 2015 22:58

Максим Черепанов / еще один max

  • Регистрация: 10.03.2009
  • Публикаций: 10
  • Комментариев: 91
 
  • 0
Тинька 45-я в 4 раза более объемная, чем 13-я. Не хотите попробовать подключить math.h и использовать родную функцию натурального логарифмирования, вдруг влезет? Хотя бы для пробы?
Фьюзы с завода перешивали? На какой частоте у вас работает контроллер? Я тоже призадумался про дергающуюся стрелку. Не помню, на генераторе прогонял ли. Сам усилитель да, а вот индикатор...
Есть планы модернизации усилителя, может это и показометра коснется, тогда и проверю, может действительно дефект такой в программе есть. Но скорее всего это будет уже на ATmega8 в TQFP, они у меня просто есть, а с ней можно уже ничего не экономить )))

<
  • Гражданин
30 июля 2015 00:04

Дмитрий / bdna

  • Регистрация: 20.03.2013
  • Публикаций: 6
  • Комментариев: 38
 
  • 0
Добрый день, Максим!
частота 8 Мг, это, если правильно вспомнил, было связано с правильным расчетом переменных для работы UART. т.е. они должны быть целыми при расчете.
фьюзы на картинке есть. они изменены, по состоянию с завода, но по моему только в плане частоты. родную функцию логарифма не пробовал. в обшем смысла в этом не увидел. это же только на отклонение стрелки влияет, а не на показания по UART. главное чтобы дергалось как нравится. кому то логарифм комут о линейно, мне, как и Вам, усреднение того и другого.

Скомпилил, ради интереса, с math.h. заполение памяти 92%
Ранее было 84%.
т.е. с родной функцией логарифма влезает, но памяти потребляет побольше.

Еще добавлю, что основной пожиратель памяти (больше половины) это расчеты с плавающей запятой.

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.