Генератор линейно-частотно-модулированных сигналов

Линейно-частотно-модулированный сигнал представляет собой последовательность импульсов, в которой период каждого импульса наопределенную величину больше (или меньше) периода предыдущего импульса.

Для получения ЛЧМ импульсов необходимо задать в контроллере значение первого импульса  и после каждого периода обновлять  (увеличивать или уменьшать период  на постоянную величину).  Для этого в контроллере есть специальный узел - таймер-счетчик. Таймером-счетчиком  (Т0)  можно задавать различные временные последовательности на определенных выводах контроллера. Т0 может работать в различных режимах:

Самым простым режимом работы является нормальный режим. В данном режиме счетчик работает как суммирующий, при этом сброс счетчика не выполняется. Переполнение счетчика происходит при переходе через максимальное 8-миразрядное значение (верхний предел = 0xFF) к нижнему пределу счета (0x00).

В режиме СТС регистр OCR0 используется для задания разрешающей способности счетчика. Если задан режим CTC и значение счетчика (TCNT0) совпадает со значением регистра OCR0, то счетчик обнуляется (TCNT0=0).Таким образом, OCR0 задает вершину счета счетчика, а, следовательно, и его разрешающую способность. В этом режиме заданием числа в регистре сравнения возможно управление частотой выходной последовательности импульсов.

Режим быстрой широтно-импульсной модуляции позволяет генерировать высокочастотные ШИМ-сигналы. Счетчик изменяет свое значение в направлении от нижнего предела до максимального значения (0xFF), а затем перезагружается значением нижнего предела и счет продолжается снова до максимального значения.

Режим ШИМ ФК позволяет выполнять фазовую коррекцию ШИМ-сигнала с высокой разрешающей способностью. Режим ШИМ ФК основан на двунаправленной работе таймера-счетчика. Счетчик циклически выполняет счет в направлении от нижнего предела до максимального значения, а затем обратно от максимального значения к нижнему пределу

Таким образом, для ЛЧМ-сигнала  может быть использован режим СТС таймера Т0. Также в устройство можно встроить дополнительные функции – остановка на определенной частоте, старт,  пауза,  продолжить, стоп. 

Кроме таймера-счетчика нам необходимо будет  иметь пять линий ввода: сброс, старт, пауза, продолжить, стоп - и одну – вывода (выходной сигнал).

Таким образом, можно сделать вывод о том, что для реализации этого задания нам хватит самого «бюджетного» AVR-контроллера – ATtiny13. 

Описание режима CTC

Режим сброса таймера при совпадении (СТС) 


Блок-схема T0

В режиме СТС (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


Принципиальная электрическая схема устройства


Осциллограмма начала последовательности


Осциллограмма всей последовательности


Осциллограмма конца последовательности

Приложение

полный проект лежит в архиве + схемы