STM32 STM32VL Discovery STM32F100RBT6 (урок 7) General-purpose timers(15/16/17), таймеры

| 17.06.2015

STM32VL Discovery STM32F100RBT6 (урок 7) General-purpose timers(15/16/17), таймеры

Таймер – одна из самых полезных вещей в микроконтроллере и основная его задача – отсчитывание точных интервалов времени. На отладочной плате STM32VL Discovery установлен микроконтроллер STM32F100RBT6, который имеет следующие таймеры:
Basic timers (TIM6, TIM7) – самый простой таймер, который умеет только генерировать прерывания в заданный промежуток времени, но при этом очень легко настраивается и управляется.
General-purpose timers (TIM2-TIM4, TIM15-TIM17) – более продвинутый таймер, позволяющий генерировать ШИМ, считывать состояние ног, обрабатывать данные от энкодера и т.д.
The advanced-control timers (TIM1) – самый продвинутый таймер, может использоваться как трехфазный ШИМ генератор, например для управления трехфазными электродвигателями.

Устройство Базовых таймеров/счётчиков. General-purpose timers(16)дбдз90

Регистры (TIM16/17) *только те где добавлены биты, так как есть другой функционал
** TIM 15 не содержит ни чего уникального  (два канала с разным числом ножек)

TIMx_CR2  [0x0000]TIM16&17_CR2

Описание: 2-й регистр управления.
Биты:
Bit 9    OIS1N:    Output Idle state 1 (OC1N output)
Описание: 
Определяем, какое состояние будет на ножке в режиме idle.
0:  Будет OC1N=0  после “мертвого времени” когда MOE =0. (MOE -бит в TIMx_BDTR)
1:  Будет OC1N=1  после “мертвого времени” когда MOE =0. (MOE -бит в TIMx_BDTR)

Bit 8    OIS1:    Output idle state 1 (OC1 output)
Описание: 
Определяем, какое состояние будет на ножке в режиме idle.
0:  Будет OC1=0  когда MOE =0. (MOE -бит в TIMx_BDTR)
1:  Будет OC1=1   когда MOE =0. (MOE -бит в TIMx_BDTR)

Bit 3    CCUS:    Capture/compare control update selection
Описание: 
Этот бит доопределяет, то что делает бит CCPС.
0: Когда бит (CCPC=1), то изменение происходит только при установки бита COMG
1: Когда бит (CCPC=1), то изменение происходит только при установки бита COMG
или при нарастающем фронте на входе триггера TRGI.
*Этот бит работает есл. у канала есть комплиментарный выход

Bit 0    CCPС:    Capture/compare preloaded control
Описание: 
Выбор будут ли буферизованы биты (CCxE, CCxNE and OCxM).
0: Биты (CCxE, CCxNE and OCxM) не буферизованы
1: Биты (CCxE, CCxNE and OCxM) буферизованы [меняет значение после установки COM бита]
*Этот бит работает есл. у канала есть комплиментарный выход

TIMx_DIER  [0x0000]TIM16&17_DIER

Описание: Регистр разрешения прерываний/DMA.
Биты:
Bits 7    BIE:    Break interrupt enable.
Описание: 
Этот бит ставится программно, разрешить прерывание от Break (вспоминаем хитр. ножку). 

Bits 5    COMIE:    COM interrupt enable.
Описание: 
Этот бит ставится программно, разрешить прерывание от события установки бита COM.

TIMx_SR  [0x0000]TIM16&17_SR

Описание: Регистр статуса таймера TIMx. Здесь устанавливаются различные флаги произошедших событий. Важно что очищается этот флаг программно записью нуля.
Биты:
Bits 7    BIF:    Break interrupt flag.
Описание: 
Этот ФЛАГ устанавливается при активном фронте на хитрой ножке TIMxBKIN.

Bits 5    COMIF:    COM interrupt flag.
Описание: 
Этот ФЛАГ устанавливается при событии установки бита COM.

TIMx_EGR  [0x0000]TIM16&17_EGR

Описание: Регистр генерации событий.
Биты:
Bits 7   BG:    Break generation
Описание: 
Ставим программно чтобы сгенерировать событие Break (вспоминаем хитр. ножку)
0: Не действует
1: Генерируем это событие.

Bits 5   COMG:    Capture/Compare control update generation
Описание: 
Ставим программно чтобы сгенерить. событие обнов битов (CCxE, CCxNE and OCxM) 
0: Не действует
1: Генерируем это событие.
*Этот бит работает есл. у канала есть комплиментарный выход

TIMx_CCER  [0x0000]TIM16&17_CCERОписание: Регистр разрешения захвата/сравнения (настройка полярности и разрешение выхода захвата/сравнения).
Биты :
Bits 3   CC1NP:    Capture/Compare 1 complementary output polarity
Описание: 
Определяем полярность нашей ножки:
Если ножка определена как ВЫХОД то:
0 -Для канала ‘OC1′ – активное сост это лог ’1′
1 -Для канала ‘OC1′ – активное сост это лог ’0′
Ножка не используется как ВХОД.

Bits 2   CC1NE:    Capture/Compare 1 complementary output enable
Описание: 
Если ножка определена как ВЫХОД то:
0 - Ножка не активна (сигнал не поступает на ножку)
1 - Нока активна (сигнал поступает на ножку)
Ножка не используется как ВХОД.

Bits 1   CC1P:    Capture/Compare 4 output polarity
Описание: 
Если ножка определена как ВЫХОД то:
0 – ‘АКТИВНА’ – активное сост это лог ’1′
1 - ‘АКТИВНА’ – активное сост это лог ’0′
Если ножка определена как ВХОД то:
0 – Ножка не инвертирована. Захват происходит по нарастающему фронту.
1 - Ножка инвертирована. Захват происходит по спадающему фронту.

