Schetchiksg.ru

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

Что такое таймер со счетчиком

поставка промышленной электроники

Таймеры / Счетчики

Аналоговые и цифровые таймеры

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

Таймеры AUTONICS имеют несколько независимых программ управления внешними исполнительными устройствами. На их входы можно подключать элементы с цифровым выходом и «сухим» контактом».
Таймеры имеют встроенный счётчик времени (текущее время и дата), различные элементы блокировки и сброса. Встроенный дисплей позволяет визуально наблюдать за операциями отсчёта времени. Кнопки программирования на передней панели позволяют легко устанавливать и менять необходимые программы отсчёта. Количество внешних выходов у реле времени варьируется от одного до трёх. Таймеры AUTONICS имеют входы для внешнего управления ими, а именно – внешний запуск, стробирование, сброс.

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

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

Таймер AT8P

AT8P Серия ТАЙМЕР С ЗАДЕРЖКОЙ ВЫКЛЮЧЕНИЯ
Размеры: W48 X H48 мм
Питание: 110 или 220 VAC, опционально 24VDC
Возможна установка времени при выключенном питании
Крепление панельное или на DIN-рейку
Установка времени на лицевой панели
Два выходных управляющих контакта

Таймер AT8SDN

AT8SDN Серия для двигателей (треугольник, звезда)
Размер: W48 X H48 мм
Питание: 100-240 VAC/24-240VDC 12 VDC (выборочно)
Отдельные установки времени для «Звезды» и «Треугольника» (переключение)
Крепление панельное или на DIN-рейку
Установка времени на лицевой панели
Индикаторы LED для отображения состояния выхода

Таймер ATE

ATE Серия АНАЛОГОВЫЙ ТАЙМЕР С ЗАДЕРЖКОЙ ВКЛЮЧЕНИЯ
Размеры: W48 X H48 мм
Питание: 110 или 220 VAC опционально 12 или 24VDC
Два релейных выхода
Крепление панельное или на DIN-рейку
15 различных диапазонов времени

Таймер ATN

ATN Серия МНОГОФУНКЦИОНАЛЬНЫЙ ТАЙМЕР
Размеры: W48 X H48 мм
Питание: 100-240 VAC/24-240VDC
Программируемые режимы выходов
Программируемые диапазоны времени
Два релейных выхода (разъем подключения 8 или 11 pin)
Крепление панельное или на DIN-рейку
Индикаторы LED для отображения состояния выхода

Счетчик импульсов / Таймер CT/CTS/CTY

CT/CTS/CTY Серия LED СЧЕТЧИК/ТАЙМЕР
Выбор режима Счетчика/Таймера
Функция масштабирования
Выбор скорости счета 1/30/1K/5K/10Kимп/с
Функция группового счета для CT6, CT6-2P
Выбор входной логики: NPN или PNP
Возможность установки ON/OFF времени в мигающем режиме (FLK)

Таймер FSE

FSE Серия LED МНОГОФУНКЦИОНАЛЬНЫЙ ТАЙМЕРА
Размеры: W48 X H48 мм
Питание: 100-240 VAC опционально 12-24 VDC
Светодиодная индикация (4 или 5 разрядов)
Программируемые диапазоны времени
Сохранение в памяти
Крепление панельное или на DIN-рейку

Счетчик импульсов / Таймер FX/FXH/FXL

FX/FXH/FXL Серия СЧЕТЧИК/ТАЙМЕР
Размеры: W72xH72мм, W48xH96мм или W144xH72мм
Питание: 100-240 VAC опционально 12-24 VDC
Режим Одиночной/Двойной предустановки
Светодиодная индикация (4 или 6 разрядов)
Программируемые режимы входа/выхода

Счетчик импульсов / Таймер FXS

FXS Серия СЧЕТЧИК/ТАЙМЕР
Размерs: W48 X H48 мм
Питание: 100-240 VAC опционально 12-24 VDC
Светодиодная индикация (4 или 5 разрядов)
Программируемые режимы входа/выхода
Релейный и транзисторный выход
Встроенный источник питания +12 VDC

