В этом проекте мы собираемся сделать амперметр низкого диапазона на микроконтроллере ATMEGA8. В ATMEGA8 мы собираемся использовать для этого 10-битный АЦП (аналого-цифровое преобразование). Хотя у нас есть несколько других способов получить текущий параметр из схемы, мы собираемся использовать метод резистивного сброса, потому что это самый простой и простой способ получить текущий параметр.
В этом методе мы собираемся передать ток, который необходимо измерить, на небольшое сопротивление, тем самым мы получим падение этого сопротивления, которое связано с током, протекающим через него. Это напряжение через сопротивление подается на ATMEGA8 для преобразования в АЦП. При этом у нас будет ток в цифровом значении, которое будет отображаться на ЖК-дисплее 16x2.
Для этого воспользуемся схемой делителя напряжения. Мы собираемся пропустить ток через полную ветвь сопротивления. Измеряется середина ветви. При изменении тока произойдет падение сопротивления, которое будет линейным по отношению к нему. Таким образом, у нас есть напряжение, которое изменяется линейно.
Теперь важно отметить, что входной сигнал, принимаемый контроллером для преобразования АЦП, составляет всего 50 мкА. Этот эффект нагрузки резистивного делителя напряжения важен, так как ток, потребляемый из Vout делителя напряжения, увеличивает процент ошибки, а пока нам не нужно беспокоиться об эффекте нагрузки.
Необходимые компоненты
Аппаратное обеспечение: ATMEGA8, источник питания (5 В), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), конденсатор 100 мкФ, конденсатор 100 нФ (4 штуки), резистор 100 Ом (7 штук) или 2,5 Ом (2 штуки), резистор 100 кОм.
Софт: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и объяснение работы
Напряжение на R2 и R4 не является полностью линейным; это будет шумно. Чтобы отфильтровать шум, конденсаторы помещаются на каждом резисторе в схеме делителя, как показано на рисунке.
В ATMEGA8 мы можем подавать аналоговый вход на любой из ЧЕТЫРЕХ каналов PORTC, неважно, какой канал мы выберем, поскольку все они одинаковы. Мы собираемся выбрать канал 0 или PIN0 PORTC. В ATMEGA8, АЦП имеет разрешение 10 бит, так что контроллер может определить минимальное изменение Vref / 2 ^ 10, так что, если опорное напряжение 5V мы получаем цифровой выходной приращение для каждого 5/2 ^ 10 = 5 мВ. Таким образом, на каждые 5 мВ приращения на входе у нас будет приращение на единицу на цифровом выходе.
Теперь нам нужно настроить регистр АЦП исходя из следующих условий:
1. Прежде всего нам нужно включить функцию ADC в ADC.
2. Вот и получим максимальное входное напряжение для преобразования АЦП + 5В. Таким образом, мы можем установить максимальное значение или ссылку АЦП на 5 В.
3. Контроллер имеет функцию преобразования триггера, которая означает, что преобразование АЦП происходит только после внешнего триггера, поскольку мы не хотим, чтобы нам нужно было настраивать регистры для работы АЦП в непрерывном автономном режиме.
4. Для любого АЦП частота преобразования (аналоговое значение в цифровое значение) и точность цифрового выхода обратно пропорциональны. Поэтому для большей точности цифрового вывода мы должны выбирать меньшую частоту. Для обычных часов АЦП мы устанавливаем предварительную продажу АЦП на максимальное значение (2). Поскольку мы используем внутренние часы с частотой 1 МГц, частота АЦП будет (1000000/2).
Это единственные четыре вещи, которые нам нужно знать, чтобы начать работу с ADC.
Все вышеупомянутые четыре функции устанавливаются двумя регистрами,
КРАСНЫЙ (ADEN): этот бит должен быть установлен для включения функции ADC ATMEGA.
СИНИЙ (REFS1, REFS0): Эти два бита используются для задания опорного напряжения (или максимальное входное напряжение, мы собираемся дать). Поскольку мы хотим иметь 5V опорного напряжения, REFS0 должен быть установлен, в таблице.
ЖЕЛТЫЙ (ADFR): этот бит должен быть установлен для непрерывной работы АЦП (режим автономной работы).
РОЗОВЫЙ (MUX0-MUX3): эти четыре бита указывают входной канал. Поскольку мы собираемся использовать ADC0 или PIN0, нам не нужно устанавливать какие-либо биты, как указано в таблице.
КОРИЧНЕВЫЙ (ADPS0-ADPS2): эти три бита предназначены для установки предскалярного значения для АЦП. Поскольку мы используем прескаляр, равный 2, мы должны установить один бит.
ТЕМНО-ЗЕЛЕНЫЙ (ADSC): этот бит устанавливается для АЦП, чтобы начать преобразование. Этот бит можно отключить в программе, когда нам нужно остановить преобразование.