Bits 0   CC1E:    Capture/Compare 1 output enable
Описание: 
Если ножка определена как ВЫХОД то:
0 - Ножка не активна (сигнал не поступает на ножку)
1 - Нока активна (сигнал поступает на ножку)
Если ножка определена как ВХОД то:
0 - Ножка не активна  (запрещаем захват счетчика от сигнала на ножке)
1 - Нока активна  (разрешаем захват счетчика от сигнала на ножке

TIMx_RCR  [0x0000]TIM16&17_RCRОписание: Значение счетчика повторов
Биты :

Bits 1  REP[7:0]: Repetition counter value
Описание: Эти биты позволяют позволяют определить каждое какое событие обрабатывать.

TIMx_BDTR  [0x0000]TIM16&17_BDTRОписание: Супер хитрый регистр (новые возможности)
Биты :
Bits 15   MOE: Main output enable
Описание: 
Этот бит крайне важен для таймеров с ножкой BREAK.
Этот бит очищается асинхронно аппаратно как только вход  BREAK становится активным. Он устанавливается программно или автоматически в зависимости от бита
АОЕ. Он действует только на на каналы, сконфигурированные на выход. (суть бита это РАЗРЕШЕНИЕ ВЫХОДА)
0: выходы OC и OCN запрещены (отключены) или форсированы
в состояние ожидания (установлены в предопределенное состояние ).
1: выходы OC и OCN разрешены если установлены их соответствующие биты разрешения (CCxE и CCxNE в регистре TIMx_CCER).

Bits 14   AOE:    Capture/Compare 4 output polarity
Описание: 
Этот бит доопределяет функционал MOE:

0 – Бит MOE может быть установлен только программно.
1 - Бит MOE может быть установлен автоматически. 

Bits 13   BKP:    Break polarity
Описание: 
Определяем полярность ножки BREAK:
0 - ‘АКТИВНА’ – активное сост это лог ’0′
1 - ‘АКТИВНА’ – активное сост это лог ’1′

Bits 12   BKE:    Break enable
Описание: 
Определяем нужна ли нам магия ножки BREAK:
0 - Отключена
1 -  Подключена

Bits 11   OSSR:    Off-state selection for Run mode
Описание: 
Определяем неактивное состояние при MOE=1
0 – Выводы отключены
1 -  Выводы переведены в не активное сост.

Bits 10   OSSI:    Off-state selection for Idle mode
Описание: 
Определяем неактивное состояние при MOE=0
0 – Выводы отключены
1 -  Выводы переведены в не активное сост.

Bits 10   DTG[7:0]:    Dead-time generator setup
Описание: 
Определяем время между переключениями ножек
DTG[7:5]=0xx => DT=DTG[7:0]x tdtg with tdtg=tDTS
DTG[7:5]=10x => DT=(64+DTG[5:0])xtdtg with Tdtg=2xtDTS
DTG[7:5]=110 => DT=(32+DTG[4:0])xtdtg with Tdtg=8xtDTS
DTG[7:5]=111 => DT=(32+DTG[4:0])xtdtg with Tdtg=16xtDTS
Example if TDTS=125ns (8MHz), dead-time possible values are:
0 to 15875 ns by 125 ns steps,
16 μs to 31750 ns by 250 ns steps,
32 μs to 63 μs by 1 μs steps,
64 μs to 126 μs by 2 μs steps
Note: This bit-field can not be modified

Ссылки на комплектующие:
Отладочная плата: STM32VL Discovery (ссылка)
Микроконтроллер: STM32F100RBT6 (
ссылка)
Провод USB :  (ссылка)
Преобразователь USB-UART : FTDI (ссылка)

Макетная плата: (ссылка)
Блок питания на 12V (ссылка)
Преобразователь 12V  в  3,3/5V (ссылка)
Перемычки для макетной платы (ссылка)

Пример 1
Описание: Мы хотим заходить в обработчик прерывания не каждый раз ))).

Пример 2
Описание: Мы хотим Dead-tine. Это хитрая вещь, которая актуальна для каналов с 2-мя ножками. Иногда при решении различных практических задач может понадобиться управлять двумя ножками при помощи таймера, но при управлении полу мостовыми схемами может возникнуть проблемка одновременного переключения.
Просто Dead-tine позволяет настроить задержку между переключениями ножек.
**Интересным следствием использования такой задержки заключается в том, что если длительность dead-time превышает длительность импульса на выводе, то соответствующий импульс не будет сгенерирован вообще.

**Для выводов канала можно настроить полярность. (поля TIM_OCPolarity и TIM_OCNPolarity) .Это состояние вывода в промежуток времени от начала отсчёта и до TIM_Pulse. Важно заметить, что комплементарный вывод является инверсным — поэтому, если на нём нужен обычный (не инверсный) сигнал, нужно ему выставить TIM_OCNPolarity_Low.
PB5 - TIM16_BKIN
PB6 - TIM16_CH1N
PB8 - TIM16_CH1

 Пример 3
Описание: Есть хитрый вход BKR (BREAK), который в ряде случаев может быть очень полезным. Если вам вдруг понадобится резко перевести выводы каналов таймера в заранее определённое состояние (выключить/выключить), то вам повезло, ведь эта ножка именно для этого. Нужно сконфигурировать пинушку  TIMx_BKIN на вход, и при инициализации BDTR включить вход BRK. 


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *