Далее напряжение подается на трехвыводной стабилизатор напряжения 7805, с выхода которого получим постоянное напряжение в 5В.
Светодиод установлен, чтобы сигнализировать о включенном питании, резистор установлен для обеспечения необходимого тока светодиода. Так как светодиод светит при 20 мА, рассчитать сопротивление резистора не сложно: по закону Ома получим R = U / I = (5-2) / 0,02 = 150 Ом.
Как было указано выше, для работы аппарата был выбран микроконтроллер AtmelAT89C1051 [29] (рисунок 3.2).
PDIP/SOIC
Рисунок 3.2 – Назначение выводов AtmelAT89C1051
Технические характеристики:
• Совместим с MCS-51™ продуктами;
• 1Kбайт программируемой flashпамяти – рассчитанной: 1,000 запись/удаление циклов;
• 2.7Vдо 6Vрабочий диапазон;
• 0 Hz to 24 MHz;
• 64 байт SRAM;
• 15 программируемых I/Oвыходов;
• Один 16-BitТаймер/Счетчик;
• Три источника прерывания;
• Внутренний Аналоговый компаратор;
Описание:
AT89C1051 это низковольтный, высокопроизводительный CMOS 8-битный микроконтроллер с 1К байт программируемой памятью. Устройство собрано с использованием высоко плотной технологии и совместимо с индустриальным стандартом инструкций MCS-51™. Используя многослойный 8-битный CPU с памятью в монолитном чипе, делает AtmelAT89C1051 мощным микроконтроллером, обеспечивающим высокую гибкость и стоимостную эффективность решений множества ориентированных на контроль устройств.
В дополнение AT89C1051 проектировался со статической логикой для операций упавшей до нуля частоты и поддерживает два программно выбираемых энергосберегающих режима.
Подключение устройств к микроконтроллеру:
Список подключений и описание см. таблица 3.1. [42-46]
Таблица 3.1 – Подключения
№ ножки | Описание |
20 | Питание +5В |
19 | Р1.7 используется для подачи напряжения на одну из обмоток шагового мотора |
18 | Р1.6 используется для подачи напряжения на одну из обмоток шагового мотора |
17 | Р1.5 используется для подачи напряжения на одну из обмоток шагового мотора |
16 | Р1.4 используется для подачи напряжения на одну из обмоток шагового мотора |
15 | Р1.3 используется для запуска насоса через реле |
14 | Р1.2 используется для установки светодиода сигнализирующего о недостаточном уровне воды в баке. |
13 | Р1.1 не используется |
12 | Р1.0 не используется |
11 | Р3.7 Обеспечивает проверку уровня воды |
10 | Земля |
9 | Р3.5 не используется |
8 | Р3.4 не используется |
7 | Р3.3 не используется |
6 | Р3.2 не используется |
5 | Вход на инвертированный амплитудный осциллятор |
4 | Выход с инвертированного амплитудного осциллятора |
3 | Р3.1 не используется |
2 | Р3.0 не используется |
1 | Сброс Устанавливаем кнопку для сброса. |
3.3 Тактовый генератор
Используем осциллятор с частотой 24 МГц (рисунок 3.3). Ёмкость конденсаторов равна 30 пФ, что рекомендует производитель, описывая данную схему в технической документации. [29, 31-40]
Рисунок 3.3 – Тактовый генератор
Рисунок 3.4 – Схема проверки уровня воды
Схема проверки воды в баке состоит из излучающего фотоны светодиода и принимающего фотодиода [31-41] (рисунок 3.4).
Фотодиод находиться на трубке, соединенный с баком. Он установлен на уровне соответствующий минимальному уровню воды. В трубке находиться поплавок, который перекрывает фотодиод, когда уровень воды мал.
Для работы светодиода необходимо обеспечить ток 20мА, для этого установлены резисторы. Рассчитывается он просто: по закону Ома получим
R = U / I = (5-2) / 0,02 = 150 Ом.
Схема соединена с портом микроконтроллера Р3.7, с помощью которого программно будем проверять достаточно воды в баке или нет. Если высокий уровень, то воды достаточно, а если низкий, то воды не достаточно и необходимо проинформировать об этом пользователя, с помощью светодиода, отвечающего за низкий уровень воды (он будет мигать).
Рисунок 3.5 – Индикатор уровня воды
Индикатор представляет собой светодиод зеленного цвета (рисунок 3.5), который будет светить, когда уровень воды достаточен, и мигать, если необходимо долить воду в бак. [31-41]
Для работы светодиода необходимо обеспечить ток 20мА, для этого установлены резисторы. Рассчитываются они просто: по закону Ома получим
R = U / I = (5-2) / 0,02 = 150 Ом
Схема присоединена к порту Р1.2, с помощью которого будем программно управлять светодиодом.
3.6 Схема управления шаговым двигателем
Как указывалось выше, для работы используется шаговый двигатель российского производства FL28STH32-0956A [13]. Вот некоторые его характеристики:
· Рабочий ток 0,95А;
· Крутящий момент 0,43 кг*см;
· Момент инерции ротора 0,9 г*cм2;
· Вес 0,11 кг.
Для работы мотора необходимо обеспечить ток в 0,95А для этого установлены блоки усиления (рисунок 3.6). Транзистор выбран так, чтобы обеспечить необходимый ток для работы шагового двигателя, а конкретно, если двигатель потребляет 0,95А, а выход микроконтроллера 20мА, то соответственно необходимый коэффициент усиления ≈50, для его обеспечения воспользуемся схемой Дарлингтона. [31-40]
Рисунок 3.6 – Сема управления шаговым мотором
Схема присоединена к 4 портам: с Р1.4 по Р1.7. Каждый порт отвечает за свою обмотку, таким образом, программно будем подавать сигнал на ту или иную обмотку и тем самым будем раскручивать ротор мотора.
Для работы используется насос 2013 14Вт, имеющий отдельное питание от сети 220В, который включается с помощью низковольтного реле (рисунок 3.7). С помощью трубок он будет качать воду в стаканчики.
В схеме используется низковольтное реле российского производства РС4.524.315 [21] работающее от напряжения 4В и срабатывает при 80 мА, для обеспечения таких показателей достаточно внутреннего сопротивления реле.
Рисунок 3.7 – Схема управления насосом
Реле срабатывает при открытом транзисторе, который открывается подачей с порта Р1.3 логического нуля. При подаче логического нуля транзистор открывается, и ток проходит через реле, он срабатывает и запускает насос.
4 Алгоритм работы
Разработку программного обеспечения начнём с создания продуманного алгоритма, который приведён в виде блок-схемы (Приложение Б). [47, 48, 49]
Первым функциональным действием аппарата будет подсчет наполненных стаканчиков, для этого введём специальную переменную, в которую в начале работы обнулим.
Следующим действием будет проверка на наличие достаточного количества воды в баке. Для этого микроконтроллером будет опрошен фотодиодный датчик, и если окажется, что он перекрыт поплавком, то значит, уровень воды маловат и требуется долить воды в бак. Информировать пользователя о недостатке воды будет светодиод, который будет мигать. Это будет происходить за счет того, что микроконтроллер будет попеременно подавать сигнал на включение и выключение, через порт, к которому присоединён светодиод.
Если уровень воды достаточен, включим светодиод индикации уровня воды, подав сигнал на порт, к которому присоединен светодиод.
Далее проверяем, что имеются пустые стаканчики, для этого проверяем специальную переменную, которая считает количество заполненных стаканчиков. Если мы заполнили водой все стаканчики, то завершаем работу аппарата. А если все же остались пустые стаканчики, то работа аппарата продолжается.
Для позиционирования следующего стаканчика необходимо повернуть платформу, на которой они установлены. Это делается с помощью шагового мотора, который проворачивает насколько оборотов ротора и с помощь червячно-реечного механизма поворачивает платформу на определенный угол.
Когда мы знаем, что стаканчик находиться под краном, запускаем насос. Для этого микроконтроллер подаёт сигнал на соответствующий порт и выжидает некоторое время, достаточное для заполнения стаканчика водой. Когда время выходит мотор выключается.
Далее для удобства выжидается набольшая пауза, и аппарат переходит в режим заполнения следующего стаканчика.
4.2 Описание хода разработки программного обеспечения
Опишем ход реализации программы (Приложение В). [47, 48, 49]
Проверка синтаксиса и отладка программы осуществлялось с помощью программы фирмы KeilSoftwaremVisionv.2.04b.
Перед началом указывается адрес начала программы.
org 000h
ljmp BEGIN
Далее перечисляются необходимые переменные.
N_GLASS:DB6H;количество стаканчиков
N_MOTOR_COUNT:DB2H;количество оборотов ротора мотора
N_STEP:DB8H;шагом одного оборота ротора мотора
STEPS:DB90H, 10H, 30H, 20H, 60H, 40, 0C0H, 80H;шаги
TH_MOTOR:DB;задержка перед следующим шагом
TL_MOTOR:DB;задержка перед следующим шагом
TH_PUMP:DB;время работы мотора
TL_PUMP:DB;время работы мотора
TH_LED:DB;задержка смены состояния светодиода
TL_LED:DB;задержка смены состояния светодиода
TH_PAUSE:DB;задержка для паузы
TL_PAUSE:DB;задержка для паузы
В начале программы осуществляем настройку таймера/счетчика: