ОТЧЕТ: Цифровой термометр
Составил: Кохно К.С.
Краткое содержание:
Техническое задание и основные элементы схемы - 4
Аналоговая часть – 5
Цифровая часть -8
Программная часть -11
Погрешности устройства-12
Описание программы – 12
Проверка прибора – 24
Техническое задание:
Диапазон измеряемых температур: 0 – 70 С
Цена деления (шаг индикации): 0.1 С
Время обновления показаний: 1 сек
Основные элементы прибора:
Всь прибор состоит из 2-х основных частей:
1) Аналоговая часть (усилительная)
2) Цифровая часть
Перевод аналогового в цифровой сигнал осуществляется с помощью внутреннего АЦП микроконтроллера.
3) Для удобства схема питается от USB компьютера, (разъем USB-B)
Аналоговая часть:
Выходной сигнал сенсора имеет линейный вид:
Так как подключаемый датчик имеет не дифференциальный выходной сигнал, то аналоговая часть состоит из 2-х основных частей:
1) Вычитатель
2) Усилитель
Схема аналоговой части:
В схеме используется ОУ 2 штуки, марки AD8628.
Распиновка ОУ:
Вычитатель вычитает одно напряжение из другого, а усилитель усиливает напряжение в определенное количество раз.
Схема датчика (на двух транзисторах КТ3102):
Настройка вычитателя:
Вычитатель сделан на ОУ(левая часть схемы) и должен иметь 4 одинаковых резистора(10К).
U1 – вычитаемое напряжение, которое задается построечным резистором. Это напряжение устанавливается равным минимальному выходному сигналу сенсора: 1.25В (100 С).
Выход вычитателя имеет напряжение от 0 до dU=Umax-Umin. dU имеет максимум = 0,24 при 0 С.
Этот максимум далее усиливается усилителем до 2.56В, т.к. это опорное напряжение АЦП микроконтроллера (внутренний ИОН).
Настройка усилителя:
Формула усилителя:
;
Где R1 – резистор по обратной связи, а R2 – резистор на землю.
Расчет коэффициента усиления:
Отсюда: k=2.56/0.24=10.66; (примерно)
Это значит, что можно поставить резисторы:
R1=10К;
R2=1K;
И получим k=1+10=11 .
На практике, из-за погрешности резисторов коэффициент усиления примерно получился k=10,75
В итоге датчик меняет выходное напряжение, а на выходи усилителя напряжение изменяется от 0 до 2.56 В.
Обработанный таким образом сигнал можно подключать к микроконтроллеру.
Цифровая часть:
Схема Цифровой части:
Описание схемы:
Сигнал DIGITAL – выход усилителя.
Сканирование клавиатуры производится путем подачи на PB4-7 последовательно 1 и считывания сигнала с PB0-3; при считанной 1 видим, что нажата определенная клавиша.
Резисторы на клавиатуре предназначены, для перевода напряжения PB0-3 в логический 0, когда туда не поступает 1.
Светодиод предназначен в основном как индикатор цикла, хотя нажав клавишу 2 ему можно задать определенный режим свечения.
100n – конденсатор для стабильности питания(защита от шумов),
10 Ом- резистор для светодиода дисплея,
5К и 10 мкФ - узел, отвечающий за сброс.
Распиновка микроконтроллера ATMega16A в PDIP корпусе:
Схема программатора:
Распиновка вилки программатора:
1-MOSI
2-Vcc
3-не использ
4-RESET
5-SCK
6-MISO
7-GND
Программная часть
Программа имеет несколько меню, перейти в которые можно по нажатию клавиш:
2-меню просмотра построечных коэффициентов и изменения значения опорного напряжения
Чтобы изменить воспринимаемое программой опорное напряжение нажать А и вводить значение, разделяющая точка вводится кнопкой #;
С - меню ввода характеристики аналоговой части. Причем при вводе ADCH – это значение АЦП в данной точке, ввод осуществляется как и в 1 случае. Причем нумерация точек должна соответствовать:
Причем в случае, с техническим заданием:
ADCH1=255; T1=0;
ADCH2=0; T2=98;
98-температура кипения.
В главном меню программы выводится значение ацп – ADCH, значение DIGITAL; и температура;
Нажав кнопку D можно включить или отключить мигающий светодиод(индикация цикла).
Описание программы:
Ниже приведен листинг кода (только тот код, который написан мной):
Для включения АЦП микроконтроллера нужно установить
ADCSRA= 0xC7; что соответствует 11000111
Расшифровка битов:
0-2: задает предделитель (стоит максимум 128 изза максимального кварца)
3: выключено прерывания по АЦП
4: флаг, показывающий, что АЦП закончило преобразование
5: триггер (захват напряжения)
6: старт преобразования
7: ВКЛ АЦП
Файл main.c:
#include <intrinsics.h>
#include <iom16.h>
#include "defines.h"
#include "lcd.h"
void main( void )
{
__disable_interrupt(); // отключили прерывания
LCD_init(); // инициализация дисплея
// инициализация порта клавиатуры
DDRB=0xF0; // 11110000
// инициализация ацп
DDRA=0xF0; // 11110000 инициализация входа АЦП
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.