Читайте так же:
Ночное время для 2 тарифного счетчика
Счетчик импульсов / Таймер FXY

FXY Серия СЧЕТЧИК/ТАЙМЕР индикаторного типа
Размеры: W72 X H36мм
Питание: 100-240 VAC опционально 12-24 VDC
Светодиодная индикация (4 или 6 разрядов)
Программируемые режимы входа
Встроенный источник питания +12 VDC

Таймер LE3S

LE3S Серия МНОГОФУНКЦИОНАЛЬНЫЙ ТАЙМЕР
Размеры: W48 X H48 мм
Питание: 100-240 VAC/24-240 VDC
Выбор функций цифровым переключателем на лицевой панели
Программируемые функции выхода
Программируемые диапазоны времени
Крепление панельное или на DIN-рейку
Жидкокристаллический дисплей

Таймер LE4S

LE4S Серия ТАЙМЕР с подсветкой
Размеры: W48 X H48 мм
Питание: 100-240 VAC/24-240 VDC
Программируемые функции выхода
Программируемые диапазоны времени
Крепление панельное или на DIN-рейку
Внутренняя батарея для автономного программирования
Установка параметров с помощью мягкий клавиш
Высокая чувствительность
LCD дисплей с подсветкой

Таймер LE7D

LE7D-2 Серия недельный ТАЙМЕР
Размер: W72 X H72 мм
Питание: 100-240 VAC
Индивидуальные программы для каждого дня
Два независимых контактных выхода
До 24 независимых программ
3 программируемых функции выхода
Ручное отключение выходов
Элементы для крепления на щите, DIN-рейке и поверхности

Таймер LE7N

LE7N Серия LCD ТАЙМЕР
Размеры: W48 X H24 мм
Внутренняя батарея питания
Жидкокристаллический дисплей
7 разрядная индикация
Различные диапазоны времени

Таймер LE8N (апгрейд серии LE7N)

LE8N Серия LCD ТАЙМЕР
Размеры: W48 X H24 мм
Внутренняя батарея питания
Жидкокристаллический дисплей
7 разрядная индикация
Различные диапазоны времени

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

(от англ. Timer) — в информатике — средство обеспечения задержек и измерения времени средствами компьютера. Существуют два вида таймеров:

  • аппаратные таймеры функционируют независимо от центрального процессора и в момент срабатывания генерируют прерывание
  • программные таймеры реализуются за счет выполнения в цикле заданного количества одинаковых «пустых» операций. При фиксированной частоте работы процессора это позволяет точно определять прошедшее время
  • Часто используют таймер-счетчики, которые тактируются от внешних кварцевых резонаторов
  • Микроконтроллер stm32 внутри имеет специальный тактовый генератор, который не использует внешний кварцевый резонатор
  1. Моргать светодиодами (500 миллисекунд включено, 500 миллисекунд выключено)
  2. Каждые 5 секунд посылать сообщения в компьютер

Самый простой способ — это использовать функцию, которая задерживает выполнение кода в определенном месте.

  • Поставим функцию в главный цикл программы
  • После функции поставим вызовы, которые меняют состояние микроконтроллера
  • Получим периодическое изменение состояния микроконтроллера

Таймер-счетчики — это специальные аппаратные регистры внутри микроконтроллера.

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

1. Настраиваем таймер-счетчик в микроконтроллере на поступление событий в 1 миллисекунду

2. Используем программные счетчики для того, чтобы формировать события с периодами большими, чем 1 миллисекунда

3. Инициализируем счетчики для периодов в 500 мс (для светодиодов) и 5 с (для отправки данных на компьютер)

4. Устанавливаем флаги. Сбрасываем событие «раз в 500 мс» и «раз в 5 с»

5. Далее работаем в обработчике прерывания переполнения таймера

1. Копируем прошлый проект и переименовываем его

2. В файле main.c в главном цикле программы закомментируем код от предыдущего проекта (работа с UART)

