Генератор линейно-частотно-модулированных сигналов
Линейно-частотно-модулированный сигнал представляет собой последовательность импульсов, в которой период каждого импульса наопределенную величину больше (или меньше) периода предыдущего импульса.
Для получения ЛЧМ импульсов необходимо задать в контроллере значение первого импульса и после каждого периода обновлять (увеличивать или уменьшать период на постоянную величину). Для этого в контроллере есть специальный узел - таймер-счетчик. Таймером-счетчиком (Т0) можно задавать различные временные последовательности на определенных выводах контроллера. Т0 может работать в различных режимах:
Самым простым режимом работы является нормальный режим. В данном режиме счетчик работает как суммирующий, при этом сброс счетчика не выполняется. Переполнение счетчика происходит при переходе через максимальное 8-миразрядное значение (верхний предел = 0xFF) к нижнему пределу счета (0x00).
В режиме СТС регистр OCR0 используется для задания разрешающей способности счетчика. Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик обнуляется (TCNT0=0).Таким образом, OCR0 задает вершину счета счетчика, а, следовательно, и его разрешающую способность. В этом режиме заданием числа в регистре сравнения возможно управление частотой выходной последовательности импульсов.
Режим быстрой широтно-импульсной модуляции позволяет генерировать высокочастотные ШИМ-сигналы. Счетчик изменяет свое значение в направлении от нижнего предела до максимального значения (0xFF), а затем перезагружается значением нижнего предела и счет продолжается снова до максимального значения.
Режим ШИМ ФК позволяет выполнять фазовую коррекцию ШИМ-сигнала с высокой разрешающей способностью. Режим ШИМ ФК основан на двунаправленной работе таймера-счетчика. Счетчик циклически выполняет счет в направлении от нижнего предела до максимального значения, а затем обратно от максимального значения к нижнему пределу
Таким образом, для ЛЧМ-сигнала может быть использован режим СТС таймера Т0. Также в устройство можно встроить дополнительные функции – остановка на определенной частоте, старт, пауза, продолжить, стоп.
Кроме таймера-счетчика нам необходимо будет иметь пять линий ввода: сброс, старт, пауза, продолжить, стоп - и одну – вывода (выходной сигнал).
Таким образом, можно сделать вывод о том, что для реализации этого задания нам хватит самого «бюджетного» AVR-контроллера – ATtiny13.
Описание режима CTC
Режим сброса таймера при совпадении (СТС)
В режиме СТС (WGM01, WGM00 =0b10) регистр OCR0 используется для задания разрешающей способности счетчика. Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик обнуляется(TCNT0=0). Таким образом, OCR0А задает вершину счета счетчика, а, следовательно, и его разрешающую способность. В данном режиме обеспечивается более широкий диапазон регулировки частоты генерируемых прямоугольных импульсов.
В режиме сброса таймера при совпадении (WGMn3-0 = 0b0100 или0b1100) пределы счета таймера задаются регистром OCR0A. В режиме СТС происходит сброс счетчика (TCNT0), если его значение совпадает со значением регистра OCR0A. В данном режиме обеспечивается возможность регулировки частоты генерируемых прямоугольных импульсов. Временная диаграмма работы таймера в режиме СТС показана на рисунке ниже. Счетчик (TCNTn) инкрементирует свое состояние до тех пор, пока не возникнет совпадение созначением OCR0A , а затем счетчик (TCNT0) сбрасывается.
Временные диаграммы режима СТС
Помимо сброса при этом может генерироваться прерывание с помощью флагов OCF0A, соответствующим используемым регистрам для задания верхнего предела счета. Если прерывание разрешено, то процедура обработки прерывания может использоваться для обновления верхнего предела счета.
Для генерации сигнала в режиме CTC выход OC0A может использоваться для изменения логического уровня при каждом совпадении, для чего необходимо задать режим переключения (COM0A1, COMA0 = 0b01). Значение OC0A будет присутствовать на выводе порта, только если для данного вывода задано выходное направление. Максимальная частота генерируемого сигнала равна fOC0 =fclk_I/O/2, если OCRnA = 0x0000. Для других значений OCRn частоту генерируемогосигнала можно определить по формуле:
где переменная N задает коэффициент предделителя (1,8, 32, 64, 128, 256 или 1024).
Описание функциональной схемы
Алгоритм работы устройства
После включения питания процессор переходит по вектору сброса. В этой подпрограмме выполняется инициализация и настройка всех необходимых переферийных узлов контроллера. В нашей программе мы используем порты ввода-вывода и таймер-счетчик Т0.
Настройка портов ввода-вывода заключается в ориентировании лини порта (PB0) на вывод, остальных – на ввод.
Настройка Т0 заключается в задании режима работы (биты WGM00, WGM01,WGM02) в регистрах TCCROA и TCCROB, загрузки значения в регистр сравнения OCR0A, определения источника счета (в нашем случае - тактовая частота процессора с предделителем на 1024), определения поведения вывода при совпадении счетного регистра и регистра сравнения (изменение состояния на противоположное), разрешения необходимых нам прерываний (установкой нужных битов в регистре TIMSK0).
Инициализирующая часть программы заканчивается командой SEI. Она разрешает все прерывания контроллера.
Далее по ходу программы стоит основной цикл - цикл опроса клавиатуры keyskan. Онпредставляет собой четыре условных перехода (по условию нажатия одной из кнопок). У нас в схеме пять кнопок (считая сброс)
При нажатии кнопки «старт» счетчик команд (СК) переходит на подпрограмму start, в ней происходит запуск и настройка таймера-счетчика. После этого СК уходит обратно в цикл keyskan.
Одновременно с этим продолжается работа счетчика. При совпадении значений счетного регистра и регистра сравнения выставляется флаг OCF0A в регистре TIFR0. Так как это прерывание разрешено, счетчик команд уходит из цикла keyskan по вектору обработки прерывания TIM0_COMPA.В этой подпрограмме обновляется (или не обновляется) значение частоты и вычисляется, не последнее ли это значение. После перебора всех необходимых значений частоты, сбросом битов выбора источника сигналов (CS00, CS01, CS02) запрещается работа счетчика.
При нажатии кнопки «пауза» счетчик команд (СК) переходит на подпрограмму pause. В ней устанавливается бит1 в РОН r19, по условию установки или сброса этого бита в подпрограмме обработки прерывания TIM0_COMPA пропускается команда на изменение частоты. На выходе в этом случае будет последовательность импульсов с неизменной частотой, произойдет «пауза» частоты.
При нажатии кнопки «продолжить» счетчик команд (СК) переходит на подпрограмму continue. В ней бит1 в РОН r19 сбрасывается, по условию установки или сброса этого бита в подпрограмме обработки прерывания TIM0_COMPA теперь не будет пропускаться команда на изменение частоты. На выходе в этом случае «продолжение» последовательности импульсов.
При нажатии кнопки «стоп» сбросом битов выбора источника сигналов (CS00, CS01,CS02) запрещается работа счетчика.
Временные диаграммы работы устройства
1) Тактовая частотапроцессора
2,3) Тактовая частота T0 (Тактовая частота процессора/1024)
4,5,6) Числа в регистре сравнения
7,8,9) Соответственно первый,второй, третий импульсы (по длительности)
10) Состояние вывода OC0A.
В данном устройстве предполагается, что процессор тактируется от встроенного генератора частотой 9,6 МГц.
Программа
.def temp = r16
.def flags = r19
.def freq = r17
.include"C:\Program Files\Atmel\AVRTools\AvrAssembler2\Appnotes\tn13def.inc"
rjmp RESET ; Reset Handler
NOP;rjmpEXT_INT0 ; IRQ0 Handler
NOP;rjmpPCINT0 ; PCINT0 Handler
NOP;rjmpTIM0_OVF ; Timer0 Overflow Handler
NOP;rjmpEE_RDY ; EEPROM Ready Handler
NOP;rjmpANA_COMP ; Analog Comparator Handler
rjmpTIM0_COMPA ; Timer0 CompareA Handler
NOP;rjmpTIM0_COMPB ; Timer0 CompareB Handler
NOP;rjmpWATCHDOG ; Watchdog Interrupt Handler
NOP;rjmpADC ; ADC Conversion Handler
Reset:
ldi temp,1
out DDRB,temp ;PB0 И PB1- ВЫХОДЫ
ldi freq,1 ;ЗАГРУЗКА В РЕГИСТР СРАВНЕНИЯ
out OCR0A,freq ;НАЧАЛЬНОГОЗНАЧЕНИЯ ЧАСТОТЫ
rjmp keyskan
start:
ldi temp,(1<<COM0A0)+(1<<WGM01)
out TCCR0A,temp ;1<<COM0A0,0<<COM0A1-ПЕРЕКЛЮЧЕНИЕ
;ВЫВОДАПО СОВПАДЕНИЮ С OCR0A
;1<<WGM01 - ВЫБОР РЕЖИМА СТС
ldi temp,(0<<CS00)+(1<<CS02)
out TCCR0B,temp ;ПРЕДДЕЛИТЕЛЬ НА 1024
ldi temp,1<<OCIE0A
out TIMSK0,temp ;РАЗРЕШЕНИЕПРЕРЫВАНИЯ
;ПОСОВПАДЕНИЮ С OCR0A
sei ;РАЗРЕШЕНИЕВСЕХ ПРЕРЫВАНИЙ
keyskan:
sbic pinb,4 ;ПРОПУСТИТЬ СЛ.КОМАНДУ, ЕСЛИ PB4=0
rjmp start ;ОТПРАВИТЬСЯ НА START
sbic pinb,3 ;ПРОПУСТИТЬ СЛ.КОМАНДУ, ЕСЛИ PB4=0
rjmp pause ;ОТПРАВИТЬСЯНА PAUSE
sbic pinb,2 ;ПРОПУСТИТЬ СЛ.КОМАНДУ, ЕСЛИ PB4=0
rjmp stop ;ОТПРАВИТЬСЯНА STOP
sbic pinb,1 ;ПРОПУСТИТЬ СЛ.КОМАНДУ, ЕСЛИ PB4=0
rjmp continue ;ОТПРАВИТЬСЯ НА CONTINUE
rjmp keyskan ;ОТПРАВИТЬСЯНА keyskan
TIM0_COMPA: ;ПОДПРОГРАММА ОБРАБОТКИ ПРЕРЫВАНИЯ
;ПОСОВПАДЕНИЮ С OCR0A
sbrs flags,1 ;ПРОПУСТИТЬ,ЕСЛИ ФЛАГ1 УСТАНОВЛЕН
inc freq ;УВЕЛИЧИТЬЧАСТОТУ НА ОДИН
out OCR0A,freq ;ВЫГРУЗИТЬ ЭТО ЗНАЧЕНИЕ В OCR0A
cpi freq,200 ;СРАВНИТЬС КОНЕЧНЫМ ЗНАЧЕНИЕМ
breq stop ;ЕСЛИРАВНО, ОТПРАВИТЬСЯ НА stop
reti ;ВЫХОДИЗ ПРЕРЫВАНИЯ
stop:
sbr flags,2 ;УСТАНОВИТЬФЛАГ2
ldi temp,(0<<CS00)+(0<<CS01)+(0<<CS02)
out TCCR0B,temp ;ОСТАНОВИТЬ СЧЕТЧИК
rjmp keyskan ;ОТПРАВИТЬСЯНА keyskan
pause:
sbr flags,1
rjmp keyskan ;ОТПРАВИТЬСЯ НАkeyskan
continue:
cbr flags,1
rjmp keyskan ;ОТПРАВИТЬСЯ НАkeyskan
Моделирование схемы в программе PROTEUS
Принципиальная электрическая схема устройства
Осциллограмма начала последовательности
Осциллограмма всей последовательности
Осциллограмма конца последовательности