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

 
 
 

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

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

6

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

Об авторе

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

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

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

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


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


Макет часов в Corel. Циферблат на 12 и 24 часа и стрелки, cdr

Привет, други! Моему сыну задали в школе принести на следующий урок модель механических часов....

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

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

Простой индикатор уровня сигнала на ОУ LM324 (8 СИД на канал)

Не люблю, когда передняя панель усилителя пустая, имеет лишь ручку громкости да тумблер питания....

Куда запихнуть свой УНЧ (фотоотчет)

Нет-нет, наши УНЧ не настолько плохи, чтобы сделать с ними то, что вы подумали! :bye: Давно...

Стрелочный индикатор на микроконтроллере Attyny13: «показометр» для вашего усилителя

Вспоминается беззаботное детство — в гостях у одноклассника слушаем музыку. Усилитель...

Цифровой измеритель остатка топлива и напряжения АКБ для автомобиля (ATMega8 и

Не знаю кому как, а мне лично не нравится точность, вернее ее полное отсутствие у автомобильного...

Другая схема электронного трансформатора Taschibra (Ташибра, Tashibra)

Вскрыл, ещё до прочтения статьи "Применение электронных трансформаторов Taschibra в...

Открыты две новые подписки! На чипы LT1210 и на Project 2: Индикатор уровня сигнала

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

Датчик угла поворота. Сельсин-датчик и приёмник на микроконтроллере.

Схема сельсин-датчика и программа микроконтроллера практически полностью взяты из журнала Радио №4...

Мобильный усилитель-раскладушка на STK4231, 2 х 120 Ватт

Представляю вашему вниманию мой новый проект - переносной усилитель мощности на микросхеме STK4231....

Сумматор каналов на ОУ. Теория и практика.

Не раз обращал внимание на то, что радиолюбители применяют в своих схемных решениях неоправданно...

Операционные усилители. Ч.2 Активные фильтры

Источник: Радиокот.ру Вторая часть статьи про ОУ для начинающих. Итак, в первой части мы...
<
  • Гражданин
27 июля 2015 11:58

Радик / galrad

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

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

Дмитрий / bdna

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

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

Игорь / AudioKiller

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

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

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

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

Дмитрий / bdna

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

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

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

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

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

Дмитрий / bdna

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

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

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

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