Читайте так же:
Как привязать счетчик яндекс метрика

3. Настраиваем таймер
Categories → Timers → TIM1

4. Устанавливаем для него тактирование от внутреннего 80 МГц таймера

5. В параметрах устанавливаем Prescaler (PSC — 16 bits value) 999 и Counter Period 79

7. Переходим System Core → NVIC

8. Настраиваем приоритеты прерывания

33. Таймер-счетчик (ТС)

Таймер-счетчик (ТС) микроконтроллеров AT91SAM7S256/128/64/321 содержит три идентичных канала 16-разрядного таймера-счетчика (у AT91SAM7S32 содержится два таких канала).

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

Каждый канал AT91SAM7S256/128/64/321 имеет три входа внешней синхронизации (один у AT91SAM7S32), пять входов внутренней синхронизации и два сигнала ввода-вывода общего назначения, которые могут конфигурироваться пользователем. Каждый канал формирует внутренний сигнал прерывания, который может быть запрограммирован на генерацию процессорных прерываний.

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

Регистр управления блоком позволяет с помощью одной инструкции стартовать работу трех (или двух) каналов.

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

33.2 Структурная схема


Рисунок 33.1. Структурная схема таймера-счетчика1

  1. TIOA2 и TIOAB2 не относятся к AT91SAM7S32.

Таблица 33.1 — Описание сигналов

Блок/каналНаименование сигналовОписание
Сигнал каналаXC0, XC1, XC2Входы внешней синхронизации
TIOAРежим захвата: вход таймера-счетчика
Режим генератора: выход таймера-счетчика
TIOBРежим захвата: вход таймера-счетчика
Режим генератора: вход/выход таймера-счетчика
INTВыход сигнала прерывания
SYNCВходной сигнал синхронизации

33.3 Перечень выводов таймера-счетчика

Таблица 33.2. Перечень выводов таймера-счетчика

Наименование выводаОписаниеТип
TCLK0-TCLK2Вход внешней синхронизацииВвод
TIOA0-TIOA2 1Линия А ввода-выводаВвод/вывод
TIOB0-TIOB2 1Линия В ввода-выводаВвод/вывод
  1. TIOA2 и TIOAB2 не относятся к AT91SAM7S32.

33.4 Различия в реализации таймера-счетчика в семействе AT91SAM7S

33.4.1 Линии ввода-вывода

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

33.4.2 Контроллер управления потребляемой мощностью

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

Линия прерывания ТС соединена с расширенным контроллером прерываний (AIC). Для обработки прерывания ТС необходимо запрограммировать AIC перед конфигурацией ТС.

Arduino и прерывания таймера

Привет, Хабр! Представляю вашему вниманию перевод статьи «Timer interrupts» автора E.

Предисловие

Плата Arduino позволяет быстро и минимальными средствами решить самые разные задачи. Но там где нужны произвольные интервалы времени (периодический опрос датчиков, высокоточные ШИМ сигналы, импульсы большой длительности) стандартные библиотечные функции задержки не удобны. На время их действия скетч приостанавливается и управлять им становится невозможно.

В подобной ситуации лучше использовать встроенные AVR таймеры. Как это сделать и не заблудиться в технических дебрях даташитов, рассказывает удачная статья, перевод которой и предлагается вашему вниманию.

В этой статье обсуждаются таймеры AVR и Arduino и то, как их использовать в Arduino проектах и схемах пользователя.

Читайте так же:
Как программировать счетчик матрица

Что такое таймер?

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

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

Итак, предположим, что имеется устройство, которое должно что-то делать, например мигать светодиодом каждые 5 секунд. Если не использовать таймеры, а писать обычный код, то надо установить переменную в момент зажигания светодиода и постоянно проверять не наступил ли момент ее переключения. С прерыванием по таймеру вам достаточно настроить прерывание, и затем запустить таймер. Светодиод будет мигать точно вовремя, независимо от действий основной программы.

Как работает таймер?

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

