Высказывания и цитаты:

Государство, которое стремится избежать войны за счёт собственного унижения, получит и войну, и унижение.
Уинстон Черчилль.

  • 08Ноя
    PIC

    Доброго времени суток.
    Я понимаю, что изготовление и придумывание устройств, которые уже есть на рынке — неоправданная трата времени и сил. Устройство, сделанное в одном экземпляре будет стоить дороже, кустарная пайка и самодельный корпус не дадут маленьких размеров и требуемую красоту устройству. Поэтому, рекумендую, данные устройства использовать лишь в ознакомительных целях. А так случилось, что я сконструировал вольтметр для переделанного компьютерного блока питания на 24 вольта 25 ампер вместо того, чтобы купить готовый. Об этом я расскажу в другой статье.
    А теперь вольтметр Voltmeter-DC0-100V продается на aliexpress и стоит порядка 3 долларов. Но если Вы хотите сделать, например, устройство, которое будет выполнять много функций и помимо этого еще и измерять напряжение — тогда Вы по адресу. Язык Си универсальный, и зная алгоритм, можно переделать его для другого микроконтроллера и добавить новые задачи. Итак, схема:
    voltmeter2

    Микроконтроллер pic18f1320 использует внутренний генератор,имеет 10-и битный АЦП, то есть 2 в степени 10 = 1023 деления, тогда значение 1023 примем равному самому большому напряжению 100в. Получаем шаг измерения 100в/1023=0.09в, что достаточно, чтобы отображать десятые доли вольта. А 5в будет равно 51 единице (по пропорции).
    Выберем общее сопротивление резисторного делителя напряжения 100 КОм. Тогда резисторы выбираем 51 единица=5.1К и ((1023-51)/51)*5.1=97.2K. Или любой делитель по этой формуле. Номиналы резисторов 5.1Ком и 91Ком + подстроечный 10Ком соответствуют ГОСТу и выпускаются промышленностью.
    Переводим теперь в вольты: делим на 10. Используя остаток от деления,округляем последний символ. Получаем 8-битное число, которое потом переводим в BCD формат для отображения на 3-х индикаторах.
    Итого 3-х разрядный семисегментный индикатор может отображать напряжение до 99,9 вольта. Для повышения точности АЦП, микроконтроллер делает 80 выборок, из которых находит среднее арифметическое.
    Теперь недостатки: операция преобразования из 16-и битного числа в BCD формат (двоично-десятичный) выполняется по самому медленному алгоритму — путем деления целых чисел, а в данном контроллере нет аппаратного делителя, в итоге на это затрачиваются большие ресурсы процессора. Если Вы хотите посмотреть самый лучший алгоритм — он написан с использованием ассемблерной вставки в проекте Прибор для проверки угловых инкрементных энкодеров со станков чпу. В данной программе используется всего лишь одно прерывание по Timer0. В нем происходит счет времени как для поочередной динамической индикации каждого из трех индикаторов, так и для смены показаний напряжения. В архиве прилагаются файлы hex, си с комментариями строк, программа симулятора в Proteus и электрическая схема Voltmetr.rar Полезного изучения.

1 комментарий

WP_Cloudy
  • Андрей пишет:

    вольтметр измеряет до 81,9 , далее начинается с 0
    ошибка, вероятно, происходит из-за переполнения двухбайтового числа при 80 измерениях — «Для повышения точности АЦП, микроконтроллер делает 80 выборок, из которых находит среднее арифметическое.»
    16бит = 65536
    999 х 80 = 79920 это больше 65536 — сумма не влезает в 2 байта.
    819 х 80 = 65520 максимум до переполнения двух байт(65536).

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: