В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Применение > Микроконтроллеров > MSP430
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Использование широтно-импульсной модуляции таймера В в качестве ЦАП

Аннотация

В этом примере применения описан способ одновременной генерации синусоидального, пилообразного и сигнала с постоянным уровнем с использованием сигналов широтно-импульсной модуляции (ШИМ), получаемых с помощью таймера Timer_B семейства микроконтроллеров со сверхнизким энергопотреблением MSP430. Сигналы ШИМ обычно используются для получения аналоговых сигналов во встраиваемых применениях. Ниже будет рассмотрен способ получения, как переменных, так и постоянных напряжений при помощи выходов ШИМ.

В данном примере использован таймер Timer_B микроконтроллера MSP430F149, аналогичным образом можно также использовать таймер Timer_A.

1 Введение

Во многих встраиваемых применениях на базе микроконтроллеров требуется генерация аналоговых сигналов. В некоторых случаях для этих целей используются встроенные либо внешние цифро-аналоговые преобразователи (ЦАП).

Тем не менее, сигналы ШИМ также могут быть использованы для получения требуемых аналоговых сигналов. С их помощью можно синтезировать аналоговые сигналы, как с переменным, так и с постоянным уровнем. В этой статье обсуждается использование ШИМ-таймера в качестве ЦАП и приводится пример одновременной генерации синусоидального сигнала, пилообразного сигнала и сигнала с постоянным уровнем, а также суммирование синусоидального сигнала с постоянным уровнем для создания смещения. В данном примере использован таймер Timer_B, аналогичным образом можно также использовать таймер Timer_A.

2 Теория работы

Сигналы ШИМ представляют собой цифровые сигналы с постоянной частотой и меняющимся коэффициентом заполнения. Пример таких сигналов приведен на Рис. 1. Если коэффициент заполнения ШИМ-сигнала изменяется со временем, то, отфильтровав его, получим на выходе аналоговый сигнал. Блок-схема ЦАП на базе ШИМ с использованием такого способа приведена ниже на Рис. 2. В примере программы в конце этой статьи таймер Timer_B микроконтроллера MSP430F149 используется для одновременной генерации синусоидального и пилообразного сигналов с разными частотами и сигнала с постоянным уровнем. ЦАПы, основанные на ШИМ также позволяют синтезировать другие сигналы. Некоторые аудиопроцессоры фирмы Texas Instruments Inc. также используют сигналы ШИМ для генерации речевых сигналов.

Рис. 1. ШИМ-сигнал

Рис. 2. Блок-диаграмма ЦАП на базе ШИМ

2.1 Разрешение

Разрешение ЦАП на базе ШИМ, построенного на таймере Timer_B эквивалентно длине счётчика, которая, как правило, представлена значением в регистре CCR0. МЗР ЦАП на базе ШИМ представляет собой единичный отсчёт, а разрешение соответствует общему числу отсчётов:

Rcounts = Lcounts

Где Rcounts – разрешение (в отсчётах)
       Lcounts – длина счётчика (в отсчётах)

Например, в этой статье рассматривается 8-битный ЦАП, таким образом, длина счётчика 8 бит или 256 отсчётов.

В общем виде, разрешение ЦАП на базе ШИМ, построенного на таймере и фильтре эквивалентно разрешению ШИМ-сигнала, используемого ЦАП-ом. Таким образом, разрешение ШИМ-сигнала зависит от длины счётчика и наименьшего возможного изменения коэффициента заполнения в ШИМ-счётчике. Математически это можно записать как:

Rcounts = L/C

Где Rcounts - разрешение (в отсчётах)
       L - длина счётчика (в отсчётах)
       C - наименьшее возможное изменение коэффициента заполнения (в отсчётах)

Разрешение, выраженное в количестве бит, будет выглядеть следующим образом:

Или

Например, если счётчик ШИМ имеет длину 512 отсчётов, а коэффициент заполнения может изменяться как минимум на 2 отсчёта, результирующее разрешение в отсчётах ЦАП на базе ШИМ будет составлять:

Разрешение в битах составляет:

2.2 Частота

Частота, требуемая для формирования выходного сигнала ШИМ эквивалентна частоте обновления ЦАП, а каждое изменение коэффициента заполнения ШИМ эквивалентно одному отсчёту ЦАП. Требуемая для ШИМ-таймера частота зависит от требуемой частоты ШИМ-сигнала и необходимого разрешения:

Fclock = FPWM * 2n

Где Fclock - требуемая частота тактирования ШИМ-таймера
       FPWM – частота ШИМ-сигнала, соответствующая частоте обновления ЦАП
       n - требуемое разрешение ЦАП в битах

В этой статье описан способ построения 8-битного ЦАП на базе ШИМ и одновременная генерация с его помощью синусоидального сигнала частотой 250Гц и пилообразного сигнала частотой 125Гц. Требуемая частота для данного примера – 8кГц (32 отсчёта на каждый период синуса (передискретизация 16x), и 64 отсчёта на каждый период пилы (передискретизация 32x). Это соответствует требуемой частоте сигнала ШИМ в 8кГц и требуемой частоте тактирования ШИМ в 2.048МГц.

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

2.3 Используемые ресурсы MSP430

Пример программы, приведенный в конце этой статьи, демонстрирует одновременный синтез синусоидального сигнала частотой 250Гц, пилообразного сигнала частотой 125Гц и постоянное значение с уровнем 2/3 Vcc, используя для этого таймер Timer_B и внешние фильтры. Аналогичным образом можно также использовать таймер Timer_A.

Таймер Timer_B используется в 16-битном режиме и сконфигурирован для работы в режиме инкремента, но при этом счётчик считает до значения, записанного в регистр захвата-сравнения 0 (CCR0), после чего сбрасывается в 0. В регистр CCR0 загружается значение 255, таким образом, эффективная разрядность счётчика составляет 8 бит. Регистр CCR1 и выход TB1 используются для формирования синусоиды. CCR2 и TB2 используются для пилообразного сигнала, а CCR3 и TB3 – для постоянного значения. Для всех выходов выбран выходной режим 7 «сброс/установка» (reset/set mode).

В этом режиме каждый выход сбрасывается в «0» в тот момент, когда значение счётчика достигает значения в соответствующем регистре CCRx и устанавливается в «1», когда значение счётчика равно значению в регистре CCR0. Это обеспечивает на соответствующих выходах импульсы положительной полярности с длительностью, эквивалентной значению в соответствующих регистрах CCRx. В качестве источника тактирования таймера Timer_B выбрана частота SMCLK.

Также в примере использованы:

  • Кварцевый резонатор частотой 32768 Гц
  • Встроенный генератор с цифровым управлением (DCO), работающий на частоте 2.048 МГц
  • Частоты SMCLK и MCLK, равные 2.048 МГц
  • Timer_A для калибровки генератора DCO
  • Два регистра ЦПУ

2.4 Принципиальная схема и осциллограммы

Полная принципиальная схема устройства приведена на Рис. 3. Генерируемые ей переменные сигналы показаны на Рис. 4. Сигнал с постоянным уровнем показан на Рис. 5 совместно с сигналом ШИМ.

Рис. 3. Принципиальная схема

Рис. 4. Осциллограммы сигналов

Рис. 5. Сигнал ШИМ и постоянный сигнал

Синусоидальный сигнал, формируемый в этом примере, использует 32 отсчёта на период. Значения отсчётов хранятся в таблице в начале программы. Для определения текущей ячейки используется указатель, в конце каждого периода ШИМ в регистр сравнения-захвата ШИМ-таймера записывается новое значение.

Для генерации пилообразного сигнала в этом примере табличные значения не используются. «Пила» формируется обычным инкрементом коэффициента заполнения на каждом периоде ШИМ до тех пор, пока не будет достигнуто максимальное значение. После этого инкремент начинается снова с минимального значения. Такое последовательное увеличение коэффициента заполнения ШИМ-сигнала после его фильтрования формирует на выходе пилообразный сигнал.

Сигнал с постоянным уровнем в данном примере формируется записью неизменного значения коэффициента заполнения ШИМ-сигнала. Постоянный уровень прямо пропорционален значению коэффициента заполнения ШИМ-сигнала. Таким образом, раз значение коэффициента заполнения ШИМ-сигнала на выходе TB3 не изменяется, после фильтрования RC-цепью получим на выходе постоянное значение.

2.5 Требования к фильтрам

Фильтры, используемые для восстановления сигналов, показаны выше на Рис. 3. Фильтры для переменных сигналов представляют собой простые двухполюсные каскадированные RC-цепочки. Этот выбор обусловлен простотой реализации и нежелательностью использования активных элементов в приборах с низким энергопотреблением. Однако, при этом требуется более высокая частота дискретизации, чем при использовании фильтров более высокого порядка. Для фильтров, показанных на рис. 3 рекомендуется передискретизация для ЦАП не менее, чем 16x.

Частота среза фильтра вычисляется следующим образом:

Где R1C1 = R2C2 = RC

Наилучшие характеристики фильтра получаются при R2 >> R1. Кроме этого, выбор частоты среза, слишком близкой к границе полосы сигнала, приведёт к существенному ослаблению. Для уменьшения такого ослабления, вносимого фильтром, следует выбирать частоту среза выше границы полосы сигнала, но намного ниже частоты ШИМ-сигнала.

В отличие от фильтров переменных сигналов, фильтр для постоянного сигнала используется только для хранения заряда. Поэтому в этом случае применена простая однополюсная RC-цепь.

2.6 Суммирование постоянного и переменного сигналов

Сигналы, синтезируемые ЦАП-ом на базе ШИМ, можно сложить. Схема на Рис. 6 демонстрирует формирование смещённого синусоидального сигнала добавлением постоянного смещения в 2/3Vcc к синусоидальному сигналу. Кроме этого, синусоидальный сигнал ослаблен примерно на 2/3, чтобы обеспечить возможность его смещения по постоянному напряжению без перегрузки суммирующего усилителя. В результате получаем синусоидальный сигнал амплитудой 1VPP с постоянным смещением примерно в 2В, как показано на рис. 7. На заднем плане также показан ШИМ-сигнал.

Рис. 6. Суммирующая схема

Рис. 7. Синусоидальный сигнал со смещением

Сложение сигналов таким образом, как описано в примере выше, позволяет легко регулировать постоянную и переменную составляющую по отдельности через ШИМ-выходы. Например, синусоидальная составляющая может оставаться постоянной, а постоянная составляющая при этом изменяться в большую или меньшую сторону простым изменением коэффициента заполнения ШИМ-сигнала, отвечающего за постоянный сигнал. Обратите внимание на то, что фильтр, используемый для синусоидального сигнала, немного изменён. Так как в схему был добавлен суммирующий усилитель для добавления смещения к синусоидальному сигналу, часть элементов фильтра была совмещена со схемой усилителя. Для получения аналогичных результатов также можно использовать другие схемы фильтров и активных сумматоров.

3 Описание и листинг программы

Полный листинг программы приведен в Приложении A. Процесс выполнения программы проиллюстрирован на Рис 8.

Рис. 8. Процесс выполнения программы

После сброса (reset) производится останов сторожевого таймера watchdog, конфигурация выходных портов и системы тактирования. Далее формируется программная задержка для стабилизации кварцевого резонатора 32768Гц, что необходимо для калибровки генератора DCO. Далее вызывается подпрограмма стабилизации генератора DCO. После её завершения, таймер Timer_B, регистры CCR1 и CCR2 конфигурируются для генерации сигналов ШИМ и осуществляется запуск таймера.

В завершение, MSP430 переводится в режим пониженного энергопотребления 0 (LPM0) для сохранения энергии. ЦПУ «просыпается» для обработки каждого прерывания CCIFG0, после чего возвращается в режим LPM0.

3.1 Калибровка генератора DCO

Генератор DCO микроконтроллера MSP430 представляет собой генератор RC типа и обладает схожими с RC-генератором характеристиками, в частности такими, как неточная установка частоты и её уход. Тем не менее, цифровое управление этим генератором позволяет настроить его на стабильную частоту, используя источник тактирования со стабильным известным значением, такой, как кварцевый резонатор 32768Гц. Некоторые микроконтроллеры семейства MSP430 имеют встроенный генератор с автоподстройкой частоты Frequency Lock Loop (FLL), позволяющий осуществить это автоматически, однако, устройства подсемейства MSP430x1xx такого модуля не имеют. За более подробными сведениями о генераторе DCO и системе тактирования MSP430 обратитесь к разделу «Система тактирования» (Clock system) соответствующего руководства пользователя.

Ввиду того, что микроконтроллеры MSP430x1xx не имеют встроенного FLL, генератор DCO должен быть программно откалиброван для того, чтобы источник тактирования имел стабильную и известную частоту. Программное обеспечение, приведенное в этом примере, реализует стабилизатор частоты FLL для калибровки генератора DCO. Осуществляется это путём сравнения числа тактов генератора DCO за один период генератора 32768Гц. Точнее говоря, в данном примере частота 32768Гц (ACLK) делится на 4, поэтому программный FLL подсчитывает количество тактов генератора DCO за ? периода ACLK. После этого, подсчитанное число сравнивается с номинальным значением и значение DCO увеличивается либо уменьшается на одну ступень в зависимости от результата счёта, после чего счёт повторяется снова. Процедура повторяется до тех пор, пока не будет достигнуто требуемое количество тактов.

По выполнении этого условия частота генератора DCO является откалиброванной к требуемому значению.

В этом примере программный FLL выполняется только один раз, т.к. устройство не подвергается атмосферному воздействию, колебаниям питающего напряжения Vcc или длительному использованию. Однако, в реальных условиях эксплуатации, подпрограмма FLL должна выполняться периодически для отстройки генератора DCO от вышеперечисленных воздействий и традиционного ухода частоты генераторов RC-типа.

За дополнительной информацией по программной реализации FLL обращайтесь к примеру применения «Управление частотой генератора с цифровым управлением (DCO) микроконтроллеров MSP430x11x» («Controlling the DCO Frequency of the MSP430x11x» literature number SLAA074).

Альтернативой программной калибровке генератора DCO может служить использование внешних кварцевых резонаторов с требуемой для ШИМ-таймера частотой. Это применимо для микроконтроллеров семейств 13x и 14x благодаря наличию высокочастотного кварцевого XT-генератора. При использовании такого метода, SMCLK должна тактироваться от XT-генератора, а не от генератора DCO. См. главу 7 руководства пользователя MSP430x1xx Family User’s Guide, literature number SLAU049, по вопросам использования системы тактирования микроконтроллеров семейства 1xx. Также см. документацию на конкретные устройства по вопросам максимальных рабочих частот.

Ссылки

  1. MSP430x13x/14x data sheet (SLAS272)
  2. Руководство пользователя MSP430x1xx (MSP430x1xx Family User’s Guide (SLAU049))
  3. MSP430x3xx Family User’s Guide (SLAU012)
  4. Controlling the DCO of the MSP430x11x (SLAA074)

Приложение A. Листинг программы

NAME PWMDAC
;************************************************************************************
; Программа реализации ЦАП на базе ШИМ 
; Генерирует синусоиду частотой 250Гц с использованием ШИМ на базе таймера Timer_B.
;
; Описание: программа демонстрирует использование ШИМ-таймера совместно 
; с внешними фильтрами для реализации ЦАП. Показан способ формирования 
; синусоиды частотой 250Гц, пилообразного сигнала частотой 125Гц и 
; сигнала с постоянным уровнем с использованием таймера Timer_B.
; Возможно аналогичное использование таймера Timer_A.  В таблице sine table holds the
; хранятся отсчёты значений синусоиды. Для формирования «пилы» используется
; простой инкремент значения ШИМ. Постоянный уровень формируется зарядом 
; конденсатора RC-цепи при помощи выхода ШИМ. Значение напряжения  при этом 
; прямо пропорционально коэффициенту заполнения сигнала ШИМ. После
; инициализации, ЦПУ переводится в режим пониженного энергопотребления LPM0. 
; Он остаётся в этом режиме до прихода прерывания CCIFG0 от таймера Timer_B
; В подпрограмме обработки прерывания таймера Timer_B ISR в регистр CCR1 
; загружается следующее значение для синусоиды, значение «пилы»  инкрементируется 
; и загружается в регистр CCR2. По возвращении из прерывания
; ЦПУ снова переходит в режим пониженного энергопотребления LPM0.
;************************************************************************************
#include "MSP430X14x.H" 			; Включить в проект  файл со  
; стандартными определениями 
Delta 		EQU	250 			; Delta = требуемая частота  DCO/8192
; Требуемая частота генератора DCO = 2.048МГц
; Это значение используется 
; в программном стабилизаторе FLL
; для калибровки частоты генератора DCO
; с использованием кварцевого 
; резонатора с частотой 32768Гц
; в качестве опорного. Более подробная 
; информация  по стабилизации частоты 
; генератора  DCO и программе 
; стабилизатора FLL  см. пример применения 
; под названием «Управление частотой
; генератора с  цифровым управлением (DCO) 
; микроконтроллеров MSP430x11x»
; ( "Controlling the DCO frequency of the 
; MSP430x11x"  Literature number SLAA074)
;--------------------------------------------------------------------------------------
RSEG CODE
;--------------------------------------------------------------------------------------
Sine_Tab 	DW 	255 			; Таблица синуса, отсчёты
DW 	254 			; десятичные значения 
DW 	246 			; загружаемые в регистр TBCCR1 для изменения 
DW 	234 			; коэффициента заполнения ШИМ.
DW 	219 			; Вместо байт требуется использовать слова 
DW 	199 			; т.к. в регистры ТВ
DW 	177 			; требуется записывать слово целиком 
DW 	153 			; Значение '0' использовать нельзя
DW 	128 			; иначе таймер будет глючить.
DW 	103
DW 	79
DW 	57
DW 	37
DW 	22
DW 	10
DW 	2
DW 	1
DW 	2
DW 	10
DW 	22
DW 	37
DW 	57
DW 	79	
DW 	103
DW 	128
DW 	153
DW 	177
DW 	199
DW 	219
DW 	234
DW 	246
DW 	255
;------------------------------ Здесь начинается программа ----------------------------
RESET   mov     #02FEh,SP        ; Инициализация указателя стека 
StopWDT mov     #WDTPW+WDTHOLD,&WDTCTL 
; Остановить сторожевой таймер WDT
SetupP4 bis.b   #00Eh,&P4SEL     ; Выбрать TB1, TB2 и TB3 вместо портов 
        bis.b   #00Eh,&P4DIR     ; P4.x, и назначить их выходами 
SetupBC mov.b   #0A6h,&BCSCTL1   ; ACLK делится на 4. RSEL=6,
; MCLK и SMCLK не делятся,
; источником MCLK и SMCLK является DCO 
; генератор XT2 выключен.
; ПРИМЕЧАНИЕ: для определения значения 
; Rsel для требуемой частоты DCO,
; обратитесь к таблице DCO в докуметнтации
        call    #Delay 		; Пауза для стабилизации кварца.
; Необходима из-за того, что 
; кварцевый резонатор 32768Гц используется 
; в качестве опорного для стабилизации частоты 
; генератора DCO. Поэтому резонатор на 32768
; должен  быть стабильным.
        call    #SW_FLL           ; Вызов подпрограммы стабилизации 
; частоты генератора DCO.
        call    #TB_SETUP         ; Инициализация таймера Timer_B 
; для генерации сигналов ШИМ 
        clr     R15               ; R15 и R14 используются как указатели 
        clr     R14               ; на таблицу синусов и для хранения 
; значения «пилы» после стабилизации DCO
        eint                      ; Разрешение прерываний 
        bis     #LPM0,SR          ; «усыпить» ЦПУ.
; Завершение программы 
; остаётся обработчик прерывания CCIFG0
; где обновляются значения ШИМ
;--------------------------------------------------------------------------------------
Delay                             ; Программная пауза для стабилизации кварца
;--------------------------------------------------------------------------------------
        mov     #0004h,R15
L1      mov     #0FFFFh,R14       ; ~ 1 секунда .
L2      dec     R14               ;
        jnz     L2                ;
        dec     R15               ;
        jnz     L1                ;
        ret                       ;
;
;--------------------------------------------------------------------------------------
SW_FLL          ; Подпрограмма стабилизации частоты DCO.
; Кварцевый генератор 32768Гц используется 
; в качестве опорной частоты для стабилизации 
; и подстройки генератора DCO до требуемой 
; частоты 2.048МГц. Это требуется в устройствах 
; где нужна фиксированная частота DCO и для 
; тех моделей MSP430 где нет аппаратного 
; модуля FLL. См. руководства пользователя 
; MSP430x3xx и MSP430x1xx Family
; User's Guides (literature number SLAU012 и 
; SLAU049 соответственно) по вопросам, 
; касающимся системы тактирования MSP430 
;
; процедура основана на подсчёте тактов DCO 
; за период ACLK (точнее, за 1/4 периода ACLK 
; т.к. частота ACLK поделена на 4). Таймер 
; Timer_A используется для подсчёта тактов DCO 
; Полученное значение сравнивается с 
; номинальным (Delta). Если число слишком 
; большое, DCO декрементируется. Если число
; слишком маленькое, DCO инкрементируется. 
; Далее сравнение повторяется.
; Процесс продолжается до тех пор, пока 
; значения не сравняются.  После этого 
; DCO генерирует на требуемой частоте 
; См. пример применения «Управление частотой
; генератора с  цифровым управлением (DCO) 
; микроконтроллеров MSP430x11x»
; ( "Controlling the DCO frequency of the 
; MSP430x11x"  Literature number SLAA074) по 
; вопросам, связанным с управлением 
; генератором DCO.
;
; Эта процедура вызывается только один раз 
; в качестве примера, в реальных условиях 
; её требуется выполнять периодически, чтобы
; быть уверенным, что генератор DCO
; остаётся откалиброванным.
;--------------------------------------------------------------------------------------
        clr   R15 			;
Setup_TA  mov #TASSEL1+TACLR,&TACTL 
; Источник тактирования TA - SMCLK
Setup_CC2 mov #CCIS0+CM0+CAP,&CCTL2 
; Определить CCR2,CAP,ACLK
        bis 	#MC1,&TACTL       ; Запустить таймер timer_A 
; в непрерывном режиме 
Test_DCO 	bit 	#CCIFG,&CCTL2 ; Проверка флага захвата 
        jz 	Test_DCO 		;
        bic     #CCIFG,&CCTL2     ; Очистка флага захвата 
;
AdjDCO  mov     &CCR2,R14         ; В R14 число тактов SMCLK
        sub     R15,R14           ; в R14 разница 
        mov     &CCR2,R15         ; В R15 число тактов SMCLK
        cmp     #Delta,R14        ; Delta = SMCLK/(32768/4)
        jlo     IncDCO            ;
        jeq     DoneFLL           ;
DecDCO  dec.b   &DCOCTL           ;
        jmp     Test_DCO          ;
IncDCO  inc.b 	&DCOCTL           ;
        jmp     Test_DCO          ;
DoneFLL clr     &CCTL2            ; очистить CCR2
        clr     &TACTL            ; остановить таймер timer_A
        ret                       ; возврат из подпрограммы 
;--------------------------------------------------------------------------------------
TB_SETUP                          ; Подпрограмма инициализации таймера 
; Timer_B для генерации ШИМ 
;--------------------------------------------------------------------------------------
        mov     #TBSSEL1+TBCLR,&TBCTL 
; SMCLK –источник тактирования TB.
        mov     #CCIE,&TBCCTL0    ; Перевести CCR0 в режим сравнения, 
; разрешить прерывания от него 
        mov     #0FFh,&TBCCR0     ; Записать 255d в CCR0. Это соответствует 
; периоду ШИМ-выходов в 256 отсчётов (8 бит). 
; т.е. получаем 8-битный ЦАП.
        mov     #02E0h,&TBCCTL1   ; Перевести CCRx в режим сравнения, запретить 
        mov     #02E0h,&TBCCTL2   ; прерывания, режим выхода '7' , т.е.
        mov     #02E0h,&TBCCTL3   ; сброс/установка. Сигнал EQU0 устанавливает 
; выход в «1», а  EQU1 в «0». Установим 
; условия сравнения для регистра как 
; его равенство нулю
        mov     #Sine_Tab,&TBCCR1 
; Загрузить первый отсчёт в CCR1
        mov     #01h,R14          ; Загрузить начальное значение «пилы» в R14.
        mov     #0AAh,&TBCCR3     ; И значение для постоянного уровня 
; которое соответствует ~ 2/3 Vcc т.к. 
; #0AAh это примерно  2/3 от #0FFh.
        bis     #MC0,&TBCTL       ; Запустить таймер timer_B в режиме инкремента
        ret
;--------------------------------------------------------------------------------------
TB_ISR                            ; Подпрограмма обработки прерываний таймера 
                                  ; Timer_B: изменяет значения в регистрах 
; CCR1 и CCR2 для изменения коэффициента 
; заполнения ШИМ для синусоиды и «пилы». 
; Значение в CCR3 не изменяется для  
; формирования постоянного уровня
;--------------------------------------------------------------------------------------
        incd    R15               ; Инкремент указателя в R15 to
; для следующего значения в таблице синуса 
; Инкремент двойной, т.к. 
; значения в таблице двухбайтовые 
        and     #03Fh,R15         ; Операция лог. «И» с числом 03Fh даёт 
; счётчик по модулю 32 для указания на 
; значения в таблице 
        mov     Sine_Tab(R15),&TBCCR1 
; Загрузить следующее значение синуса в CCR1
        add     #04h,R14          ; Инкрементировать значение  «пилы»
; Изменение шага в R14
; приведёт к изменению частоты «пилы»
        and     #0FFh,R14         ; Исключим лишние биты 
        mov     R14,&TBCCR2       ; Загрузим новое значение пилы в CCR2
        reti                      ; возврат, прерывания разрешены
;-----------------------------------------------------------------------------------
COMMON INTVEC                     ; Вектора прерываний MSP430x14x
;-----------------------------------------------------------------------------------
ORG     TIMERB0_VECTOR
DW      TB_ISR                    ; Прерывание от CCIFG0
ORG     RESET_VECTOR
DW      RESET                     ; POR, внеш. Reset, Watchdog
END

стационарные и мобильные бетонные заводы