Генератор сигнала треугольной формы
Схема генератора сигнала треугольной формы. Принципиальная схема устройства. Описание работы программного обеспечения. Внутренний тактовый генератор, работающий от внешнего кварцевого резонатора. Фильтр низких частот. Внешняя цепь тактового генератора.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 19.01.2012 |
Размер файла | 538,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Министерство Науки и Образования Российской Федерации
Новосибирский Государственный Технический Университет
Факультет Автоматики и Вычислительной Техники
Кафедра Систем Сбора и Обработки Данных
Курсовой проект
По дисциплине «Микроконтроллеры»
«Генератор сигнала треугольной формы»
Выполнил: Преподаватель:
Карелин А. Н. Еленычев С.В.
Группа: АТ-83
Новосибирск 2012
Содержание
Задание
Структурная схема устройства и пояснения к ней
Описание работы принципиальной схемы
Описание работы программного обеспечения
Принципиальная схема устройства
Перечень элементов и спецификация
Листинг программы
Список литературы
Задание
Разработать принципиальную схему и программное обеспечение модуля генератора специальных функций: треугольный сигнал. Для генерации сигналов используется внутренний ШИМ микроконтроллера. Частота сигнала задается через последовательный интерфейс RS-232. Полоса частот выходного треугольного сигнала: 10Гц - 1000Гц. Выходной сигнал - последовательность ШИМ-сигнала.
Протокол обмена данными. Пример запроса к разрабатываемому устройству: ":F<пробел>100", где 100' - частота сигнала, Гц. Пример ответа: "ОК". Данные передаются в символьном виде (ASCII). Скорость обмена данными 9600 бит/с.
Структурная схема устройства и пояснения к ней
Основой данного устройства является микроконтроллер D1. Он работает по программе, зашитой во внутреннюю память программ. Микросхема имеет внутренний тактовый генератор, работающий от внешнего кварцевого резонатора частотой 8 МГц. Сброс микроконтроллера происходит автоматически при включении питания.
Преобразователь уровня D2 предназначен для преобразования уровня TTL в уровни RS-232.
Фильтр низких частот (ФНЧ) необходим для подавления высокой частоты ШИМ-модулятора.
Описание работы принципиальной схемы
В качестве микроконтроллера используется микросхема AT90S2313. Она питается от стабилизированного источника питания напряжением +5В, поступающем на клемму +5V. Конденсаторы C4, C9 необходимы для подавления помех по питанию, возникающих из-за сопротивления проводников и источника питания либо приходящих из вне по питанию. При этом C4 гасит высокочастотные помехи, которые не может погасить C9.
Внешняя цепь тактового генератора состоит из элементов ZQ1, C1, C2. Конденсаторы предназначены для более стабильной работы генератора, а их номиналы выбраны исходя из документации по AT90S2313.
Сигнал TXD с выхода PD1 подается на микросхему D2 преобразователя уровня TTL<->RS-232. Аналогично сигнал RXD на вход PD0 подается с той же микросхемы. Данная микросхема имеет два встроенных преобразователя напряжения, необходимых для работы преобразователя чтобы получить сигнал ±10В. Внешняя обвязка С5-С8 предназначена для работы преобразователей. Номиналы C5-C8 выбраны исходя из рекомендации производителя микросхемы.
ФНЧ построен на элементах R1, C3. Частота среза для фильтра рассчитывается по формуле:
fc= 2?/RC
С одной стороны для формирования сигнала треугольной формы необходимо обеспечить как можно большую частоту среза. С другой стороны нужно полностью подавить частоту PWM, равную 8 МГц. Выберем fc равную 1 МГц. Получим RC = 6.3 мкс.
Выберем С = 0.01мкФ, R = 620 Ом.
Описание работы программного обеспечения
генератор сигнал резонатор частота
При включении питания происходит сброс микроконтроллера. При этом он начинает выполнять программу с адреса 0, в котором стоит команда перехода на код инициализации управляющих регистров. Вначале инициализируется стек, необходимый для работы прерываний. Потом устанавливается направление передачи портов PB и PD. Линии PB3(OC1) и PD1(TXD) программируются как выходы. Далее инициализируется таймер-счетчик 1 на работу в режиме 8-разрядного PWM с прямым выходом OC1 без предделителя. После установки Timer1 устанавливается Timer0 на работу без предделителя и генерацию прерывания по переполнению. Наконец, инициализируется UART на передачу со скоростью 9600 бод. Это достигается включением приемника и передатчика. Значение регистра скорости выбирается по таблице из фирменной документации к микроконтроллеру. Для тактовой частоты 8 МГц и скорости передачи 9600 бод оно составляет 51.
После инициализации управляющих регистров инициализируются внутренние переменные программы. Divide=79, что соответствует начальной частоте 1000 Гц. T_Dir=4 - увеличение программного счетчика Count по прерыванию от Timer0 на 4. Наконец, значение Divide записывается в Count=high(Divide) и Timer0=low(Divide).
Основная работа происходит в главном цикле программы. В начале каждого цикла считываются данные из UART и сравниваются с последовательностью символов `:F `. При не нахождении данной последовательности происходит вывод в UART строки ошибки `ERROR' и цикл начинается заново. Если последовательность найдена происходит чтение числовой строки до <CR> из UART, преобразование ее в двоичное представление (16 бит) и запись в переменную Freq. При вводе строки осуществляется проверка корректности символов (должны быть цифры) и попадание значения в диапазон 100…1000. При невыполнении этих условий происходит вывод в UART строки ошибки `ERROR' и цикл начинается заново. После выполнения проверки в UART выдается `OK'. В конце цикла вычисляется Divide=K/Freq, где K - коэффициент, значение которого вычислим ниже.
Рассмотрим алгоритм работы обработчика прерывания по переполнению Timer0. В алгоритме реализована программно-аппаратная задержка на Divide тактов микроконтроллера. Реализована она следующим образом. Старший байт значения задержки заносится в программный счетчик Count, младший в Timer0. При этом первое прерывание происходит через low(Divide) тактов, а остальные через 256 тактов (максимальное значение Timer0). В начале каждого прерывания происходит декремент Count до возникновения отрицательного значения, при котором значения Count и Timer0 устанавливаются заново и происходит коррекция значения компаратора PWM. Получается, что PWM корректируется через low(Divide)+256*high(Divide) = Divide тактов. Компаратор корректируется следующим образом. Вначале он увеличивается на 4. При достижении максимального значения 252 компаратор начинает уменьшаться на 4 до 0, потом вновь увеличиваться и т. д. Это формирует необходимый сигнал треугольной формы. Полный период сигнала формируется за 2*63=126 изменений компаратора, т. е. за 126*Divide тактов.
Частота сигнала Freq=Fck/(510*Divide). При Fck=8МГц получаем Divide=8000000/126/Freq. Здесь 8000000/126=63492 и есть коэффициент K.
Принципиальная схема устройства
Схема выполнена в системе PCAD 2001.
Наименование |
Кол. |
Примечание |
|
Конденсаторы К10-17Б оЖ0.460.172ТУ |
|||
К10-17Б 22 пФ |
2 |
C1,C2 |
|
К10-17Б 0,01 мкФ |
1 |
C3 |
|
К10-17Б 0,47mF |
1 |
C4 |
|
Конденсатор электролитический K50-35 1,0mFx16 В |
5 |
C5...C9 |
|
Микросхемы |
|||
AT90S2313 |
1 |
D1 |
|
MAX232 |
1 |
D2 |
|
Резистор P1-12-0,125 620 Ом АБШК.434110.050ТУ |
1 |
R1 |
|
Кварцевый резонатор РГ07 8 МГц |
1 |
ZQ1 |
Перечень элементов и спецификация
Листинг программы
.include "2313def.inc"
.def Temp=R20 ;временный регистр
.def FreqL=R21 ;частота, Hz
.def FreqH=R22 ;
.def Temp1=R23 ;временный регистр для обработчика прерываний
.def Count=R24 ;внешний счетчик для Timer0
.def ac_tmp=R25 ;временный регистр статуса
.def DivideL=R17 ;начальное значение Timer0
.def DivideH=R18 ;начальное значение Count
.def T_Dir=R19 ;значение изменения компаратора PWM
.def drem16uL=R15;остаток от деления (временные переменные)
.def drem16uH=R16
.cseg
.org 0
;Векторы прерываний
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM_CAPT1 ; Timer1 Capture Handler
rjmp TIM_COMP1 ; Timer1 Compare Handler
rjmp TIM_OVF1 ; Timer1 Overflow Handler
rjmp TIM_OVF0 ; Timer0 Overflow Handler
rjmp UART_RXC ; UART RX Complete Handler
rjmp UART_DRE ; UDR Empty Handler
rjmp UART_TXC ; UART TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler
;Необрабатываемые прерывания
EXT_INT0 :
EXT_INT1 :
TIM_CAPT1 :
TIM_OVF1 :
UART_RXC :
UART_DRE :
UART_TXC :
ANA_COMP :
TIM_COMP1 : reti
;Инициализация
RESET:
ldi Temp,RamEnd ;установка стека на конец памяти
out SPL,Temp
ldi Temp,0b00001000 ;установка направления порта PB
out DDRB,Temp ;PB3 (OC1) - выход, остальные PBx - входы
ldi Temp,0b00000010 ;установка направления порта PD
out DDRD,Temp ;PD1 (TXD) - выход, остальные PDx - входы
ldi Temp,(1<<COM1A1)+(1<<PWM10) ;Timer1 в режиме 8-разрядного PWM,
;OC1 - не инверсный
out TCCR1A,Temp
ldi Temp,1 ;установка частоты Timer1 CLK=CK
out TCCR1B,Temp
ldi Temp,1 ;установка частоты Timer0 CLK=CK
out TCCR0,Temp
ldi Temp,(1<<TOIE0) ;разрешение прерывания от Timer0
out TIMSK,Temp
ldi Temp,(1<<RXEN)+(1<<TXEN) ;включение приемопередатчика UART
out UCR,Temp
ldi Temp,51 ;установка скорости 9600bps при CK=8MHz
out UBRR,Temp
ldi DivideL, 79 ;устанавливаем начальную частоту 1000Hz
ldi DivideH, 0
mov Count,DivideH ;заносим в Count и Timer0 значение Divide
out TCNT0,DivideL
sei ;разрешаем прерывания
;*************************************************************** Loop:
rcall Recv ;чтение из UART последовательности и сравнение
cpi Temp,':' ;с ':F '
brne Error ;если не та последовательность, то переход на Error
rcall Recv
cpi Temp,'F'
brne Error
rcall Recv
cpi Temp,' '
brne Error
ldi FreqL, 0 ;Freq=0
ldi FreqH, 0
Inpf:
rcall Recv ;чтение из UART символа
cpi Temp,13 ;если прочитан <CR>,
breq InpOk ;то конец ввода
subi Temp,'0' ;если прочитана не цифра,
brcs Error ;то переход на Error
cpi Temp,10
brcc Error
add FreqL,FreqL ;Freq=10*Freq+digit
adc FreqH,FreqH
push FreqH
push FreqL
add FreqL,FreqL
adc FreqH,FreqH
add FreqL,FreqL
adc FreqH,FreqH
add FreqL,Temp
brcc Inpf_1
inc FreqH
Inpf_1:
pop Temp
add FreqL,Temp
pop Temp
adc FreqH,Temp
cpi FreqH,1024/256 ;если Freq>1024, то ошибка
brcs Inpf
Error:
ldi Temp,'E' ;вывод в UART строки 'ERROR<CR>'
rcall Trans
ldi Temp,'R'
rcall Trans
ldi Temp,'R'
rcall Trans
ldi Temp,'O'
rcall Trans
ldi Temp,'R'
rcall Trans
ldi Temp,13
rcall Trans
rjmp Loop
InpOk:
cpi FreqH, 0 ;если Freq<10, то ошибка
brne test1
cpi FreqL,10
brcs Error
test1:
ldi Temp,'O' ;вывод в UART строки 'OK<CR>'
rcall Trans
ldi Temp,'K'
rcall Trans
ldi Temp,13
rcall Trans
cli ;запрещаем прерывания на время изменения Divide
;Вычисляем Divide=K/Freq
ldi DivideL,0x04 ;K=63492 (для CK=8MHz)
ldi DivideH,0xF8
div16u:
clr drem16uL ;очищаем остаток от деления
sub drem16uH,drem16uH
ldi Temp,17 ;инициализируем счетчик циклов
d16u_1:
rol DivideL ;сдвигаем влево делимое
rol DivideH
dec Temp ;уменьшаем счетчик циклов
breq d16u_2 ;если деление прошло, переходим на d16u_2
rol drem16uL ;сдвигаем делимое в остаток
rol drem16uH
sub drem16uL,FreqL ;остаток=остаток-делитель
sbc drem16uH,FreqH
brcc d16u_3 ;если результат отрицателен,
add drem16uL,FreqL ;то восстанавливаем остаток
adc drem16uH,FreqH
clc ;и очищаем перенос для сдвига в результат,
rjmp d16u_1
d16u_3:
sec ;иначе устанавливаем перенос для сдвига в результат
rjmp d16u_1
d16u_2:
neg DivideL ;корректируем для таймера
;(таймер считает на увеличение до переполнения)
sei ;разрешаем прерывания
rjmp Loop
;************ ********************************************
Recv: ;прием байта из UART
in Temp,USR ;ожидание готовности байта
bst Temp,RXC
brtc Recv
in Temp,UDR ;сохранение байта в Temp
ret
Trans: ;передача байта в UART
in Temp,USR ;ожидание готовности передатчика
bst Temp,UDRE
brtc Trans
out UDR,Temp ;передача байта из Temp
ret
;*************************************************************
;Обработчик прерывания от Timer0 (совместно с Count используется
;для формирования временной задержки)
TIM_OVF0:
in ac_tmp,SREG ;временно сохраняем регистр статуса
subi Count,1 ;уменьшаем внешний счетчик
brcc Tim_3 ;0 не достигнут, выходим из обработчика прерывания
mov Count,DivideH ;заносим в Count и Timer0 значение Divide
out TCNT0,DivideL
in Temp1,OCR1AL ;считываем в Temp1 значение компаратора PWM
cpi Temp1,0 ;если компаратор достиг минимума,
brne Tim_1
ldi T_Dir,4 ;изменяем направление счета на увеличение
Tim_1:
cpi Temp1,0xFF ;если компаратор достиг максимума,
brne Tim_2
ldi T_Dir,-4 ;изменяем направление счета на уменьшение
Tim_2:
add Temp1,T_Dir ;увеличиваем/уменьшаем компаратор
out OCR1AL,Temp1
Tim_3:
out SREG,ac_tmp ;восстанавливаем регистр статуса
reti
Список литературы
1) Квеглис С.В. Микроконтроллеры AVR: Метод. пособие. - Новосибирск: Изд-во НГТУ, 2003.
2) Жеребцов И.П. Основы электроники. - Л.: Энергоатомиздат, 1985.
3) Усатенко С.Т., Каченюк Т.К., Терехова М.В. Выполнение электрических схем по ЕСКД: Справочник. - М.: Издательство стандартов, 1992.
4) www.analog.com
5) http://sevastianov.simbir.ru
6) http://kazus.ru
7) http://www.pcports.ru/articles/avr2.php
8) http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html
Размещено на Allbest.ru
Подобные документы
Разработка и описание функциональной схемы генератора. Выбор микросхемы памяти и её объёма для программирования. Описание схемы формирования и усиления модулированного сигнала, формирователя режима работы. Расчет тактового генератора и усилителя тока.
курсовая работа [107,3 K], добавлен 19.05.2014Основы генерирования выходного сигнала. Главные условия возникновения автоколебаний. Принципиальная схема генератора с последовательно-параллельной RC-цепью на ОУ. Схема RС-цепи из трех дифференцирующих звеньев. Схема генератора с фазосдвигающей цепью.
реферат [124,3 K], добавлен 24.11.2009Расчет трансформатора, блока питания и усилителя мощности, генератора трапецеидального напряжения, интегратора, сумматора и одновибратора. Структурная и принципиальная схема генератора сигналов. Формула вычисления коэффициента усиления с обратной связью.
курсовая работа [1,6 M], добавлен 22.12.2012Анализ аналогов генератора пилообразного напряжения. Принципиальная схема, принцип работы. Генератор пилообразного напряжения на микроконтроллере. Разработка структурной функциональной схемы цифрового устройства. Индикатор уровня сигнала на LM3915.
курсовая работа [1,3 M], добавлен 27.01.2016Простейший генератор прямоугольных импульсов. Алгоритм работы устройства, включая подпрограммы. Программный пакет VMLAB, позволяющий производить отладку программного обеспечения и моделирование работы радиоэлектронных устройств. Режим работы генератора.
курсовая работа [1,0 M], добавлен 17.05.2014Построение генератора прямоугольных импульсов с видом характеристики типа "меандр". Амплитуда сигнала стандартная для транзисторно-транзисторной логики. Функциональная схема устройства: описание ее работы, выбор элементов и расчет их параметров.
курсовая работа [72,8 K], добавлен 12.07.2009Устройство для измерения абсолютных комплексных коэффициентов передачи и отражения СВЧ-устройств с преобразованием. Структурная схема блока опорных частот. Смеситель сигналов 140 МГц. Фильтр нижних частот для сигнала. Система фазовой автоподстройки.
дипломная работа [2,8 M], добавлен 20.12.2013Принцип действия и электрическая структурная схема проектируемого генератора квадратурных напряжений. Описание платы ввода-вывода NI PCI-6251 и коннекторного блока BNC-2120. Разработка программного обеспечения генератора, результаты работы программы.
курсовая работа [2,3 M], добавлен 08.01.2014Генератор импульсов треугольной формы. Расчет и выбор элементов параметрического стабилитрона. Повторитель напряжения. Схема, внешний вид и характеристики микросхемы К140УД20. Структурная схема источника питания. Напряжение на обмотке трансформатора.
дипломная работа [296,1 K], добавлен 15.05.2013Построение выходного и предвыходного каскадов генератора развертки. Выбор элементной базы разрабатываемых узлов. Схема блока развертки. Синхронизация генератора кадров. Напряжения требуемой формы для работы устройства динамического сведения лучей.
курсовая работа [232,3 K], добавлен 30.08.2011