Создание анализатора качества горюче-смазочных материалов

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    402,87 Кб
  • Опубликовано:
    2012-09-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание анализатора качества горюче-смазочных материалов

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

1. ПОСТАНОВКА ЗАДАЧИ

1.1 Описание предметной области

1.1.1 Вступление

1.1.2 Постановка задачи

1.1.3 Сформулируем требования к ПТС

1.1.4 Функциональные требования

1.1.5 Требования качества и надежности

1.1.6 Аналоги устройства

1.1.7 Используемые для решения задачи инструменты

2. Решение задачи

2.1 Решение

2.2 Основные формулы расчёта искомых параметров

2.2.1 Определим ёмкость конденсатора

2.2.2 Определим ёмкостное сопротивление

2.2.3 Определим полное комплексное сопротивление

3. Спецификация

4. Структура программного средства

5. Руководство по использованию устройства

Заключение

Список использованных источников

Приложение 1

Приложение 2

ВВЕДЕНИЕ

Темой данного дипломного проекта является «создание анализатора качества ГСМ». Для создания и разработки данного прибора существуют различные причины, одна из них: использование прибора человеком, который не разбирается в данной области, для определения состояния качества той или иной продукции в жидком агрегатном состоянии (в частности ГСМ). Всё что остаётся проделать: ввести эталонные данные в устройство, для проверки отклонения от него. Ориентируясь на не специалиста - вывод сообщения, либо сигнальное предупреждение об отклонении от допустимых значений. Данное устройство может найти применение в организациях занимающихся эксплуатацией различных видов техники. Ограничение накладывается на температурный режим, стерильность измерения и герметичность прибора, последнее, из списка которого мною может быть учтено.В процессе выполнения проекта мной проделаны следующие виды работ:

Изучена новая предметная область - платы Arduino и Arduino-совместимые.

Найдены, изучены и проанализированы существующие аналогичные методы измерения и анализа качества ГСМ, в том числе метод интегрирования временных интервалов, циклов зарядки-разрядки конденсаторов;

Рассмотрен и выбран за основу вариант контроля качества ГСМ методом измерения ёмкости, диэлектрической проницаемости вещества и удельного сопротивления;

Изучена линейка микроконтроллеров фирмы Atmel;

Проанализированы возможные способы реализации устройства;

Разработан вариант конструкции и электронной части устройства;

Известны анализаторы с пользой оптических элементов, СИД(светодиод)(трёх диапазонов: ближний УФ, видимый спектр, ближний ИК спектр), где анализ состояния вещества ведётся по спектру поглощения оптического диапазона СИД. Недостаток данного способа исследования: относительно сложная система по конструкторской части, электронной и специальных требований к объёму и спектру пропускания корпуса и материала (кристаллический кварц) сосуда, в котором происходит исследование материала. У каждого вещества есть своя диэлектрическая проницаемость (ε), удельное сопротивление(Rуд), угол диэлектрических потерь(tgφ). Наличие примесей в веществе резко сказываются на данных параметрах. Для этого был разработан датчик в виде плоского конденсатора, устройство измерения данных параметров на базе микроконтроллера. Работа проводилась под операционной системой MSWindows XP/Windows 7. В работе также использовалась Arduino 022(may 2012) и язык программирования Assembler.

1. ПОСТАНОВКА ЗАДАЧИ

1.1 Описание предметной области

1.1.1 Вступление

После распада СССР все заправочные автостанции стали частными организациями. В связи, с чем существует большая вероятность обмана по качеству бензина, дизельного топлива. Подливают воду, не очищают от смол и т.д. В процессе эксплуатации любого горюче смазочного материала возникает проблема определения состояния, после которого его использование окажется фатальным для устройства, либо аппаратного средства используемого данное ГСМ. Из-за этого появляется необходимость определения состояния, после которого качество ГСМ заметно падает. Для решения данного вопроса качества был разработан прибор, способный сравнивать эталонные значения параметров, присущие ГСМ не проходившему эксплуатационные воздействия и параметров, полученных из образца измеряемого вещества. Без сомнения то, что вещество, измеряемое и вещество эталонное должны соответствовать по типу и марке.

1.1.2 Постановка задачи

Задача, поставленная передо мной, научным руководителем,

сводилась к следующему:

Изучить предметную область. В том числе методы измерения электрической ёмкости.

Найти и изучить аналогичные устройства. В том числе спектрометр - анализатор веществ на базе СИД, измеритель ёмкости и ЭПС конденсатора на базе МК, разработка принципиальной электрической схемы, расчёт параметров схемы и изготовления макета устройства.

Составление требований к разрабатываемому программно техническому средству (ПТС). В том числе функциональные требования ПТС, требований к качеству и надёжности ПС.

Выбрать компоненты ПТС. В том числе управляющий микроконтроллер, устройство индикации, устройство съёма данных со щупа, устройство сбрасывания для цикличности измерений, автономность работы прибора без подключения к электрической сети, либо ПК.

Разработка и реализация частей ПТС и ПС микроконтроллера.

октанометр конденсатор сопротивление

1.1.3 Сформулируем требования к ПТС

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

Программная часть не должна превышать 14кБ.

Программный код должен быть написан на языке С используя программную оболочку и компилятор Arduino, либо Assembler используя программную оболочку и компилятор AVRstudio 4.

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

Техническая компонента проекта имеет требование: определение угла диэлектрических потерь, удельное сопротивление, температурный режим: от -10 до 85◦С(градусов Цельсия),область измерения ёмкости от 500пФ(5 *10-10Фарад) и до 67,5нФ(6,75 * 10-8 Фарад),выходное напряжение от батареи не менее 5 и не более 9 вольт.

Устройство должно иметь малые габаритные параметры.

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

Анализатор качества нельзя использовать во взрывоопасных помещениях;

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

К работе с анализатором качества допускаются лица, изучившие руководство по эксплуатации.

1.1.4 Функциональные требования

Бесперебойность работы устройства.

Снятие сигнала со щупа и обработка его в МК.

Запоминание всего массива данных в энергонезависимую память.

Вывод полученной с АЦП и переработанной в МК информации на графический ЖК-дисплей в процентном соотношении чистого и измеряемого ГСМ.

1.1.5 Требования качества и надежности

Показатель надежности:

Устойчивость функционирования - способность обеспечивать продолжение работы устройства после возникновения отклонений, вызванных сбоями технических средств, ошибками обслуживания;

1.1.6 Аналог и устройства

У разработанного устройства существуют несколько аналогов:

Измеритель ёмкости и ЭПС (эквивалентным последовательным сопротивлением конденсатора) и ёмкости конденсатора;

Октанометр;

Анализатор качества на основе СИД;

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

Анализатор качества на базе СИД или кварцевый спектрометроснован на трёх диапазонах: ультрафиолетовый, инфракрасный, видимый. Эти три диапазона испускает СИД. Основная проблема создания - измерительная химическая посуда должна состоять не из стекла, а из специально очищенного кварца, что весьма не дёшево. Основной параметр, измеряемый данным устройством - длина волны излучаемого света из СИД на колбу с измеряемым веществом.

1.1.7 Используемые для решения задачи инструменты

Для реализации системы выбраны следующие программные средства и технологии:

Комплект SeeeduinoV2.21 (ATmega168);

Графический ЖК-дисплей WG1602J-YYB-CTK;

Микроконтроллер ATtuny2313;

Щуп измерений.

Щуп измерительный состоит из: 2 медных пластин (обкладок конденсатора) с присадками от окисления, от них исходящих проводов в изоляционной трубке из ПВХ (поливинилхлорид) (либо другого пластика),подсоединённых к узлу измерения и сброса.

Графический ЖК-дисплей WG1602J-YYB-CTK 2-строчный состоит из матрицы 128х64 пикселей. Подобный дисплей позволяет выводить информацию в графическом виде. В моём случае для простоты исследования и использования устройства необходимо выводить информацию в виде процентных соотношений, либо чётких параметров.имеет следующие особенности: 2кБ встроенной программируемой flash-памяти программ,128 байт EEPROM, 128 байт SRAM, 18 общих линий ввода - вывода общего назначения

Программное обеспечение: Arduino 0.22, компилятор для Assembler - AVRstudio4, MicrosoftWord/Point, P-CAD 2006.Программа«Arduino» выбрано не случайно, потому как Seeeduino работает только с таким компилятором-отладчиком. На этапе разработки возникла необходимость использования разведённой платы SeeeduinoV2.21 (ATmega 168). Seeeduino является Arduino совместимой платой. Плата имеет микроконтроллер Atmega168 с 16 КБ программируемой Flash-памятью, и 1024Б EEPROM-памяти. Также на плате присутствует I2C порт, 14 цифровых входов/выходов и 6 ШИМ выводов. Тактовая частота 18МГц. На основе Seeeduino V2.21 был создан отладочный стенд для макетирования всех процессов. Для более упрощённой работы был выбран МК Attiny2313.

2. РЕШЕНИЕ ЗАДАЧИ

2.1 Решение

Для решения поставленной задачи была изучена функциональная схема аналогичного устройства - прототип «Измерение ёмкости и ЭПС конденсатора» (см. рис 1.). Для разрабатываемого устройства была разработана функциональная блок-схема (см. рис. 2).

Принципиальная схема «измеритель емкости и ЭПС конденсаторов»

Рис. 1 - Принципиальная схема «измеритель емкости и ЭПС конденсаторов»

Компараторы DA1.1-DA1.2 служат для определения интервала времени: t1,t2.

В процессе работы над проектом были составлены необходимые требования: диапазон измерения ёмкости конденсатора от 500пФ до 67.5нФ, следовательно, необходимо переделывать часть схемы с биполярными транзисторами, по причине того, что управляющие токи не соответствуют необходимому требованию измерений ёмкости. Для простоты и удобства создания устройства и пользования его был заменён Attiny2313 на Atmega168. В процессе разработки проекта - были устранены некоторые узлы в схеме: узел питания и com-порт. Представленный аналог работает следующим образом: измеряются два интервала времени t1, и t2, в течение которых напряжение между обкладками конденсатора при его зарядке неизменным током I достигает значений соответственно U и U2. Все эти величины значения связаны с параметрами конденсатора следующим образом:

U1=I(Rэп+t1/C);U2=I(Rэп+t2/c).

Зная их, можно независимо вычислить емкость и ЭПС конденсатора


Тактовый генератор микроконтроллера работает с внешним кварцевым резонатором ZQ1.Это обеспечивает необходимую точность программного измерения интервалов времени. Уточним, какие выводы за что отвечают:

. PDO и PD4 - выходы управления генераторами соответственно большого (Iб=7,69 мА) и малого (IМ=0,513 мА) тока зарядки измеряемого конденсатора;

. PD1 - выход передатчика (TXD) модуля USART, обеспечивающего связь с компьютером;

. PD2 и РDЗ - входы запросов прерывания;

. PD5 - выход управления транзистором VT3, разряжающим измеряемый конденсатор;

. PD6 - вход сигнала от кнопки SB3;

. РВО - выход сигнала управления питанием;

. РВ1 - инвертирующий вход встроенного в микроконтроллер аналогового компаратора;

. РВ2-РВ7-выходы сигналов управления ЖКИ HG1. Не инвертирующий вход аналогового компаратора программно подключен к встроенному в микроконтроллер источнику образцового напряжения 1,0... 1,2 В. Модуль USART программа настраивает на работу в асинхронном режиме со скоростью 9600 бит/спри восьми информационных и одном стоповом разряде без контроля четности. Информация пересылается только в направлении от прибора к компьютеру. Узел питания прибора состоит из аккумуляторной батареи GB1, гнезда XS1 для подключения внешнего источника питания, транзисторов VT4 и VT5. интегрального стабилизатора DA2, кнопок SB1 (включение прибора) и SB2(его выключение), а также связанных с этими элементами резисторов и конденсаторов. Подаваемое на вход РВ1 микроконтроллера напряжение с выхода резистивного делителя R16R17 предназначено для программного контроля напряжения питания.

Диоды VD3, VD4 служат для защиты прибора от повреждения в случае подключения к нему для измерения, заряженного конденсатора. Компараторы DA1.1 и DA1.2 сравнивают напряжение на измеряемом конденсаторе с заданными делителем из резисторов R6, R9, R10 пороговыми значениями U1 и U2. Подстроенным резистором R19 регулируют контрастность изображения на табло ЖКИ, а резистор R20 ограничивает ток в цепи его подсветки. Выключателем SA2 подсветку включают и выключают. Кнопка SB3 - внесение поправки в результаты измерения и ее исключение, переход в режим отладки. Транзисторный оптрон U1 согласует уровни сигналов микроконтроллера и СОМ-порта компьютера, одновременно обеспечивая их гальваническую развязку. Для питания этого узла со стороны компьютера используется импульсное напряжение на линии TXD СОМ-порта. Это напряжение выпрямляет диод VD5 и сглаживает конденсатор С9. Резистор R18 - коллекторная нагрузка фототранзистора оптрона. При разомкнутом выключателе SA1 связь с компьютером отсутствует. Для снижения погрешности малые значения емкости (0.1... 150 мкФ) измеряют при малом токе зарядки (IM). Генератор этого тока собран на элементах VT2, VD2, R2, R4 Он включен при низком логическом уровне напряжения на выходе PD0 микроконтроллера. Измерение ЭПС при таком токе оказывается недостаточно точным за счет влияния утечки тока через диод VD3 и входные цепи компараторов DA1.1, DA1.2. По этой причине ЭПС конденсаторов любой емкости измеряется при увеличенном токе зарядки (Iб), генератор которого состоит из элементов VT1, VD1, R1, R3 и включается низким уровнем на выходе PD4 микроконтроллера. Стоит отметить, что на результат измерения емкости эта утечка влияет значительно меньше. Однако, чтобы предотвратить раннее переполнение программного счетчика времени, емкость более 150 мкФ измеряется при токе зарядки Iб. Включают прибор нажатием на кнопку SB 1, при этом с выхода стабилизатора DA2 напряжение питания поступает на микроконтроллер DD1. Он начинает работать и по окончании предварительных операций устанавливает на выводе 12 низкий логический уровень. Транзистор VT4 открывается, что приводит и к открыванию полевого транзистора VT5. Зашунтировав кнопку SB1, он удерживает прибор включенным и после ее отпускания. Для выключения прибора нажимают на кнопку SB2. Закрывшийся транзистор VT5 разомкнет минусовую цепь батареи GB1 или подключенного к гнезду XS1 внешнего источника питания. Кнопку следует удерживать нажатой не менее 0,5 с, пока не разрядятся конденсаторы узла питания. Выключение происходит автоматически, без нажатия на кнопку SB2 при одном из следующих условий (в скобках указано время, в течение которого условие должно оставаться выполненным): - к гнездам XS2, XS3 не подключен измеряемый конденсатор (4,5 мин); - напряжение питания микроконтроллера упало ниже 5В (2...4 мин); - гнезда XS2, XS3 замкнуты или емкость подключенного к ним конденсатора превышает верхний предел измерения (50 с). На результат измерения (особенно малых значений емкости) оказывают влияние такие факторы, как задержка переключения транзистора VT3, сопротивление его канала в открытом состоянии, емкость между стоком и истоком, а также задержка срабатывания компараторов DA1.1, DA1.2.

Вернёмся к решению поставленной задачи по созданию анализатора качества ГСМ и рассмотрим функциональную блок-схему решения поставленной задачи (см. Рис. 3).Функциональная блок-схема решения задачи









Рис. 2

2.2 Основные формулы расчёта искомых параметров

Для определения необходимых измеряемых значений существует формулы-связки:

Ёмкость конденсатора:

C = = = ;=√ (Rэ2+Xc2).

2.2.1 Определим ёмкость конденсатора

Произведём расчётные данные по определению ёмкости конденсатора с размерами обкладок:h(высота контактов датчика погружённого в жидкость), d (расстояние между обкладками датчика),S(площадь обкладки) в вакууме, воздухе и в эталонном масле.D=0,2см,S=2см2, ε0(диэлектрическая постоянная вакуума):ε0 ≈ 8,85 х 10-12Ф/м, ε = εr(относительная диэлектрическая проницаемость измеряемого вещества): ε = Сх (ёмкост <#"579446.files/image006.jpg">

Рис. 3

3. Спецификация

Спецификация элементов схемы:

Обозначение.

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

Кол-во.

R1

Резистор17 Ом

1

R2

Резистор 10КОм

1

R3

Резистор100 Ом

1

R6,R7

Резистор2КОм

2

R5

Резистор 82КОм

1

R4

Резистор 22КОм

1

R8

Резистор180Ом

1

R9

Резистор5.1КОм

1

Резистор3 КОм

3

R15

Резистор1.1КОм

1

R16

Резистор1.3 КОм

1

VT3

Полевой транзистор IRF530

1

DA2

Стабилизатор LM78L05

1

XS3:1

Ввод щупа

1

XS3:2

Ввод щупа

1

VT1,VT2

BSS110

2

VD3,VD4

Диод 2n4007

2

DA2:B,DA3:A

Логическое= = LM393N

2

K1

Ключ (кнопка)

1

L1

Катушка индуктивности 10мкГн

1

C1,C2

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

2

C3

Конденсатор 1пФ

1

С4,С8,С9,С10

Конденсатор 0,1мкФ

4

С1,С2

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

2

С6,С7

Конденсатор 22пФ

2

ZQ

Кварцевый генератор 18МГц

1

Attiny2313

Микроконтроллер Attiny2313

1

VR1

Переменный резистор 10к

1

LCD1

Алфавитно-цифровой ЖК-модуль WH1602J

1

4. Структура программного средства

Структура взаимодействия модулей ПТС (см. Рис. 4)

Рис. 4

Руководство по использованию устройства

Последовательность действий для правильной работы устройства:

Подключить устройство к батарее.

Залить испытуемое вещество на высоту 2 см в измерительный сосуд.

Включить кнопку питания(K1).

Получить результат с дисплея.

Вытащить и очистить от остатков жидкости измерительные щупы.

Выключить питание.

При необходимости повторить процедуру.

Заключение

Поставленная передо мной задача создания и разработки малогабаритного анализатора качества ГСМ выполнена на уровне пробной версии устройства. Выполнены все предъявляемые ПТС требования.Для решения этой задачи были проделаны следующие виды работ:

Изучены отладочная плата Seeeduino и язык программирования Arduino, C, Assembler.

Найден, изучен и проанализирован имеющийся аналог устройство измерения ЭПС и ёмкости конденсатора.

Составлено техническое задание.

Составлены требования к ПС и ПТС, функциональные требования и требования к качеству разрабатываемого устройства.

Разработан алгоритм управляющей части ПТС.

Проведён анализ проделанной работы.

Создаваемое устройство более простое в использовании, надёжное и относительно недорогое. Аппаратная компонента разработанного ПТС реализована на микроконтроллере фирмы AtmelAttiny2313 и графическом ЖК-дисплее. Программная компонента устройства написана на языке Assembler. Объём программы не более 2КБ.

Данное устройство может быть использовано для анализа качества ГСМ и любой другой жидкости при предварительной доработке.

В дальнейшем возможна разработка компьютерного интерфейса.

Благодарю за огромный вклад и помощь своего научного руководителя: Коняева Сергея Ивановича.

Список использованных источников

1.       Измеритель емкости и ЭПС конденсаторов / В. Келехсашвили / Журнал «Радио».-2010г,- выпуск 6-7 - стр.19-21.

2.       Мактас М.Я. «8 уроков по P-CAD 2001»М.: СОЛОН-Пресс,2003 - стр.1-110.

.        У. Титце, К. Шенк Полупроводниковая схемотехника: справочное руководство» М.: МИР,1982 - стр. 56-65.

.        Описание ЖК-дисплея wh1602J-datasheet.-4c.

Приложение 1

Аналог разрабатываемого устройства спектрометр-анализатор

Известен спектрометр - анализатор веществ фирмы Brimrose [Бюллетень "AOTFSPECTROSCOPY", - фирма Brimrose, March, 1993]. Схема, которая представлена на рисунке.

Рис. 4

Где:

- источник широкополосного излучения;

- оптическая система доставки широкополосного излучения;

- акустооптическая ячейка;

- генератор высокой частоты;

- светоделительная пластина;

- опорный канал узкополосного излучения;

- сигнальный канал узкополосного излучения;

- фотоприемник опорного канала узкополосного излучения;

- фотоприемник сигнального канала узкополосного излучения;

- анализируемое вещество;

- световод;

- блок обработки и индикации;

- собирающие линзы;

- светоделительная пластина;

- дифференциальный усилитель.

Этот спектрометр-анализатор работает следующим образом. От источника широкополосного излучения (1) излучение посредством оптической системы доставки широкополосного излучения (2) поступает в акустооптическую ячейку (3), которая выделяет из всего спектра названного излучения узкополосное излучение (излучение в узком спектральном диапазоне). Названный узкий спектральный диапазон формируется с помощью генератора высокой частоты (4) и зависит от частоты подаваемого им сигнала на акустооптическую ячейку (3). Полученное узкополосное оптическое излучение, вышедшее из акустооптической ячейки далее разделяется посредством светоделительной пластинки (14), на два пучка, первый из которых (6), направляется по опорному каналу узкополосного излучения на фотоприемник опорного канала (8), а второй направляется по сигнальному каналу узкополосного излучения (7), через световод (11), на анализируемое вещество (10) и далее возвращается через световод (11) и поступает на фотоприемник сигнального канала узкополосного излучения (9). Фотоприемники (8) и (9) преобразуют оптические сигналы в электрические, которые поступают на входы дифференциального усилителя и сравниваются по величине. Разность этих сигналов интерпретируется как функция поглощения (пропускания) веществом оптического сигнала с заданной длиной волны, которая в свою очередь, жестко связана с частотой генератора поступающей на акустооптическую ячейку. Перестраивая с помощью генератора высокой частоты (4) длину волны выделяемого акустооптической ячейкой узкополосного излучения, получают соответствующую спектральную функцию пропускания, или поглощения, т.е. зависимость изменения амплитуды напряжения на выходе дифференциального усилителя пропорционального изменению оптического сигнала на входе фотоприемника (9) во всем спектральном диапазоне длин оптических волн, в котором проводится измерение спектра поглощения (пропускания) анализируемого вещества.Полученная спектрограмма обрабатывается в электронном блоке обработки и индикации (12) и сравнивается со спектрограммой эталонного образца исследуемого вещества, хранящейся в памяти этого блока.

Приложение 2

Листинг программы

.defsotye = R0;Число сотых долей (1)

.defdesyatye = R1;Число десятых долей (2)

.defedinicy = R2;Число единиц (3)

.defdesyatki = R3;Число десятков (4)

.defsotni = R4;Число сотен тысяч (5)

.deftyshi = R5;Число тысяч (6)

.defdes_tysh= R6;Число десятков тысяч (7)

.defa1 = R7;1-й байт переменной a (младший байт)

.defa2 = R8;2-й байт переменной a

.defa3 = R9;3-й байт переменной a

.defb1 = R10;1-й байт переменной b (младший байт)

.defb2 = R11;2-й байт переменной b

.defb3 = R12;3-й байт переменной b

.defc1 = R13;1-й байт переменной c (младший байт)

.defc2 = R14;2-й байт переменной c

.defc3 = R15;3-й байт переменной c

;--------------------------------------------------------

.defc4 = R16;4-й байт переменной c

.deftemp = R17;Определение главного рабочего регистра

.deftemp2 = R18;Определение второго рабочего регистра

.deflcd= R19;Определение регистра для обращения к LCD

.defz1 = R20;1-й байт переменной z (младший байт)

.defz2 = R21;2-й байт переменной z

.defz3 = R22;3-й байт переменной z

.defk_del= R24;Регистр поправки коеффициента деления таймера

.deftok_zar= R25;Регистр величины тока заряда

.defautoff= R28;Регистр счётчика автовыключения (он же YL)

.defautoff2= R29;Регистр предела измерения в Фарадах (он же YH)

;--------------------------------------------------------

.equconst1b = 8548;Константа перевода результата в ёмкость для большего тока (32768)

.equconst1m = 9124;Константа перевода результата в ёмкость для малого тока (524288)

.equconst2 = 2051;Константа 100*U1/Ib

.equconst3 = 3967;Константа 100*U2/Ib

.equconst4 = 129;Константа для задания скорости USART (9600 бит/с)

.equESRmax=2001;Порог максимального значения ESR (20,00 Ом)

.equporog1 = 32700;Порог переключения на младший предел (по U2)

.equporog2 = 15001;Порог переключения на малый ток (150 мкФ)

.equporog3 = 2001;Порог переключения предела на малом токе (20 мкФ)

.equd20m = 65535;Значение длительности паузы (~20мс при 20МГц) (тактов-9)/6

.equd3m = 9999;Значение длительности паузы (~3мс при 20МГц) (тактов-9)/6

.equd40u = 235;Значение длительности паузы (~40мкс при 20МГц) (тактов-4)/3

.equd1u=6;Значение длительности паузы (~1мкс при 20МГц) (тактов-4)/3

.equRS = 2;

.equE = 3;

;------------------------Начало программного кода

.cseg

.org0;установка текущего адреса на ноль

;------------------------Переопределение векторов прерываний:rjmpinit;Переход на начало программы_U1;Внешнее прерывание 0_U2;Внешнее прерывание 1;Таймер/счётчик 1, захват;Таймер/счётчик 1, совпадение, канал А;Таймер/счётчик 1, прерывание по переполнению;Таймер/счётчик 0, прерывание по переполнению;Прерывание USART приём завершён;Прерывание USART регистр данных пуст;Прерывание USART передача завершена;Прерывание по компаратору;Прерывание по изменению на любом контакте;Таймер/счётчик 1, совпадение, канал В;Таймер/счётчик 0, совпадение, канал В;Таймер/счётчик 0, совпадение, канал А;USI готовность к старту;USI переполнение;EEPROM готовность;Переполнение охранного таймера

;-----------------------Модуль инициализации:

;-----------------------Инициализация стека, RAMEND;Выбор адреса внешнего стека, temp;Запись его в регистр стека

;-----------------------Инициализация портов ВВ,0b00000100;PA2 на вывод, PA0, PA1 на ввод,temp;,0b00000100;Устанавливаем PA2, отключаем резисторы на PA0, PA1,temp;,0b11111101;PB0, PB2...PB7 навывод, PB1 наввод,temp;,0b00000000;Обнуляем PB1...PB7, устанавливаем PB1 ивключаемрезисторна PB0,temp;,0b00110011;PD0, PD1, PD4...PD5 навывод, PD2, PD3, PD6 наввод,temp;,0b01111111;Устанавливаем PD0, PD1, PD4...PD5 ивключаемрезисторы PD2, PD3, PD6,temp;

;-----------------------Инициализация таймера Т1,0b00000000;Останов таймера, нормальный режимB,temp;

;-----------------------Инициализация компаратора,0b01110000;Настройка компаратора,temp;

;-----------------------Определение масок прерываний ,0b00000000;Выбор режима вызова внешних прерываний PD2 (U1) и PD3 (U2),temp;,0b00000000;Запрет прерываний по таймеру 1,temp,0b00000000;Запрет внешних прерываний,temp;

;-----------------------Инициализация LCD (WH1602J)_init:m;Вызов подпрограммы задержки (~20мс)m;Вызов подпрограммы задержки (~20мс)m;Вызов подпрограммы задержки (~20мс)

;Команда 0010,E;Строб вверх,0b00101000;Команда (строб вверх + команда),temp;Запись команды в портu;Вызов подпрограммы задержки (~1мкс),E;Строб внизu;Вызов подпрограммы задержки (~1мкс),0b00101000;Команды 0010 и 1000_com;Вызов подпрограммы отправки команды на LCD,0b00001000;Команды 0000 и 1000_com;Вызов подпрограммы отправки команды на LCD,0b00000001;Команды 0000 и 0001_com;Вызов подпрограммы отправки команды на LCDm;Вызов подпрограммы задержки (~3мс),0b00000110;Команды 0000 и 0110_com;Вызов подпрограммы отправки команды на LCD

;-----------------------Начало основной программы;Глобально запрещаем прерывания_del;Очистка k_del_zar;Очистка tok_zar;Очистка autoff;Очистка autoff2,0b00001100;Включение дисплея и выбор курсора_com;

;-----------------------Выключение прибора,0b01110000;Разрешение перехода в режим Power-Down,temp;,0;Выключение питания;Переход в режим Power-Down_check1:;Очистка z1;Очистка z2

lditemp,55;Запись 55 в temp_check2:

dectemp;Уменьшение temp на 1,ACO;Если на выходе компаратора 1, то пропуск след.команды, иначе далее

rjmpbat_check3;На bat_check3;Увеличение z1 на 1_check4;На bat_check4_check3:

incz2;Увеличение z2 на 1_check4:,0;Сравнение temp с 0_check2;Если temp<>0, то на bat_check2, иначе далее,z2;Сравнение z1 с z2_0;Если z1<z2, то на pusk_0, иначе далее,low(Bat*2);Запись в ZL младшего байта адреса ячейки из таблицы Bat (альтернативная адресация),high(Bat*2);Запись в ZH старшего байта адреса ячейки из таблицы Bat (альтернативная адресация)_all;Вызов подпрограммы отображения двух строк на LCD по данным из таблиц;Увеличение autoff2 на 1

;-----------------------Измерение на большом токе заряда_tok:,0b00000001;Пуск таймера (clk/1),k_del;с коррекцией коеффициента деления таймера,0;Включение заряда конденсатораB,temp;;На cikl

;-----------------------Измерение на малом токе заряда_tok:,0b00000001;Пуск таймера (clk/1),k_del;с коррекцией коеффициента деления таймера,4;Включение заряда конденсатораB,temp;:;Зацикливаем

;-----------------------Умножение (c3+c2+c1)*(XH+XL)=(c4+c3+c2+c1) или (n2-n1)*const1b,low(const1m);Запись младшего байта const1m в XL,high(const1m);Запись старшего байта const1m в XH

rjmpstep6_2;На step6_2_1:,low(const1b);Записьмладшегобайта const1b в XL,high(const1b);Записьстаршегобайта const1b в XH

step6_2:mul16x16;Вызов подпрограммы перемножения 16-ти битных чисел

;-----------------------Отображение первой строки LCD_1str;Вызов подпрограммы отображения первой строки LCD;Очистка autoff

;-----------------------Умножение (c3+c2+c1)*(XH+XL)=(c4+c3+c2+c1) или (U2/I)*n1,low(const3);Запись младшего байта const3 в XL,high(const3);Запись старшего байта const3 в XHmul16x16;Вызов подпрограммы перемножения 16-ти битных чисел,c1;Копирование результата умножения из c1 в z1,c2;Копирование результата умножения из c2 в z2,c3;Копирование результата умножения из c3 в z3,c4;Копирование результата умножения из c4 в z4,b1;Копирование 1-го байта n2 из b1 в c1,b2;Копирование 2-го байта n2 из b2 в c2,b3;Копирование 3-го байта n2 из b3 в c3

;-----------------------Умножение (c3+c2+c1)*(XH+XL)=(c4+c3+c2+c1) или (U1/I)*n2,low(const2);Запись младшего байта const2 в XL,high(const2);Запись старшего байта const2 в XHmul16x16;Вызов подпрограммы перемножения 16-ти битных чисел;Извлечение из стека в a3 (извлечение n2-n1);Извлечение из стека в a2;Извлечение из стека в a1

subc1,z1;Вычитание z1 из c1 ((U1/I)*n2)-((U2/I)*n1)

sbcc2,z2;Вычитание z2 из c2 с учётом переноса,z3;Вычитание z3 из c3 с учётом переноса,z4;Вычитание z4 из c4 с учётом переноса;Если результат положительный, то на step8, иначе далее,low(ESRmn*2);Запись в ZL младшего байта адреса ячейки из таблицы ESRmn (альтернативная адресация),high(ESRmn*2);Запись в ZH старшего байта адреса ячейки из таблицы ESRmn (альтернативная адресация)

;-----------------------Отображение второй строки LCD:_2str;Вызов подпрограммы отображения второй строки LCD

;-----------------------Подпрограмма отображение первой строки LCD_1str:

;-----------------------Отображение ёмкости,0x80;Выбор знакоместа (начало 1й строки)_com;Вызов подпрограммы отправки команды на LCD

;-----------------------Отображение "12345" или " 2345";Очистка temp_tysh,temp;Если значение десятков тысяч не равно нулю, то переход на lcd_1str_4_1str_4;иначе далее,temp;Если значение тысяч не равно нулю, то переход на lcd_1str_3_1str_3;иначе далее,temp;Если значение сотен не равно нулю, то переход на lcd_1str_2_1str_2;иначе далее,temp;Если значение десятков не равно нулю, то переход на lcd_1str_0_1str_0;иначе далее

;-----------------------Отображение " 5,67" или "45,67",0x20;Отображение " " (ёмкость)_dat;

rjmplcd_1str_1;На lcd_1str_1_1str_0:_del,4;Сравнение k_del с 4_1str_0_1;Если k_del<>4, тона lcd_1str_0_1,0x30;Отображение "0" (ёмкость)_dat;,0x2C;Отображение "," (ёмкость)_dat;

lcd_1str_0_1:,0x30;Определение кода для числа десятков (ёмкость),desyatki;_dat;Отображение числа десятков (ёмкость)_1str_1:,0x30;Определение кода для числа единиц (ёмкость),edinicy;_dat;Отображение числа единиц (ёмкость)_del,4;Сравнение k_del с 4_1str_1_1;Если k_del<>4, то на lcd_1str_1_1,0x30;Определение кода для числа десятых долей (ёмкость),desyatye;_dat;Отображение числа десятых долей (ёмкость),0x30;Определение кода для числа сотых долей (ёмкость),sotye;_dat;Отображение числа сотых долей (ёмкость),0x20;Отображение " " (ёмкость)_dat; _lcd;На F_lcd_1str_1_1:,0x2C;Отображение "," (ёмкость)_dat; ,0x30;Определение кода для числа десятых долей (ёмкость),desyatye;_dat;Отображение числа десятых долей (ёмкость),0x30;Определение кода для числа сотых долей (ёмкость),sotye;_dat;Отображение числа сотых долей (ёмкость)_lcd;На uF_lcd

;-----------------------Отображение "345,6"_1str_2:,0x30;Определение кода для числа сотен (ёмкость),sotni;_dat;Отображение числа сотен (ёмкость),0x30;Определение кода для числа десятков (ёмкость),desyatki;_dat;Отображение числа десятков (ёмкость),0x30;Определение кода для числа единиц (ёмкость),edinicy;_dat;Отображение числа единиц (ёмкость),0x2C;Отображение "," (ёмкость)_dat; ,0x30;Определение кода для числа десятых долей (ёмкость),desyatye;_dat;Отображение числа десятых долей (ёмкость)_lcd;На uF_lcd

;-----------------------Отображение " 2345" или "12345"_1str_3:,0x20;Отображение " " (ёмкость)

rcalllcd_dat; _1str_5;На lcd_1str_5

lcd_1str_4:,0x30;Определение кода для числа десятков тысяч (ёмкость),des_tysh;_dat;Отображение числа десятков тысяч (ёмкость)_1str_5:,0x30;Определение кода для числа тысяч (ёмкость),tyshi;_dat;Отображение числа тысяч (ёмкость),0x30;Определение кода для числа сотен (ёмкость),sotni;_dat;Отображение числа сотен (ёмкость),0x30;Определение кода для числа десятков (ёмкость),desyatki;_dat;Отображение числа десятков (ёмкость),0x30;Определение кода для числа единиц (ёмкость),edinicy;_dat;Отображение числа единиц (ёмкость)_lcd:,0x20;Отображение " " (ёмкость)_dat; ,0x75;Отображение "u" (ёмкость)_dat; _lcd:,0x46;Отображение "F" (ёмкость)_dat;;Выход из подпрограммы

;-----------------------Подпрограмма отображение второй строки LCD_2str:

;-----------------------Отображение ESR,0xC0;Выбор знакоместа (начало 2й строки)_com;;Очистка temp,temp;Если значение десятков равно нулю, то переход на lcd_2str_0_2str_0;иначе далее,0x30;Определение кода для числа десятков (ESR),desyatki;_dat;Отображение числа десятков (ESR)_2str_1;Переход на lcd_2str_1_2str_0:,0x20;Отображение " " (ESR)_dat; _2str_1:,0x30;Определение кода для числа единиц (ESR),edinicy;_dat;Отображение числа единиц (ESR),0x2C;Отображение "," (ESR)_dat; ,0x30;Определение кода для числа десятых долей (ESR),desyatye;_dat;Отображение числа десятых долей (ESR),0x30;Определение кода для числа сотых долей (ESR),sotye;_dat;Отображение числа сотых долей (ESR),0x20;Отображение " " (ESR)_dat; ,0x4F;Отображение "О" (ESR)_dat; ,0xBC;Отображение "м" (ESR)_dat; ;Выход из подпрограммы

;-----------------------Подпрограмма отображение сообщений на LCD_mess:,8;Запись 8 в z4,1;Сравнение temp с 1_mess_2str;Если str не равен 1, то на lcd_mess_2str, иначе далее_mess_1str:,0x80;Выбор знакоместа (начало 1й строки)

rcalllcd_com;_mess_0;На lcd_mess_0

lcd_mess_2str:,0xC0;Выбор знакоместа (начало 2й строки)_com;_mess_0:,Z+;Запись lcd байта состояния строк из ячейки с адресом из Z_dat;;Уменьшение z4 на 1,0;Сравнение z4 с 0_mess_0;Если z4<>0, то на lcd_mess_0, иначе далее;Выход из подпрограммы

;-----------------------Подпрограмма отображения двух строк подряд на LCD по данным из таблиц _all:,1;Отображение 1-й строки_mess;Вызов подпрограммы отображения сообщений,2;Отображение 2-й строки_mess;Вызов подпрограммы отображения сообщений;Выход из подпрограммы

;-----------------------Подпрограмма вычитания (c3+c2+c1)-(z3+z2+z1)=(c3+c2+c1)

c_minus_z:,z1;

sbcc2,z2;,z3;;Выход из подпрограммы

;-----------------------Подпрограмма сложения (c3+c2+c1)+(z3+z2+z1)=(c3+c2+c1)

c_plus_z:,z1;

;-----------------------Подпрограмма отправки команды на LCD_com:,RS;Команда,PORTB,0b00000011;Маска 00000011 дляобнулениялишнего,0b00001000;Логическое сложение temp с 00001000 (строб вверх + команда)_out;Вызов подпрограммы lcd_out;Выход из подпрограммы

;-----------------------Подпрограмма отправки данных на LCD

lcd_dat:,RS;Данные

intemp,PORTB

anditemp,0b00000011;Маска 00000011 для обнуления лишнего,0b00001100;Логическое сложение temp с 00001100 (строб вверх + команда)_out;Вызов подпрограммы lcd_out;Выход из подпрограммы

;-----------------------Подпрограмма отправки на LCD

lcd_out:,E;Строб вверх

pushlcd;Сохранение lcd в стеке,0b11110000;Маска 11110000 для обнуления младшего полубайта,temp;Логическое сложение lcd с temp (строб вверх + команда),lcd;Запись команды в порт,E;Строб вниз,E;Строб вверх;Извлечение lcd из стека;Смена полубайт местами,0b11110000;Маска 11110000 для обнуления младшего полубайта,temp;Логическое сложение lcd с temp (строб вверх + команда),lcd;Запись команды в портu;Вызов подпрограммы задержки (~1мкс),E;Строб внизu;Вызов подпрограммы задержки (~40мкс)u;Вызов подпрограммы задержки (~40мкс);Выход из подпрограммы

;-----------------------Подпрограмма отображения числовых строк (для отладки):,6;Если PD6=0, то пропуск след.команды_2;На otlad_2m;Вызов подпрограммы задержки (~3мс),6;Если PD6=0, то пропуск след.команды_2;На otlad_2lcd_both_str;Вызов подпрограммы отображения двух числовых строк_1:_off;Вызов подпрограммы ожидания отпускания кнопки;Очистка стека (поскольку выход не по ret);Очистка стека;На main_2:;Выход из подпрограммы

;-----------------------Подпрограмма ожидания отпускания кнопки_off:,6;Если PD6=1, то пропуск след.команды_off;На knop_offm;Вызов подпрограммы задержки (~3мс),6;Если PD6=1, то пропуск след.команды_off;На knop_off;Выход из подпрограммы

;-----------------------Подпрограмма передачи с 1-го по 7-й байт через USART_1_7:_ready;Вызов подпрограммы ожидания готовности буфера передачи,0x10;Запись 0x10 в temp_tysh,temp;Логическое сложение des_tysh с temp, результат в des_tysh

outUDR,des_tysh;Передачаиз des_tysh в USART

lditemp,0x20;Запись 0x20 в temp,temp;Логическое сложение tyshi с temp, результат в tyshi,tyshi;Передача из tyshi в USART,0x30;Запись 0x30 в temp,temp;Логическое сложение sotni с temp, результат в sotni,sotni;Передача из sotni в USART,0x40;Запись 0x40 в temp,temp;Логическое сложение desyatki с temp, результат в desyatki,desyatki;Передача из desyatki в USART,0x50;Запись 0x50 в temp,temp;Логическое сложение edinicy с temp, результат в edinicy

outUDR,edinicy;Передачаиз edinicy в USART

lditemp,0x60;Запись 0x60 в temp,temp;Логическое сложение desyatye с temp, результат в desyatye,desyatye;Передача из desyatye в USART,0x70;Запись 0x70 в temp,temp;Логическое сложение sotye с temp, результат в sotye,sotye;Передача из sotye в USART;Выход из подпрограммы

;-----------------------Подпрограмма отображения одной числовой строки

lcd_one_str:,0x4E;Отображение "N"_dat;,0x3A;Отображение ":"

rcalllcd_dat;,0x30;Определение кода для числа тысяч,tyshi;_dat;Отображение числа тысяч,0x30;Определение кода для числа сотен,sotni;_dat;Отображение числа сотен,0x30;Определение кода для числа десятков,desyatki;_dat;Отображение числа десятков,0x30;Определение кода для числа единиц,edinicy;_dat;Отображение числа единиц,0x30;Определение кода для числа десятых долей,desyatye;_dat;Отображение числа десятых долей,0x30;Определение кода для числа сотых долей,sotye;_dat;Отображение числа сотых долей;Выход из подпрограммы

;-----------------------Подпрограмма отображения двух числовых строк по данным_both_str:,a1;Копирование из a1 в c1,a2;Копирование из a2 в c2,a3;Копирование из a3 в c3

;-----------------------Отображение смещения от нуля для U1 "1= ",0x80;Выбор знакоместа (начало 1й строки)_com;_one_str;Вызов подпрограммы отображения одной числовой строки,b1;Копирование из b1 в c1,b2;Копирование из b2 в c2,b3;Копирование из b3 в c3

;-----------------------Отображение смещения от нуля для U2 "2= ",0xC0;Выбор знакоместа (начало 2й строки)_com;_one_str;Вызов подпрограммы отображения одной числовой строки;Выход из подпрограммы

;-----------------------Подпрограмма обработки прерывания по переполнению таймера 1

;Поскольку выход не по reti, то глобально запрещённые прерывания остаются запрещены:;Глобально запрещаем прерывания,3;Заносим 3 в temp,temp;Сравнение c3 с temp_0;Если с3=3, то на ovtim1_0, иначе далее;Увеличение c3 на 1;Выход из подпрограммы обработки прерывания_0:,0;Выключение большого тока заряда конденсатора,4;Выключение малого тока заряда конденсатора,5;Включение разряда конденсатора,0b00000000;Останов таймераB,temp;;Очистка стека (поскольку выход по clk_down, а не по reti);Очистка стека_down;Переход на clk_down

;-----------------------Подпрограмма обработки внешнего прерывания по U1

;Поскольку выход не по reti, то глобально запрещённые прерывания остаются запрещены_U1:,TCNT1L;Сохраняем 1-йбайт n1,TCNT1H;Сохраняем 2-йбайт n1,c3;Копируем из c3 в a3 3-й байт n1,0b10000000;Разрешение внешнего прерывания только по PD3 (U2),temp;;Выход из подпрограммы обработки прерывания

;-----------------------Подпрограмма обработки внешнего прерывания по

U2_U2:,TCNT1L;Сохраняем 1-й байт n2,TCNT1H;Сохраняем 2-й байт n2;Глобально запрещаем прерывания,0;Выключение большого тока заряда конденсатора,4;Выключение малого тока заряда конденсатора,5;Включение разряда конденсатора,0b00000000;Останов таймераB,temp;;Очистка стека (поскольку выход не по reti);Очистка стека

Похожие работы на - Создание анализатора качества горюче-смазочных материалов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!