Проектирование задающего генератора пачек прямоугольных импульсов на микропроцессоре
РАЗРАБОТКА СХЕМЫ ЭЛЕКТРИЧЕСКОЙ ПРИНЦИПИАЛЬНОЙ УСТРОЙСТВА Для построения программно управляемого задающего генератора пачек прямоугольных импульсов на микроконтроллере для физиотерапевтической установки нужно микроконтроллер питать от блока питания (в данном случае 5В); а для достижения нужного уровня выходного напряжения на выходе ставим эмиттерный повторитель. Индикацию работы можно проверять… Читать ещё >
Проектирование задающего генератора пачек прямоугольных импульсов на микропроцессоре (реферат, курсовая, диплом, контрольная)
РЕФЕРАТ Пояснительная записка: 47с., 19 рис., 6 табл., 9 ссыл., приложения.
Цель работы — разработка программно управляющего задающего генератора пачек прямоугольных импульсов на микропроцессоре для физиотерапевтической установки, составление алгоритма и программы на Ассемблере.
Разработан программно управляемый задающий генератор пачек прямоугольных импульсов на микроконтроллере AT90S2313 для физиотерапевтической установки. Для него составлен алгоритм и написана программа генерирования импульсов определённой длительности. Определены все временные соотношения и проанализированы погрешности.
Результаты работы могут использоваться для построения радиотехнических медицинских устройств на основе генераторов прямоугольных импульсов.
Прогнозные позиции что касается развития объекта исследования — дальнейшее усовершенствование и поиск оптимальных решений проблемы.
ГЕНЕРАТОР, ПРОГРАММА, МИКРОКОНТРОЛЛЕР, МИКРОПРОЦЕССОР, АССЕМБЛЕР, ATMEL, ИМПУЛЬС
ВВЕДЕНИЕ
В связи со стремительными открытиями в области радиотехники ещё в прошлом столетии возникла надобность в устройствах различного назначения. Развитие микроэлектроники обусловило появление новых методов построения и конструирования электронной аппаратуры, отличающейся малыми массой, габаритными размерами, а также высокой надёжностью. Благодаря новой элементной базе можно упростить усовершенствование приборов с помощью замены программного обеспечения, также изменить выполняемые прибором функции.
Медицина — это ещё одно направление, где широкое применение нашла радиоэлектроника. С помощью радиотехнических средств успешно осуществляется диагностика, терапия, хирургия, рефлексотерапия. Без электронных средств не представляется сейчас энцефалография и кардиология. С помощью источников импульсов производится стимуляция работы сердца, электродефибриляция в условиях неотложной помощи и т. д. Поэтому стратегическим направлением является разработка устройств, обладающих высокой стабильностью, точностью, помехозащищённостью.
В данной курсовой работе представлена разработка задающего генератора пачек прямоугольных импульсов на микропроцессоре для физиотерапевтической установки. Импульсные генераторы предназначены для получения импульсов с крутыми фронтами. Используя микропроцессор или микроконтроллер в составе генератора импульсов, можно получить импульсы с чётко прямоугольными фронтами. Длительность импульсов не зависит от частоты следования и других параметров, а определяется только программным обеспечением, что очень удобно для использования данного устройства в различных режимах.
1. ОБЗОР АНАЛОГИЧНЫХ УСТРОЙСТВ Одним из необходимых в лаборатории приборов является генератор прямоугольных импульсов (ГПИ). Сфера применения ГПИ довольно широка: он незаменим при настройке импульсных и цифровых устройств, при проверке реакции различной аппаратуры (например, усилителей звуковых частот) на импульсные воздействия; его применяют при измерениях как в комплексе с другими приборами, так и отдельно при испытании различных радиоэлектронных компонентов. Очень широкое применение ГПИ имеет в медицинском обслуживании. Особо важное место он занимает в терапии. Множество болезней излечивается с помощью импульсного воздействия и без хирургического вмешательства. Медицинские генераторы должны иметь высокую точность и многие другие высокостабильные параметры.
Генераторы прямоугольных импульсов могут иметь различную элементную базу, в частности:
— генераторы в интегральном исполнении;
— генераторы на дифференциальных усилителях;
— генераторы на операционных усилителях;
— генераторы на логических элементах;
— генераторы на триггерах;
— генераторы на микропроцессорах и микроконтроллерах.
Генераторы импульсов Вариант простейшего генератора (мультивибратора) показан на рис. 1.1а. Схема имеет два динамических состояния. В первом из них, когда на выходе D1.1 состояние лог. «1» (выход D1.2 лог. «0»), конденсатор С1 заряжается. В процессе заряда напряжение на входе инвертора D1.1 возрастает, и при достижении значения Uпор=0,5Uпит происходит скачкообразный переход во второе динамическое состояние, в котором на выходах D1.1 лог. «О», D1.2 — «1». В этом состоянии происходит перезаряд емкости (разряд) током обратного направления. При достижении напряжения на С1 Unop происходит возврат схемы в первое динамическое состояние. Диаграмма напряжений поясняет работу. Резистор R2 является ограничительным, и его сопротивление не должно быть меньше 1 кОм, а чтобы он не влиял на расчетную частоту, номинал резистора R1 выбираем значительно больше R2 (R2<0,01R1). Ограничительный резистор (R2) иногда устанавливают последовательно с конденсатором. При использовании неполярного конденсатора С1 длительность импульсов (tи) и пауза (tо) будут почти одинаковыми: tи=to=0,7R1C1. Полный период T=1,4R1C1. Резистор R1 и конденсатор С1 могут находиться в диапазоне 20 к0м…10 МОм; 300 пф…100 мкФ.
При использовании в схеме (рис. 1.1б) двух инверторов микросхемы К561ЛН2 (они имеют на входе только один защитный диод) перезаряд конденсатора будет происходить от уровня Uпит+Unop. В результате чего симметричность импульсов нарушается tи=1,1R1C1, to=0,5R1C1, период T=1,6R1C1.
Рис. 1.1. Генератор импульсов на двух инверторах Рис. 1.1. Генератор импульсов на двух инверторах Рис 1.2. Генератор импульсов с раздельной установкой длительности импульса и паузы между ними Так как порог переключения логических элементов не соответствует точно половине напряжения питания, чтобы получить симметричность импульсов, в традиционную схему генератора можно добавить цепь из R2 и VD1, рис. 1.1 В.Резистор R2 позволяет подстройкой получить меандр (tи=to) на выходе генератора.
Схема на рис. 1.2 дает возможность раздельно регулировать длительность и паузу между импульсами: tи=0,8C1R1, to=0,8C1R2. При номиналах элементов, указанных на схеме, длительность импульсов около 0,1 с, период повторения 1 с.
Более стабильна частота у генераторов, выполненных на трех инверторах (Рис. 1.3). Процесс перезаряда С1 в сторону уменьшения напряжения на левой обкладке начинается от напряжения Uпит+Unop, в результате чего на это уходит больше времени tи=1,1C1R2. Полный период колебаний составит T=1,8C1R2.
Рис. 1.3. Генератор импульсов на трех инверторах На рис. 1.4 приведены схемы аналогичных генераторов, которые позволяют раздельно регулировать длительность и паузу между импульсами или при неизменной частоте регулировать скважность импульсов. Мультивибратор на основе триггера Шмитта показан на рис. 1.5.
Если требуется получить на выходе приведенных выше схем генераторов симметричные импульсы без подстройки, то после схемы необходимо ставить триггер или же воспользоваться схемой на трех инверторах, рис. 1.6. Элемент D1.1 используется для создания второй цепи отрицательной обратной связи, охватывающей инвертор D1.2 (главную цепь обратной связи для сигнала образует резистор R5) Элемент микросхемы D1 1 работает в режиме с низким коэффициентом усиления при замкнутой обратной связи подобно операционному усилителю работающему в линейной части характеристики, в результате этого инвертированное пороговое напряжение инвертора D1 1 может быть просуммировано с напряжением отрицательной обратной связи и подано на вход элемента D1.2. Если соотношение R2/R1 равно отношению R3/R5 может быть получена полная компенсация ошибок обусловленных изменением пороговых напряжении элементов D1.1 и D1.2 При этом предполагается, что все элементы схемы расположены в одном корпусе и их пороговые напряжения фактически равны Частота импульсов такой схемы определяется из соотношения F=1/R5C1 (она будет примерно в два раза выше по сравнению со схемой, показанной на рис. 1.1)
Рис 1.4 Генератор импульсов с раздельной регулировкой а) длительности импульсов и паузы между ними б) скважности импульсов Рис 1.5 Генератор перекрывающихся импульсов Рис 1.6 Генератор с симметричными импульсами на выходе Симметричный мультивибратор можно выполнить на основе RS-триггере, рис 1.36. Вариант схемы на рис 1.7в) позволяет резисторы R1 и R2 выбирать более низкоомными, потому что диоды разделяют цепь заряда от выходов триггера.
Рис1.7 Симметричные мультивибраторы а) на RS триггере с двумя конденсаторами, б) с одним конденсатором, в) с резисторами соединенными с источником питания, г) на двух RS триггерах Вторым преимуществом этой схемы является то, что она позволяет легко и независимо регулировать в определенных границах период и скважность генерируемых импульсов. Скважность можно регулировать линейно, если R1 и R2 объединить в один потенциометр, а период — если общий конец R1 и R2 соединить с источником питания через потенциометр.
2. ОБОСНОВАНИЕ ВЫБРАННОГО ВАРИАНТА ТЕХНИЧЕСКОГО РЕШЕНИЯ В настоящее время более тридцати зарубежных фирм выпускают микроконтроллеры, и микропроцессоры массового применения с разрядностью 8 бит, недорогие и пригодные для использования в самых разнообразных приложениях. Поэтому очень важно среди множества различных вариантов выбрать нужное нам решение, подходящее по всем параметрам для реализации, поставленной задачи. Ниже приведено краткое описание некоторых типов распространённых микроконтроллеров и микропроцессоров.
Так как на данный момент наиболее используемыми являются микроконтроллеры и микропроцессоры Pic и Atmel, то можно выбрать микроконтроллер одной из этих фирм.
2.1 8-разрядные RISC микроконтроллеры семейства AT90S
Отличительные особенности:
* Производительность, приближающаяся к 1 MIPS/МГц
* Усовершенствованная AVR RISC архитектура
* Раздельные шины памяти команд и данных, 32 регистра общего назначения
* Flash ПЗУ программ, с возможностью внутрисистемного перепрограммирования и загрузки через SPI последовательный канал, 100 000 циклов стирание/запись
* Блокировка режима программирования
* Встроенный аналоговый компаратор, сторожевой таймер, порты SPI и UART, таймеры/счетчики
* Полностью статические приборы — работают при тактовой частоте от 0Гц до20 МГц
* Диапазон напряжений питания от 2,7 В до 6,0 В
* Режимы энергосбережения: пассивный (idle) и стоповый (power down)
КМОП микроконтроллеры семейства АТ90S выполнены по AVRTM RISC архитектуре с раздельной памятью программ и данных и раздельными шинами для памяти программ и данных (Гарвардская архитектура). AVR ядро объединяет мощную систему команд с 32 регистрами общего назначения и конвейером (в одном цикле одна команда выполняется, а другая выбирается) выборки из памяти программ. Все 32 регистра напрямую связаны с АЛУ, что позволяет выполнять обращение к двум независимым регистрам и возвращать результат одной командой, выполняемой в одном тактовом цикле. Шесть регистров могут использоваться как три 16-разрядных указателя адреса данных (кроме прибора AT90S1200). Выполняя команды за один тактовый цикл, прибор обеспечивает производительность, приближающуюся к 1 MIPS на МГц, что на порядок больше, чем у CISC микроконтроллеров. Архитектура эффективно поддерживает как языки высокого уровня, так и программы, написанные на экстремально плотных языках ассемблера.
Таблица 3 — Основные характеристики микроконтроллеры семейства AT90S
Тип прибора | Объем памяти (органи зация), бит | Объем ЭСППЗУ (СОЗУ) памяти данных, байт | Тактовая частота, МГц | Таймеры/ счетчики, кол-во х разряд; ность | Другие отличия | Потребл. в активном/ пассивном режиме Vcc=3B F=4МГц | Корпуса пром. и ком. исполь зования | |
AT90S1200 | 1k (512×16) | 64x8 | 0…12 | 1x8 | 15 линий I/O, аппаратный стек | 2/0.5 | 20PDIP 20SOIC 20SSOP | |
AT90S2313 | 2k (1kx16) | 128x8 (128×8) | 0…10 | 1x8 1x16 | 15 линий I/O, ШИМ, UART | 2.5/0.8 | 20PDIP 20SOIC | |
AT90S2323 | 2k (1kx16) | 128x8 (128×8) | 0…10 | 1x8 | 3 линии I/O | 3.0/1.2 | 8PDIP 8SOIC | |
AT90S2343 | 2k (1kx16) | 128x8 (128×8) | 0…10 | 1x8 | 5 линии I/O | 3.0/1.2 | 8PDIP 8SOIC | |
AT90S4414 | 4k (2kx16) | 256x8 (256×8) | 0…8 | 1x8 1x16 | 32 линии I/O ШИМ, UART | 3.5/1.0 | 40PDIP 44PLCC 44TQFT | |
AT90S4434 | 4k (2kx16) | 256x8 (256×8) | 0…8 | 2x8 1x16 | 32 линии I/O ШИМ, UART, 8×10 АЦП, аналог компоратор | 3.0/1.2 | 40PDIP 44PLCC 44TQFT | |
AT90S8535 | 8k (4kx16) | 512x8 (512×8) | 0…8 | 2x8 1x16 | 32 линии I/O ШИМ, UART, 8×10 АЦП, аналог компоратор | 3.0/1.2 | 40PDIP 44PLCC 44TQFT | |
AT90S8515 | 8k (4kx16) | 256x8 (256×8) | 0…8 | 1x8 1x16 | 32 линии I/O ШИМ, UART, | 3.5/1.0 | 40PDIP 44PLCC 44TQFT | |
ATmega103 | 128k (64kx16) | 4kx8 (4kx8) | 0…6 | 3x16 | 40 линии I/O ШИМ, UART, 8×10 АЦП, аналог компоратор | 3.0/1.2 | 64TQFT | |
ATmega603 | 64k (32kx16) | 2kx8 (4kx8) | 0…6 | 3x16 | 40 линии I/O ШИМ, UART, 8×10 АЦП, аналог компоратор | 3.0/1.2 | 64TQFT | |
Микроконтроллеры семейства оснащены встроенной загружаемой Flash памятью программ, обеспечивающей внутрисистемное перепрограммирование с использованием интерфейса SPI или программирование внешними стандартными программаторами энергонезависимой памяти. Поскольку все команды 16-разрядного или 32 разрядного формата, то Flash память программ имеет 16-разрядную организацию. В качестве памяти данных в микроконтроллерах семейства используется комбинация СОЗУ и ЭСППЗУ (у прибора AT90S1200 только ЭСППЗУ) в которых размещается также и пространство памяти вводавывода. Стек, предназначенный для хранения адресов возврата из подпрограмм и прерываний располагается в памяти данных (у прибора AT90S1200 стек выполнен аппаратно). Ряд AVR микроконтроллеров имеют встроенный в арифметическую часть АЛУ перемножитель.
Все приборы семейства AT90S совместимы по исходным кодам и тактированию. Семейство обеспечено комплектом программ и системами отладки, включающими: макро-ассемблеры, отладчики/симуляторы программ, внутрисхемные эмуляторы, и отладочные устройства.
Микроконтроллеры семейства AT90S поставляются в очищенном состоянии — содержимое и Flash памяти программ и ЭСППЗУ данных находиться в состоянии FF и готово к программированию.
Объединение на одном кристалле усовершенствованного 8-разрядного RISC ЦПУ с загружаемым Flash ПЗУ позволило фирме создать мощные микроконтроллеры, обеспечивающие высокую гибкость и экономичность в использовании приборов в качестве встраиваемых контроллеров.
2.1.1 Микроконтроллеры АТ90S2313 фирмы Atmel
AT90S2313 — экономичный 8 битовый КМОП микроконтроллер, построенный с использованием расширенной RISC архитектуры AVR. Исполняя по одной команде за период тактовой частоты, AT90S2313 имеет производительность около 1MIPS на МГц, что позволяет разработчикам создавать системы оптимальные по скорости и потребляемой мощности.
В основе ядра AVR лежит расширенная RISC архитектура, объединяющая развитый набор команд и 32 регистра общего назначения. Все 32 регистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрам за один машинный цикл.
Подобная архитектура обеспечивает десятикратный выигрыш в эффективности кода по сравнению с традиционными CISC микроконтроллерами.
AT90S2313 предлагает следующие возможности: 2кБ загружаемой флэш-памяти; 128 байт EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; настраиваемые таймеры/счетчики с режимом совпадения; внешние и внутренние прерывания; программируемый универсальный последовательный порт; программируемый сторожевой таймер со встроенным генератором; SPI последовательный порт для загрузки программ; два выбираемых программно режима низкого энергопотребления. Холостой режим (Idle Mode) отключает ЦПУ, оставляя в рабочем состоянии регистры, таймеры/счетчики, SPI порт и систему прерываний. Экономичный режим (Power Down Mode) сохраняет содержимое регистров, но отключает генератор, запрещая функционирование всех встроенных устройств до внешнего прерывания или аппаратного сброса.
Микросхемы производятся с использованием технологии энергонезависимой памяти высокой плотности фирмы Atmel. Загружаемая флэш-память на кристалле может быть перепрограммирована прямо в системе через последовательный интерфейс SPI или доступным программатором энергонезависимой памяти. Объединяя на одном кристалле усовершенствованный 8-битовый RISC процессор с загружаемой флэш-памятью, AT90S2313 является мощным микроконтроллером, который позволяет создавать достаточно гибкие и эффективные по стоимости устройства.
AT90S2313 поддерживается полной системой разработки включающей в себя макроассемблер, программный отладчик/симулятор, внутрисхемный эмулятор и отладочный комплект.
Описание выводов:
Рисунок 2.1 — Описание выводов микроконтроллера АТ90S2313
VCC — вывод источника питания;
GND — земля.
Port B (PB7.PB0) — Порт B является 8-битовым двунаправленным портом ввода/вывода. Для выводов порта предусмотрены внутренние подтягивающие резисторы (выбираются для каждого бита). Выводы PB0 и PB1 также являются положительным (AIN0) и отрицательным (AIN1) входами встроенного аналогового компаратора. Выходные буферы порта B могут поглощать ток до 20мА и непосредственно управлять светодиодными индикаторами. Если выводы PB0. PB7 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы. Кроме того, Порт B обслуживает некоторые специальные функции, которые будут описаны ниже.
Port D (PD6.PD0) — Порт D является 7-битовым двунаправленным портом с внутренними подтягивающими резисторами. Выходные буферы порта D могут поглощать ток до 20мА. Как входы установленные в низкое состояние, выводы порта D являются источниками тока, если задействованы подтягивающие резисторы. Кроме того, Порт D обслуживает некоторые специальные функции, которые будут описаны ниже.
RESET — вход сброса. Удержание на входе низкого уровня в течение двух машинных циклов (если работает тактовый генератор), сбрасывает устройство.
XTAL1 — вход инвертирующего усилителя генератора и вход внешнего тактового сигнала.
XTAL2 — выход инвертирующего усилителя генератора.
XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, на котором можно собрать генератор тактовых импульсов. Можно использовать как кварцевые, так и керамические резонаторы. При подключении внешнего тактового сигнала вывод XTAL2 остается неподключенным, а XTAL1 подключается в выходу внешнего генератора.
2.1.2 Обзор архитектуры AT90S2313
Регистровый файл быстрого доступа содержит 32 8-разрядных регистра общего назначения, доступ к которым осуществляется за один машинный цикл. Поэтому за один машинный цикл исполняется одна операция АЛУ. Два операнда выбираются из регистрового файла, выполняется операция, результат ее записывается в регистровый файл — все за один машинный цикл.
Шесть из 32 регистров можно использовать как три 16-разрядных указателя в адресном пространстве данных, что дает возможность использовать высокоэффективную адресную арифметику (16-разрядные регистры X, Y и Z). Один из трех адресных указателей (регистр Z) можно использовать для адресации таблиц в памяти программ. Это X-, Yи Z-регистры.
Подключение кристалла Подключение внешнего генератора Рисунок 2.2 — Подключение кристалла и генератора АЛУ поддерживает арифметические и логические операции c регистрами, с константами и регистрами. Операции над отдельными регистрами также выполняются в АЛУ. Кроме регистровых операций, для работы с регистровым файлом могут использоваться доступные режимы адресации, поскольку регистровый файл занимает адреса $ 00-$1 °F в области данных, обращаться к ним можно как к ячейкам памяти. Пространство ввода состоит из 64 адресов для периферийных функций процессора, таких как управляющие регистры, таймеры/счетчики и другие. Доступ к пространству ввода/вывода может осуществляться непосредственно, как к ячейкам памяти расположенным после регистрового файла ($ 20-$ 5F).
Процессоры AVR построены по гарвардской архитектуре с раздельными областями памяти программ и данных. Доступ к памяти программ осуществляется при помощи одноуровнего буфера. Во время выполнения команды, следующая выбирается из памяти программ. Подобная концепция дает возможность выполнять по одной команде за каждый машинный цикл. Память программ — это внутрисистемная загружаемая флэш-память. При помощи команд относительных переходов и вызова подпрограмм осуществляется доступ ко всему адресному пространству. Большая часть команд AVR имеет размер 16-разрядов, одно слово. Каждый адрес в памяти программ содержит одну 16- или 32-разрядную команду.
При обработке прерываний и вызове подпрограмм адрес возврата запоминается в стеке. Стек размещается в памяти данных общего назначения, соответственно размер стека ограничен только размером доступной памяти данных и ее использованием в программе. Все программы пользователя должны инициализировать указатель стека (SP) в программе выполняемой после сброса (до того как вызываются подпрограммы и разрешаются прерывания). 8-разрядный указатель стека доступен для чтения/записи в области ввода/вывода. Доступ к 128 байтам статического ОЗУ, регистровому файлу и регистрам ввода/вывода осуществляется при помощи пяти доступных режимов адресации поддерживаемых архитектурой AVR.
Все пространство памяти AVR является линейным и непрерывным.
Гибкий модуль прерываний имеет собственный управляющий регистр в пространстве ввода/вывода, и флаг глобального разрешения прерываний в регистре состояния. Каждому прерыванию назначен свой вектор в начальной области памяти программ. Различные прерывания имеют приоритет в соответствии с расположением их векторов. По младшим адресам расположены векторы с большим приоритетом.
2.1.3 Файл регистров общего назначения Все команды оперирующие регистрами прямо адресуются к любому из регистров за один машинный цикл. Единственное исключение — пять команд, оперирующих с константами SBCI, SUBI, CPI, ANDI, ORI и команда LDI, загружающая регистр константой. Эти команды работают только со второй половиной регистрового файла — R16. R31. Команды SBC, SUB, CP, AND и OR, также как и все остальные, применимы ко всему регистровому файлу.
Каждому регистру присвоен адрес в пространстве данных, они отображаются на первые 32 ячейки ОЗУ. Хотя регистровый файл физически размещен вне ОЗУ, подобная организация памяти дает гибкий доступ к регистрам. Регистры X, Y и Z могут использоваться для индексации любого регистра. Кроме обычных функций, регистры R26. R31 имеют дополнительные функции, эти регистры можно использовать как адресные указатели в области памяти данных. Эти регистры обозначаются как X, Y, Z и определены следующим образом:
Рисунок 2.3 — Обозначение и определение регистров
При различных режимах адресации эти регистры могут использоваться как фиксированный адрес, для адресации с автоинкрементом или с автодекрементом.
Арифметико-логическое устройство — АЛУ АЛУ процессора непосредственно подключено к 32 регистрам общего назначения. За один машинный цикл АЛУ производит операции между регистрами регистрового файла. Команды АЛУ разделены на три основных категории — арифметические, логические и битовые.
Загружаемая память программ
AT90S2313 содержит 2кБ загружаемой флэш-памяти для хранения программ. Поскольку все команды занимают одно 16- или 32-разрядное слово, флэш-память организована как 1Kx16. Флэш-память выдерживает не менее 1000 циклов перезаписи.
Программный счетчик имеет ширину 10 бит и позволяет адресоваться к 1024 словам программной флэш-памяти.
EEPROM память данных
AT90S2313 содержит 128 байт электрически стираемой энергонезависимой памяти (EEPROM). EEPROM организована как отдельная область данных, каждый байт которой может быть прочитан и перезаписан. EEPROM выдерживает не менее 100 000 циклов записи/стирания. Доступ к энергонезависимой памяти данных задается регистрами адреса, данных и управления.
Дальше будет рассмотрена загрузка данных в EEPROM через SPI интерфейс.
Время выполнения команд.
ЦПУ процессора AVR управляется системной частотой генерируемой внешним резонатором. Внутреннее деление частоты генератора не используется.
В процессоре организован буфер (pipeline) команд, при выборе команды из памяти программ происходит выполнение предыдущей команды. Подобная концепция позволяет достичь быстродействия 1MIPS на MHz, уникальных показателей стоимости, быстродействия и потребления процессора.
Таблица 4 — Пространство ввода/вывода AT90S2313
Все устройства ввода/вывода и периферийные устройства AT90S2313 располагаются в пространстве ввода/вывода. Различные ячейки этого пространства доступны через команды IN и OUT, пересылающие данные между одним из 32-х регистров общего назначения и пространством ввода/вывода. К регистрам $ 00.$1 °F можно осуществлять побитовый доступ командами SBI и CBI. Значение отдельного бита этих регистров можно проверить командами SBIC и SBIS. Дополнительную информацию по этому вопросу можно найти в описании системы команд.
При использовании специальных команд IN, OUT, SBIS и SBIC, должны использоваться адреса $ 00.$3 °F. При доступе к регистру ввода/вывода как к ячейке ОЗУ, к его адресу необходимо добавить $ 20. В приведенной выше таблице адреса регистров в памяти данных приведены в скобках.
2.1.4 Источники сброса
AT90S2313 имеет три источника сброса.
* Сброс по включению питания. Процессор сбрасывается при подаче питания на выводы VCC и GND.
* Внешний сброс. Процессор сбрасывается при подаче низкого уровня на вывод RESET на время более двух периодов тактовой частоты.
* Сброс от сторожевого таймера. Процессор сбрасывается по окончанию времени отработки сторожевого таймера, если разрешена его работа.
Во время сброса все регистры ввода/вывода устанавливаются в начальные значения, программа начинает выполняться с адреса $ 000, поэтому адресу должна быть записана команда RJMP — относительный переход на программу обработки сброса. Если в программе не разрешаются прерывания и векторы прерываний не используются, в первых адресах памяти может быть записана программа.
Цепь сброса по включению питания обеспечивает запрет включения процессора до тех пор, пока напряжение питания не достигнет безопасного уровня. Поскольку к выводу RESET подключен подтягивающий резистор, этот вывод может оставаться неподключенным, если не требуется внешний сброс.
Внешний сброс обрабатывается по низкому уровню на выводе RESET. Вывод должен удерживаться в низком состоянии, по крайней мере два периода тактовой частоты.
После отработки цикла сторожевого таймера, он вырабатывает короткий импульс сброса. По спадающему фронту этого импульса запускается внутренний счетчик, отсчитывающий время Tout.
2.1.5 Таймеры/счётчики В AT90S2313 предусмотрены два таймера/счетчика общего назначения. 8-разрядный и 16-разрядный. Каждый из таймеров индивидуально подключается к одному из выходов 10-разрядного предварительного делителя частоты. Оба таймера могут использоваться как таймеры с внутренним источником импульсов или счетчики импульсов поступающих извне.
В качестве источника импульсов для таймеров можно выбрать сигнал с тактовой частотой процессора (CK), импульсы предварительного делителя (CK/8, CK/64, CK/256 или CK/1024) или импульсы с соответствующего внешнего вывода. Кроме того, таймеры могут быть остановлены, запретом прохождения импульсов на них.
2.1.6 Порт В, как порт ввода/вывода общего назначения Все 8 бит порта B при использовании для ввода/вывода одинаковы. Бит DDBn регистра DDRB выбирает направление передачи данных. Если бит установлен (1), вывод сконфигурирован как выход. Если бит сброшен (0) — вывод сконфигурирован как вход. Если PORTBn установлен и вывод сконфигурирован как вход, включается КМОП подтягивающий резистор. Для отключения резистора, PORTBn должен быть сброшен (0) или вывод должен быть сконфигурирован как выход.
Таблица 5 — Влияние DDBn на выводы порта B
Характеристики по постоянному току
Ta = −40…+85°C, Vcc=2.7…6.0V (если не указано иначе) Мин./Тип./Макс.
Входное напряжение '0' - -0.5/_/0.2Vcc-0.1 V
Входное напряжение '1'(кроме XTAL1 и RESET) — 0.2Vcc+0.9/_/Vcc+0.5 V на XTAL1 и RESET — 0.7Vcc/_/Vcc+0.5 V
Выходное напряжение '0' (Порты B и D) Il=20mA, Vcc=5V — _/_/0.5 V
Il=10mA, Vcc=2.7V — _/_/0.5 V
Выходное напряжение '1' (Порты B и D) I0h=10mA, Vcc=5V — 4.5/_/_ V
I0h=5mA, Vcc=2.7V — 4.5/_/_ V
Выходной ток (Порты B и D) Vcc=5V — _/_/10 mA
Vcc=2.7V — _/_/5 mA
Поглощаемый ток (Порты B и D) Vcc=5V — _/_/20 mA
Vcc=2.7V — _/_/10 mA
Подтягивающий резистор сброса — 100/_/500 кОм Подтягивающий резистор вывода порта 35/_/120 кОм Потребляемый ток:
Активный режим, 3V, 4MHz — _/2.5/_ mA
холостой ход (idle mode), 3V, 4MHz — _/800/_ uA
пониженное потребление WDT включен, 3V — _/50/_ uA
WDT выключен, 3V — _/_/1 uA
Напряжение смещения аналогового компаратора Vcc=5V — _/_/20 mV
Входной ток утечки аналогового компаратора — _/10/_ nA
Время срабатывания аналогового компаратора
Vcc=2.7V — _/750/_ nS
Vcc=4.0V — _/500/_ nS
2.2Набор команд AT90S2313
Данный микроконтроллер AT90S2313 экономичный, имеет много встроенных дополнительных функций, много выводов, что можно использовать для других целей. Программирование микроконтроллера позволяет экономно использовать ресурсы.
2.3 ЦАП фирма Analog Devices AD7224
8-ми разрядный аналого-цифровой преобразователь общего назначения с выходным операционным усилителем и малой мощностью потребления.
ФУНКЦИОНАЛЬНАЯ ДИАГРАММА Рисунок 2.4 — Блок схема ЦАП ОБЩЕЕ ОПИСАНИЕ
AD7224 — 8-ми разрядный аналого-цифровой преобразователь общего назначения с выходным операционным усилителем и входной логикой образованной двумя регистрами с внешним управлением. Входная логика представляет собой два регистра управляемых внешними сигналами, это входной регистр и DAC регистр. На значение выходного сигнала влияют только данные записанные в DAC регистре. Внешние управляющие сигналы: CS, WR, LDAC. RESET сбрасывает все регистры в 0 и устанавливает 0 на выходе. Все логические входы поддерживают стандарты ТТЛ и CMOS уровней сигнала.
Опорное напряжение подается на вывод Vref и может меняться в пределах +2 В до +12,5 В.
Параметры ЦАП при данных условиях — Vdd= 11−4Vto16−5V'Vss= -5V± 10%;AGND= DGND= OV;VREF= +2Vto (VDD-4V)1
Parameter | K, B, T Versions2 | L, C, U Versions2 | Units | Conditions/Comments | |
STATIC PERFORMANCE Resolution Total Unadjusted Error Relative Accuracy Differential Nonlinearity Full-Scale Error Full-Scale Temperature Coefficient Zero Code Error Zero Code Error Temperature Coefficient | ±2 ±1 ±1 ±3/2 ±20 ±30 ±50 | ±1 ±½ ±1 ±1 ±20 ±20 ±30 | Bits LSB max LSB max LSB max LSB max ppm/°C max mV max LiV/°C typ | VDD= +15 V± 5%, VREF = +10 V Guaranteed Monotonic VDD = 14 Vto 16.5 V, VREF = +10 V | |
REFERENCE INPUT Voltage Range Input Resistance Input Capacitance3 | 2to (VDD-4) | 2to (VDD-4) | V min to V max k?2 min pF max | Occurs when DAC is loaded with all 1s. | |
DIGITAL INPUTS Input High Voltage, VINH Input Low Voltage, VINL Input Leakage Current Input Capacitance3 Input Coding | 2.4 0.8 ±1 Binary | 2.4 0.8 ±1 Binary | V min V max µA max pF max | VIN = 0 V or VDD | |
POWER SUPPLIES VDD Range Vss Range Idd @ 25°C Tmin to TMAX Iss @ 25°C Tmin to TMAX | 11.4/16.5 4.5/5.5 | 11.4/16.5 4.5/5.5 4 6 3 5 | V min/V max V min/V max mA max mA max mA max mA max | For Specified Performance For Specified Performance Outputs Unloaded; VIN = VINL or VINH Outputs Unloaded; VIN = VINL or VINH Outputs Unloaded; VIN = VINL or VINH Outputs Unloaded; VIN = VINL or VINH | |
AD7224
ТЕРМИНОЛОГИЯ ОБЩЕЕ КОЛИЧЕСТВО ОШИБОК Общее количество Ошибку — всесторонняя спецификация, которая включает ошибку в полном масштабе, относительную точность и нулевую ошибку выходного напряжения. Максимальное напряжение выхода — VREF — 1 LSB (идеал), насколько 1 LSB (идеал) — VREF/256.
LSB размер изменится по диапазону VREF.
Следовательно нулевая ошибка выхода, относительно LSB размера, увеличивается если VREF уменьшения. Соответственно, общее количество ошибок, которые включают нулевую ошибку выхода, также изменится в терминах LSBS по диапазону VREF.
В результате, общее количество ошибок, определен для установленного опорного напряжения + 10 V.
ОТНОСИТЕЛЬНАЯ ТОЧНОСТЬ Относительная Точность или нелинейность — мера максимального отклонения от прямой линии, проходящей через конечные точки функции передачи DAC. Это измерено после учета нулевой ошибки и ошибки в полном масштабе и обычно выражается в LSBS или как процент от чтения в полном масштабе.
ДИФФЕРЕНЦИАЛЬНАЯ НЕЛИНЕЙНОСТЬ Дифференциальная Нелинейность — различие между измеренным и идеалом 1 LSB, изменение между любыми двумя смежными уровнями. Указанная дифференциальная нелинейность 1 LSB Макс по операционному температурному диапазону.
ИНФОРМАЦИЯ о структуре ЦАП
D/A СЕКЦИЯ
AD7224 содержит цифро-аналоговый преобразователь с разрешением 8 бит. Выходное напряжение от конвертера имеет ту же самую полярность как опорное напряжение. DAC состоит из высокоточных, тонкопленочных резисторов, R-2R матрица и восемь высоко скоростных NMOS коммутаторов с двойным броском. Упрощенная схема для этого DAC показывается на рис 2.5.
Рисунок 2.5 — Упрощенная схема ЦАП Входное сопротивление входа Vref зависит от входного кода и может изменяться от 8 кОм до бесконечности. Самое низкое входное сопротивление тогда когда входной код равен 1 010 101, поэтому очень важно запитывать этот вход стабилизированным напряжением. Емкость в процессе работы ЦАП меняеться незначительно и лежит в пределе от 25 pF к 50 pF.
Vqut может рассматриваться как в цифровой форме программируемый источник напряжения с выходным напряжением:
Vout = D * VREF
Где D — фракционное представление цифрового входа, и может измениться от 0 до 255/256.
Операционный усилитель На выходе ЦАП стоит неинвертирующий CMOS операционный усилитель способный при нагрузке 2 кОм и емкости 3300 pF дать выходное напряжение в 10 В.
AD7224 может использоваться и при однополярном напряжении, но тогда при низких выходных напряжениях падает ток нагрузки и это может привести к ухудшению точности. Рекомендуется либо использовать двуполярное питание либо ставить дополнительный операционный усилитель.
Рисунок 2.6 — Зависимость выходного тока от выходного напряжения.
ЦИФРОВАЯ СЕКЦИЯ
AD7224 цифровые входы совместимы или с TTL или 5 V CMOS уровни. Все логические входы статически-защищены MOS ворота с типичными потоками входа меньше чем 1 nA. Внутренняя защита входа достигнута «на чипе «распределенный диод между DGND и каждыми MOS воротами. Чтобы минимизировать потоки электропитания, рекомендуется, чтобы цифровые напряжения входа привели как близко к рельсам поставки (VDD и DGND) как фактически возможный.
ИНФОРМАЦИЯ ЛОГИКИ ИНТЕРФЕЙСА Ниже приведена таблица истинности для данной микросхемы. Часть содержит два регистра, регистр входа и регистр DAC. CS и WR управляют загрузкой регистра входа, в то время как LDAC и WR управляют передачей информации от регистра входа до регистра DAC. Только данные, проведенные в регистр DAC определят выходное напряжение конвертера.
Все регистры можно перевести в режим прозрачности, для этого необходимо подать 0 на входы LDAC, WR, CS.
Таблица2 — Таблица истинности
RESET | LDAC | WR | CS | Function | |
H | L | L | L | Оба Регистра Прозрачны | |
н | X | Н | X | Оба Регистра закрыты | |
н | Н | X | H | Оба Регистра закрыты | |
н | н | L | L | Регистр Входа Прозрачный | |
н | н | J | L | Регистр Входа Закрыт | |
н | L | L | H | DAC регистр Прозрачный | |
н | L | J | H | DAC Регистр Закрыт | |
L | X | X | X | Оба Регистратора сбросили в 0 | |
Н | H | H | Оба Регистр закрыты Со Всеми Нолями | ||
И выходное напряжение равно 0 | |||||
L | L | L | Оба Регистра Прозрачны и | ||
Выходное напряжение Следует За данными Входа | |||||
H = высокий уровень, L = низкий уровень, X = состояние не имеет значения.
Рисунок 2.7 — Схема входной логики микросхемы Рисунок 2.8 — Временная диаграмма для записи 1 байта Таблица 2 — Принцип расчета выходного напряжения
3. РАСЧЁТ ВРЕМЕННЫХ СООТНОШЕНИЙ Согласно техническому заданию:
— длительность импульса 20,40,60 мкс;
— частота следования импульсов- 5 кГц
— количество импульсов в пачке ;
— длительность пачки 0,2 с;
— Период повторения пачки — 2 сек.
Рассмотрим 1-й случай:
Рассчитаем время нуля t0 (между импульсами) Частота 5 кГц значит период следования импульсов 0,2 мс
t0=T-ti=200−20=180 мкс Рассчитаем число импульсов в пачке
K=Tp/Ti=0,2/0,2*10-3= 1000 импульсов Необходимо сформировать такой сигнал:
Рисунок 3.1 — Сигнал на выходе ЦАП.
То есть за 1000 импульсов напряжение должно вырасти от 0 до 9 В.
Так как мы используем 8 битный ЦАП, у нас есть возможность сформировать 255 уровней выходного напряжения, то есть для сохранения линейного закона нарастания сигнала необходимо формировать по несколько импульсов с одинаковой амплитудой.
Необходимо сформировать 20 пачек по 3 импульса с одинаковой амплитудой и 235 пачек по 4 импульса с одинаковой амплитудой.
Теперь рассчитаем коэффициенты, вносимые в таймер счетчик для формирования определенных временных интервалов.
Будем использовать 16 битный таймер счетчик с коэффициентом предварительного деления входной частоты 1.
Тактовая частота 4 МГц; фт=0,25 мкс;
Количество тактов для фи=20 мкс/0,25мкс=80;
Число вносимое в таймер счетчик 65 535−80= 65 455 $ FFAF
Количество тактов для ф0=180 мкс/0,25мкс= 720;
Число вносимое в таймер счетчик 65 535−720= 64 815 $ FD2F
Длительность паузы между пачками: Т-фпачки=2−0,2=1,8 с.
Зададим коэффициент предделения частоты равный 1024
Тактовая частота 4 МГц /1024= 3906.25 Гц; фт=256 мкс;
Для формирования: 1,8 с/256 мкс = 7031.
Число вносимое в таймер счетчик 65 535−7031= 58 504 $E488
Рассмотрим 2-й случай:
Рассчитаем время нуля t0 (между импульсами) Частота 5 кГц значит период следования импульсов 0,2 мс
t0=T-ti=200−40= 160 мкс Количество тактов для фи=40 мкс/0,25мкс=160;
Число вносимое в таймер счетчик 65 535−160= 65 375 $FF5F
Количество тактов для ф0=160 мкс/0,25мкс=640;
Число вносимое в таймер счетчик65 535−640= 64 895 $FD7F
Длительность паузы между пачками та же.
Рассмотрим 3-й случай
Рассчитаем время нуля t0 (между импульсами)
Частота 5 кГц значит период следования импульсов 0,2 мс
t0=T-ti=200−60= 140 мкс Количество тактов для фи=60 мкс/0,25мкс=240;
Число вносимое в таймер счетчик 65 535−240= 65 295 $ FF0F
Количество тактов для ф0=140 мкс/0,25мкс=560;
Число вносимое в таймер счетчик 65 535−560= 64 975 $FE47
Длительность паузы между пачками та же.
Все коэффициенты рассчитаны без учета времени выполнения программного кода, после моделирования мы получим реальные временные интервалы и уменьшим время ожидания на величину ошибки.
4. РАЗРАБОТКА СХЕМЫ ЭЛЕКТРИЧЕСКОЙ ПРИНЦИПИАЛЬНОЙ УСТРОЙСТВА Для построения программно управляемого задающего генератора пачек прямоугольных импульсов на микроконтроллере для физиотерапевтической установки нужно микроконтроллер питать от блока питания (в данном случае 5В); а для достижения нужного уровня выходного напряжения на выходе ставим эмиттерный повторитель. Индикацию работы можно проверять с помощью светодиодов. Особенностью ЦАП является то что Vref должно быть на 4 вольта меньше чем питающее напряжение, поэтому ЦАП запитан рекомендуемым напряжением 10 В, а Vref 5 вольт. Такое решение требует установки дополнительного усилителя для достижения требуемого размаха выходного сигнала 7 В. То есть усилитель должен иметь коэффициент передачи 1,4, и полосу пропускания в 2 раза выше граничной частоты.
4.1 Выбор блока питания Рассчитаем ориентировочно потребляемую устройством мощность:
Потребление микроконтроллера — 3мА*5В=15 мВт Потребление ЦАП — 450 мВт По техническому заданию на нагрузке 50 Ом необходимо получить напряжение 7 В, значит мощность порядка 1 Вт Общее потребление около 1,5 Вт Значит берем 5 Вт трансформатор питания и ставим КР142ЕН8А и КР142ЕН5А способные давать ток до 1,5 А. В качестве входного усилителя применим микросхему TDA1013B способную давать выходную мощность до 4Вт (запас по мощности позволит поставить микросхему без теплоотвода). Построечный резистор R4 позволит добиться нужного напряжения на нагрузке.
4.2 Подключение ЦАП Особенности ЦАП описаны выше. Логическая схема управления предназначена для работы микросхемы на общей шине с другими устройствами. Так как у нас нет разделения шины мы выбираем такой режим работы: внутренние регистры прозрачны и любые изменения на шине данных тут же отражаются на выходном сигнале. Для этого мы садим выводы CS, WR, LDAC на землю чем разрешаем прямое управление ЦАП. Выходное напряжение снимается с 2 вывода нагруженного на резистор R4 позволяющий регулировать напряжение на нагрузке и добиться требуемой амплитуды в 7 В.
4.3 Схема электрическая принципиальная Схема электрическая принципиальная программно управляемого задающего генератора пачек прямоугольных импульсов на микроконтроллере для физиотерапевтической установки представлена ниже.
Рисунок 4.1 — Схема генератора электрическая принципиальная
5. РАЗРАБОТКА АЛГОРИТМА РАБОТЫ УСТРОЙСТВА И СОСТАВЛЕНИЕ ПРОГРАММЫ
5.1 Разработка алгоритма работы устройства Рисунок 5.1 — Основной алгоритм работы программы Пояснения:
Вначале происходит конфигурация контроллера, потом опрашивается клавиатура и (если была нажата одна из клавиш, что в начале работы маловероятно) контроллер перейдет на один из режимов, если клавиша нажата не была, вызовется 1 режим. Подпрограмма Режим 1 формирует 1 период сигнала с требуемыми параметрами (сюда входит пачка импульсов и время между пачками), здесь же после каждого периода вызывается подпрограмма опроса клавиатуры. То есть контроллер зациклен на функциях формирования пачки импульсов, паузы между пачками и опросом клавиатуры.
Ниже приведен алгоритм подпрограммы Режим 1.
Рисунок 5.2 — Алгоритм работы подпрограммы Режим 1
Рисунок 5.3 — Продолжение алгоритма работы подпрограммы Режим 1
5.2 Составление программы
;*******************************************************************************
;DEVICE AT90S2313
;*******************************************************************************
;Порт В ЦАП
;РB.0 — ЦАП
;PB.1 — ЦАП
;PB.2 — ЦАП
;РB.3 — ЦАП
;PB.4 — ЦАП
;PB.5 — ЦАП
;РB.6 — ЦАП
;PB.7 — ЦАП
;PD.0 — светодиод
;PD.1 — светодиод
;РD.2 — светодиод
;PD.3 — кнопка
;PD.4 — кнопка
;PD.5 — кнопка
;PD.6 ;
;
;**** Includes ****
.INCLUDE «C:VMLABinclude2313def.inc»
; Подключение файла конфигурации устройства
;**** Глобальные Регистровые переменные ****
.def data =r25; -> РАБОЧИЙ
.def nol =r26; -> РАБОЧИЙ
.def temp1 =r27; -> РАБОЧИЙ
.def waitH =r28; -> РАБОЧИЙ
.def schetchik =r29; -> РАБОЧИЙ
.def N =r30; -> текущее напряжение на выходе ЦАП
.def cikle =r31
;*******************************************************************************
; Начальные установки
;*******************************************************************************
.cseg
.org 0; начать коипилирование с адреса 00
rjmp label1; переход на метку label1
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti; выход из подпрограммы прерывания
label1: ldi temp1,$C8; загрузка конечного адреса стека
out SPL, temp1;вывод в порт значение конечного адреса стека
SEI; разрешить все прерывания
ldi temp1,0b11111111;весь порт на вывод
out DDRB, temp1
ldi temp1,0b11000111; выводы на которые подключены кнопки конфигурируються как входы
out DDRD, temp1
ldi temp1,0b00111000;включаю подтягивающие реисторы на кнопках
out PORTD, temp1
ldi temp1,0b10000010
out TIMSK, temp1; РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА/СЧЕТЧИКА — TIMSK (резрешение прерывания от счетчика 1)
ldi nol, 0
main: rcall opros
rcall regim1
rjmp main
;*********************************************************************
opros:
sbis PIND, PIND3
jmp regim1
sbis PIND, PIND4
jmp regim2
sbis PIND, PIND5
jmp regim3
ret
;*********************************************************************
regim1:cbi PORTD, PD0
sbi PORTD, PD1
sbi PORTD, PD2
reg1:ldi data, 0b00000001
ldi cikle, 20
l1:ldi N, 3
l2:out PORTB, data
rcall wait_impuls1
out PORTB, nol
rcall wait_nol1
dec N
cpi N, 0
brne l2
inc data
ldi N, 4
l3:out PORTB, data
rcall wait_impuls1
out PORTB, nol
rcall wait_nol1
dec N
cpi N, 0
brne l3
inc data
dec cikle
cpi cikle, 0
brne l1
ldi cikle, 215
l4:ldi N, 4
l5:out PORTB, data
rcall wait_impuls1
out PORTB, nol
rcall wait_nol1
dec N
cpi N, 0
brne l5
inc data
dec cikle
cpi cikle, 0
brne l4
rcall wait_long1
rcall opros
rjmp reg1
;*********************************************************************
regim2: cbi PORTD, PD1
sbi PORTD, PD0
sbi PORTD, PD2
reg2:ldi data, 0b00000001
ldi cikle, 20
l6:ldi N, 3
l7:out PORTB, data
rcall wait_impuls2
out PORTB, nol
rcall wait_nol2
dec N
cpi N, 0
brne l7
inc data
ldi N, 4
l8:out PORTB, data
rcall wait_impuls2
out PORTB, nol
rcall wait_nol2
dec N
cpi N, 0
brne l8
inc data
dec cikle
cpi cikle, 0
brne l6
ldi cikle, 215
l9:ldi N, 4
l10:out PORTB, data
rcall wait_impuls2
out PORTB, nol
rcall wait_nol2
dec N
cpi N, 0
brne l10
inc data
dec cikle
cpi cikle, 0
brne l9
rcall wait_long1
rcall opros
rjmp reg2
;*********************************************************************
regim3: cbi PORTD, PD2
sbi PORTD, PD0
sbi PORTD, PD1
reg3:ldi data, 0b00000001
ldi cikle, 20
l11:ldi N, 3
l12:out PORTB, data
rcall wait_impuls3
out PORTB, nol
rcall wait_nol3
dec N
cpi N, 0
brne l12
inc data
ldi N, 4
l13:out PORTB, data
rcall wait_impuls3
out PORTB, nol
rcall wait_nol3
dec N
cpi N, 0
brne l13
inc data
dec cikle
cpi cikle, 0
brne l11
ldi cikle, 215
l14:ldi N, 4
l15:out PORTB, data
rcall wait_impuls3
out PORTB, nol
rcall wait_nol3
dec N
cpi N, 0
brne l15
inc data
dec cikle
cpi cikle, 0
brne l14
rcall wait_long1
rcall opros
rjmp reg3
;*********************************************************************
wait_impuls1:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FF
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$C4
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_nol1:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FD
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 48
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_impuls2:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FF
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 5F
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_nol2:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FD
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 7F
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_impuls3:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FF
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 0F
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_nol3:
ldi temp1,0b00000001
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$FE
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 47
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
wait_long1:
ldi temp1,0b00000101
out TCCR1B, temp1; установка предварительного деления тактовой частоты счетчика на 1024
ldi waitH,$E4
out TCNT1H, waitH; запись старшего байта в порт таймера длительности пачки
ldi waitH,$ 88
out TCNT1L, waitH; запись малого байта в порт таймера длительности пачки
ldi temp1,0b00100000
out MCUCR, temp1; разрешение режима пониженого энергопотребления
SLEEP
ldi temp1,0b00000000
out TCCR1B, temp1; останов
ret
.EXIT
6. МОДЕЛИРОВАНИЕ И КОРРЕКТИРОВКА ПРОГРАММЫ Проведем моделирование и отладку программы в программе VMLab.
Причем при моделировании используем макромодель 8 битного ЦАП, что позволяет наблюдать требуемые импульсы, измерять их длительность и амплитуду.
После моделирования получаем такие параметры импульса:
По программе | Требуемая | Ошибка | ||
Длительность импульса | 25,3 мкс | 20 мкс | 5,3 мкс | |
Длительность нуля | 186,2мкс | 180 мкс | 6,2 мкс | |
Вносим поправки в расчет
Рассмотрим 1-й случай:
Количество тактов для фи=20 мкс-5,3 мкс /0,25мкс= 59;
Число вносимое в таймер счетчик 65 535−59= 65 476 $ FFC4
Количество тактов для ф0=180 мкс-6,2 мкс /0,25мкс= 695;
Число вносимое в таймер счетчик 65 535−695= 64 840 $FD48
Рисунок 6.1 — Длительность импульса внутри пачки после коррекции Рисунок Длительность нуля внутри пачки после коррекции Рисунок — результат моделирования 1 пачки импульсов После коррекции длительностей единицы и нуля получаем искомую длительность пачки — 200 мс Теперь зная корректировочные коэффициенты корректируем 2 и 3 режим работы
Рассмотрим 2-й случай:
Количество тактов для фи=70 мкс-5,3 мкс /0,25мкс=259;
Число вносимое в таймер счетчик 65 535−259= 65 276 $ FEFC
Количество тактов для ф0=130 мкс-7,5 мкс /0,25мкс=490;
Число вносимое в таймер счетчик 65 535−490= 65 045 $FE15
Рассмотрим 3-й случай:
Количество тактов для фи=90 мкс-5,3 мкс /0,25мкс=339;
Число вносимое в таймер счетчик 65 535−339= 65 196 $ FEAC
Количество тактов для ф0=110 мкс-7,5 мкс /0,25мкс=410;
Число вносимое в таймер счетчик 65 535−410= 65 125 $FE65
7. РАСЧЁТ ПОГРЕШНОСТЕЙ При расчёте погрешностей нужно сопоставить длительность импульса, длительность нуля, длительность большого нуля с длительностями, получаемыми программно.
Так как мы при моделировании отладили программу и получили длительности импульсов равные заданным, можно считать, что устройство работает без существенных погрешностей. Но в реальной жизни будет разброс параметров кварца, температурный дрейф частоты генерации, что приведет к увеличению погрешности. Но все равно точность генерирования импульсов останется на порядок выше, чем требовалась по техническому заданию (0,5%), так как схема генерирует импульсы относительно тактовой частоты заданной кварцем. О точности генерирования амплитуды в техническом задании нет определенных указаний, поэтому считаем, что этот параметр неважен в конечном устройстве.
ЗАКЛЮЧЕНИЕ
генератор импульс микропроцессор алгоритм В этой работе спроектирован программно управляемый задающий генератор пачек прямоугольных импульсов на микроконтроллере AT90S2313 для физиотерапевтической установки. Использование микроконтроллера для проектирования генератора способствует усовершенствованию устройства. Изменяя программное обеспечение, можно генерировать другие импульсы, и даже совсем изменить функцию прибора. Также, такой генератор менее энергопотребляем, имеет малые габариты, сейчас очень актуально.
Можно добиться работы устройства почти без погрешности путём корректировки программы.