Вы можете проверять этот флаг вручную или можете сделать таймерный переключатель — вызывать прерывание автоматически в момент установки флага. Подобно всяким другим прерываниям вы можете назначить служебную подпрограмму прерывания (Interrupt Service Routine или ISR), чтобы выполнить заданный код, когда таймер переполнится. ISR сама сбросит флаг переполнения, поэтому использование прерываний обычно лучший выбор из-за простоты и скорости.

Чтобы увеличивать значения счетчика через точные интервалы времени, таймер надо подключить к тактовому источнику. Тактовый источник генерирует постоянно повторяющийся сигнал. Каждый раз, когда таймер обнаруживает этот сигнал, он увеличивает значение счетчика на единицу. Поскольку таймер работает от тактового источника, наименьшей измеряемой единицей времени является период такта. Если вы подключите тактовый сигнал частотой 1 МГц, то разрешение таймера (или период таймера) будет:

T = 1 / f (f это тактовая частота)
T = 1 / 1 МГц = 1 / 10^6 Гц
T = (1 ∗ 10^-6) с

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

Типы таймеров

В стандартных платах Arduino на 8 битном AVR чипе имеется сразу несколько таймеров. У чипов Atmega168 и Atmega328 есть три таймера Timer0, Timer1 и Timer2. Они также имеют сторожевой таймер, который можно использовать для защиты от сбоев или как механизм программного сброса. Вот некоторые особенности каждого таймера.

Timer0:
Timer0 является 8 битным таймером, это означает, что его счетный регистр может хранить числа вплоть до 255 (т. е. байт без знака). Timer0 используется стандартными временными функциями Arduino такими как delay() и millis(), так что лучше не запутывать его если вас заботят последствия.

Timer1:
Timer1 это 16 битный таймер с максимальным значением счета 65535 (целое без знака). Этот таймер использует библиотека Arduino Servo, учитывайте это если применяете его в своих проектах.

Читайте так же:
Сброс счетчика тонера brother dcp 7065dnr через меню

Timer2:
Timer2 — 8 битный и очень похож на Timer0. Он используется в Arduino функции tone().

Timer3, Timer4, Timer5:
Чипы ATmega1280 и ATmega2560 (установлены в вариантах Arduino Mega) имеют три добавочных таймера. Все они 16 битные и работают аналогично Timer1.

Конфигурация регистров

Для того чтобы использовать эти таймеры в AVR есть регистры настроек. Таймеры содержат множество таких регистров. Два из них — регистры управления таймера/счетчика содержат установочные переменные и называются TCCRxA и TCCRxB, где x — номер таймера (TCCR1A и TCCR1B, и т. п.). Каждый регистр содержит 8 бит и каждый бит хранит конфигурационную переменную. Вот сведения из даташита Atmega328:

TCCR1A
Бит7654321
0x80COM1A1COM1A0COM1B1COM1B0WGM11WGM10
ReadWriteRWRWRWRWRRRWRW
Начальное значение
TCCR1B
Бит7654321
0x81ICNC1ICES1WGM13WGM12CS12CS11CS10
ReadWriteRWRWRRWRWRWRWRW
Начальное значение

Наиболее важными являются три последние бита в TCCR1B: CS12, CS11 и CS10. Они определяют тактовую частоту таймера. Выбирая их в разных комбинациях вы можете приказать таймеру действовать на различных скоростях. Вот таблица из даташита, описывающая действие битов выбора:

CS12CS11CS10Действие
Нет тактового источника (Timer/Counter остановлен)
1clk_io/1 (нет деления)
1clk_io/8 (делитель частоты)
11clk_io/64 (делитель частоты)
1clk_io/256 (делитель частоты)
11clk_io/1024 (делитель частоты)
11Внешний тактовый источник на выводе T1. Тактирование по спаду
111Внешний тактовый источник на выводе T1. Тактирование по фронту

По умолчанию все эти биты установлены на ноль.

Допустим вы хотите, чтобы Timer1 работал на тактовой частоте с одним отсчетом на период. Когда он переполнится, вы хотите вызвать подпрограмму прерывания, которая переключает светодиод, подсоединенный к ножке 13, в состояние включено или выключено. Для этого примера запишем Arduino код, но будем использовать процедуры и функции библиотеки avr-libc всегда, когда это не делает вещи слишком сложными. Сторонники чистого AVR могут адаптировать код по своему усмотрению.

Сначала инициализируем таймер:

Регистр TIMSK1 это регистр маски прерываний Таймера/Счетчика1. Он контролирует прерывания, которые таймер может вызвать. Установка бита TOIE1 приказывает таймеру вызвать прерывание когда таймер переполняется. Подробнее об этом позже.

Когда вы устанавливаете бит CS10, таймер начинает считать и, как только возникает прерывание по переполнению, вызывается ISR(TIMER1_OVF_vect). Это происходит всегда когда таймер переполняется.

Дальше определим функцию прерывания ISR:

Сейчас мы можем определить цикл loop() и переключать светодиод независимо от того, что происходит в главной программе. Чтобы выключить таймер, установите TCCR1B=0 в любое время.

Как часто будет мигать светодиод?

Timer1 установлен на прерывание по переполнению и давайте предположим, что вы используете Atmega328 с тактовой частотой 16 МГц. Поскольку таймер 16-битный, он может считать до максимального значения (2^16 – 1), или 65535. При 16 МГц цикл выполняется 1/(16 ∗ 10^6) секунды или 6.25e-8 с. Это означает что 65535 отсчетов произойдут за (65535 ∗ 6.25e-8 с) и ISR будет вызываться примерно через 0,0041 с. И так раз за разом, каждую четырехтысячную секунды. Это слишком быстро, чтобы увидеть мерцание.

Если мы подадим на светодиод очень быстрый ШИМ сигнал с 50% заполнением, то свечение будет казаться непрерывным, но менее ярким чем обычно. Подобный эксперимент показывает удивительную мощь микроконтроллеров — даже недорогой 8-битный чип может обрабатывать информацию намного быстрей чем мы способны обнаружить.

Делитель таймера и режим CTC

Чтобы управлять периодом, вы можете использовать делитель, который позволяет поделить тактовый сигнал на различные степени двойки и увеличить период таймера. Например, вы бы хотели мигания светодиода с интервалом одна секунда. В регистре TCCR1B есть три бита CS устанавливающие наиболее подходящее разрешение. Если установить биты CS10 и CS12 используя:

то частота тактового источника поделится на 1024. Это дает разрешение таймера 1/(16 ∗ 10^6 / 1024) или 6.4e-5 с. Теперь таймер будет переполняться каждые (65535 ∗ 6.4e-5с) или за 4,194с. Это слишком долго.

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

Чтобы использовать режим CTC надо понять, сколько циклов вам нужно, чтобы получить интервал в одну секунду. Предположим, что коэффициент деления по-прежнему равен 1024.

Расчет будет следующий:

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

Функция настройки setup() будет такая:

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

Сейчас светодиод будет зажигаться и гаснуть ровно на одну секунду. А вы можете делать все что угодно в цикле loop(). Пока вы не измените настройки таймера, программа никак не связана с прерываниями. У вас нет ограничений на использование таймера с разными режимами и настройками делителя.

Вот полный стартовый пример который вы можете использовать как основу для собственных проектов:

Помните, что вы можете использовать встроенные ISR функции для расширения функций таймера. Например вам требуется опрашивать датчик каждые 10 секунд. Но установок таймера, обеспечивающих такой долгий счет без переполнения нет. Однако можно использовать ISR чтобы инкрементировать счетную переменную раз в секунду и затем опрашивать датчик когда переменная достигнет 10. С использованием СТС режима из предыдущего примера прерывание могло бы выглядеть так:

Поскольку переменная будет модифицироваться внутри ISR она должна быть декларирована как volatile. Поэтому, при описании переменных в начале программы вам надо написать:

Послесловие переводчика

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

голоса
Рейтинг статьи
Ссылка на основную публикацию