|
|||||||
| Уголок радиолюбителя Форумы любителей электроники. См. также Железнодорожная связь, Электронная аппаратура ЖАТ |
|
|
#1 (ссылка) |
|
V.I.P.
Регистрация: 14.05.2015
Сообщений: 255
Поблагодарил: 0 раз(а)
Поблагодарили 8 раз(а)
Фотоальбомы:
не добавлял
Репутация: 0
|
Тема: [08-2015] Средства генерации, счёта импульсов и формирования временных интервалов в ATxmegaСредства генерации, счёта импульсов и формирования временных интервалов в ATxmega А. САВЧЕНКО, пос. Зеленоградский Московской обл. Эта статья продолжает серию материалов того же автора об архитектуре микроконтроллеров семейства ATxmega. В микроконтроллерах ATxmega серии АЗ имеются восемь таймеров-счётчиков — по два на каждый из портов С D, Е, Е Основой для них стал довольно удачный шестнадцатиразрядный таймер-счётчик микроконтроллеров ATmega, который получил ряд полезных усовершенствований. Все эти таймеры-счётчики абсолютно идентичны между собой в функциональном плане, но подразделяются на два типа — ТСхО и ТСх1, где х — символическое имя порта, с которым ассоциирован таймер-счётчик. Различие в том, что ТСхО имеют по четыре канала захвата-сравнения, подключаемых к линиям 0—3 своего порта, а в ТСх1 — всего два таких канала, которые подключаются к линиям 4 и 5. Их предшественник — шестнадцатиразрядный таймер-счётчик микроконтроллера семейства ATmega — хорошо описан в [1], поэтому в предлагаемой статье речь пойдёт только об отличиях от него, присущих таймеру-счётчику ATxmega. Упрощённая структура таймера-счётчика представлена на рис. 1. Он может работать в следующих режимах: нормальном (NORMAL), генерации сигналов заданной частоты (FRQ) и генерации ШИМ-сигналов (PWM). Функционирование таймера-счётчика в этих режимах хорошо освещено в [2, 3], поэтому здесь не описывается. Очень полезное усовершенствование — введение в структуру таймера-счётчика регистра периода (PER) для хранения значения модуля счёта. В ходе работы счётчика содержимое его счёт ного регистра CNT изменяется от 0 до содержимого регистра PER в ходе прямого счёта и от содержимого регистра PER до 0 в ходе обратного счёта. Загружая новые значения в регистр PER, можно "на лету" изменять модуль счёта. Это существенно расширяет возможности таймера-счетчика, например, при генерации импульсных последовательностей и ШИМ-сигналов. Тактировать счётчик можно как сигналами тактовой частоты периферийных устройств микроконтроллера , так и сигналами, поступающими из системы событий. При этом сигналы событий могут использоваться не толь ко для тактирования, но и для управления работой таймера-счётчика, заставляя его, например, выполнять захват, сравнение или квадратурную дешифрацию, которая рассматривалась в статье [4].![]() Загрузка новых значений в регистр PER и регистры каналов захвата-сравнения CCA—CCD обычно происходит немедленно после их выдачи программой, однако в ряде случаев немедленное обновление нежелательно, поскольку может вызвать кратковременное появление так называемых "странных сигналов", например, нелогичное изменение длительности формируемых импульсов. Природу такого явления иллюстрирует рис. 2. Допустим, в регистр периода записано значение PERI, поэтому содержимое счётного регистра CNT циклически изменяется от 0 до этого значения. В момент времени , происходит перезагрузка регистра периода значением PER2 При PER2>PER1 нарушения в работе счётчика не происходит — CNT досчитает до значения PER2, обнулится и начнёт новый цикл счёта той же длительности.Но в момент времени производится перезагрузка регистра PER значением PER3. На этот раз PER3<PER2. Теперь логика управления ждёт выполнения условия CNT = PER3, чтобы обнулить счётчик. Однако в текущем цикле счёта это равенство не будет выполнено, если в момент времени значение CNT уже было больше PER3. Поэтому счетчик будет считать до переполнения, которое наступит после 65535-го тактового импульса, обнулится самостоятельно и лишь после этого начнёт выполнять циклы счёта от 0 до PER3.Подобное явление может иметь место при перезагрузке не только регистра периода, но и регистров каналов захвата-сравнения. Для исключения этих ситуаций в таймере-счётчике предусмотрена двойная буферизация загружаемых значений с помощью буферных регистров периода PERBUF и захвата-сравнения CCnBUF. При двойной буферизации новое значение предела счёта загружают не в основной, а в буферный регистр. Ситуация, представленная на рис. 2, принимает вид, показанный на рис. 3. При загрузке регистра PERBUF, которую производят в моменты времени , содержимое регистра PER не изменяется. Поэтому не меняется длительность выполняемых в это время циклов счёта. Но в моменты a одновременно с обнулением счётного регистра происходит перенос значения из регистра PERBUF в регистр PER, поэтому последующие циклы выполняются уже с НОВЫМ периодом. Более подробно механизм двойной буферизации рассмотрен в [3].При необходимости два 16-разряд-ных таймера-счётчика могут быть объединены в один 32-разрядный с помощью системы событий микроконтроллера. Переполнение "младшего" таймера-счётчика генеоирует событие, которое через канал системы событий поступает в качестве тактирующего сигнала на "старший" таймер-счётчик. Каждый таймер-счётчик микроконтроллера может генерировать запросы прерывания и события. Условия их генерации одинаковы: — переполнение (переход от максимального значения к нулевому) 8 ходе прямого счёта или переопустошение (переход от нулевого значения к максимальному) в ходе обратного счёта; — захват текущего состояния счётного регистра в регистр захвата или равенство текущего значения в счётном регистре значению, загруженному в регистр сравнения (фиксируется каждым из каналов); — переполнение буфера при использовании любого из каналов захвата-сравнения в режиме захвата. Таймер-счётчик принимает три программные команды управления, с помощью которых можно незамедлительно изменить его состояние. Команда обновления вызывает те же действия, что и достижение значением в счётном регистре условия обновления. Она может быть заблокирована, если установлен разряд блокировки обновления. Команда повторного старта выполняет принудительный перезапуск текущего периода генерации импульсов, а команда начальной установки позволяет инициализировать все регистры таймера-счётчика начальными значениями. Эта команда исполняется только при условии выключенного состояния таймера счётчика. И в заключение разговора об особенностях таймера-счётчика несколько слов о двух модулях микроконтроллера, которые хоть и считаются независимыми, но работают только в совокупности с таймером-счётчиком. Первый из них — модуль повышения разрешающей способности Hi-Res (Hi-Resoiution). Он предназначен для повышения разрешающей способности таймера-счётчика по времени в режимах генерации импульсов заданной частоты и ШИМ. Основа модуля — двухразрядный счётчик, тактируемый сигналом CLKPER4 (см. рис. 3 в [5]), частота которого в четыре раза выше частоты С1_КРЕН. При работе в режиме Hi-Res гаймер-счётчик тактируется сигналом CLKPER, однако с каждым тактовым импульсом значение в регистре CNT изменяется не на одну, а на четыре единицы (увеличивается при прямом счёте или уменьшается при обратном). При этом содержимое двух младших разрядов не изменяется.Результат счёта "склеивается" из 14- ги старших разрядов таймера-счётчика и двух разрядов дополнительного счётчика Hi-Res, которые становятся двумя младшими разрядами 16-разрядного результата счёта. Результат получается правильным, поскольку тактовые последовательности строгосинхронизированы. Разрешающая способность по времени в режиме Hi-Res улучшается в четыре раза. В режиме Hi-Res+ к 14-ти старшим разрядам счётного регистра добавляют три разряда дополнительного счётчика, который теперь использует оба (нарастающий и спадающий) перепада импульсов частотой . Поэтому разрешающая способность по времени улучшается в восемь раз.Микроконтроллер имеет четыре блока Hi-Res — по одному на каждый из портов, оснащённых таймерами-счётчиками. Ещё один, предназначенный для расширения возможностей таймера-счётчика, модуль микроконтроллера — AWeX (Auvanced Waveform extension — узел улучшения формы сигнала). Он расширяет возможности таймера-счётчика в режимах генерации импульсов и упрощает реализацию функций управления мощными двухтактными преобразователями напряжения и электродвигателями различных типов — асинхронных, шаговых, коммутируемых реактивных (SR) и бесщёточных постоянного тока (BLDC). В микроконтроллере имеются два модуля AWeX, которые работают только с нулевыми таймерами-счётчиками портов С и Е. Каждый из них реализует две функции: — формирует сигналы управления двухтактными импульсными преобразователями напряжения различного назначения со вставкой в выходные импульсные последовательности интервалов "мёртвого времени", что позволяет упростить создание этих узлов и управление их работой; — генерирует цифровые шаблоны, которые дают возможность управлять электродвигателями, требующими коммутации обмоток по сложным алгоритмам. Следует иметь в виду, что формируемые микроконтроллером сигналы выводятся через линии порта с невысокой нагрузочной способностью и требуют дополнительного усиления, а для управления верхними ключами полумо-стовых и мостовых преобразователей ещё и применения специализированных драйверов. В деталях работа модуля AWeX описана в [2, 3]. Управление таймером-счётчиком в BASCOM AVR Для конфигурирования таймеров-счетчиков в системе разработки про- грамм BASCOM AVR предназначена директива Config ТСху, где х — символическое имя порта, с которым ассоциирован таймер-счётчик; у — тип таймера-счётчика (0 или 1). Полное описание этой директивы приведено в разделе "Помощь" BASCOM AVR. Она позволяет задать большинство необходимых для настройки таймера-счётчика параметров, а недостающие параметры загружаются в программно-доступные регистры таймера-счётчика, основные из которых перечислены ниже. 1.Шестнадцатиразрядные регистры. PER — уже упоминавшийся выше регистр периода. CCA, ССВ, ССС, CCD — регистры каналов захвата-сравнения нулевого таймера-счётчика (в имеющем лишь два канала захвата-сравнения первом таймере-счётчике только регистры ССА и ССВ). 2. Восьмиразрядные регистры. CTRLA — регистр управления А. Разряды 4—7 не используются, их чтение возвращает нули. CLKSEL[3:0] (разряды 3—0) — выбор источника тактовых импульсов для таймера-счётчика в соответствии с табл. 1. ![]() CCDEN (разряд 7), CCCEN (разряд 6), CCBEN (разряд 5), CCAEN (разряд 4) — разрешения работы каналов захвата-сравнения. Чтобы выходной импульсный сигнал был выведен на линию порта ввода—вывода, необходимо записать 1 в соответствующий разряд этого регистра. Кроме того, линия ввода—вывода должна быть настроена как выход. Разряд 3 не используется, читается как 0. WGMODE[2:Oj (разряды 2—0) — код режима работы таймера-счётчика в соответствии с табл. 2. ![]() CTRLD — регистр управления D. EVACT[2:0] (разряды 7—5) — код реакции таймера-счётчика на событие в соответствии с табл. 3 ![]() EVDLY (разряд 4) — единица в этом разряде приводит к задержке сигнала выбранного источника на один период . Эта возможность специально предусмотрена для правильного функционирования составного 32-разряд-ного таймера-счётчика и необходима для компенсации задержки распространения сигнала, образующейся в результате каскадирования двух счётчиков.EVSEL[3:0] (разряды 3—0) — выоор источника событий в соответствии с табл. 4. ![]() CTRLF — регистр управления F. Разряды 7—4 не используются. CMD[1:0] (разряды 3, 2) — код программной команды управления таймером-счётчиком в соответствии с табл, 5. LUPD (оазряд 1) — блокировка обновления. DIR (разряд 0) — направление счёта: 0 — прямой, 1 — обратный. CTRLFSET — установка единиц в регистре CTRLF. CTRLFCLR — установка нулей в регистре CTRLF. С регистром CTRLF, как и с некоторыми другими регистрами таймера-счётчика, связаны два регистра установки. Оба они абсолютно идентичны по структуре, но выполняют по отношению к регистру CTRLF противоположные действия: единица в оазряде регистра CTRLFSET устанавливает такое же значение в соответствующем разряде регистра CTRLF, а единица в разряде регистра CTRLFCLR, наоборот обнуляет его. Так сделано для того, чтобы избежать применения к регистру CTRLF операции "чтение—модификация—запись”. INTFLAGS — регистр флагов прерываний. CCDIF (разряд 7), CCCIF (разряд 6), CCBIF (разряд 5), CCAIF (разряд 4) — флаги запросов прерывания от каналов захвата-сравнения. В режиме захвата флаг устанавливается, когда в соответствующем регистре блока сравнения появляется захваченная информация. Флаг снимается чтением соответствующего регистра захвата. Переход по вектору прерывания к снятию флага не приводит. В остальных режимах флаг устанавливается при совпадении значений в регистре CNT и соответствующем регистре сравнения. Он автоматически снимается при переходе по вектору прерывания. Разряды 3, 2 не используются, при чтении возвращают 0. ERRIF (разряд 1) — флаг прерывания по ошибке. В режимах генерации импульсов заданной частоты и ШИМ этот флаг устанавливается, если узлом аварийной защиты блока AWeX обнаружена некорректная работа. Флаг ERRIF никогда не устанавливается у таймеров-счётчиков, для которых не предусмотрен блок AWeX. В режиме захвата флаг ERRIF сигнализирует о переполнении буфера в любом из каналов захвата-сравнения, а в режиме управляемой событиями квадратурной дешифрации он свидетельствует о подаче некорректного индексного сигнала Флаг ERRIF автоматически снимается при переходе по соответствующему вектору прерывания. OVF (разряд 0) — флаг прерывания по переполнению/переопустошению счётного регистра. Он автоматически снимается при переходе по соответствующему вектору прерывания. Любой из Флагов прерывания можно снять записью в него единицы. Примеры работы с таймером-счётчиком В рассматриваемых далэе примерах предполагается, что тактовая частота CLKper равна 32 МГц. Пример 1. Вывести на линию PD2 прямоугольные импульсы частотой 75 кГц. Для этого необходимо выполнить следующее: — выбрать нужный таймер-счётчик и перевести его в режим генерации импульсов заданной частоты; — рассчитать необходимое значение модуля счёта и занести его в нужный регистр захвата-сравнения; — настроить линию PD2 на выход. Задачу будем решать с помощью таймера TCD0, так как его каналы захвата-сравнения подключены к линиям 1—3 порта D. К нужной второй линии подключён канал ССВ. Частота следования импульсов на выходе таймера-счётчика, согласно [3], равна ![]() где N — коэффициент предварительного деления частоты (см. описание регистра CTRLA); ССп —значение в нужном регистре канала захвата-сравнения, для нашего случая в регистр ССВ следует записать число ![]() Чтобы вычислить его, необходимо задаться одним из возможных (см. табл. 1) и при этом допустимых, исходя из решаемой задачи, значением N. Если вычисленное значение ССВ получилось дробным, его округляют до ближайшего целого. Чтобы уменьшить ошибку округления, следует выбирать N минимально возможным. Например, при N = 8 и вычисленном значении ССВ = 25,6(6) принимаем ССВ =26, что даёт ошибку 1,3 %. При N = 1 и вычисленном ССВ = 212,3(3) принимаем ССВ = 212, чем уменьшаем ошибку до 0,15%. Выбираем последний вариант и составляем программу: ![]() Пример 2. Настроить таймер-счётчик на генерацию широтно-модулированной импульсной последовательности в режиме двунаправленного счёта (условие обновления — CNT=0) с двойной буферизацией, разрешающей способностью 6 разрядов и частотой 62,5 кГц. Вывести сигнал на вывод РС4. Для формирования этого сигнала следует использовать канал захвата-сравнения А (регистр ССА) таймера-счётчика ТСС1. При двунаправленном счёте действуют следующие соотношения [3]. —требуемое значение модуля счёта, хранимое в регистре периода ![]() где m — разрешающая способность, разрядов. Для m = 6 получаем PER = 63; — частота следования импульсов ![]() где N — коэффициент предварительного деления частоты (см. регистр CTRLA). Зная значение PER, легко подсчитать. что N = 4. Осталось разобраться с двойной буферизацией. В рассмотренной выше информации о структуре программнодоступных регистров отсутствуют какие-либо сведения о том, как включить этот режим. Не предусмотрены соответствующие параметры и в директивах конфигурации таймера-счётчика. Как быть? Всё просто — двойная буферизация будет автоматически включена, если вместо регистра PER загрузить значение периода в регистр PERBUF. Теперь можно приступать к программированию; ![]() На этом настройка таймера-счётчика закончена. Теперь значением в регистре ССА можно задавать требуемый коэф- II фициент заполнения импульсов. Сле- I дующая строка установит его равным приблизительно 50 %: ![]() Необходимо лишь следить, чтобы в процессе работы программы число в регистре ССА не превысило значения в регистре PER. ЛИТЕРАТУРА 1. Евстифеев А. В. Микроконтроллеры AVR семейств Tiny и Меда фирмы At.nel. — М.: "Додэка-ХХГ, 2008. 2. Xmega A. Manual. — URL: http://www. atmel.com/lmages/doc8077.pdf (28.03.15). 3. Руководство по 8-битным AVR-микроконтроллерам XMEGA А. — URL: http://www. gaw.ru/html.cgi/txt/aoc/micros/avr/arh_x mega a (28.03.15). 4. Савченко А. Система событий микроконтроллеров ATxmega. — Радио, 20'5, № 2, с. 24-27. 5. Савченко А. Система синхронизации микроконтроллера ATxmega и её настройка средствами BASCOM AVR. — Радио, 2015, № 7, с. 27-29. |
|
|
Цитировать 0 |
|
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| [07-2015] Система синхронизации микроконтроллера ATxmega и её настройка средствами BASCOM AVR | poster333 | Уголок радиолюбителя | 0 | 08.10.2015 00:30 |
| [06-2015] Особенности портов ввода-вывода микроконтроллера ATxmega и их настройка средствами BASCOM AVR | poster333 | Уголок радиолюбителя | 0 | 06.10.2015 03:05 |
| [РЖД ТВ] Минтранс предложил заложить средства в бюджет на 2015-2017 годы на финансирование проекта ВСМ | rzd.ru | Новости на сети дорог | 0 | 22.06.2014 03:04 |
| [07-2010] Средства генерации сжатого воздуха на сортировочных горках | Admin | xx3 | 0 | 17.06.2011 11:13 |
| Р 32.178-2001 Рекомендации по метрологии. Методика расчета межкалибровочных интервалов шаблонов, применяемых на федеральном железнодорожном транспорте | Admin | ОСТы | 0 | 04.05.2011 15:51 |
| Ответить в этой теме Перейти в раздел этой темы Translate to English |
| Возможно вас заинтересует информация по следующим меткам (темам): |
| , |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|