Контроллер прибора оцифровки аналоговых данных
Разработка контроллера прибора, обеспечивающего реализацию функций оцифровки аналоговых данных с выводом результата в виде графического вида сигнала. Выбор контроллера и элементов схемы, их описание. Общий алгоритм работы и листинг программы управления.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.12.2012 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Оглавление
Техническое задание
Введение
1.Описание функциональной схемы
1.1 Описание элементов схемы
2.Разработка принципиальной схемы
2.1 Выбор контроллера
2.2 Выбор элементов схемы
2.3 Описание принципиальной схемы
3.Разработка программы управления
3.1 Общий алгоритм работы
3.2 Описание работы программы
Заключение
Литература
контроллер оцифровка программа
Техническое задание
Необходимо разработать контроллер прибора, обеспечивающий реализацию функций оцифровки аналоговых данных с выводом результата в виде графического вида сигнала. Также в качестве дополнительной функции предусматривается работа данного прибора в виде цифрового логического анализатора.
Так как прибор должен обеспечивать определенный интерфейс с пользователем,предусматривается 8 клавиш управления, которые позволяют включить и выключить прибор, выбрать режим работы системы, а также регулировать частоту оцифровки и коэффициент дополнительного деления.
Для отображения информации используется специализированный графический LCD разрядностью не менее 64х64.
Прибор также предусматривает интерфейс с компьютером при выполнении преобразования полученные данные передаются ЭВМ.
Так как прибор не является тарированным осциллографом а является скорее пробником с функциями осциллографа и цифрового анализатора.
Прибор является измерительным устройством потому не предусматривает никаких исполнительных ключей.
Введение
В данной курсовой работе выполняется разработка простейшего измерительного прибора. Данный прибор хотя и не ориентирован на высокую точность измерений но он позволяет обеспечить визуальный контроль изменения сигнала. Такое решение является достаточно компактным но функциональным прибором. Такие приборы почти все без исключения используют различные микропроцессорные комплекты, это значительно расширяет их функциональность, при этом не требуют значительного усложнения аппаратной части и соответственно не удорожает устройство, обеспечивая необходимый уровень функций.
В целом, применение и разработка микроконтроллерных систем управления и измерения является уже насущной необходимостью для обеспечения управления сложными системами.
1.Описание функциональной схемы
Рис.1. Функциональная схема осциллографического пробника.
ДН - делитель напряжения;
ВУ - входной усилитель;
БС - блок синхронизации;
ЦК - цифровой коммутатор используемый в режиме логического анализатора для контроля 8ми цифровых каналов;
АЦП - аналогово цифровой преобразователь
ЖКИ - графический жидкокристаллический индикатор
Данный микроконтроллерный комплект ориентирован на наибольшую достижимую скорость работы потому выбираемые компоненты желательно должны обеспечивать минимальные скорости задержки при обработке поступающих данных.
БК - блок клавиатуры. Клавиатура содержит восемь кнопок. Это позволяет упростить логику и обеспечивает большое удобство работы с системой. Итак, на клавиатуре находятся следующие клавиши управления: 1 -Включение/Выключение. 2 -Выбор режима. 3 и 4я Регулировка частоты оцифровки грубо +\-.5 и 6 Регулировка частоты мягко+\-. 7\8 Делитель напряжения +\-
USB-UART преобразователь интерфейса для подключения контроллера к компьютеру через USB порт. Для передачи данных и приема команд управления.
2.Разработка принципиальной схемы
2.1 Выбор контроллера
Исходя из функциональной схемы контроллера обеспечивающего функции осциллографического пробника, при выборе контроллера следует учитывать, что контроллер должен обеспечивать минимальные задержки при обработке информации и оцифровке сигнала. Также желательно чтобы контроллер имел встроенный АЦП высокого быстродействия. Также требуется обеспечить соответствующее число портов для управления ЖКИ и приема данных с буферного коммутатора.
Для обеспечения корректного правильного выбора наиболее оптимального контроллера был проведен анализ трех наиболее часто используемых серий контроллеров: AVR, PIC и МК-51. При этом учитывалось, то что контроллер должен удовлетворять требованиям к разрабатываемому устройству а также по соотношению цены и качества.
Рассмотрим серию AVR - ядро базируется на RISC архитектуре. Имеется регистровый файл быстрого доступа, который содержит 32 регистра общего назначения. Они непосредственно связанны с арифметико-логическим устройством (ALU), и мощной системой команд. При совершении одного тактового цикла из регистрового файла извлекаются два операнда, что обеспечивает высокую производительность. Производительность такой высокоэффективной архитектуры во много раз больше, чем стандартные CISC микроконтроллеры, например 51 серия.
AVR работают в широком диапазоне питающих напряжений от 2,7 В до 6,0 В. Ток потребления в активном режиме зависит от величины напряжения питания и частоты, на которой работает микроконтроллер, и составляет менее 1 мА для 500 кГц, 5 ... 6 мА для 5 МГц и 8 ... 9 мА для частоты 12 МГц.
Каждый из 32-х регистров общего назначения длиной 1 байт непосредственно соединен с арифметико-логическим устройством (ALU) процессора. Это означает, что в AVR существует 32 регистра-аккумулятора это позволяет в сочетании с конвейерной обработкой выполнять одну операцию в ALU за один машинный цикл.
В целом архитектура AVR в сочетании с регистровым файлом и расширенной системой команд позволяет в короткие сроки создавать программы с очень эффективным кодом как по скорости его выполнения, так и по компактности.
Для решения поставленной задачи из серии AVR , был выбран наиболее подходящий контроллер AT90S2313, его основные технические характеристики:
2 Кбайт Flash- памяти с поддержкой внутрисистемного программирования SPI- последовательный интерфейс для загрузки программного кода Ресурс: 1000 циклов записи/ стирания
128 байта EEPROM: Ресурс: 100 000 циклов запись/ стирание
15 программируемых линий I/O
Питание VCC: от 2.7 В до 6.0 В
Полностью статический режим работы:
От 0 до 10 МГц, при питании от 4.0 В до 6.0 В От 0 до 4 МГц, при питании от 2.7 В до 6.0 В
Производительность, вплоть до 10 MIPS при 10 МГц
Один 8-ми разрядный таймер/ счетчик с отдельным предварительным делителем частоты
Один 16-ти разрядный таймер/ счетчик с отдельным предварительным делителем частоты с режимами сравнения и захвата
Полнодуплексный UART
Внешние и внутренние источники прерывания
Встроенный аналоговый компаратор
20 выводов из них 16портов.
Другой рассмотренный мной контроллер PIC16F628 наиболее распространенный и используемый контроллер серии PIC. Он обеспечивает необходимые параметры для реализации проекта по числу портов и внутренним ресурсам: таймеру памяти и частоте работы.
Контроллер относится к семейству КМОП микроконтроллеров с RISC архитектурой. Имеет внутреннее 2K x 14 бит EEPROM для программ, 8-битовые данные и 64байт EEPROM памяти данных.
Все команды состоят из одного слова (14 бит шириной) и исполняются за один цикл (400 нс при 10 МГц), кроме команд перехода, которые выполняются за два цикла (800 нс) Данный контроллер уступает сери AVR по быстродействию. PIC16F628 имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек.
Периферия включает в себя 8-битный таймер/счетчик с 8-битным программируемым делителем (фактически 16 - битный таймер) и 13 линий двунаправленного ввода/вывода. Высокая нагрузочная способность (25 мА макс. втекающий ток, 20 мА макс. вытекающий ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы.
Как показывает рассмотрение, данный контроллер позволяет реализовать разработку управляющего контроллера с необходимыми функциями однако имеет минимальное число портов что требует использовать или их мультиплексирование или ЖКИ с последовательным вводом/выводом. Однако данный контроллер малознаком по архитектуре. Для качественного выполнения проекта требует детального рассмотрения его архитектуры. В остальном контроллер удовлетворяет целям решаемой задачи.
Последнее рассматриваемое семейство микроконтроллеров МК-51. В данной архитектре имеется достаточное число портов однако контроллеры с высокоскоростным АЦП достаточно дороги потому эффективнее использовать внешний скоростной АЦП. Другой недостаток в стандартном контроллере внутренняя эффективная производительность ниже чем тактовая частота так один машинный цикл выполняется за 12тактов генератора. Однако существуют последние разработки использующие совместимую по командам и архитектуре структуру однако скорость исполнения команд у них выше CLK/2 или CLK/4. Объём максимального размера адресного пространства стандартного контроллера для каждого типа памяти состав-ляет 64 Кбайта. Но только 2, 4, 8 Кбайт ПЗУвстроено в контроллер и 128+128 байт регистрового ОЗУ располагаются непосредственно на кристалле МК 8051 (52). Однако при поиске подходящего контроллера этой серии как наиболее знакомой нам был выбран контроллер С8051F018 имеющий внешнюю частоту синхронизации до 25МГц и скорость обработки команд равную тактирующей частоте. Однако при выполнении команд деления и умножения они выполняются за 4ре такта. Дополнительным плюсом данных МК является расширенная регистровая память которая имеет 1Кб регистровой памяти куда может выполнятся сохранение измеренных данных. 3 16ти разрядных счетчика таймера обеспечивают широкие возможности синхронизации процессов и тактирования последовательного порта. В моем случае выбранный контроллер обеспечивает достаточное количество портов 4х8 что упрощает схемотехническое проектирование и позволяет ускорить обмен с АЦП по параллельному каналу как с АЦП так и с ЖКИ, а также подключение входного 8ми канального буфера.
Внимательно изучив свойства приведённых выше микроконтроллеров, а также сравнивая их с перечисленными требованиями (которые вытекают из совокупности необходимых параметров для разрабатываемого устройства), был окончательно выбран контроллер 51 серии как наиболее знакомый и удобный для реализации разрабатываемого осциллографического пробника.
2.2 Выбор элементов схемы
При проектировании схемотехнического решения было рассмотрено несколько прототипов - радилюбительскихх разработок которые реализуют подобные пробники. Учитывая поставленную задачу создать проект заведомо рабочего устройства было решено использовать ряд готовых узлов из уже действующих радиолюбительских разработок.
Осцилограф состоит из следующих основных узлов: входного антетюнатора, предварительного усилителя, канала вертикального отклонения луча с переключаемым коэффициентом усиления, конечного усилителя, узла синхронизации.
Рассматривая входной делитель было решено использовать переключатель управляемый специальными слаботочными микро реле. Такое решение более эффективно чем электронные коммутаторы, так как обеспечивает наименее искаженный сигнал, при простоте управления. Блок входного усилителя и делитель с коммутирующими реле располагают в экранированном модуле, чтобы обеспечить минимизацию наводок на входной каскад пробника. Также такое управление при простоте реализации является достаточно наглядным, пользователь видит какой диапазон он выбрал, но коммутация с помощью реле в маленькой конструкции более эффективна, чем использование качественного переключателя.
Входной усилитель построен по простой схеме двухкаскадного транзисторного усилителя. Данная схема была предложена для простых осциллографов как внешний высокоомный щуп для аналогового радиолюбительского осциллографа. Данный каскад обеспечивает коэффициент усиления равный 10 при входном сопротивлении 1МОм.
Еще один транзисторный каскад на VT3 с регулировочным R12 резистором используется для формирования импульса синхронизации и таким образом начало каждого цикла отображения тактируется внешним прерыванием INT0. На время полного цикла оцифровки данное прерывание запрещается пока не будет выбрано требуемое количество оцифровок. Дополнительно данный каскад может быть подключен как вход внешней синхронизации. Регулирующий резистор позволяет задать требуемый уровень синхронизации для правильного наблюдения периодических сигналов.
Для выполнения функции логического анализатора требуется обеспечить подключение схемы к цифровым каскадам для этого решено использовать типовой буферный элемент использующий K555AП6. Данный элемент уменьшает нагрузку на исследуемую схему и защищает контроллер в случае возникновения внештатных ситуаций например высоковольтных импульсных помех. Также подобное решение
АЦП используется для оцифровки входного аналогового сигнала. После рассмотрения различных АЦП, проанализировав скорость оцифровки (частота оцифровки) и соотношение цены, было решено использоватьВнешний АЦП фирмы MAXIM MAX. Найденный мной АЦП в виде готового чипа имеет как хорошие характеристики так и невысокую стоимость, порядка 250 рублей. Поэтому окончательный выбор был сделан в пользу данного чипа.
Технические характеристики АЦП:
12-ти разрядное разрешение
Однополярное питание +3-5В
Встроенный +2.5 В источник опорного напряжения (ИОН)
Программно - конфигурируемый аналоговый входной мультиплексор: 8-ми канальный, с одиночными сигналами/ 4-х канальный, с псевдо- дифференциальными сигналами
Программно - конфигурируемые униполярные/ биполярные аналоговые входы
Низкий потребляемый ток: 1.9 мА (400 К выборок/с) 2 мкА, режим отключения (Shutdown)
Встроенная система выборки/ фиксации с полосой сигнала 3 МГц
Параллельный интерфейс, шириной в байт (8+4)
Рис.3 Внутренняя архитектура АЦП
Рис.4. Расположение выводов.
MAX1291 используют преобразование с последовательным приближением, имеет встроенную функцию автоотключения, малое время оцифровки -2 мкс), встроенный тактовый генератор, +2.5 В источник опорного напряжения. ИС имеют однополярное напряжение питания +3 В аналоговой части, и отдельный вывод питания цифровой части VLOGIC , позволяющий им подключаться к источникам питания, с напряжениями от +1.8 В до +5.5 В.
4) Клавиатура имеет восемь клавиш и такое решение потребует большого числа портов или сложной программной схемы, как первый так и второй вариант решения неприемлем поскольку это будет останавливать опрос сигнала. Наиболее предпочтительны схемы которые формируют сигнал прерывания. Для управления осциллографом было решено использовать специализированную микросхему приоритетного шифратора 155ИВ3, предназначенного для создания клавиатур. Данная система сразу выдает код нажатой клавиши наибольшей по значению(в случае одновременного нажатия) и у нее есть специальный сигнал, который позволяет обеспечить формирование импульса запроса прерывания. Такое решение позволяет прерывать контроллер только в момент нажатия клавиши и тратить минимум времени на определение клавиши.
5) ЖКИ. Может быть выбран из серии доступных ЖКИ-индикаторов от устаревшей модели телефона или из более современных индикаторов специально разработанных для побобных конструкций.Поэтому были рассмотрены два ЖКИ. Первый ЖКИ использовался в телефонах фирмы Ericson PCF8548 имеющий разрешение 85х48 пикселей и на подобном ЖКИ построен пример радиолюбительского осциллографа с использованием PIC контроллера на сайте ab2000.by.ru:
Использование подобного ЖКИ позволяет обеспечить вывод простыми средствами графической формы осциллограммы и тем самым решить поставленную задачу. Однако данный ЖКИ имеет последовательный интерфейс который потребуется программно реализовывать и потому возникнут дополнительные задержки при выводе информации. Исходя из этого было решено рассмотреть ЖКИ AGM1264K данный индикатор имеет возможность подключения по паралелльной линии данных, что ускоряет и упрощает отображение. По размерам данный индикатор в два раза больше, с одной стороны увеличивает размер конструкции но и улучшает различимость сигналов. Также второй положительный момент то что индикатор имеет большее разрешение128х64 что также положительно сказывается для удобства отображения. Все выше перечисленные показатели позволяют отдать ему предпочтение и таким образом остановить на нем свой выбор. При отображении на экране сигнала также необходимо выполнять отображение цифр однако рассмотренный ЖКИ требует программного формирования их вида.
Рис.5 Разводка входных управляющих сигналов индикатора
Рис 6. Внутренняя организация структуры дисплея
Как видно из выше представленного рисунка структура ОЗУ графического дисплея разбита на два блока каждый из которых адресуется отдельно
И составляет 64х64 бита или построчно 8 байт х64 строки. Такая организация требует большого объема памяти от контроллера для отображения на экране
Рис.7 Таблица команд управления ЖКИ
6. Сопряжение с компьютером по заданию определено через интерфейс USB такое решение в программном плане достаточно сложно реализуемо и потребует написания сложной программы взаимодействия. Использование другого контроллера является поэтому наиболее предпочтительно. В качестве подобного контроллера был выбран специализированный модуль обеспечивающий преобразование UART интерфейса контроллера в полноценный USB, поддержка драйверами имеется на сайте производителя.
Схема включения FT232RL очень проста и содержит в себе самый минимум элементов. Единственной сложностью в ее повторении является размеры самой микросхемы - она имеет очень маленький шаг ножек (0,65мм) и их толщину (0,3мм).
2.3 Описание принципиальной схемы
В зависимости от выбранного коэффициента деления или автоматического определения по амплитуде сигнала начиная с наибольшего определяется коэффициент деления с помощью коммутатора.
Коммутатор кратковременно подключает конденсатор к измеряемой цепи и после того как он зарядился запускается оцифровка сигналом INT.Через 1.8 мкс оцифровка заканчивается и по сигналу RD выполняется считывание данных через порт Р0. Для выбора канала имеется возможность записать этот канал по сигналу WR=0 для уменьшения числа используемых портов данный сигнал подключен к сигналу прерывания клавиатурного шифратора такое решение учитывая что на выходе шифратора открытый коллектор позволяет объединять сигналы по логическому ИЛИ. Через младшие разряды порта P1 считывается код нажатой клавиши и выполняется установка требуемого параметра. Обработка проверки нажатия клавиш должна выполняться путем сравнения входных данных с клавиатурного шифратора в случае изменения состояния на выходе этот факт воспринимается как нажатие одной из клавиш.
Для обеспечения запуска по внешней синхронизации используется схема на нормирующем усилителе и компараторе DA4 и, для канала синхронизации, который завязан на вход прерывания INT0, по нему возникает прерывание в момент прихода установленной резисторами амплитуды синхронизации.
Управление ЖКИ также выполняется с помощью группы портов P1 и P2 эти порты обеспечивают передачу данных и формирование управляющих сигналов выбора блока CS1 CS2, синхронизации Е и сигнала DI задающего или режим передачи команд или режим передачи данных.
3. Разработка программы управления
3.1 Разработка алгоритма работы
Начало функционирования данного контроллера с момента включения схема сброса обеспечивает возможность перезагрузки контроллера. В связи с тем, что в схеме не предусматривается дополнительного флешь ПЗУ параметры устанавливаются по умолчанию : максимальное измеряемое напряжение и частота оцифровки, синхронизация по внешнему сигналу Далее пользователь с помощью клавиш может настроить параметры работы. Для наглядности еще раз рассмотрим функции клавиатуры:
1) Кнопка начала отображения сигнала;
2) Выбор источника синхронизации;
3) переключает диапазон по напряжению;
4) переключение диапазона по частоте грубо (по кругу) ;
5) + по частоте;
6) - по частоте ;
7) Старт режима запоминания, при этом запоминание начинается с момента прихода или тактирующего сигнала, или внутреннего программного строба по основному сигналу;
8) Фиксация последнего отображаемого сигнала.
Все эти кнопки дублируются командами компьютера
0хFF начало отображения сигнала;
0х00 останов отображения и оцифровки;
0х80 + частота грубо
0хС0+напряжение устанавливает делитель напряжения
0х90+частота тонко
Отображение осциллограммы сигнала производится на ЖКИ. Кнопка 1 предназначена для начала отображения осциллограммы.
Если производится однократный запуск то происходит запоминание в памяти максимального числа выборок в 2кб и последующее отображение на индикаторе. Если со стороны компьютера приходит команда запуска отображения то автоматически все отсканированные данные передаются через интерфейс USB. Для запуска запоминания вручную используется кнопка 7. При фиксировании осциллограммы в памяти она занимает максимальный объем(4К) при этом отображается только первая часть 128 столбцов.
Для контроля состояния осциллографа и таких его параметров как период развертки коэффициент деления по напряжению используется нижний блок ЖКИ куда через специальный знакогенератор заносятся коды цифр в размерности 4-на8 .
Таким образом данный контроллер реализует режим работы осцилографа с расширенным спектром функций. Так предусмотрено несколько режимов:
1.Режим отображения сигнала с заданной периодичностью опроса при внутренней синхронизации для одного канала при максимальной частоте опроса.
2.Режим работы с отображением двух каналов которые могут быть только в одном диапазоне коэффициентов деления и таким образом обеспечивается наблюдение двух сигналов во взаимной корреляции.
3. Режим одноканального осциллографа с запуском по внешнему синхросигналу. В данном случае оцифровка начинается в момент срабатывания компаратора по заданному уровню синхронизации.
4. Аналогичный предшествующему режим с внешней синхронизацией для двухканалов.
5. Режим фиксации по ручной синхронизации когда оцифровка блока данных выполняется однократно по нажатию клавиши управления.
3.2 Описание алгоритма программы
Программа разбита на несколько основных блоков - подпрограмм. Эти подпрограммы обеспечивают все основные функции: инициализацию контроллера, оцифровку входных данных, вывод оцифрованных данных на ЖКИ и в последовательный порт, прием команд от компьютера и их выполнение.
Основная программа после запуска и выполнения процедуры инициализации настраивающей последовательный порт на скорость 115 кб (максимально доступную скорость в режиме обмена по виртуальному последовательному порту реализованному через адаптер USB-UART) переходит в процесс ожидания приема команд или нажатия клавиш управления. Автоматически (по умолчанию установлен режим работы одного канала с максимальной частотой и делителем на 10) производиться измерение и как только входной сигнал достигнет 1.5В запускается подпрограмма оцифровки. Тк как подпрограмма должна выжидать 2мкс требуемых на оцифровку с помощью АЦП, то решено совместить ее с обменом с ЖКИ
Рис. 8 Параметры синхронизации для реализации обмена с ЖК матрицей
Как видно из осциллограммы сигналов управления взятых из тех документации цикл обмена должен быть не менее 1мкс что составляет половину времени цикла обмена с АЦП при оцифровке. Учитывая высокую частоту работы самого процессора то можно в этой паузе выполнить определенные преобразования сигнала перед его выводом на ЖКИ. Так решено выполнять обсчет данных полученных в предшествующем такте измерения, и выполнить вывод их на ЖК экран. Для обсчета необходимо выполнить расчет и передачу в ЖКИ позиции по х , далее производиться расчет выбранной строки отображения и конкретной позиции светящейся точки.
В момент возникновения импульса синхронизации или по внутреннему контрольному состоянию при достижении входным сигналом заданного Уровня или в режимах 3 и 4 при срабатывании компаратора синхронизациии, начинается оцифровка блока данных в 128 измерений, а затем отображение полученных данных на ЖКИ. После отображения осциллограммы на экран выводятся с помощью встроенного знакогенератора цифровые значения периода оцифровки и делителя напряжения. Цифры выводятся в самой нижней строке так что могут немного перекрывать осциллограмму и задерживать отображение. Одновременно с выводом выполняется передача через последовательный порт оцифрованных значений и по окончанию передачи цикл оцифровки блока данных повторяется. Расширенная память контроллера (4кб дополнительного регистрового ОЗУ ) позволяет запоминать большие объемы цифровых измерений что и используется в ряде режимов.
Далее по окончанию при повторном приходе сигнала синхронизации начинается новый опрос и отображение,
После оцифровки также выполняется контроль того какая из клавиш возможно нажата и по нажатию производиться приращение или уменьшение управляющей переменной что в последующем цикле позволяет изменять параметры отображения информации. По нажатию клавиш или по приходу одной из команд выполняется указанное действие или настройка параметров. Команды специально совмещены с функциями которые реализуются по нажатию на клавиши так как это упрощает программную обработку и соответственно ускоряет процесс оцифровки критичный ко времени при максимальных частотах оцифровки.
Обработчик прерывания таймера настроен на 1000 циклов переполнения по которым обеспечивается внутреннее тактирование основной программы и
И опрос клавиатуры отслеживая изменения можно определить момент нажатия клавиши.
Все длительные операции выполняются в основном цикле параллельно прерываясь обработчиками таймера последовательного порта и внешнего прерывания INT0 по которому отслеживается синхронизация схемы. По прерыванию INT1 отслеживается нажатие на клавиши управления что также упрощает обработку нажатия и функции управления.
Для оцифровки и вывода на экран используется дополнительная процедура которая обеспечивает установку требуемого режима. В зависимости от заданного делителя по напряжению вычисляется полученное значение и выводиться на экран ели делитель меньше 10 используется первый канал с минимальным ослаблением сигнала если делитель напряжения выше используем второй канал. Особенности работы с АЦП в том что перед оцифровкой запускаемой сигналом INT требуется выполнить программирование коммутатора АЦП передав ему номер оцифровываемого канала что делается используя сигнал wr) Учитывая малое время выполнения операций по сравнению с самой оцифровкой можно считать их пренебрежительно малыми. Так как ранее указывалось время ожидания оцифровки выбрано 2мс то решено использовать это время для выполнения вычислений при выводе на экран ЖКИ.
Система работает в трех режимах:
Оцифровка одного канала на максимальной частоте без переключения. Такой режим обеспечивает максимальное значение частоты 500кГц. Использование ранее предполагавшейся программной оцифровки было нерациональным так как при программной реализации алгоритма было получено 70 машинных тактов что близко к скорости АЦП 2мкс.
Второй режим предусматривает работу в режиме логического анализатора с переключением на коммутатор.
Заключение
Поставленная задача была реализована, разработана функциональная схема. После анализа функциональной схемы рассмотрение множества разработок и отдельных электронных узлов была разработана схема контроллера управления системой вентиляции, которая реализует поставленную задачу на аппаратном уровне. При схемотехнической реализации блока был произведен выбор наиболее оптимального контроллера для решения задачи.
Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Для реализации функций обмена с температурными датчиками был изучен протокол IWare, который и был далее реализован в виде части программного кода. Также было выполнено описание программы и представлен её код.
Результат проекта представлен в виде отчета имеющего два приложения: листинг программы и принципиальная схема.
Приложение (Схема устройства)
Приложение (Листинг программы)
#include <reg51.h>
#include <stdio.h>
char sec100,sec,min,chas;//peremennye dlya otcheta vremeny
char komanda; //komanda comp
char key; //sostoanie knopki
char i,j,pp;//
char n,tin,tpp;
bit fss; //flag start/ stop
bit fniht; //flag noch regim
char vvozd;
char step;//shag pri peredache dannyh po UArt
char flagonoff;
char ztemp1,ztemp2,ztemp3,temp1,temp2,temp3; //znak temperatury
char lcddat1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //v ney inf-ya, cot-ya budet vyv-sya na lcd
char lcddat2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //v ney inf-ya, cot-ya budet vyv-sya na lc
char scorv; //peremennaya dlya scorosti ventilyatora
char nterm1[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 1
char nterm2[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 2
char nterm3[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 3
sbit dvig=P1^7; //svyazyvaet port P17 s peremennoy dvig
sbit ten=P1^6;
sbit tin=P3^2;
sbit e=P1^5;
sbit rs=P1^4;
void int1interrupt (void) interrupt 3 using 1
{
key=(P3 and 0xf0); //videlenie bitov klaviaturi
if (key==0x00) flagonoff=!(flagonoff); //key on/off
else if (key==0x10)
{
fniht=!fniht;
if fniht=1 scor=20;
} //vcluchenie nochnogo rezshima
else if (key==0x20)
{
{
scor=scor+10;
if scor=100 scor=10;
}//regulirovca scorosti ventilyatora
else if (key==0x30)
{
temp++;
} //regulirovca temperatury, uvelichenie
else if (key==0x40)
{
temp--;
} //regulirovca temperatury, umenshenie
else if (key==0x50)
{
min++;
if (min==60) min=0;
} //regulirovca vremeni po minutam
else if (key==0x60)
{
chas++;
if (chas==24) chas=0;
} //regulirovca vremeni po chasam
}
void timer0int (void) interrupt 1 using 1
{
TH0 = 0xdb; // reload timer 100 raz v sekundu 11095000 Gc
TL0 = 0xff;
///////////////////////////////////////////////////////////////////////////
//obmen s termometrom
if (sec100==1)tin= 0; //reset 10ms
if (sec100==2)
{
tin=1;
for(i=0;j<7;j++); //pauza 21 mks
if tin then
{ //linia ne zakorochena
for(i=0;j<10;j++); //pauza 30 mks
if !(tin) //termometr otvetil
{
for(i=0;j<50;j++); //timejut 250mks
if (tin) //linia otpuchena
{ //traslate oxCC
comand=0xCC;
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
} //send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++); //send 1
}
Command=comand>>1;
}
//send komand 0x44
comand=0x44;
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
} //send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
} //send 1
Command=comand>>1;
}
}
}
}
if (sec100==77) tin=0; //preobrazovanie end reset termometr
//chtenie t s 1 datchika
if (sec100==78)
{
tin=1;
for(i=0;j<7;j++); // pauza 21 mks
if tin then
{ //linia ne zakorochena
for(i=0;j<10;j++); // pauza 30 mks
f !(tin) //termometr otvetil
{
for(i=0;j<50;j++); // timejut 250mks
if (tin) //linia otpuchena
{ //traslate oxCC propustiti peredachu nomera
comand=0xb8;
for(j=0;j<8;j++)
{
if ((0x01 and comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
} //send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Command=comand>>1;
}
for(n=0;n<8;n++) //send nomer termometr
comand=ntermometr1[n];
for(j=0;j<8;j++)
{
if ((0x01 and comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
} //send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Comans=comand>>1;
}
comand=0xbe;//send komand 0xbe chitat T
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Command=comand>>1;
}
//priem temperaturi
comand=0xff;
ztemp1=0;//chitaem znak temperaturi
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin) {ztemp1=((ztemp1+0x80)>>1);
}
else ztemp1=(ztemp1>>1);
}
comand=0xff;//chitaem temperaturu
temp1=0;
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin) {temp1=(temp1+0x80)>>1;
}
else temp1=(temp1>>1);
}
temp1>>; //udaleni 0.5 gradusa
}
}
//chtenie t s 2 datchika
if (sec100==79)
{
tin=1;
for(i=0;j<7;j++); //pauza 21 mks
if tin then
{ //linia ne zakorochena
for(i=0;j<10;j++); //pauza 30 mks
if !(tin) //termometr otvetil
{
for(i=0;j<50;j++);// timejut 250mks
if (tin) //linia otpuchena
{ //traslate oxCC propustiti peredachu nomera
comand=0xb8;
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Comand=(comand>>1);
}
for(n=0;n<8;n++)//send nomer termometra 2
comand=ntermometr2[n];
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
command=(comand>>1);
}
comand=0xbe;//send komand 0xbe chitat T
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Comand=(comand>>1);
}
//priem temperaturi
comand=0xff;
ztemp2=0;//chitaem znak temperaturi
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin) {ztemp2=(ztemp2+0x80)>>1;
}
else ztemp2=(ztemp2>>1);
}
comand=0xff;//chitaem temperaturu
temp2=0;
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin) {temp2=(temp2+0x80)>>1;
}
else temp2=temp2>>1;
}
Temp2=temp2>>1;//udaleni 0.5 gradusa
}
}
//chtenie t s 3 datchika
if (sec100==80)
{
tin=1;
for(i=0;j<7;j++);// pauza 21 mks
if tin then
{ //linia ne zakorochena
for(i=0;j<10;j++);// pauza 30 mks
if !(tin)//termometr otvetil
{
for(i=0;j<50;j++);// timejut 250mks
if (tin) //linia otpuchena
{ //traslate oxCC propustiti peredachu nomera
comand=0xb8;
for(j=0;j<8;j++)
{
if ((0x01 & comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
comand>>;
}
for(n=0;n<8;n++)//send nomer termometra 2
comand=ntermometr3[n];
for(j=0;j<8;j++)
{
if ((0x01 and comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
Comand=comand>>1;
}
comand=0xbe;//send komand 0xbe chitat T
for(j=0;j<8;j++)
{
if ((0x01 and comand)==0)
{
tin=0;
for(i=0;i<20;i++);
tin=1;
for(i=0;i<5;i++);
}//send 0
else
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<20;i++);
}//send 1
comand>>;
}
//priem temperaturi
comand=0xff;
ztemp3=0;//chitaem znak temperaturi
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin) {ztemp3=(ztemp3+1)>>1;
}
else ztemp=ztemp3>>1;
}
comand=0xff;//chitaem temperaturu
temp3=0;
for(j=0;j<8;j++)
{
tin=0;
for(i=0;i<5;i++);
tin=1;
for(i=0;i<5;i++);
}
if (tin)
{
temp3=(temp3+1)>>1;
}
else temp3>>1;
}
Temp2=temp2>>1;//udaleni 0.5 gradusa
}
}
}
//-----------------------------------------------------------------
//Upravlenie scorost
if (sec100<scorv) dvig=0;//dvigatel onn
else dvig=1;//dvig off
//-----------------------------------------------------------------
if (settemp>temp3)
{
ten=1;
}//vcluchit obogrev
else
{
ten=0;
}//vycluchit obogrev
//--------------------------------------------------------------------
//--------------LCD out-------------------------------------------
if(sec100<16)
{
e=1;
rs=1;
P1=((lcddat1[sec100]*0xf0)>>4);
e=0;
e=0;
e=1;
for(k=1;k<100;k++);
P1=(lcddat1[sec100]&0x0f);
e=0;
}
else if(sec100<40)
{
e=1;
rs=1;
P1=2;
e=0;
e=0;
e=1;
for(k=1;k<100;k++);
P1=0;
e=0;
}
еlse if(sec100<56)
{
e=1;
rs=1;
P1=((lcddat2[sec100-40]*0xf0)>>4);
e=0;
e=0;
e=1;
for(k=1;k<100;k++);
P1=(lcddat2[sec100-40]&0x0f;
e=0;
}
if(sec100==98)
{
e=1;
rs=0;
P1=0;
e=0;
e=0;
e=1;
P1=1;
e=0;
}//sbros LCD
//----------------------------------------------------------
if(++sec100==100)
{
sec100 =0;
sec++;
if (sec>=60)
{
min++;
if (min>=60)
{
chas++;
if (chas>+24)chas=0;
}
}
P2^= 0x80; //invert P3.7
if ( ++sec >= 60)
{
sec = 0;
}
}
}
void uart (void) interrupt 4 using 1//prerivanie posled port
{
if (RI) //prinata komanda ili dann
{
if (SBUF=1)
{
step++;komanda=1;
}
if (komanda==1)
{
data1[step]=sbuf;
if (step>=10)
{
step=0;
komanda=0;
}
}
}
If (comand==0xf3)&&(++step<8)
{
if (step==0) SBUF==ztemp1;
if (step==1) SBUF==temp1;
if (step==2) SBUF==ztemp2;
if (step==3) SBUF==temp2;
if (step==4) SBUF==ztemp3;
if (step==5) SBUF==temp3;
if (step==6) SBUF==flagonoff;
if (step==7) SBUF==temp3;
}
}
void main()
{
//------------------------------------------Ini blok--------------------------------------------
TH1=0xFD;//delitel dla skor 9600
SCON=0x50; //8bit dannih Timer1 delit chastotu
TMOD = 0x21; // timer 0 mode 1 auto reload
ET0 = 1; // set bit EA and Timer0 enable
TR0=1;
TR1=1; // run timer0 and timer1
EX1=1; //on interrupt key
ES=1;
EA = 1;// Interrapt enable
P1= 0xf0;//na poslednem ind 0
sec100= 0;
sec=0;
min=0;
chas=0;
n=0;
keyold=0;
key=0;
flagonoff=0;
flag=0;
step=0;
komanda=0;
lt=1;
lk=1;
lv=1;
lcddat1[0]=0x54,
lcddat1[1]=0x79,
lcddat1[2]=0xBB,
lcddat1[7]=0x54,
lcddat1[8]=0xBA,
lcddat1[9]=0x6F,
lcddat1[10]=0xBC;
lcddat2[0]=0x43,
lcddat2[1]=0xXBA,
lcddat2[2]=0x6F,
lcddat2[3]=0x70,
lcddat2[7]=0x42,
lcddat2[8]=0x70,
lcddat2[11]=0xC0,
lcddat2[14]=0xBC;
komanda=0;
while(1)
{
if (ztemp1==0xff) lcddat1[3]=0x2d;
else lcddat1[3]=0x2B;
lcddat1[4]=temp1/10+0x30;
lcddat1[5]=temp1%10+0x30;
if (ztemp3==0xff) lcddat1[11]=0x2d;
else lcddat1[11]=0x2B;
lcddat1[12]=temp3/10+0x30;
lcddat1[13]=temp3%10+0x30;
lcddat2[4]=scor/10+0x30;
lcddat2[5]=skor%10+0x30;
lcddat2[6]=0x30;
lcddat2[9]=chas/10+0x30;
lcddat2[10]=chas%10+0x30;
lcddat2[12]=min/10+0x30;
lcddat2[13]=min%10+0x30;
}
}
Размещено на www.allbest.
Подобные документы
Обзор характеристик контроллера по сбору аналоговой информации и преобразовании ее в цифровую, типы корпусов и исполнений, функциональное назначение выводов. Описание регистров PIC, тактовых генераторов. Система команд, блок ввода аналоговых данных.
курсовая работа [338,0 K], добавлен 05.09.2011Алгоритм функционирования контроллера имитатора навигационного сигнала, его упрощенная структурная схемы. Спецификация входных и выходных сигналов. Разработка аппаратной части заданного блока контроллера и программного обеспечения. Исходный код программы.
курсовая работа [1,1 M], добавлен 13.10.2017Принципы работы аналого-цифровых преобразователей. Архитектура микроконтроллера AT90S8535 и его программное обеспечение. Описание интерфейса RS-232. Разработка печатной платы комплекса усиления и оцифровки сигнала. Принципы асинхронной передачи данных.
курсовая работа [2,9 M], добавлен 19.11.2012Характеристика, применение и назначение микроконтроллерных систем управления. Разработка контроллера инверторного сварочного аппарата, обеспечивающего работу манипулятора. Общий алгоритм работы, составление программного обеспечения для данного блока.
курсовая работа [1,6 M], добавлен 26.12.2012Разработка контроллера управления цифровой частью системы, перечень выполняемых команд. Описание алгоритма работы устройства, его структурная организация. Синтез принципиальной электрической схемы, особенности аппаратных затрат и потребляемой мощности.
курсовая работа [318,8 K], добавлен 14.06.2011Программируемый логический контроллер, его структура и внутреннее устройство, принцип действия и функциональные возможности, описание электрооборудования. Разработка программы работы логического контроллера, экономическое обоснование его создания.
дипломная работа [802,4 K], добавлен 25.04.2015Последовательный связной интерфейс, скорость передачи данных. Интерфейс и его сигналы. Программная эмуляция SCI. Оборудование, особенности микросхемы. Структурная схема контроллера управления последовательным портом. Описание программного обеспечения.
курсовая работа [670,7 K], добавлен 23.06.2012Работа приемно-контрольной панели на примере одношлейфного прибора. Стандарт последовательного интерфейса. Выбор контроллера, основные способы адресации. Инициализация и прекращение передачи данных. Описание электронной схемы и ее функционирования.
курсовая работа [1,6 M], добавлен 26.07.2013Критерии эффективности и обоснование выбора базисных элементов для записи отсчетов от 16 аналоговых датчиков в область памяти. Функциональная схема компьютерной системы управления железнодорожным переездом. Алгоритм работы микропроцессорной системы.
курсовая работа [1,4 M], добавлен 14.06.2016Преобразование релейно-контактной схемы управления механизмом подъема крана с использованием силового магнитного контроллера. Группировка и обозначение сигналов. Механические характеристики магнитного контроллера. Функциональные схемы узлов механизма.
курсовая работа [471,5 K], добавлен 09.04.2012