Цифровой барометр

Развитие и применение микропроцессоров как одно из направлений научно-технического прогресса. Разработка структурной и принципиальной схемы разрабатываемого устройства, анализ функциональности. Алгоритм работы управляющей программы: работа и требования.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 11.12.2015
Размер файла 459,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Цифровой барометр

Введение

программа микропроцессор управляющий барометр

Одним из важнейших направлений научно-технического прогресса является развитие и применение микропроцессоров. Их малые размеры, высокая надежность, большие вычислительные и логические способности позволяют создавать контролирующие, управляющие и обрабатывающие цифровые устройства высокого качества и низкой стоимости. Начиная с 1971 года, объемы ежегодного производства микроконтроллеров в несколько раз превышают объемы производства процессоров.

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

На сегодняшний день существует более 200 модификаций микроконтроллеров, среди которых популярностью пользуются 8-битные микроконтроллеры PIC фирмы Microchip Technology, AVR фирмы Atmel, 16-битные MSP430 фирмы TI, а также 32-битные микроконтроллеры архитектуры ARM, которую разрабатывает фирма ARM.

1. Разработка структурной схемы устройства

Структурная схема цифрового барометра приведена на рисунке 1.1. Устройство состоит из четырех блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчика атмосферного давления и температуры в помещении и датчика внешней температуры.

Рисунок 1.1 - Структурная схема цифрового барометра

Основой цифрового барометра является цифровое программируемое устройство (ЦПУ). Его основой является микроконтроллер ATMega328 в составе модуля Arduino Uno R3. Оно выполняет такие функции, как получение значений температуры и давления с датчиков, обработка полученных данных и вывод информации на дисплей.

Датчик BMP085 измеряет атмосферное давление с высокой точностью, а также получает данные о температуре воздуха и высоты над уровнем моря. Он отличается производительностью, точностью (минимальное значения измерения давления - 0.03hPa) и очень низким энергопотреблением.

Принцип действия датчика внешней температуры состоит в использовании термистора - полупроводникового прибора, электрическое сопротивление которого изменяется в зависимости от его температуры. ЦПУ получает значение падения напряжения с термистора, преобразует его в цифровой код и передает его в управляющую программу. Расчет значения температуры производится путем сопоставления полученного напряжения значению из таблицы соответствующих температур (таблицы температур находятся в технической документации термистора).

Жидкокристаллический модуль МТ-10Т7 состоит из БИС контроллера и ЖК панели и может отображать 10 знакомест.

2. Разработка принципиальной схемы

Принципиальная схема устройства показана на рисунке 2.1. Входное напряжение подается на вход VCC датчика давления, на вход VSS дисплея и в цепь с термистором, выполняющую функцию датчика внешней температуры.

Выводы датчика BMP085 SCL и SDA подключены к портам Arduino Uno A5/SCL и A4/SDA соответственно. Посредством этих выводов на Arduino осуществляется связь I2C и передача информации между датчиком и микропроцессором.

Порт назначения адреса А дисплея подключен к выводу D10 Arduino Uno, порты DB0-DB3, выполняющие функцию шин адреса / данных, подключены к D7-D4 соответственно. Порты дисплея R/W и RS предназначены для записи данных в модуль, подключены к выводам D9 и D8. Порты D4-D10 являются цифровыми входами, из которых D5, D6, D9, D10 обеспечивают широтно-импульсную модуляцию с разрешением 8 бит для получения изменяющегося аналогового сигнала.

Принципиальная схема Arduino Uno показана на рисунке 2.2.

Рисунок 2.1 - Схема электрическая принципиальная цифрового барометра

Рисунок 2.2 - Схема электрическая принципиальная Arduino Uno

Для рассматриваемого устройства спецификация приведена в таблице 2.1.

Таблица 2.1 - Перечень элементов схемы электрической принципиальной разрабатываемого устройства

Обозначение

Наименование

Кол.

Примечание

Микросхемы

DD1

Uno Arduino

1

Дисплей

DD2

ЖК модуль МТ-10Т7

1

Резисторы

R1

Резистор выводной - 10 кОм

1

R2

Термистор - 2,2 кОм

1

Конденсаторы

C1

Конденсатор - 100 нФ

1

C2-C3

Конденсатор - 0.1 мкФ

2

Дроссели

L2

Дроссель выводной - 10 мкГн

1

3. Разработка алгоритма работы управляющей программы

В общем виде управляющая программа показана на рисунке 3.1.

Рисунок 3.1 - Общий вид управляющей программы

Общая блок-схема программы представлена на рисунке 3.1. При подключении питания однократно выполняется подпрограмма setup(), проверяющая подключение датчика и инициализирующая дисплей. После этого циклически выполняется подпрограмма loop(), которая считывает и преобразует полученные с датчиков данные в понятную пользователю форму и выводит информацию на дисплей, до того момента, пока питание не будет отключено. Показания давления и температуры сменяют друг друга с интервалом в три секунды. Блок-схемы программ setup() n loop() представлены на рисунках 3.2, 3.3.

Рисунок 3.2 - Блок-схема подпрограммы setup()

Рисунок 3.3 - Блок-схема подпрограммы loop()

Показание атмосферного давления считывается с датчика BMP085, умножается на переводной множитель Kmm для перевода из паскалей в миллиметры ртутного столба и передаются в подпрограмму Pressure (float P), где обрабатывается для корректного вывода на дисплей. Преобразованные данные (значения разрядов числового значения давления с точностью до 0,01 мм ртутного столба) передаются в строку InfoPress[10].

Показание температуры внутри помещения считывается с датчика BMP085 и аналогично значению давления передается в подпрограмму Temperature (int Tin, int Tout).

Механизм считывания и обработки внешней температуры несколько сложнее. В качестве датчика внешней температуры использован терморезистор, поэтому прежде, чем передавать полученное значение в подпрограмму Temperature (int Tin, int Tout), требуется провести линейную интерполяцию полученного значения напряжения с термистора и соотнести полученное значение падения напряжения с соответствующим значением температуры. Для этого полученное значение напряжение передается в подпрограмму CalcTemperature (float AD), которое возвращает значение температуры. После этого полученное числовое значение передается в подпрограмму Temperature (int Tin, int Tout) вместе со значением внутренней температуры. Значение Tout умножается на поправочный множитель 1,286 для минимизации погрешности. Обработанная информация заносится в строку InfoTemp[10]. Блок-схемы подпрограмм Pressure (float P), Temperature (int Tin, int Tout) и CalcTemperature (float AD) приведены на рисунках 3.4, 3.5, 3.6.

Рисунок 3.4 - Блок-схема подпрограммы Pressure (float P)

Рисунок 3.5 - Блок-схема подпрограммы Temperature (int Tin, int Tout)

Рисунок 3.6 - Блок-схема подпрограммы CalcTemperature (float AD)

Для отображения обработанной информации используется подпрограмма DispString (char Str[10]). После установления начального адреса символу с каждой позиции переданной строки устанавливается соответствие из массива SegmentMap[30], который содержит передаваемые на семисегментный дисплей коды символов. Блок-схема данной подпрограммы изображена на рисунке 3.7.

Рисунок 3.7 - Блок-схема подпрограммы DispString (char Str[10])

4. Разработка управляющей программы

Листинг управляющей программы:

#include <Wire.h>

#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

float Kmm = 0.00750063755419211

byte StPin = 4; //start pin No for output 4 bits DB0-DB3

byte WR1pin = 8; //pin No for WR1

byte WR2pin = 9; //pin No for WR1

byte ADpin = 10; // address/data signal

int sensorPin = A0; // select the input pin for the potentiometer

int ledPin = 13; //select the pin for the LED

int sensorValue = 0; // variable to store the value coming from the sensor

byte SegmentMap[30] = {B11101110, B01100000, B00101111, B01101101, B11100001,

B11001101, B11001111, B01101000, B11101111, B11101101,

B00100011, B11000001, B11100110, B11101010, B10101001,

B10001110, B00000001, 0, B01000011, 0,

B11111110, B01110000, B00111111, B01111101, B11110001,

B11011101, B11011111, B01111000, B11111111, B11111101};

byte MaskLow[4] = {B00000001, B00000010, B00000100, B00001000};

byte MaskHigh[4] = {B00010000, B00100000, B01000000, B10000000};

char InfoPress[10];

char InfoTemp[10];

#define ArrSize 20

int TStep[ArrSize] = {-40, -35, -30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};

int ADval[ArrSize] = {884, 842, 794, 738, 677, 612, 545, 480, 417, 359, 307, 260, 220, 185, 155, 130, 109, 92, 77, 65};

int Tout=0;

void setup() {

Serial.begin(9600);

if (! bmp. Begin())

{

Serial.println («Could not find a valid BMP085 sensor, check wiring!»);

while (1) {}

}

InitScreen();

}

void loop() {

ClearScreen();

Pressure (bmp.readPressure()*Kmm);

Tout=CalcTemperature (analogRead(sensorPin));

Temperature (bmp.readTemperature(), Tout*1.286);

DispString(InfoPress);

delay(3000);

DispString(InfoTemp);

delay(3000);

}

void DispString (char Str[10]) {

byte i=0;

WriteAddr0 ();

for (i=0; i<=10; i++) {

DispChar (Str[i]);}

}

void InitScreen() {

byte pin=0;

 //Assign pins for LCD

pinMode (WR1pin, OUTPUT);

pinMode (WR2pin, OUTPUT);

pinMode (ADpin, OUTPUT);

for (pin=StPin; pin<=StPin+3; pin++) {

pinMode (pin, OUTPUT);}

 //Init service pins

digitalWrite (WR1pin, LOW);

digitalWrite (WR2pin, LOW);

digitalWrite (ADpin, HIGH);

 //Unblock LCD trigger

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite (pin, HIGH);}

StrobeAD();

}

 /////////////////////////////////////////////////////////////////////////////////////////////

void ClearScreen() {

byte i=0;

WriteAddr0 ();

for (i=0; i<=9; i++) {

DataClr();}

}

 //////////////////////////////////////////////////////////////////////////////////////////

void Pressure (float P)

{

int pos1, pos2, pos3, pos4, pos5;

pos1=P/100;

pos2=(P-pos1*100)/10;

pos3=P-pos1*100-pos2*10;

pos4=(P-pos1*100-pos2*10-pos3)*10;

pos5=(P-pos1*100.0-pos2*10.0-pos3-pos4/10)*100;

InfoPress[0]=pos1;

InfoPress[1]=pos2;

InfoPress[2]=pos3+20;

InfoPress[3]=pos4;

InfoPress[4]=pos5;

InfoPress[5]=17;

InfoPress[6]=18;

InfoPress[7]=18;

InfoPress[8]=18;

InfoPress[9]=18;

}

 ////////////////////////////////////////////////////////////////////////

void Temperature (double Tin, double Tout)

{

InfoTemp[0]=TempSign(Tin);

InfoTemp[1]=TempConvers1 (Tin);

InfoTemp[2]=TempConvers2 (Tin);

InfoTemp[3]=14;

InfoTemp[4]=15;

InfoTemp[5]=TempSign(Tout);

InfoTemp[6]=TempConvers1 (Tout);

InfoTemp[7]=TempConvers2 (Tout);

InfoTemp[8]=14;

InfoTemp[9]=15;

}

 //////////////////////////////////////////////////////////////////////////////////////

int TempConvers1 (double T)

{int pos1;

pos1=abs(T)/10;

return pos1;

}

 /////////////////////////////////////////////////////////////////////////////////////

int TempConvers2 (double T)

{int pos2;

pos2=abs(T) - TempConvers1 (T)*10;

return pos2;

}

 ///////////////////////////////////////////////////////////////////////////////

int TempSign (double T)

{if (T>=0) {return 17;}

else {return 16;}

}

 ////////////////////////////////////////////////////////////

float CalcTemperature (int AD)

{int p=1, q=ArrSize, s;

float TempPrev, TempItog, del, porAD;

while (p<q)

{

s=(p+q)/2;

if (ADval[s]>=AD)

{

p=s+1;

}

else

{q=s;

}

}

TempPrev=TStep [s-1];

del=(5.0/(ADval [s-1] - ADval[s]));

TempItog=TempPrev+(ADval[s] - AD)*del;

return TempItog;

}

 //////////////////////////////////////////////////////////

void StrobeAD() {

digitalWrite (ADpin, LOW);

digitalWrite (WR1pin, HIGH);

delayMicroseconds(1);

digitalWrite (WR1pin, LOW);

digitalWrite (ADpin, HIGH);

}

 ////////////////////////////////////////////////////////////////

void WriteAddr0 () //write address 00 to LCD

{int pin=0;

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite (pin, LOW);}

StrobeAD();

}

 /////////////////////////////////////////////////

void DispChar (byte Code) {

int Ln=0;

 //Display Low part

for (Ln=0; Ln<=3; Ln++) {

digitalWrite (StPin+Ln, (SegmentMap[Code] & MaskLow[Ln]));}

StrobeWR();

 //Display High part

for (Ln=0; Ln<=3; Ln++) {

digitalWrite (StPin+Ln, (SegmentMap[Code] & MaskHigh[Ln]));

}

StrobeWR();

}

 /////////////////////////////////////////////////////

void StrobeWR() {

digitalWrite (WR1pin, HIGH);

delayMicroseconds(1);

digitalWrite (WR1pin, LOW);

}

 /////////////////////////////////////////////////////////

void DataClr() {

int pin=0;

for (pin=StPin; pin<=StPin+3; pin++) {

digitalWrite (pin, LOW);}

StrobeWR();

StrobeWR();

}

Заключение

В данной курсовой работе продемонстрирована возможность разработки цифровых устройств на микроконтроллере ATMega328 в составе инструмента для проектирования электронных устройств Arduino Uno R3.

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

Таким образом, цели работы курсового проектирования были достигнуты в полном объеме.

Список источников

1. Каган Б.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. - М.: Энергоатомиздат, 1987.

2. Хартов В.Я. Микроконтроллеры AVR/. Практикум для начинающих. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2007.

3. Петин В. Проекты с использованием контроллера Arduino. - M.: BHV, 2015.

Размещено на Allbest.ru


Подобные документы

  • Разработка структурной схемы устройства. Принцип работы его блоков: источника напряжения, цифрового программируемого устройства, семисегментного дисплея, датчиков давления и температуры. Разработка алгоритма работы управляющей программы, ее блок-схема.

    курсовая работа [2,5 M], добавлен 23.06.2015

  • В работе на базе PIC-контроллера реализуется цифровой секундомер. Выбор технических требований к устройству, к питанию. Разработка структурной схемы, принципиальной электрической схемы, алгоритма работы управляющей программы, управляющей программы.

    курсовая работа [427,1 K], добавлен 20.06.2008

  • Разработка функционально законченного устройства для обработки входных сигналов линии с использованием цифровых устройств и аналого-цифровых узлов. Алгоритм работы устройства. Составление программы на языке ассемблера. Оценка быстродействия устройства.

    курсовая работа [435,5 K], добавлен 16.12.2013

  • Разработка структурной и принципиальной схемы устройства. Микроконтроллер PIC16F886, температурные и электрические характеристики. Четырехразрядный семисегментный светодиодный индикатор. Разработка алгоритма управляющей программы, общий алгоритм.

    курсовая работа [497,4 K], добавлен 31.01.2013

  • Особенности проектирования микропроцессорного устройства "Цифровой осциллограф". Выбор микроконтроллера, описание периферийных устройств. Разработка принципиальной схемы устройства и программы для микроконтроллера, осуществляющей все функции устройства.

    курсовая работа [923,5 K], добавлен 24.12.2012

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

    курсовая работа [50,2 K], добавлен 03.12.2010

  • Анализ технического задания. Оценка достоверности цифровой информации в канале связи. Выбор типа структурной схемы радиоприёмника. Разработка функциональной схемы. Применение приборов с переносом заряда. Проектирование схемы информационного тракта.

    курсовая работа [2,0 M], добавлен 13.05.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.