5809

Разработка радио/проводного модуля сопряжения пульта управления и радиостанции

Дипломная

Коммуникация, связь, радиоэлектроника и цифровые приборы

Введение Электропитание радиоаппаратуры осуществляется источниками вторичного электропитания (ИВЭП), которые подключаются к источникам первичного электропитания и преобразуют их переменное или постоянное напряжение в требуемые выходные напряжения ра...

Русский

2012-12-21

162.5 KB

17 чел.

Введение

Электропитание радиоаппаратуры осуществляется источниками вторичного электропитания (ИВЭП), которые подключаются к источникам первичного электропитания и преобразуют их переменное или постоянное напряжение в требуемые выходные напряжения различных номиналов как постоянного, так и переменного тока, с характеристиками, обеспечивающими нормальную работу радиоэлектронной аппаратуры (РЭА) в заданных режимах. За последние годы источники вторичного питания радиоэлектронной аппаратуры существенно изменились. Это вызвано непрерывным стремлением уменьшить их массу и габариты, повысить коэффициент полезного действия за счёт применения более рациональных схемных решений, что достигается использованием высокочастотного преобразования энергии постоянного тока, экономичных импульсных методов регулирования, применением интегральных микросхем. Повысились также требования к питающим напряжениям. Это привело к созданию разнообразных структурных схем построения вторичных источников электропитания, каждая из которых находит применение в конкретных условиях. Для выполнения этих и других задач в состав средств вторичного электропитания входят как сами источники питания, так и ряд дополнительных устройств, обеспечивающих их работу в составе комплекса РЭА. 

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

Другими важными вопросами при оценке направлений развития новых типов ИВЭП являются обоснованное определение возможностей полупроводниковой технологии и максимальное её использование для построения ИВЭП. Полупроводниковые специализированные микросхемы для ИВЭП обладают большими функциональными возможностями при малом объёме и энергопотреблении.

В настоящее время всё большее применение находят ИВЭП, выполненные по интегральной технологии. Данная технология приводит к улучшению технических характеристик и к значительному уменьшению объёма и размеров ИВЭП. В этом заключается дальнейшая перспектива развития ИВЭП.

1. Анализ технического задания

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

Необходимо разработать следующие функции:

  1.  Функция управления излучаемой мощностью радиомодема;
  2.  Функция автоматического выбора рабочей линии связи;
  3.  Функция теста ошибок передачи по рабочей линии;
  4.  Функция теста излучаемой мощности радиомодемом;
  5.  Функция подсчета контрольной суммы программной памяти микроконтроллера.

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

Разработанные функции будут записаны в программную память микроконтроллера Atmega2560.

Программирование будет производиться на программном обеспечении компании CodeVisionAVR на стандартизированном процедурном языке программирования языке «С».

2. Анализ структурной схемы МСПУ

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

Схема автоматически выбирает источник питания благодаря ключу питания. Схема питается либо от блока питания, либо от встроенной в устройство батареи.

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

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

В зависимости от того, какая рабочая линия выбрана, микроконтроллер направляет обработанный сигнал в двухпроводную линию передачи, либо на радиомодем.  

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

 Структурная схема МСПУ представлена в приложении №1.
3. Анализ электрической принципиальной схемы МСПУ

 Согласно анализу структурной схемы МСПУ необходимо более детально рассмотреть блоки схемы МСПУ.

Ключ питания представляет собой микросхему TPS2113 – мультиплексор питания. TPS2113 позволяет переключаться без скачков напряжения между двумя источниками, такими как батарея и сетевой адаптер, каждый дающий напряжение от 2,8 В до 5,5 В и ток до 1 А. TPS2113 имеет исчерпывающую схему защиты, включающую в себя задаваемое конструктором ограничение тока, защиту от перегрева, управление бросками тока, бесстыковое переключение источников и блокировку взаимной и обратной проводимости. Типовое включение в схему указано в документации на микросхему.

Стабилизатор напряжения LTC3440 - маломощный переключаемый стабилизатор с КПД до 96 %. Пригоден для оборудования с батарейным питанием. Устройство включает устройство мягкого запуска и программируемые переключаемые частоты до 2 МГц. Генератор может синхронизироваться внешним сигналом. Типовое включение в схему указано в документации на микросхему.

В схеме МСПУ используется кодек MC145481. кодек выполняет функцию оцифровки входящего сигнала, а так же восстановление его в аналоговый вид. Устройство предназначено для работы, как в синхронном режиме, так и в асинхронном. Внутри этого устройства встроен операционный усилитель. Также данный кодек выполняет функцию фильтра шумов. Типовое включение в схему указано в документации на микросхему.
Микрофонный блок включает в себя микрофонный усилитель – компрессор
SSM2167. Изделие подходит для систем громкой связи и телекоммуникационных приложений. Усилитель, управляемый напряжением (VCA), обеспечивает динамически управляемый коэффициент усиления. Коэффициент сжатия устанавливается через единственный резистор, и может быть установлен в диапазоне от 1:1 до 10:1 относительно точки периодического повторения. Сигналы выше ее ограничены для предотвращения перегрузки и эффектов "ритмичной генерации приемника". Гибкость установления коэффициента сжатия и постоянной времени детектора уровня, соединенной с двумя значениями точки периодического повторения, позволяет легко интегрировать SSM2167 в множество приложений кондиционирования микрофонного входа. Типовое включение в схему указано в документации на микросхему.

