Plazer-don.ru

Сварочное оборудование
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Принцип работы таймера счетчика

КР580ВИ53

КР580ВИ53 — электронный компонент, микросхема программируемого трёхканального таймера счётчика интервалов и внешних событий (количества импульсов), программируемого делителя частоты, одновибратора.

Содержит три идентичных независимых канала счёта, каждый канал является программно настраиваемым 8-ми или 16-битовым счётчиком. Режимы работы каналов настраиваются программно.

Микросхема выпускалась в двух версиях, КР580ВИ53 (аналог i8253) с максимальной рабочей частотой 2 МГц, и КР580ВИ53Д (аналог i8253-5) c максимальной рабочей частотой 2,5 МГц, оформление — пластмассовый корпус DIP24 (широкий) или металлокерамический.

Является функциональной копией микросхемы Intel 8253 (i8253).

STM32: Урок 6.2 — Таймеры общего назначения и продвинутые

Продолжаем тему таймеров в STM32. В прошлый раз мы рассмотрели базовые таймеры, которые довольно-таки просты. Но сегодня мы поиграемся с более крутой игрушкой — таймерами общего назначения, которые на голову выше предыдущих.

  • До 4-х каналов для:
    • Захвата сигнала (input capture).
    • Сравнения вывода (output compare).
    • Генерации сигнала ШИМ (выровненного по границе или по центру).
    • Генерации одиночных импульсов.
    • Обновление: переполнение счётчика.
    • Событие-триггер: старт, остановка, инициализация счётчика или его обновление внутренним или внешним триггером.
    • Захват сигнала.
    • Сравнение (output compare).
    • Включение BRK.

    Вот как вы думаете, если у таймеров общего назначения так много функций, чем тогда продвинутые (advanced-control) таймеры отличаются от них? o_O
    Правильный ответ — почти ничем, это по факту просто таймеры общего назначения, которые не имеют никаких ограничений: в них напихано по 4 канала (с комплементарными) и есть все возможности сразу, без какого-то ни было разброса. Так что остальная часть статьи будет относиться ко всем таймерам выше базовых, а продвинутые таймеры я отдельно упоминать не буду.

    В даташите на STM32F100xx ( ещё ссылка ) есть сводная таблица возможностей таймеров, в которую тоже удобно поглядывать для справки:

    Кстати, обращайте внимание на сноски. Например, там написано, что у МК семейства Low density Value line нет таймера TIM4.

    Захват сигнала

    В этом режиме с выбранного канала захватываются импульсы, на каждый из них текущее значение счётчика таймера кладётся в регистр TIM_CCRx, где x — номер канала. Таким образом, период следования импульсов равен разнице между текущим значением TIM_CCRx и предыдущим. Ну а для того, чтобы получить период в каких-то внятных единицах измерения, нужно настроить предделитель через функции базового таймера.

    При этом можно настроить генерацию прерывания и запроса DMA на приход очередного импульса, и если в это время предыдущее значение TIM_CCRx не было считано, будет сгенерировано так называемое прерывание over-capture, т.е. сигнал о том, что предыдущее значение потерялось.

    Ловить можно фронты, спады или и то, и другое вместе. Есть настройка так называемого фильтра — числа выборок, после которого переход уровня будет считаться состоявшимся (полезно для устранения дребезга). Значение фильтра может принимать значения от 0 (фильтр выключен) до 15 (0xF). Также настраивается делитель входной частоты — 2, 4 или 8: будет ловиться каждый 2й, 4й или 8й импульс соответственно.

    Примера ради подёргаем вывод PB15 и замерим таймером TIM3 период, подключив PB15 к его каналу 1 (PA6):

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

    Изменим предыдущий пример, используя захват ШИМ (прокомментированы только изменения):

    Режим чтения энкодера

    Работу с энкодером я уже как-то описывал , и тогда я считывал и декодировал данные с энкодера программно, здесь же таймер сделает работу за нас (не всю, конечно же). Боковые выводы энкодера надо подключить к двум каналам таймера, а средний вывод — к GND. Таймер в этом режиме сам обрабатывает поступающие с энкодера импульсы, а также увеличивает/уменьшает свой счётчик на 4 при каждом щелчке энкодера, и запоминает направление вращения.

    Так как мне захотелось ещё и прерывание заиметь, я сделал период равным 4 и разрешил счёт в обе стороны, так что теперь прерывание будет возникать при каждом щелчке энкодера. Использовал я каналы 1 и 2 таймера TIM3 (PA6 и PA7):

    Сравнение вывода (output compare)

    В этом режиме выбранный канал таймера будет подключен к соответствующему выводу и будет изменять его (вывода) состояние каждый раз, когда счётчик таймера досчитает до значения регистра TIM_CCRx. Состояние вывода, в зависимости от настройки, будет меняться на ноль, на единицу или на противоположное текущему. У многих таймеров у каналов есть комплементарные выводы, которые по умолчанию являются инверсными: на такой выход подаётся тот же сигнал, что и на обычный, но с противоположным уровнем.

    Смотрим в сводную таблицу по таймерам в даташите и видим, что комплементарных выводов у TIM3 нет, но вот у единственного канала таймера TIM16 есть такой вывод — этот таймер я и использую для примера. Вообще, комплементарные выводы есть и у нескольких других таймеров, но вот TIM15 — особенный: у него есть два канала, но комплементарный вывод имеет только 1й канал. Будьте бдительны!

    В таблице пинаутов находим выводы канала 1 таймера TIM16 — PB8 (основной) и PB6 (комплементарный). Для иллюстрации работы таймера подключим эти выводы к светодиодам на плате STM32VLDiscovery — PC8 и PC9, которые в коде мы отключим от греха подальше. Таким образом, выводы канала таймера будут напрямую мигать светодиодами:

    В это примере я выбрал режим переключения вывода в противоположное состояние (TIM_OCMode_Toggle), а остальные настройки оставил по умолчанию. Кстати, не забывайте вызывать функции типа TIM_OCStructInit() для инициализации соответствующих структур, даже если заполняете все поля структур вручную: copy&paste-ориентированное программирование никто не отменял, но при нём легко забыть заполнить какое-нибудь поле и ловить потом баги.

    Для обоих выводов канала можно настроить (поля TIM_OCPolarity и TIM_OCNPolarity структуры) так называемую «полярность» — состояние вывода в промежуток времени от начала отсчёта и до TIM_Pulse. По умолчанию для выводов выставляются значения TIM_OCPolarity_High и TIM_OCNPolarity_High, но комплементарный вывод является инверсным — поэтому, если на нём нужен обычный (не инверсный) сигнал, нужно ему выставить TIM_OCNPolarity_Low.

    В режиме сравнения генерируется то же самое прерывание, что и в режиме захвата сигнала — TIM_IT_CCx, но здесь оно было не нужно, поэтому я его не разрешал.

    Генерация ШИМ

    Вот это куда более интересная и практичная штука. Принципы ШИМ уже неоднократно были описаны — как на нашем сайте , так и у Di Halt’a (уж там разжёвано всё до мелочей), а я сосредоточусь на особенностях реализации в STM32.

    Настройка этого режима не слишком отличается от настройки output compare: вместо режима TIM_OCMode_Toggle нужно выбрать один из режимов ШИМ, тогда TIM_Period будет трактоваться как период ШИМ, а поле TIM_Pulse — как заполнение (duty cycle). Режимов ШИМ имеется два — выровненный по границе и по центру (edge-aligned и center-aligned). У микроконтроллеров AVR они называются Fast PWM и Phase Correct PWM, соответственно.

    Отличной иллюстрацией крутизны таймеров STM32 для генерации ШИМ будет типичная прикладная задача — управление сервомашинкой : Как известно, сервы управляются импульсами переменной ширины, которые шлются с частотой примерно 50 Гц (каждые 20 мс). У сервы, которая оказалась под рукой (Robbe 4.3 g), ширина управляющего импульса от 500 мкс (0°) до 2250 мкс (175°), судя по замерам — то есть, по 10 мкс на каждый градус поворота:

    ΔT = T₂ — T₁ = 2250 — 500 = 1750 мкс
    ∠A = 175°
    ΔT/A = 10 мкс/°

    1. Установить таймеру такой делитель частоты, чтобы отсчёт вёлся каждые 10 мкс.
    2. Задать период ШИМ в 20 мс, то есть 2000 отрезков времени по 10 мкс.
    3. Класть в регистр сравнения число, равное 50 (500 мкс / 10 мкс) + задаваемый угол.
    4. Регистр сравнения лучше обновлять строго в момент окончания периода во избежание дёргания сервы.

    Dead-time

    Если кто не знает, это задержка фронтов сигналов на основном и комплементарном выводах канала таймера. Эта функция есть у некоторых таймеров (смотрите руководство), и нужна она бывает для исключения сквозных токов при управлении силовыми ключами [полу]мостовых схем. Даже не спрашивайте меня, что это такое — это вне моей компетенции.

    Настраивается этот самый dead-time в поле TIM_DeadTime структуры TIM_BDTRInitTypeDef и имеет диапазон значений с 0 по 255 (0xFF). Но смысл этого числа не так уж прямолинеен:

    Ага, вот так оно и рассчитывается. Здесь Tdts — это длительность такта генератора dead-time (DTG), зависящая от Tdts — текущей частоты тактирования таймера. Обычно таймеры тактируются системной частотой, и TIM_Prescaler на это никак не влияет, а влияет поле TIM_ClockDivision структуры TIM_TimeBaseInitTypeDef — делитель частоты таймера.

    Для примера положим, что таймер затактирован без деления частоты (делитель равен 1, TIM_CKD_DIV1), системная частота F равна 24 МГц, а значение DTG = 150. Тогда:

    Tdts = 1/F = 1/24 мкс
    DTG = 150 = 100101102 ⇒ DTG[7:5] = 1002
    Tdtg = 2⋅Tdts = 1/12 мкс
    DT = (64 + DTG[5:0])Tdtg = (64 + 6)/12 = 5.8(3) мкс

    «Just like that» ☯ ChosunNinja

    Я тут для примера набросал код с dead-time попроще для расчёта: DTG=96 ⇒ DT=96.

    Для того, чтобы узреть этот самый dead-time на одноканальном осциллографе, нужно подключить PB8 и PB6 через резисторы 1 кОм к его щупу:

    Т.к. на эти выводы идут взаимно инверсные сигналы, на экране будут прекрасно видны места, где во время dead-time уровень на обоих входах одинаков из-за задержки фронтов:

    Ну, и напоследок — имейте ввиду, что если длительность dead-time превышает длительность импульса на выводе, то соответствующий импульс не будет сгенерирован вообще.

    Счётчик повторений

    Этот счётчик имеется у нескольких таймеров (TIM15, TIM16 и TIM17) и выполняет он очень простую функцию: генерировать событие (прерывание или запрос DMA) update не на каждое переполнение счётчика, а на каждые N переполнений. То есть, вы задаёте счётчик повторений, таймер его копирует в скрытый регистр и при каждом переполнении уменьшает значение копии на 1. Когда значение достигает нуля, генерируется событие update, таймер снова копирует счётчик повторений и т.д. На самом деле, перечисленные таймеры и так задействуют этот счётчик, просто по умолчанию его значение равно нулю, и событие генерируется на каждое переполнение.

    Счётчик может принимать значения от 0 до 255 (0xFF). Описывать тут особо нечего, потому что для использования этой функции достаточно при инициализации таймера написать что-то вроде:

    и всё. В этом случае событие update будет генерироваться каждые 8 переполнений (7 повторений).

    Вход BRK

    Если вам вдруг понадобится резко перевести выводы каналов таймера в заранее определённое состояние (например, выключить), то эта функция — то, что нужно. Включить её проще пареной репы — нужно сконфигурировать пин TIMx_BKIN на вход, и при инициализации BDTR включить вход BRK:

    По умолчанию для активации функции break нужно на вход BRK подать логический ноль, но это можно настроить в поле TIM_BreakPolarity. Как только break активирован, все выводы каналов переходят в состояние, которое задаётся при их инициализации полями TIM_OCIdleState и TIM_OCNIdleState в структуре TIM_OCInitTypeDef (по умолчанию на выводах будет низкий уровень). Dead-time при этом учитывается.

    Синхронизация таймеров

    Таймеры можно соединять друг с другом для синхронизации или образования цепочек таймеров. В первом случае появляется возможность синхронного старта нескольких таймеров по внешнему триггеру, а во втором — возможность одному таймеру управлять счётчиком другого — запускать, разрешать, сбрасывать.

    Второй случай (цепочка таймеров) больше подойдёт для иллюстрации, ибо интереснее он. Сделаем-ка для примера 32-битный таймер из двух обычных 16-битных. Для примера я возьму таймеры TIM2 и TIM3. Задача состоит в том, таймер TIM3 тактировал таймер TIM2 по переполнению своего счётчика: то есть, счётчик таймера TIM2 будет увеличиваться при переполнении счётчика TIM3 — получаем 32-битный счётчик, «состоящий» из TIM2_CNT (старшие биты) и TIM3_CNT (младшие).

    Для этого нужно настроить выходной триггер таймера TIM3 на переполнение (update), а входной триггер таймера TIM2 — на вход с триггера TIM3. Смотрим в таблицу соединения триггеров для таймеров TIM2-TIM4 (таких таблиц несколько — для разных групп таймеров):

    Здесь мы видим, что TIM3 соединён с входом ITR2 таймера TIM2. И тут выясняется, что в Reference manual рассматриваемый случай описан в разделе «Using one timer as prescaler for another», но там допущена ошибка: вместо ITR2 там указан ITR1. Я джва года час искал ошибку в коде!

    Возможности применения таймеров/счетчиков импульсов Autonics CX

    Счетчики/таймеры Autonics CX с ЖК-дисплеем

    Купить счётчик-таймер электронный серии CX рекомендуется для непрерывного контроля в резательных станках длины нарезаемых изделий и их количества.

    Это актуально для таких сфер промышленности, как:

    • Машиностроительная;
    • Станкостроительная;
    • Деревообрабатывающая;
    • Сталелитейная;
    • Металлообрабатывающая;
    • В радиоэлектронике при комплектации технических устройств;
    • Производство труб и т.д.

    Конструкция

    Эти таймеры, выпускаемые разными производителями, очень похожи друг на друга конструктивно.

    В первую очередь – это автономные устройства, которые подключаются к существующей схеме электропитания через штепсельный разъем (розетку). На их корпусе есть два штыря, аналогичные тем, которые есть на так называемой электрической вилке.

    Конструкция механической розетки

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

    Деления на диске могут быть с градациями 15 и 30 минут. Коммутационные кнопки, в зависимости от модели, могут управлять как включением, так и выключением. Например, есть модели, в которых для отключения такую кнопку надо поднять, в других – «утопить».

    На корпусе таймера есть кнопка, которая его переключает из режима непрерывной подачи электроэнергии в регулируемый. Обычно она установлена сбоку, может быть дополнена устройством световой индикации.

    Видео-обзор о механической розетке с таймером Feron TM50:

    Таймеры-счетчики

    Таймер-счетчик

    Таймером называется средство микропроцессора, служащее для измерения времени и реализации задержек. Основой таймера служит суммирующий счетчик, который считает количество импульсов генератора тактовой частоты.
    Для таймера могут быть указаны:

    • разрядость таймера;
    • коэффициент предварительного деления;
    • диапазон изменения счетного регистра;
    • режим работы.

    Разрядность таймера представляет собой разрядность двоичного счетчика, используемого для его реализации и определяет верхнюю допустимую границу счетного регистра. Например, для 8-разрядного таймера верхняя граница счетного регистра будет 2 8 -1 = 255.

    Предварительный делитель – делитель частоты тактового сигнала, работающий как один или несколько последовательно соединенных T-триггеров. Таймер изменяет свое значение на 1 каждые n сигналов тактового импульса. n называют коэффициентом предварительного деления .

    Зная частоту тактового генератора fosc и коэффициент предварительного деления Kpre, легко определить частоту таймера по формуле:

    Время одного тика таймера соответственно будет

    Полное время счета таймера (время перебора всех допустимых значений двоичного счетчика) определится как

    Например, если требуется реализовать задержку 1с на 8-разрядном таймере с коэффициентом предварительного деления Kpre=1 и тактовой частотой fosc=8 МГц, имеем

    tic = 0,125 мкс;
    Tcount = 0,125*2 8 = 32 мкс
    1с/32мкс = 31250 повторений

    Широтно-импульсная модуляция

    Широтно-импульсная модуляция

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

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

    • быстрый ШИМ;
    • фазовый ШИМ.
    Быстрый ШИМ

    Быстрый ШИМ

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

    Фазовый ШИМ

    Фазовый ШИМ

    В данном режиме счетчик работает как суммирующий и считает от 0 до максимального значения, а при достижении максимального значения работает как вычитающий, считая до 0.

    При совпадении значения счетчика с некоторым установленным значением, происходит переключение выхода ШИМ.

    Частотно-импульсная модуляция — сигнал переменной частоты и постоянной скважности, равной 2. При таком виде модуляции изменяется период сигнала, а длительность импульса всегда составляет половину периода.

    Функции таймеров

    Электрические и электромеханические таймеры используют для автоматического контроля не только освещения, но и других электроприборов: обогревателей (в том числе систем тёплого пола), кондиционеров, вытяжек и прочего. По сравнению с постоянным ручным переключением устройств, в использовании реле времени есть следующие преимущества:

    Особенности реле времени

    • экономия электроэнергии;
    • постоянная поддержка в помещении нужной температуры и уровня освещения — к примеру, таймер может включить обогреватель или кондиционер за некоторое время до прихода человека домой и уже создать комфортные условия в комнате перед его появлением;
    • возможность контролировать дворовое и садовое освещение, а также прочее находящееся снаружи оборудование (например, системы полива растений) не выходя на улицу;
    • включение и выключение электроприборов по строгому расписанию даже при отсутствии рядом людей — особенно важно для аквариумов и террариумов, в которых правильная работа фильтров, светотепловых ламп, обогревателей и прочего оборудования жизненно необходима для обитателей;
    • своевременное отключение бытовой техники после того, как включивший оборудование человек уже ушёл — широко используется в конструкциях плит и стиральных машин, так как для этого подходят даже простейшие механические таймеры.

    Таким образом, реле времени довольно распространены и встречаются повсюду в повседневной жизни человека. Они недороги, но значительно увеличивают комфорт и экономят время и силы, что и принесло им популярность.

    Таймер-розетка. Видео

    Испытание работоспособности розетки с таймером представлено в видео ниже.

    Чтобы правильно пользоваться устройством, необходимо в точности выполнять все указания инструкции, которая обязательно прилагается к изделию. Там четко описано следующее:

    • общие технические характеристики;
    • назначение кнопок;
    • способ включения в сеть;
    • порядок установки времени и программ;
    • особенности настройки;
    • режимы работы;
    • указаны функции плавающего включения;
    • как осуществить переход на летнее и зимнее время.

    Таймер-розетки используются повсеместно теми, кто хочет экономить потребление электроэнергии, защитить объект от негативных последствий оставленных электроприборов без присмотра, наслаждаться комфортными условиями пребываниями в помещениях, а также облегчить работу на своем приусадебном участке. Этот современный девайс может многое, главное – понять принцип его работы и правильно подобрать под конкретные нужды.

    голоса
    Рейтинг статьи
    Читайте так же:
    Как взять счетчик яндекс метрики
Ссылка на основную публикацию
Adblock
detector