Снова вольтметр и амперметр, но радикально обновленный

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (12 оценок, среднее: 5,00 из 5)
Загрузка...

Затеял я навести порядок на рабочем столе и радикально упрятать в корпус привода для чтения CD-ROM лабораторный блок питания, блок питания паяльника TS-100, USB-хаб и USB-зарядку. Но в последний момент возникла трудность — китайский вольтметр с амперметром не влезли по ширине передней панели привода. Решил я сделать свой, снова на PIC16F690, схему которого я давно публиковал на моём старом сайте. Но под руку попали сдвоенные 7-сегментные индикаторы, которые замечательно вписались по ширине корпуса 30мм. Пришлось ставить четырехразрядные индикаторы и переписывать программу контроллера для более точного расчета напряжения и тока…

Как выяснилось уже в процессе эксплуатации нового измерителя, повышенное разрешение приборов очень удобно при диагностике ремонтируемых устройств или отладке новых. Реже приходится пользоваться тестером для замера тока потребления.

Схема нового вольтметра и амперметра для лабораторного блока питания мало отличается от схемы старого. Но софт переписал с нуля и радикально. Главное отличие в схеме амперметра применен шунт не 0,1 Ом, а 0,01. Это очень уменьшило падение напряжения на нём, но повысило требования к преобразователю тока в напряжение. Так как в качестве усилителя я применил «народный» LM358, пришлось для компенсации напряжения смещения вводить программную коррекцию. При первом включении прибора (обязательно без нагрузки) он измеряет падение напряжения на шунте и смещение ОУ и принимает этот уровень за ноль и сохраняет значение в энергонезависимую память. Далее все измерения производятся относительно запомненного уровня.




Если по какой-то причине Вы захотите произвести снова калибровку нуля, сделать это можно подав питание на плату с нажатой кнопкой калибровки. Прибор сотрет старое значение. Следующее включение амперметра приведет к измерению и сохранению напряжения условного нуля отсчета.

Резистор, подключенный к выводу 4 микроконтроллера, определяет тип используемого экрана — с общим анодом или общим катодом.
Плата рассчитана на индикатор высотой знака 0,36″.
Мой неудачный первый опыт сборки прибора показал, что зелёные индикаторы почему-то светят весьма слабо. Видимо потому, что яркость слабого свечения зеленых индикаторов делится во времени не на три, а на восемь разрядов двух индикаторов.

В архиве три платы (индикатор и два варианта процессорной платы для контроллеров в корпусах SSOP и SOIC), схема и прошивка прибора.

Если у Вас возникнут вопросы или Вы захотите связаться со мной, сделайте это с помощью формы на страничке «Обратная связь»

2+

54 thoughts on “Снова вольтметр и амперметр, но радикально обновленный

  1. Привет, Eddy!

    Есть мысль использовать этот измеритель в ЗУ автомобильного аккумулятора. Есть два вопроса по этому поводу:
    1. На схеме указан диапазон измеряемого тока 0-4А, можно ли его увеличить до 10А?
    2. Какой метод измерения тока в этом приборе? В автомобильных зарядных форма тока далека от идеальной, особенно если сделана на тиристорах, поэтому хотелось бы иметь среднеквадратичный метод измерения, True RMS так сказать.

    Спасибо за очередную, простую и функциональную конструкцию.

    0
  2. Доброго дня.
    Я думаю, для автомобильного зарядного не обязательно мерить в миллиамперах ток.. Для зарядки лучше подойдет вот эта моя конструкция, тем более с нужной разрядностью и учётом формы тока уже всё нормально:
    http://smartelectronix.biz/publ/ochen_prostoj_ampervoltmetr_na_pic16f690/1-1-0-2

    1+
  3. Здравствуйте, Eddy. Я заметил, что Вы почти никогда не публикуете исходных кодов к своим разработкам, делитесь только готовыми прошивками. Думаю, что Вы как программист хорошо понимаете их ценность, исходники позволяют делиться опытом, исправлять ошибки, и дорабатывать проекты, использовать программные решения одних проектов в других, читающие их программисты могли бы делиться с Вами своими способами доработки Ваших проектов. Исходники позволяют заранее детально оценить поведение прошивки, и её применимость, думаю я мог бы продолжать перечислять, но у Вас вероятно есть причины их не публиковать ? Может это коммерция ? Но Вы не публикуете исходники даже к самым простейшим проектам, коммерчески не эффективным на мой взгляд. И предложений о продаже я тоже не видел тут. Тогда что за причины ? Раскроете секрет?

    0
    1. Доброго дня, Владимир
      Вы практически угадали — я уже очень давно зарабатываю на кусок хлеба разработкой устройств на микроконтроллерах и написанием прошивок к ним. Многие пошли в серию от сотен до десятков тысяч устройств. У меня нет стабильной зарплаты от слова «совсем», т.е. что написал, то и получил. Причём очень часто пишу совсем бесплатно, если разработка не для серийного производства, просто из желания помочь людям.
      Вторая причина в том, что я считаю, что учиться надо на примерах, выкладываемых производителями контроллеров и компиляторов — тексты тех документов создаются профессиональными программистами, а не самоучками вроде меня. Они содержат подробное изложение теории и практических советов по решению задачи. У меня нет такого количества свободного времени, чтобы заниматься преподаванием основ программирования. Увы.
      Третья причина в том, что я очень сомневаюсь в том, что кто-то будет тратить своё время на улучшение или исправление моих текстов. Свои ошибки я стараюсь устранять самостоятельно и максимально быстро. Если человеку нужен вольтметр, он его либо купит на Алиэкспрессе за полтора доллара, либо соберет себе по материалам одного из опубликованных в сети проектов. За пол часа. А сидеть сутками и ковырять сотни строк математики, вспоминая старшие классы школы или курсы института.. Зачем?

      0
      1. 1) причина коммерция вполне понятна.
        Но я как раз насчёт тех самых не коммерческих. «умные кнопки», думаю один из них. Помню, я очень удивился не увидев исходников в архиве к этим умным кнопкам. Нужды в них не было,
        сам бы такое мог написать, просто любопытство. Я давно слежу за вашими разработками они подкупают простотой схемотехники, это стиль всех ваших схем, ведь «Всё гениальное просто!»
        Любопытно было может и тексты Ваши так-же просты и понятны всем 🙂

        3)причина «…кто-то будет тратить своё время на улучшение или исправление моих текстов.»
        Соглашусь с Вами, что никто не будет тратить своё время на доработку чужих частных проектов, но Вы не учли, что проекты с открытыми исходниками с момента их открытия
        перестают быть единолично чьими-то. С исходниками навсегда остаются имена их авторов но сами тексты уже достояние общества, и могут стать самостоятельными и бессмертными как и
        имена их авторов. (Имя Линус Торвальдс яркий пример). т.е. тексты уже не совсем Ваши и другие люди часто дорабатывают их не из благородства и альтруизма, а в СВОИХ личных и даже корыстных целях и потом делятся своими трудами просто потому, что понимают ценность своего труда, а поделиться этим ничего им не стоит, время на доработку они всё равно уже потратили. Мне лично всегда интересно узнать оценку своей доработки от авторов программы и особенно приятно когда мою доработку включают в официальный релиз.
        Я говорю это из личного опыта. Я помню, участвовал в устранении одного бага биллинговой системы Stargazer украинских разработчиков, наличие бага они подтвердили но сами они не спешили его устранять т.к. не использовали эту часть программы. От денег они отказались, сказали нет времени на это. Я потратил недели на изучение исходников и написание патча, разработчики помогали мне, отвечая на вопросы на форуме, результат я опубликовал на том-же форуме с предложением включить в релиз, увы в релиз мой патч не включили по двум причинам,
        1) патч не решал проблему в корне, а лишь помогал её обходить т.е. по факту это «костыль» на большее силёнок не хватило 🙂
        2) применение патча гипотетически могло нарушить работу программы в других частях, требовалось длительное тестирование, ради не очень полезного самим разработчикам «костыля» они не хотели тратить на это время и рисковать. Их Stargazer-ы обслуживали тысячи абонентов, а мой стоял в офисе на 50чел. Но в любом случае мой патч остался опубликованным, и всем кто столкнулся с тем-же багом как я, было уже можно решить проблему. Пусть авторы не приняли мой способ решения, но баг, а затем и ошибку в их коде я всё-таки нашёл, значит чем-то помог проекту.

        2.1)причина » учиться надо на примерах, выкладываемых производителями…»
        и согласен и нет . Так как сказали Вы, так надо только начинать учиться основам, далее этого будет мало.
        Например основы от производителя научат вас записывать числа в ячейки EEPROM, но если их много, как их там систематизировать чтобы удобно было работать и самому не запутаться,
        придумывайте сами.
        Основы от производителя научат вас менять содержимое памяти программ, даже есть готовый модуль от mplab xc8 mcc
        Но как там не запутаться и меняя текст строки не затереть случайно исполняемый код придумайте сами.
        И однажды мне удалось написать свои очень оригинальные версии модулей для работы с EEPROM и памятью программ. Гениальна даже не реализация, её Вы возможно сможете ещё
        улучшить, гениальна сама идея переложить на компилятор заботу о распределении памяти EEPROM и FLASH. Мы ведь не задумываемся об адресах размещения наших переменных и констант в озу и памяти программ, компилятор делает это за нас, но в EEPROM производителями такое не предусмотрено, то-же самое при использовании FLASH памяти программ, её используют поблочно, что ещё геморойнее чем EEPROM, при этом память под константы в этой же самой FLASH компилятор успешно распределяет без нашего участия.
        Написанные мной модули позволяют работать с этими типами памяти почти так-же привычно как с ОЗУ. Сначала была идея загнать все данные в одну структуру в ОЗУ и работать с ними привычным способом, а в EEPROM только копировать полностью или частично эту структуру из ОЗУ. Но такой не бережный расход ОЗУ меня не устраивал. И тут пришла идея объявить эту структуру в ОЗУ и не использовать! (не сочтите меня поспешно за идиота) т.к. структура не будет использоваться её можно объявить располагаемой хоть с нулевого адреса ОЗУ где лежат совсем другие данные. Этим данным ничто не угрожает. Эта структура описывает данные хранимые на самом деле в EEPROM, компилятор об этом «не догадывается:)» она позволяет нам привычным способом получать данные о размерности элементов и их смещении относительно начала структуры. Работать с указателями на элементы этой структуры надо ,передавая их в специальную функцию которая вычислит смещение и использует его для чтения или записи нужного элемента из EEPROM!
        С памятью программ получилось ещё интереснее, там оказались совсем не нужны виртуальные структуры, ведь компилятор в этой области умеет работать с константами, правда только на чтение 🙂 этот недостаток я и исправил написав функцию, меняющую значение констант по указателю. Т.е. для использования памяти программ в качестве перезаписываемой, объявляем обычные константы, константные структуры и массивы, читаем их обычным способом и перезаписываем передавая указатель в мою функцию.
        А теперь скажите, Вы видели подобные примеры от производителей?
        Оценив на практике удобство и мощь этих модулей, возник вопрос — почему ни в одном учебнике мне не попалось ничего подобного, я присваиваю новые значения константам и
        константным структурам будто они не константы вовсе! Написав тогда собственное решение лучше предлагаемых профессионалами, я понял что они не боги. И у самоучек могут быть не
        стандартные решения лучше. Такие удачные изобретения получаются не часто, как настоящие шедевры 🙂 Думаю у каждого опытного программиста есть подобный «брилиант» среди своих наработок, и получить их много в своё распоряжение можно только разбирая чужой код. Самому много такого не придумать нужна слишком «большая удача».
        А примеры от производителей конечно грамотны и полезны, но теперь для меня это лишь «инструкция к инструменту» она учит грамотно пользоваться инструментом, но шедевры
        делать не научит.

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

        1+
        1. «Самое важное — не то большое, до чего додумались другие, но то маленькое, к чему пришёл ТЫ сам » /Харуки Мураками/ ©
          🙂
          И всё же, я считаю что для обсуждения способов реализации той или иной функции есть специализированные форумы программистов.
          У этого показометра исходник 550 строк. На Си (PCWHD). Две недели с чистого листа. Зачем это нормальному человеку?
          Я проникся кусочком философии Джобса, который стремился спрятать сложность объекта от пользователя — устройство должно быть простым и хорошо выполнять свои функции. У человека не должна болеть голова, где там ошибка. Ему надо чтобы всё работало, а не заниматься самоистязанием с калькулятором и симулятором..
          Я думаю, что возможно, когда я смогу хоть малость расслабиться от необходимости добывать кусок насущной пищи и буду считать себя достаточно умелым программистом, начну выкладывать свои труды. А пока сам учусь программированию. Постоянно. Последние лет тридцать. 🙂

          0
          1. При таком извращении у вас такие приемущества:

            1) Есть выбор, какие структуры копировать в RAM целиком сразу при загрузке, а какие по-элементно и по необходимости.
            например массив текстовых сообщений нет смысла загружать в раму весь сразу если они используются по одному. Это экономит раму.

            2) Простота доступа к элементам структур в EEPROM. Не нужно думать об адресах хранения элементов структур.
            В редакторе кода работают подсветка синтаксиса, и выбор элементов структур, что уменьшает вероятность ошибок да и просто удобно.

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

            Вот рабочий пример этого извращения, где адрес обновляемого элемента в епроме передаётся в функцию как простой указатель, экономии рамы тут нет.
            Прототип функции // void SaveStructEEPROM(void * vp_target_EEPROM, void * vp_source, size_t size, bool NullTerminator);

            применение
            SaveStructEEPROM(
            EEPROM->sGSM.AdminPhoneNums[Menu_0_ActiveItem], //void * vp_target_EEPROM
            sGSM.AdminPhoneNums[Menu_0_ActiveItem], //void * vp_source
            sizeof(EEPROM->sGSM.AdminPhoneNums[Menu_0_ActiveItem]), //size_t size
            NULL_TERMINATOR_ON //bool NullTerminator
            );
            EEPROM-> это указатель на структуру в епроме объявленный как указатель на раму. т.к. указатели на епром разработчиками пока не предусмотрены
            Первый sGSM это структура являющаяся элементом структуры EEPROM
            AdminPhoneNums двумерный массив с номерами телефонов, элемент структуры sGSM
            Второй sGSM настоящая структура в раме того-же типа что в епроме, один из номеров телефона которой копируется в епром.

            0
          1. Я в общем под PIC решение изобретал, на AVR опыта почти нет. Но за ссылочку спасибо, интересно было увидеть в нём свой «велосипед» 🙂
            Прототипы почти одинаковые, вот от AVR:
            void eeprom_read_block (void *pointer_ram, const void *pointer_eeprom, size_t n);
            Вот указатель на константу в EEPROM const void *pointer_eeprom
            объявлен похоже как указатель на константу якобы во Flash памяти программ.
            Но как они задали адрес при объявлении, оказалось через спец макросс смысл которого я понял не сразу. Вот он с применением:
            #define EEMEM __attribute__((section(«.eeprom»)))
            uint8_t EEMEM NonVolatileString[10];
            И тут засада. Оказывается компилятор под AVR умеет сам распределять епром при указании соответствующей секции в объявлении. т.е. массив и указатель объявлены прямо на EEPROM без всяких извращений.
            Но компилятор под PIC XC8 никаких секций не знает, с ним-то что делать?
            Вариант 1 от разработчиков:
            Смириться стем, что никаких удобных eeprom_update_block у вас нет и не будет.
            Вариант 2 от меня:
            Немного по извращаемся, обманем компилятор и радуемся 🙂

            0
      1. Тоже игрался с блоком http://vrtp.ru/index.php?showtopic=25750&hl=lm2576 Так толком настроить и не удалось. Теперь уже несколько раз использовал : https://ru.aliexpress.com/item/1-LM2596-DC-DC/32861614421.html?spm=a2g0s.9042311.0.0.24d233edqC3IDf или https://ru.aliexpress.com/item/5A-CC/32855809021.html?spm=a2g0s.9042311.0.0.24d233edqC3IDf и без мороки, только резисторы меняю на переменники многооборотные, или типа СП5-35

        0
        1. У меня заработало сразу и нормально. Но уровень помех просто жуткий — при нагрузке в 1А до 500мВ выходит. Дальше планирую много проектов с металлоискателями, а там чистота питания очень важна. Буду доделывать БП от Koyodza PSA205, хоть он и пугающе сложный.

          0
    1. Боюсь, мне недели не хватит, чтобы изобрести новую модель, изготовить устройство, написать программу, найти и устранить ошибки в железе, довести модель до хорошей повторяемости, оттестировать на разных мишенях и грунтах, снова исправить софт..
      К сожалению, я не такой умный 🙁

      0
        1. А при чём тут пик?
          Калибровка ловит напряжение смещения нуля ОУ, а оно не нормировано и от экземпляра к экземпляру может находиться в пределах от -4 до +4мВ, а умноженное на КУ усилителя шунта, будет гулять в очень широких пределах. 🙂

          0
          1. А на LED-экран посмотреть и подумать, что там циферки означают? 🙂

            0
  4. Здравствуйте.
    Эдуард подскажите , как подобрать такой шунт(0.01) , готовых не встречал , какой использовали Вы , какая «технология изготовления»
    Спасибо.

    0
    1. Есть и намного меньше (но тогда с проводами вообще беда из-за падения тока).
      Я взял готовый — стоят они не дорого
      https://ru.aliexpress.com/i/32826742429.html?spm=a2g0v.12057483.0.0.310a2e26AsSddw

      Но можно и в «подножном хламе» дернуть — в старых телефонах, в ноутбуках, на материнских и видеокартах встречаются.

      Выглядит вот так:
      https://photos.app.goo.gl/BVwmvKnnpkZwnT1z6

      0
  5. Здравствуйте, есть потребность в данном изделии, могу я купить комплект печатных плат под SSOP корпус проца, или готовое изделие? Какое время отображения ? Заменил уже третий китайский 4 разрядный 3А авометр на своём БП. У всех летит 3 вольтовый стаб, хотя питание 12в., по питанию 300 Ом. Стоит под индикатором, заменить тяжело.

    0
  6. Жаль, п.плата, впрочем как и девайс, просто на 5. Китайцы в таком же приборе используют ещё и регистр. Простите а типоразмер шунта 2512 ? Буду лучше изучать 6 лай.
    С Уважением Константин.

    0
    1. Честно говоря, не знаю как размер зовется. Дёрнул его из дохлого аккумулятора ноутбука. Раза в два больше чем 1206. Сейчас всё заклеено внутри корпуса БП и разламывать не хочется.

      0
  7. Привет, Eddy! Спасибо за новую разработку. Есть небольшое пожелание: можно программно расширить диапазон измеряемых токов до 5А . Буду очень признателен.

    0
  8. Здравствуйте Эдуард.
    Есть простая схемка на контроллере, нужно сделать управление двигателем, переворот яиц в инкубаторе.
    Эта схема от инкубатора Блиц который очень популярен, вы сможете написать программу управления ?
    Если что я схему и данные скину вам. ?

    0
    1. Доброго дня
      Да, это я умею.
      Но есть одна проблемка — отсутствие времени. От слова совсем. Приходится выживать и пока не запустился с самоокупаемостью, работы очень много, а отдача — слёзы. Поэтому пока не берусь отвлечённые вещи делать. Не успеваю. Извините.

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

      http://smartelectronix.biz/publ/trjokhkanalnyj_ciklicheskij_sutochnyj_tajmer/1-1-0-78

      0
      1. Я сам не очень в этом разбираюсь, на всякий случай дам ссылку на схему
        https://cloud.mail.ru/public/D7G7/ovLZM51RF вот такое устройство, но как сделано непонятно или по времени работает или удобнее по превышению тока. Моторчик так устроен там когда упирается повышается ток это контроллер понимает и делает реверс.
        Может рассмотрите будет время это же вам и статья на сайт новая.. Могу и оплатить немного конечно 200-300р если устроит ?

        0
        1. У меня примерно до лета уже всё время забито. Ежемесячные мои затраты на съёмную квартиру, в которой я и работаю, в пересчёте на рубли примерно 20 000. Поэтому отдыхать за 200р я пока себе позволить не могу..

          0
  9. А можно индикацию тока сделать с учетом направления (знаком) (заряд — разряд)?
    Сколько искал у китайцев такого девайса — не нашел. Только меряют ампер-часы или ватт-часы, заряд-разряд не меряют.
    Работая с аккумуляторами в бесперебойниках такая задача постояно возникает. Сейчас я ее решил включив два китайских авометра, но пефекционизм замучал. Правда и диапазон токов нужно увеличивать на порядок -20А…+20А.

    0
  10. Понятно , что 358 полно везде , и они дёшевы , также есть возможность применить возможности контроллера . Возможно , всё-таки , стоит применять компоненты более современные ? В курсе про ваше стремление к аскетичности устройств , но всё-таки . Имхо .

    0

Добавить комментарий