В состав аналогового тракта входят микросхемы AD8400 и TPA301. AD8400 выполняет функцию потенциометра (переменного резистора). TPA301 – операционный усилитель, разработанный специально для систем с малым потреблением, позволяет использовать гарнитуры или динамики. Изделие предназначено для использования в частотных диапазонах до 20 кГц. Типовое включение в схему указано в документации на микросхему.

Блок двунаправленной линии использует 544УД2 - операционный дифференциальный усилитель с высоким входным сопротивлением и повышенным быстродействием. В данной схеме 544УД2 используется в качестве компаратора.

Главным элементом в схеме МСПУ является микроконтроллер ATmega2560. ATmega2560 - маломощный 8-разрядный КМОП микроконтроллер, выполненный на основе AVR-ядра с RISC-архитектурой. За счет выполнения большинства инструкций за один машинный ATmega2560 достигает производительности 1 млн. операций в секунду при тактовой частоте 1 МГц.

AVR ядро объединяет богатый набор инструкций с 32 рабочими регистрами общего назначения. Все 32 регистра непосредственно подключены к АЛУ (арифметико-логическое устройство), что позволяет указывать два регистра в одной инструкции и выполнить ее за один цикл. Данная архитектура обладает большей эффективностью кода и в 10 раз большей производительностью по сравнению с CISC микроконтроллерами.

ATmega2560 содержит следующие узлы:

• 256 кбайт внутрисхемно-программируемой флэш-памяти с возможностью чтения во время записи

• 4 кбайт ЭСППЗУ, 8 кбайт статического ОЗУ

• 54/86 линий ввода-вывода

• 32 рабочих регистра общего назначения

• часы реального времени

• шесть гибких таймеров-счетчиков с режимами сравнения и ШИМ

• 4 УСАПП

• 2-проводной последовательный интерфейс с побайтной передачей

• 16-канальный 10-разрядный АЦП с опциональным дифференциальным входным каскадом и программируемым усилением

• программируемый сторожевой таймер с внутренним генератором, последовательный порт SPI

• JTAG интерфейс для сканирования адресного пространства, реально-временной отладки и программирования

• шесть программно настраиваемых режимов управления энергопотреблением.

Режим холостого хода (Idle) останавливает ЦПУ, но оставляет в работе статическое ОЗУ, таймеры-счетчики, порт SPI и систему прерываний. Режим пониженного потребления (Power-down) сохраняет содержимое регистров, но останавливает генератор, выключает все встроенные функции до появления следующего запроса на прерывание или аппаратного сброса. В экономичном режиме (Power-save) асинхронный таймер продолжает работать, позволяя пользователю его использовать, а остальные устройства отключены. В режиме снижения шумов АЦП (ADC Noise Reduction) останавливается ЦПУ и все модули ввода-вывода, за исключением асинхронного таймера и АЦП, тем самым минимизируется влияние цифрового шума на результат преобразования. В дежурном режиме (Standby) генератор на кварцевом резонаторе запущен, а остальная часть отключена. Данный режим позволяет реализовать быстрый запуск в комбинации с малым потреблением. В расширенном дежурном режиме (Extended Standby) и основной генератор и асинхронный таймер продолжают работать.

MAX3224 является коммуникационным интерфейсом стандартов EIA/TIA-232 и V.28/V.24 с автоматическими функциями отключения/пробуждения, высокими скоростями передачи данных, и питанием от 3 В. Устройство достигает уровня потребляемого тока 1 мкА с использованием функции AutoShutdown Plus.

Данное устройство автоматически переходит в режим отключения с низким энергопотреблением при отсоединении кабеля RS-232, или при нахождении передатчиков подключенной периферии в пассивном состоянии, и при нахождении UART, управляющей входами передатчика в пассивном состоянии на время, более 30 секунд. Он активизируется снова, при поступлении на любой из входов приемника, или передатчика соответствующего сигнала.

MAX3224, также, обладает функцией MegaBaud™, гарантирующей скорости передачи данных 1 Мбит/с для высокоскоростных приложений, таких, как, ISDN модемы. MAX3224 имеет гарантированную скорость передачи данных 250 Кбит/с. Трансиверы имеют уникальные выходные каскады трансмиттеров с малым значением падения напряжения, обеспечивающими полное соответствие стандарту RS-232 при питании от +3.0 В до +5.5 В с двойной подкачкой заряда. Система подкачки заряда требует подключения всего четырех малогабаритных конденсаторов 0.1 мкФ при работе с напряжением питания +3.3 В. ИС MAX3224-MAX3227 имеют выходной логический сигнал готовности (READY), который активизируется при достижении системой подкачки заряда уровня стабилизации и готовности устройства к передаче.

Электрическая принципиальная схема МСПУ представлена в приложении №2.
4. Расчет универсального транзисторного ключа
5. Разработка функций ПО

 Разработка функций ПО необходима для расширения возможностей уже написанного ранее ПО МСПУ. Для верной работы всех программ необходимо инициализировать USART и таймеры микроконтроллера ATmega2560. Таймеры работают по прерыванию. Программы инициализации и прерывания представлены в приложении №3.

5.1. Разработка функции теста излучаемой мощности

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

