PIC Урок 26. Модуль компараторов. Часть 2

 

 

 

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

 

Теперь на основе вышеизложенного попробуем что-нибудь сочинить.

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

Делитель будем использовать с прошлого урока, причём средняя ножка переменного резистора у нас будет подключенной к той же ножке порта RA0 ввиду совпадения входов AN0 у первого канал АЦП и входа первого компаратора. Подключим делитель к плате

Перемычки светодиодов также установим.

Подключим программатор, подключив его затем и к ПК.

Проект возьмём за основу из урока 23 по передаче данных по шине USART с именем USART_TX и назовём его COMP_AN.

Откроем проект в MPLAB X, сделаем его главным и в настройках убедимся, что контроллер будет питаться от программатора.

Удалим из файла main.c все служебные функции, оставим только main(), в котором удалим весь код, оставим лишь только пустой бесконечный цикл

 

Настроим ножки входов обоих компараторов на вход, а порт B весь на выход

 

Включим использование первого диапазона значений множителя источника опорного напряжения

 

Коэффициент множителя установим, например, в 12

 

Напряжение опорное для самого источника у нас будет питание контроллера. Я его измерил — оно равно 4,61 вольт.

Тем самым, получим выходное напряжение источника 12/24*4,56 около 2,28 вольт.

Включим источник опорного напряжения

 

Теперь настроим модуль компараторов.

Использовать будем только первый компаратор и включим инвертирование его выхода, так как у нас опорное напряжение на плюсовом входе

 

Включим режим двух компараторов общим опорным (неинверсным) входом и мультиплицированными инверсными входами (CM2:CM0 = 110)

 

Добавим глобальную переменную для считывания регистра CMCON

 

Дальше небольшая хитрость, не помню даже, где я о ней узнал, но лучше так сделать. Спустя 10 микросекунд мы либо считываем либо что-то пишем в регистр CMCON для устранения несоответствия

 

 

Затем, предварительно сбросив флаг прерывания, включим прерывания от модуля компараторов

 

В бесконечном цикле будем мигать одним из светодиодов, чтобы убедиться, что компаратор работает независимо и на ход общей программы не влияет

 

Над функцией main() добавим функцию-обработчик прерываний от компаратора

 

В теле условия в функции-обработчике мы сбросим флаг прерывания, определим, в какую сторону мы перешли порог срабатывания, и зажжём или потушим, в зависимости от этого, светодиод

 

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

Светодиод загорается, если мы порог превысим

При уменьшении напряжения ниже порогового, которое обеспечивается источником опорного напряжения, у нас светодиод опять должен тухнуть.

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

Всем спасибо за внимание!

 

Предыдущая часть Программирование МК PIC Следующий урок

 

Исходный код

 

 

Купить программатор (неоригинальный) можно здесь: PICKit3

Купить программатор (оригинальный) можно здесь: PICKit3 original

Отладочную плату PIC Open18F4520-16F877A можно приобрести здесь: PIC Open18F4520-16F877A

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

PIC Модуль компараторов

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*