Для отправки байта, в данном случае это 0х55, необходимо записать его в регистр UDR1 передающего устройства USART1. Как только информация поступила в регистр, передающее устройство начинает устанавливать флаги, которые находятся в регистре UCSR1A. Шестой бит регистра UCSR1A является флагом TXC1 и устанавливается в «1», при  завершении передачи информации из UDR1. Как только флаг устанавливается в «1» программа начинает выполняться заново.

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

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

Тело программы представлено в приложении №4.

Блок-схема данной функции представлена в приложении №5.


5.2. Разработка функции теста ошибок обмена по рабочей линии передачи информации

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

Для выполнения теста необходимо передать заранее известную последовательность байтов на принимающее устройство. При передаче по радиоканалу используется передающее устройство USART1, а для передачи по двухпроводной линии - USART2. Соответственно для передачи используются регистры UDR1 и UDR2.

В регистры передачи записывается начальный байт. Как только информация поступила в регистр, передающее устройство начинает устанавливать флаги, которые находятся в регистре UCSR1A для радиоканала или в регистре UCSR2A для двухпроводной линии. Программа ждет установления флага завершения передачи TXCn в «1» и увеличивает счетчик отправленных сообщений. По завершении операций программа начинает выполняться заново, до тех пор, пока не будет отправлено нужное количество сообщений.

Со стороны принимающего устройства необходимо сверять значения принятые через канал связи с априорными значениями. Программа ожидает установления флага RXCn завершения приема сообщения в «1» и считывает полученную информацию с регистра UDR1 или UDR2, и записывает данные в промежуточную переменную. Если принятое сообщение соответствует априорным значениям, то счетчик принятых сообщений увеличивается, и программа начинает ожидать следующего поступления информации на регистр. Если же значения не соответствуют заранее известным, то увеличивается счетчик ошибок и программа возвращается к ожиданию принятия сообщения.

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

Тело программы для работы по радиоканалу представлено в приложении №6, для работы по двухпроводной линии передачи в приложении №7.

Блок-схема данной функции представлена в приложении №8.


5.3 Разработка протокола обмена МСПУ

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

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

 

Рисунок – 1. Структура пакета данных разработанного протокола.

Пакет данных содержит области байтов:

1 – Начальный байт. Присваивается значению 0хF7. Данный байт необходим для обозначения начала пакета. При приеме данного пакета программа должна искать это значение в данном байте, чтобы начать сборку целого пакета.

2 – Байт адреса «от кого». Байт определяет, от какого устройства идет данный пакет. Каждое устройство имеет свой адрес.

3 – Байт адреса «к кому». Байт определяет, к которому устройству будет или был направлен пакет.

4 – Байт длины. Байт определяет количество байтов, содержащихся в последующей области пакета. Может принимать значения от 0х00 до 0хFF.

5 – Совокупность байтов полезной информации. Их количество определяется длиной.

6 – Байт контрольной суммы. Считается по алгоритму CRC. Программа подсчета CRC пакета представлена в приложении №9.
5.4. Разработка функции автоматического определения рабочей линии связи

 

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

Для выбора линии необходимо отправлять тестовый пакет, используя, передатчик USART2, который отвечает за передачу через двухпроводную линию. Тестовый пакет собирается согласно разработанному протоколу. Программа ожидает ответа от принимающего пакет устройства. Время ожидание выбирается исходя из скорости передачи  и знания структуры тестового пакета. Для данной функции 20 мс является достаточным временем ожидания. Если ответа от принимающего устройство нет, то программа переходит к проверке доступности радиоканала для передачи аналогичным способом, используя передающее устройство USART1. Если ответ по одной из линий пришел, то глобальной переменной присваивается значение, которое соответствует выбранной линии передачи:

• Значение «1» является обозначением выбранной линии передачи как двухпроводной линии;

• Значение «2» является обозначением выбранной линии передачи как радиоканала;

• Значение «0» является обозначением того, что ни по одной из линий ответа не пришло.

Отправка пакета начинается с формирования тестового пакета. Тестовый пакет содержит в себе области байтов, согласно разработанному протоколу и включает в себя: Стартовый байт (Значение 0xF7), Адрес «от кого» (Значение 0х01 соответствует стационарному устройству), Адрес «к кому» (Значение 0х02 соответствует удаленному устройству), Длина (Тестовый пакет имеет значение 0х01), Блок информации (1 байт значением 0х55), Контрольная сумма пакета(Рассчитывается отдельной программой представленной в приложении №9). Каждый из байтов поочередно записывается в буфер отправки, а затем в регистр UDRn, соответствующий выбранному USART. Программа ждет отправки байта, ожидая установления флага конца передачи в «1», перед записью нового байта в регистр. По завершению передачи программа ожидает ответа от принимающего устройства в течение 1 мс, и если ответа не пришло, то программа начинает снова отправлять тестовый кадр.

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

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

Программа обработки информации проверяет, поставлен ли указатель на 0 байт буфера данных. Если условие выполняется, то проверяется другое условие: Совпадает ли значения данного байта с заранее известным значением стартового байта. Если значение совпадает, то байт записывается в буфер пакета, если нет – программа начинает поиск начального байта пакета, постепенно увеличивая указатель текущего байта.

Если стартовый байт найден, то программа автоматически дописывает в буфер пакета три последующих байта: адрес «от кого», адрес «к кому», длину. В зависимости от значения программа дописывает столько байт, сколько указано в области пакета «длина». После записи в буфер полезной информации пакета подсчитывается контрольная сумма полученного пакета и затем сравнивается с байтом контрольной суммы в буфере приема. Если значения оказываются разными, то считается, что пакет был принят неверно и буфер пакета обнуляется. Если значения совпадают, то пакет считается верно принятым, и флаг о получении правильно принятого пакета устанавливается в «1».

Как только флаг о получении устанавливается в «1» программа решает, что канал передачи данных, существует и глобальная переменная устанавливается в соответствующее значение.

Если после проверки обоих каналов связи флаг остается в «0», то переменная, отвечающая за обозначение выбранной линии принимает значение «0», что соответствует тому, что ни по одному каналу связи ответа не пришло, и требуется настройка каналов связи.

Тело программы функции формирования пакета, отправки пакета и принятия решения о рабочей линии представлены в приложении №10.

Тело программы сборки кадра из принятой информации представлено в приложении №11.

Блок-схема данной функции представлена в приложении №12.


5.5. Разработка функции управления излучаемой мощностью радиомодема

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

Пакет с информацией об уровне излучаемой мощностью должен быть отправлен радиомодемом, поэтому программа ожидает установление флага о конце передачи пакета в «1». После чего программа проверяет условие принадлежности пакета к функции управления мощности, для этого она сверяет четвертый байт пакета с заранее заданным числом (0х50). Если условие выполняется, то программа считывает пятый байт пакета. В этом байте находится информация об уровне излучаемой мощности.

Уровень может принимать значения от 0 до 255 (от 0х00 до 0хFF). Пороговые уровни мощности выбираются при конструировании устройства. Для данной квалификационной работы можно принять верхним порогом мощности значение 0хF0, а 0x0F – нижним. Программа сверяет  полученное значение уровня мощности и формирует пакет, в котором будет находиться байт, на месте байта с информацией об уровне мощности, с конфигурацией на увеличение, либо уменьшение мощности. Пакет отсылается модему и далее программа начинает отсчитывать время ожидания, равное 100 мс перед обработкой нового пакета с информацией об уровне мощности.

Конфигурация об изменении мощности расшифровывается внутри ПО радиомодема.

Тело программы данной функции представлено в приложении №13

Тело программы сборки кадра из принятой информации представлено в приложении №11.

Блок-схема данной функции представлена в приложении №14.


5.6. Подсчет контрольной суммы памяти программ

5. Разработка блок-схемы алгоритма работы МСПУ

Алгоритм работы МСПУ представляет собой описание головной программы, фактически всего ПО. Так как в данной квалификационной работе разрабатывались лишь функции ПО МСПУ, данная блок-схема может не отражать всей полноты функционирования МСПУ.

После включения питания ПО проверяет подключен ли ПУ. Если условие не проверяется ПО входит в режим ожидания и ждет пока контакт с ПУ не будет установлен.

После того как условие подключенного ПУ будет выполнено, ПО запустит подпрограмму поиска рабочей линии. Данная функция описана ранее (см. стр. ??? ).

После определения линии передачи пользователю МСПУ будет предложено провести тесты, описанные в данной работе, либо начать непосредственно работать с устройством.

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

Завершение работы ПО МСПУ выполняется при выключении питания.

Блок-схема алгоритма работы МСПУ представлена в приложении №16.


Заключение


Список литературы:

http://catalog.gaw.ru/index.php?page=component_detail&id=2303
Приложение № 3

//Инициализация USART

void init_USART1(void)

{

// USART1 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART1 Receiver: On

// USART1 Transmitter: On

// USART1 Mode: Asynchronous

// USART1 Baud Rate: 115200

UCSR1A=0x00;

UCSR1B=0xD8;

UCSR1C=0x06;

UBRR1H=0x00;

UBRR1L=0x04;

}

void init_USART2(void)

{

// USART2 initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART2 Receiver: On

// USART2 Transmitter: On

// USART2 Mode: Asynchronous

// USART2 Baud Rate: 115200

UCSR2A=0x00;

UCSR2B=0xD8;

UCSR2C=0x06;

 UBRR2H=0x00;

UBRR2L=0x04;

}

Приложение №3 (Продолжение)

int dl_time, dl_time2;

void init_timer5(void)

{ //Таймер 5 общего назначения -  Таймер 1 ms

 TCNT5H=0x00;

 TCNT5L=0x00;

 OCR5AH=0x00;

 OCR5AL=0x8F;

 OCR5BH=0x00;

 OCR5BL=0x00;

 TCCR5A=0x00;

 TCCR5B=0x0B;        //Пуск таймера 0x0B

 TIMSK5=0b00000010;  //Разрешить прерывания   0b00000010

}

//Прерывания таймера 5

interrupt [TIM5_COMPA] void timer1ms (void)

{

 if (dl_time > 0) dl_time--;

 if (dl_time2 > 0) dl_time2--;

}

//Прерывание передатчика USART1

interrupt [USART1_UDRE] void int_usart1_tx (void)

{

extern int count_rk_tx;

extern int point_tx;

if (count_rk_tx  != 0)

{

 UDR1=bufer_tx_rk[point_tx];

 point_tx++;

Приложение №3(Продолжение)

 count_rk_tx--;

}

}  

//Прерывание передатчика USART2

interrupt [USART2_UDRE] void int_usart2_tx (void)

{

extern int count_dl_tx;

extern int point_tx;

if (count_dl_tx  != 0)

{

 UDR2=bufer_tx_rk[point_tx];

 point_tx++;

 count_rk_tx--;

}

}  

//Прерывание приемника USART21

interrupt [USART1_RXC] void int_usart1_rx(void)

{

 char temp_rx;                    // Промежуточная перемменная

 temp_rx=UDR1;

 bufer_rx_rk[point_rx]=temp_rx;   // Запись в буфер

 if (point_rx < 399)  point_rx++; // Смещение указателя

 else point_rx=0;                 // Обнуление указателя если в буфере не хватает места для записи

}

Приложение №3(Окончание)

//Прерывание приемника USART2

interrupt [USART2_RXC] void int_usart2_rx(void)

{

 char temp_rx;                    // Промежуточная перемменная

 temp_rx=UDR1;

 bufer_rx_dl[point_rx]=temp_rx;   // Запись в буфер

 if (point_rx < 399)  point_rx++; // Смещение указателя

 else point_rx=0;                 // Обнуление указателя если в буфере не хватает места для записи

}


Приложение №4

void test_power(void)

{ // Функция проверки излучаемой мощности

 // Используется регистр UDR1

 // Передача информации по USART1

while(1)

{ UDR1=0x55;                    // Записываем передаваемую информацию в регистр

while ((UCSR1A & 0x40) == 0 );  // Ожидание отправки информации. Флаг TXCn должен установиться в 1

}                               

                                // Выход из функции только при выключении питания

}


Приложение №5


Приложение №6

void test_err_tx (void)

{ // Функция теста ошибок передачи (отправление по рк)

  // Используется регистр UDR1

  // Передача информации по USART1

 char inf_byte;                  

int count;                      

 count = 0;                      // Обнуление счетчика сообщений

inf_byte = 0x00;                // Начальные данные в сообщении

while (count < 10000)           // Цикл из отправки 10000 сообщений

{UDR1 = inf_byte;               // Запись в регистр передаваемого сообщения

 inf_byte++;                    // Выбор новых данных

 count++;                       // Увеличение счетчика сообщений на 1

 while ((UCSR1A & 0x40) == 0);  // Ожидание конца отправки сообщения.

 }

}

int test_err_rx(void)

{char temp_rx, inf_byte;

 int count, err_amt;

count=0;                              // Обнуление счетчика сообщений

inf_byte=0x00;                        // Ожидаемые начальные данные в сообщении

err_amt=0;                            // Обнуление счетчика ошибок

while (count < 10000)                  // Цикл из отправки 10000 сообщений

{while ((UCSR1A & 0x80) == 0 );       // Ожидание получаемого сообщения

 UDR1 = temp_rx;                      // Запись данных в переменную

 if (temp_rx != inf_byte) err_amt++;  // Проверка условия несоответствия

 inf_byte++;                          // Ожидаемые данные в следующем сообщении

}  

return(err_amt);                      // Возвращение числа ошибок

}


Приложение
№7

void test_err_tx (void)

{ // Функция теста ошибок передачи (отправление по дл)

  // Используется регистр UDR2

  // Передача информации по USART2

 char inf_byte;                  

int count;                      

 count = 0;                      // Обнуление счетчика сообщений

inf_byte = 0x00;                // Начальные данные в сообщении

while (count < 10000)           // Цикл из отправки 10000 сообщений

{UDR2 = inf_byte;               // Запись в регистр передаваемого сообщения

 inf_byte++;                    // Выбор новых данных

 count++;                       // Увеличение счетчика сообщений на 1

 while ((UCSR2A & 0x40) == 0);  // Ожидание конца отправки сообщения.

 }

}

int test_err_rx(void)

{char temp_rx, inf_byte;

 int count, err_amt;

count=0;                              // Обнуление счетчика сообщений

inf_byte=0x00;                        // Ожидаемые начальные данные в сообщении

err_amt=0;                            // Обнуление счетчика ошибок

while (count < 10000)                  // Цикл из отправки 10000 сообщений

{while ((UCSR2A & 0x80) == 0 );       // Ожидание получаемого сообщения

 UDR2 = temp_rx;                      // Запись данных в переменную

 if (temp_rx != inf_byte) err_amt++;  // Проверка условия несоответствия

 inf_byte++;                          // Ожидаемые данные в следующем сообщении

}  

return(err_amt);                      // Возвращение числа ошибок

}


Приложение №8


Приложение
№9

volatile unsigned char CRC_Table[16]={0x00,0x9F,0x21,0x3E,0xDD,0x42,0x7C,0xE3,

                                     0x25,0xBA,0x84,0x1B,0xF8,0x67,0x59,0xC6};

// Функция вычисления CRC-8

// Передаваемые параметры:

// Array - адрес массива данных

// Length - количество байт для подсчёта

// Возвращается значение KC

char CRC8(char *Array, unsigned int Length)

{

   unsigned char Index;

   unsigned char CRC;

   unsigned int i;

   

   CRC=Array[0];

   for (i=1; i<Length; i++)

 {

       Index=CRC>>4;

       CRC=(CRC<<4) | (Array[i]>>4);

 CRC^=CRC_Table[Index];

 Index=CRC>>4;

 CRC=(CRC<<4) | (Array[i] & 0x0F);

 CRC^=CRC_Table[Index];

}

return(CRC);

//   return(0);

}                               


Приложение №10

#define adrmod_st    1

#define adrmod_ud    2

#define line_dl      2

#define line_rk      1

 int  count_tx_dl;                      // Счетчики передачи по ДЛ

 int  count_tx_rk;                      // Счетчики передачи по РК

int  point_tx;

char bufer_tx_dl[261];                 // USART 2

 char bufer_tx_rk[261];                 // USART 1

char bufer_rx_dl[400];                 // USART 2

char bufer_rx_rk[400];                 // USART 1

void tx_pack (char type_line)

{

  char i; //Счетчик

  char pack_test[6];

  extern char type_line;

  extern int count_tx_dl, count_rx_dl;

 

  //Формирование тестового пакета выбора линии

  pack_test[0]= 0xF7;                  // Стартовый байт

  pack_test[1]= adrmod_st;             // Адресс от кого

  pack_test[2]= adrmod_ud;             // Адресс к кому

  pack_test[3]= 1;                     // Длина

  pack_test[4]= 0x55;                  // Иформация

  pack_test[5]= CRC8(&pack_test[0],5)  // Контрольная сумма пакета

Приложение №10 (Продолжение)

   // Передача тестового пакета

   if (type_line == line_dl)

   {

    while (count_tx_dl != 0);

    for(i=0;i<6;i++) bufer_tx_dl[i] =  pack_test[i];  // Ожидание завершения передачи пакета

    count_tx_dl = 6;                              // Количество передаваемых байт

    point_tx = 1;

    UDR2 = pack_test                           // Запись информации в регистр USART2

   }

   if (type_line == line_rk)

   {

    while (count_tx_rk != 0);

    for(i=0;i<6;i++) bufer_tx_rk[i] = pack_test[i];   // Ожидаание заверщения передачи пакета

    count_tx_rk = 6;                              // Количество передаваемых байт

    point_tx = 1;

    UDR1 = pack_test;                          // Запись информации в регистр USART1

    }

}

//функция приема кадра и выбора линии

//type_line пределяет линию

char rx_pack (char type_line)

{

extern char type_line, flag_rx_complete;

flag_rx_complete=0;

dl_time2 = 100;

while ((dl_time2 != 0) && (flag_rx_complete == 0))

Приложение №10 (Окончание)

{

 if (type_line == line_rk) check_bufer_rx_rk();

 if (type_line == line dl) check_bufer_rx_dl();

}

if (flag_rx_complete == 0) return(0);                                      //ничего не принято

else

{

 if (bufer_pack[4] == 0x55)  return (1);

 else return(0);

}

}


Приложение №11

char bufer_pack[261];

char flag_rx_complete;

int  cur_point_rx, cur_point_pack;

//Поверка наличия принятых байт от USART1 (рк)

void check_bufer_rx_rk(void)

{                                                 

extern int rx_point, cur_point_rx; //переменная текущего байта в буфере

extern char bufer_rx_rk, cur_byte;

 if ( cur_point_rx != point_rx )                              //если указатели не совпадают

{

 #asm("cli");

 cur_byte = bufer_rx_rk[cur_point_rx];           //переменой cur_byte присвоить байт из буфера

 if (cur_point_rx < 399 )   cur_point_rx++;                          //увеличить указатель

 else cur_point_rx=0;                                                //если за пределы-сбросить

 #asm("sei");                                                        //разрешить прерывания

 rx_pack_rk_comb(cur_byte);                                          //функция сбора кадра

}

}

//Функция собирает кадр от USART1

void rx_pack_rk_comb(char cur_byte)

{

   extern char bufer_pack[], flag_rx_complete;

   char CRC_temp;                                            //временная переменная для CRC

   int temp;

   int point_temp;

   if  (cur_point_rx == 0)                            //если указатель поставлен на начало

  

Приложение №11 (Продолжение)

{

       if(cur_byte==0xF7)                                                   //стартовый байт?

       {

           uffer_pack[cur_point_pack] = cur_byte;               //записать в буфер

           bufer_pack[3] = 3;

           cur_point++;                                                     //увеличить указатель на 1

       }

   }

   else

   {

       if(cur_point_pack > 261) {cur_point_pack= 0;return;}                 //вышли за пределы массива начать принимать заново

       uffer_pack[cur_point_pack] = cur_byte;              //записать в буфер

       cur_point_pack++;                                            //увеличиваем указатель на 1

       point_temp = uffer_pack[3];                                          //читаем длину

       point_temp = pointer_temp + 3;                            //добавляем 3 к указателю

       if(cur_point_pack == pointer_temp)                                   //если принят кадр

       {  //весь кадр принят, проверить CRC, установить флаг

          cur_point_pack--;                                                 //указатель на CRC

          CRC_temp =uffer_pack[cur_point_pack];                   //сохранение CRC

          uffer_pack[cur_point_pack] = 0;                                //обнуление CRC

          temp =bufer_pack[3];                                              //получение длины

          temp = temp + 3;                                                  //в переменную temp

          if(CRC_temp == CRC8(&bufer_pack[0], temp))   //вызываем процедуру подсчета CRC

            { //CRC совпало

              cur_point_pack = 0;                                           //сбросить указатель

              flag_rx_complete = 1;                           //установить флаг принят кадр

            }

        Приложение №11 (Продолжение)

 else

            {                                                               //CRC не совпало

               flag_rx_complete = 0;

               cur_point_pack = 0;                                          //сбросить указатель

            }

       }

   }

}

//Поверка наличия принятых байт от USART2  (дл)

void check_bufer_rx_dl(void)

{                

extern int rx_point, cur_point_rx; //переменная текущего байта в буфере

extern char uffer_rx_dl, cur_byte;

 if ( cur_point_rx != point_rx )                     //если указатели не совпадают

{

 #asm(«cli»);

 cur_byte = bufer_rx_dl[cur_point_rx];                 //переменой cur_byte присвоить байт из буфера

 if (cur_point_rx < 399 )   cur_point_rx++;                    //увеличить указатель

 else cur_point_rx=0;                                               //если за пределы-сбросить

 #asm(«sei»);                                                                //разрешить прерывания

 rx_pack_dl_comb(cur_byte);                                             //функция сбора кадра

}

}

Приложение №11 (Продолжение)

//Функция собирает кадр от USART2

void rx_pack_dl_comb(char cur_byte)

{

   extern char bufer_pack[], flag_rx_complete;

   char CRC_temp;                                          //временная переменная для CRC

   int temp;

   int point_temp;

   if  (cur_point_rx == 0)                             //если указатель поставлен на начало

   {

       if(cur_byte==0xF7)                                                   //стартовый байт?

       {

           bufer_pack[cur_point_pack] = cur_byte;                        //записать в буфер

           bufer_pack[3] = 3;

           cur_point++;                                                     //увеличить указатель на 1

       }

   }

   else

   {

       if(cur_point_pack > 261) {cur_point_pack= 0;return;}    //вышли за пределы массива начать принимать заново

       bufer_pack[cur_point_pack] = cur_byte;                         //записать в буфер

       cur_point_pack++;                                            //увеличиваем указатель на 1

       point_temp = bufer_pack[3];                                          //читаем длину

       point_temp = pointer_temp + 3;                       //добавляем 3 к указателю

       if(cur_point_pack == pointer_temp)                                   //если принят кадр

       {  //весь кадр принят, проверить CRC, установить флаг

          cur_point_pack--;                                                 //указатель на CRC

          CRC_temp =bufer_pack[cur_point_pack];               //сохранение CRC

          bufer_pack[cur_point_pack] = 0;                                   //обнуление CRC

 Приложение №11 (Окончание)

        temp =bufer_pack[3];                                              //получение длины

          temp = temp + 3;                                                  //в переменную temp

          if(CRC_temp == CRC8(&bufer_pack[0], temp))                        //вызываем процедуру подсчета CRC

            { //CRC совпало

              cur_point_pack = 0;                                           //сбросить указатель

              flag_rx_complete = 1;                                         //установить флаг принят кадр

            }

          else

            {                                                               //CRC не совпало

               flag_rx_complete = 0;

               cur_point_pack = 0;                                          //сбросить указатель

            }

       }

   }

}


Приложение №12


Приложение №13

#define adrmod_st    1

#define adrmod_ud    2

#define adrmod_rm    3

char pwr_lvl;

//Отправка пакета контроля мощности

void pwr_tx(void)

{

 char i;

 char pack_pwr[7];

 extern char pwr_lvl;

 extern int count_tx_rk;

 //Формирование пакета управления мощностью

 pack_pwr[0]= 0xF7;                  // Стартовый байт

 pack_pwr[1]= adrmod_st;             // от кого

 pack_pwr[2]= adrmod_rm;             // к кому

 pack_pwr[3]= 2;                     // Длина

 pack_pwr[4]= 0x50                   // Иформация об управлении мощностью

 pack_pwr[5]= pwr_lvl;               // Команда управления мощностью

 pack_pwr[6]= CRC8(&pack_pwr[0],5)   // Контрольная сумма пакета

    while (count_tx_dl != 0);

    for(i=0;i<7;i++) bufer_tx_rk[i] =  pack_pwr[i];  // Ожидание завершения передачи пакета

    count_tx_rk = 7;                                  // Количество передаваемых байт

    point_tx = 1;

    UDR1 = pack_pwr                // Запись информации в регистр USART2

}

Приложение №13 (Окончание)

// прием сообщения с информацией об уровне излучаемой мощности

void pwr_rx(void)

{

extern int dl_time;

extern char flag_rx_complete;

flag_rx_complete=0;

dl_time2 = 100;

while ((dl_time2 != 0) && (flag_rx_complete == 0))

check_bufer_rx_rk();

if (flag_rx_complete == 0) return(0);                 //ничего не принято

else

{

 if ((bufer_pack[4] == 0x05) && (bufer_pack[2] == 3))  return (bufer_pack[5]);

 else return(0);

}

}

//формирование конфигураций управления мощностью

void ctrl_pwr (void)

{

extern char pwr_lvl;

char temp_pwr;

pwr_rx();

temp_pwr=pwr_rx();

if (temp_pwr > 0xF0) pwr_lvl=0x01;

if (temp_pwr < 0x0F) pwr_lvl=0x10;

 pwr_tx();

}


Приложение №14


Приложение №15


Приложение №16


Заключение

Цель данной выпускной квалификационной работы состояла в разработке источника электропитания для модернизированного изделия ОСА-АКМ1, удовлетворяющего требованиям технического задания.

В ходе выполнения работы были проанализированы варианты построения источников электропитания и выбрано оптимальное схемотехническое решение для реализации ИЭП. Была разработана принципиальная схема и выполнен расчёт заданных узлов и цепей  ИЭП.

Экспериментальные исследования показали правильность выбранных схемных решений, элементной базы и подтвердили полное соответствие параметров и характеристик разработанного ИЭП требованиям технического задания.

Так же в ходе выполнения работы были рассмотрены печатные платы и на их основе был разработан корпус для ИЭП.    

Список литературы:

  1.  В. А. Шахнова “Проектирование источников электропитания электронной аппаратуры” — Москва: “Кнорус”, 2010г.
  2.  Л.А. Краус, Г.В. Гейман и др. “Проектирование стабилизированных источников электропитания радиоэлектронной аппаратуры” — М.: Энергия, 1980г.
  3.  Б.С. Сергеев “Схемотехника функциональных узлов источников вторичного электропитания”— Москва: “Радио и Связь”, 1992г.
  4.  Е.Н. Гейтенко “Источники вторичного электропитания. Схемотехника и расчёт ” — Москва: “Солон-пресс”, 2008г.
  5.  А. Б. Апаров, В. Г. Еременко, И. Б. Негневицкий “Транзисторные   преобразователи   для   низковольтных   источников  энергии” — М.: Энергия, 1978г.
  6.  М. Браун “Источники питания. Расчёт и конструирование”.: Пер. с англ. — К.: «МК- Пресс», 2005г.
  7.  Г. С. Векслер “Расчёт электропитающих устройств”. — Киев: “Техника”, 1978г.
  8.  В.Г. Костюков, И.Е. Никитин  “Источники электропитания высокого напряжения РЭА” —  Москва “Радио и Связь”, 1986г.
  9.  А.В. Хныков “Теория и расчёт трансформаторов”. – Москва: “Солон-пресс”, 2004г.
  10.  Ю.Н. Стародубцев “Теория и расчёт трансформаторов малой мощности” — Москва: “РадиоСофт”, 2005г.
  11.  А.К. Шидловский, А.В. Козлов и др. “Транзисторные преобразователи с улучшенной электромагнитной совместимостью” — Киев: “Наукова думка”, 1993г


1

3

4

5

6

  1.  

 

А также другие работы, которые могут Вас заинтересовать

70323. Моделирование формы предмета: Методическое пособие 619.45 KB
  Построение проекций точек принадлежащих поверхностям геометрических тел Чтобы построить проекции точки принадлежащей поверхности геометрического тела необходимо предварительно по поверхности провести какую-либо линию а затем на соответствующих проекциях линии отметить проекции точки.
70324. Социолингвистика: Учебно-методический комплекс 255.1 KB
  Социолингвистика достаточно осознанное самостоятельное направление языкознания изучающее общественную обусловленность возникновения развития и функционирования языка воздействие общества на язык и языка на общество. Наряду с термином социолингвистика для обозначения...
70326. РЕГУЛЯЦИЯ МЫШЕЧНОГО ТОНУСА, ПОЗЫ И ДВИЖЕНИЙ 4.51 MB
  Знание этих вопросов важно не только для понимания механизмов приспособления организма к окружающей среде но и для последующей врачебной подготовки студентов поскольку в клинической практике часто встречаются больные с поражениями мозга и нарушениями в двигательной сфере...
70327. Полимерные композиционные материалы: методы получения 48.2 MB
  Методические указания содержат теоретические основы получения получения ПКМ различными методами применяемые эпоксидные смолы и отвердители описание получения ПКМ методом вакуумной инфузии в лаборатории которое необходимо выполнить практически.
70328. Стресс и адаптация: Учебно-методическое пособие 302.88 KB
  Настоящее учебно-методическое пособие составлено в соответствии с требованиями учебных программ по нормальной физиологии и предназначено для самостоятельной работы студентов при подготовке к занятиям и экзаменам, при решении тестовых и ситуационных задач.
70329. УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС ДИСЦИПЛИНЫ «ФИЗИЧЕСКАЯ КУЛЬТУРА» 1.61 MB
  Целью физического воспитания студентов является формирование физической культуры личности и способности направленного использования разнообразных средств физической культуры, спорта и туризма для сохранения и укрепления здоровья, психофизической подготовки и самоподготовки...
70330. ИСТОРИЧЕСКИЕ ОБРАЗЫ ФИЛОСОФСКОЙ МЫСЛИ 738.5 KB
  Философия как новый тип мировоззрения, сменивший мифологическое мировосприятие, возникает в 6 в. до н.э. одновременно в трех относительно изолированных друг от друга регионах тогдашнего древнего мира: на Востоке – в Древнем Китае и Древней Индии и на Западе – в Античной Греции.
70331. Программирование на алгоритмическом языке Паскаль 644.5 KB
  Переменные снабжаются именами, которые могут содержать латинские буквы, цифры и знаки подчеркивания, но начинаться имя должно с буквы. Программист выбирает имена произвольно, но таким образом, чтобы они указывали на смысл переменной.