Микроконтроллеры С2000 от Texas Instruments
Тренинг
Содержание тренинга
0. Вступление
1. Обзор архитектуры С2000
2. Обзор среды разработки приложений Л.р.: Файл настройки линкера
3. Header-файлы регистров периферии
4. Аналого-цифровой преобразователь Л.р.: Система сбора данных
5. Управление периферией Л.р.: Формирование ШИМ-сигнала
Что такое С2000? Производительная обработка
сопроцессор
CLA
Тактовая частота до 300 МГц
ускоритель
VCU FPU
32-битное
DSP ядро
Быстрый отклик на прерывания
Умножение 32Х32 за 1 цикл Двойной MAC 16Х16
Режим реального времени
Производительность DSP в микроконтроллерной архитектуре •C28x - 32-битное ядро CPU 40-300 МГц: - встроенные DSP-функции; - умножение 32X32 за один цикл. •Сопроцессор CLA •Модуль вычислений с плавающей точкой (FPU) •Модуль комплексной математики и декодирования Витерби(VCU) •Встроенная FLASH-память
Системная интеграция
CAN
USB
SPI
I2C
SCI
QEP CAP CMP
PWM
ADC
Разработан для приложений управления в реальном времени •Оптимизированное ядро •Быстрые прерывания •Гибкая система прерываний •Отладка в реальном времени
Комплексный набор периферийных устройств •Лучшая в классе производительность АЦП •Гибкий модуль ШИМ высокого разрешения •Продвинутый модуль захвата (CAP) •Модуль обслуживания квадратурного энкодера (QEP) •CAN, LIN, SPI, I2C, SCI/UART, McBSP, USB •Компараторы, VREG, BOR/POR, встроенные генераторы тактовых импульсов
Широкое портфолио конфигураций •40-300 МГц •Устройства с фикс. и с плавающей точкой •Многоядерность c ARM Cortex-M3 •16-1024 кБ FLASH-памяти •От 3$ до 20$ •Совместимость программного обеспечения внутри всей линейки C2000
Математическое Ядро
ADC Ток или напряжение системы
CAN
UART
SPI
IIC
RX TX
Петля управления (напр. PID/2P2Z)
PWM
Преобразователь
Управление в реальном времени = Замкнутая ОС
Математическое ядро, рассчитывающее сложные алгоритмы быстро и с высокой точностью
Настраиваемый ШИМ-модуль, поддерживающий широкий диапазон топологий и высокое разрешение
Быстрый АЦП , работающий синхронно с математическим ядром
Передача данных в другие системы
Наборы готовых программ для реального использования Математические библиотеки для устройств с фиксированной и плавающей точкой, программные
конструкции для конкретных приложений, оптимизированные блоки управления, моделируемое ПО
Вход
Вычисления
Выход
Внешние
устройства
Управление
Управление
Уп
рав
лен
ие
Область применений C2000
Инверторы солнечной энергии
Инверторы энергии ветра
AC/DC преобразователи
для телекоммуникаций / серверов
Бесперебойные источники питания
Электрическое рулевое управление
Радары/ Предотвращение аварий
High/Low Bay Lighting
Светодиодное освещение
E-bike
Гибридный электротранспорт
Автомобильное освещение
Power Line Communication
DC/DC преобразователи
C2000
White Goods Промышленные драйвера
Мощные инструменты
Счетчики Радиосвязь
Развлечение
Возобновляемая энергетика
Управление двигателем
Системы освещения Умные сети и PLC
Электропитание
Автомобильная техника
Piccolo™ Delfino™ Concerto™
3 основные ветви C2000
F28M35x C2834x
F2833x
Более 150 совместимых по коду устройств, с ценой от 3 $.
Производительность:
40-90MHz 28x CPU Floating Point Unit (опционально) Сопроцессор CLA (опционально) Ускоритель VCU (опционально)
Память:
16kB-256kB Flash
6kB-100kB SRAM
Ключевая периферия:
ADC, PWM, QEP, DMA, SPI, UART, I2C, CAN, USB
Корпуса:
38 TSSOP, 48 QFP, 56 QFN, 64 QFP, 80 QFP, 100 QFP
Производительность:
100-300MHz 28x CPU Floating Point Unit
Память:
Up to 512kB Flash Up to 516 kB SRAM
Ключевая периферия:
ADC, PWM, QEP, DMA, SPI, UART, I2C, CAN, EMIF
Корпуса:
176 QFP, 176 BGA, 179 u*BGA,
256 BGA
Производительность:
Dual Core 28x CPU До 150MHz
Up to 125MHz ARM Cortex M3 CPU Floating Point Unit Ускоритель VCU
Память:
256kB-1.5MB Flash Up to 296kB SRAM
Ключевая периферия:
ADC, PWM, QEP, DMA, EMIF, SPI, UART, I2C, CAN, USB, EMAC
Корпуса:
144 QFP, 289nBGA
F28M36x
F2806x F2805x
F2803x
F2802x
C2000™ Piccolo LaunchPad
Может быть использовано как отдельный модуль в более сложных системах
Клавиша сброса и программируемая клавиша
Переключатели выбора режима загрузки и отключения интерфейса SCI
Разъемы с двух сторон для удобного прототипирования и подключения Booster-паков
Индикаторы: индикация приема/передачи UART
4 светодиода для отладки
Бесплатное использование среды разработки Code Composer Studio 5 с многочисленными примерами приложений
Средство разработки на базе F28027 :
Сравнение микроконтроллеров семейства C2000 F2833x F2803x F2806x F28027
Clock 150 MHz 60 MHz 80 MHz 60 MHz
Flash / RAM 128Kw / 34Kw 64Kw / 10Kw 128Kw / 50Kw 32Kw / 6Kw
On-chip Oscillators - 2 2 2
VREG / POR / BOR -
Watchdog Timer
12-bit ADC SEQ - based SOC - based SOC - based SOC - based
Analog COMP w/ DAC -
FPU - -
6-Channel DMA - -
CLA - -
VCU - - -
ePWM / HR ePWM / / / /
eCAP / HR eCAP / - / - / / -
eQEP -
SCI / SPI / I2C
LIN - - -
McBSP - -
USB - - -
External Interface - - -
Микроконтроллеры C2000 от Texas Instruments Модуль 1
Архитектура
Содержание модуля
• Обзор структурной схемы и аппаратных особенностей
• Описание структуры шины и карты памяти
• Обзор блоков памяти
• Обзор периферии
С28x: Структурная схема
Sectored
Flash RAM
Boot
ROM
3
32-bit
Timers
PIE Interrupt Manager
eQEP
Watchdog
I2C
SCI
SPI
GPIO
eCAP
CLA
CAN 2.0B
12-bit ADC
Шина CLA
32x32 bit
Multiplier
32-bit
Auxiliary
Registers
CPU
R-M-W
Atomic
ALU
FPU
VCU
DMA
6 Ch.
Шина DMA
McBSP
ePWM
USB 2.0
Шина регистров
Шина данных
Шина программы
Шина записи данных/программ (32)
Шина адреса записи данных (32)
Шина чтения данных (32)
Шина адреса чтения данных (32)
Шина чтения программы (32)
Шина адреса программы (22)
С28x: Внутренняя организация шин
Выполнение
R-M-W
Atomic
ALU
Real-Time
JTAG
Emulation XAR0 to
XAR7
SP
DP @X
ARAU MPY32x32
XT P
ACC
ALU
Регистры Отладка FPU
R0H-R7H Память
данных
Периферия
VCU VR0-VR8
CLA MR0-MR3
Шина регистров/Шина результата
Память
программ
Программа
Decoder
PC
@X
Шина программы
Возможность выбора между компактностью кода и скоростью выполнения программы: команды 16-бит для увеличения плотности кода команды 32-бит для оптимизации по времени
32-битное ядро CPU производит вычисления с фиксированной точкой
Модуль FPU для вычислений с плавающей точкой увеличивает производительность
MAC 32x32 может использоваться как два перемножителя 16x16
Модуль CLA, работающий независимо от CPU Viterbi, Complex Math, CRC Unit (VCU)
добавляет поддержку декодированияViterbi, математики с комплексными числами и CRC операций
Быстрый отклик на прерывания Команды чтения-модификации-записи,
выполняемые за 1 цикл Возможность отладки в реальном времени
С28x CPU + FPU + VCU и CLA
Шина данных
3 32-bit
Timers CPU
Register Bus
32x32 bit
Multiplier
32-bit
Aux
Regs
R-M-W
Atomic
ALU
CLA
Шина CLA
FPU
VCU
PIE
С28x: Атомарная операция Чтение/Модификация/Запись
Регистры ALU / MPY
ЗАГРУЗКА
СОХРАНЕНИЕ
ЗАПИСЬ
ЧТЕНИЕ
CPU
Пам
ять
Упрощение программ Более компактный и быстрый код Непрерывность (атомарность) Более эффективный компилятор
AND *XAR2,#1234h
2 слова / 1 цикл
Атомарная операция
MOV AL,*XAR2 AND AL,#1234h MOV *XAR2,AL
DINT EINT
6 слов / 6 циклов
Стандартная операция
Преимущества атомарных операций:
F1 F2 D1 D2 R1 R2 E
С28x: Конвейер CPU
Защита конвейера CPU
Последовательность действий такая,
как в исходном коде
Программисту нет необходимости
принимать меры по защите
конвейера
8-ступенчатый конвейер
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
F1 F2 D1 D2 R1 R2 E
A
B
C
D
E
F
G
W
W
W
W
W
W
W
W
E & G Обращаются по одному адресу
R1 R2 E W
D2 R1 R2 E W
F1: Адрес команды F2: Содержимое команды D1: Декодирование команды D2: Вычисление адреса операнда R1: Адрес операнда R2: Получение операнда E: CPU выполняет “реальную” работу W: Сохранение данных в память
H
Карта памяти TMS320F28027
0x000000
0x000400
0x000800 M1 SARAM (1Kw)
M0 SARAM (1Kw)
Данные Программа
PIE Vectors (256 w)
PF 0 (6Kw) reserved
PF 3 (4Kw)
PF 1 (4Kw)
L0 SARAM (4Kw)
0x000D00
0x002000
0x005000
0x006000
0x008000
0x009000
0x03D7800
0x03D7C80
0x000E00
0x03D7C00 Данные Программа
Boot ROM (32Kw)
Защищены модулем CSM :
L0,OTP, FLASH,
ADC CAL,
Flash Regs in PF0
BROM Vectors (64w)
PF 2 (4Kw) 0x007000
0x03D7CС0
0x03D7CE0
0x03D7E80
reserved
User OTP (1Kw)
reserved
ADC / OSC cal. data
Get_mode function
reserved
ADC / OSC cal. data
reserved
Part ID
reserved
FLASH (32Kw)
PASSWORDS (8w)
reserved
0x03D7EB0
0x03D7FFF
0x03D7FFF
0x03D8000
0x03F0000
0x03F7FF8
0x03F8000
0x03F9000
0x03FE000
0x03FFFFF
0x03FFFС0
L0 SARAM (4Kw)
Модуль защиты кода (CSM) Предотвращает обратный инжиниринг и защищает
интеллектуальную собственность
128-битный пароль пользователя хранится во Flash
128-бит = 2128 = 3.4 x 1038 возможных паролей
Чтобы перебрать все возможные варианты паролей, потребуется как минимум 1.1 x 1024 лет для ввода 1 пароля каждый цикл на частоте 80 МГц.
L0 SARAM (4Kw) 0x008000
0x009000
0x03D7800
0x03D7C00 User OTP (1Kw)
0x03D7C80
0x03D7CС0
0x03D7E80
ADC / OSC cal. data
ADC / OSC cal. data 0x03D7EB0
FLASH (32Kw)
PASSWORDS (8w)
0x03F0000
0x03F7FF8
0x03F8000
F28x: Менеджер прерываний быстрого отклика
96 выделенных векторов PIE
Не требуется принятия решений
на программном уровне
Прямой доступ к векторам RAM
Автоматическое обновление
флагов
Автосохранение контекстной
информации и переход к
процедуре обработки прерывания
за 9 тактов
Логика обработки
прерывания
28x CPU
28x
CPU INTM 96
Пр
ер
ыв
ан
ия
от п
ер
иф
ер
ии
12
x8
= 9
6
12 прерываний
INT1…
INT12
Регистры
PIE
Модуль
PIE для 96
прерываний
•T ST0 •AH AL •PH PL •AR1 (L) AR0 (L) •DP ST1 •DBSTAT IER •PC(msw) PC(lsw)
Автосохранение
IFR IER
Тактирование
XCLKINOFF
X2 XTA
L O
SC
X1
XTA
L
0*
1 0
XCLKIN
Internal OSC 1
(10 MHz)
Internal OSC 2
(10 MHz)
OSCCLKSRC2
0*
1
WDCLKSRCSEL
0*
1
OSCCLKSRCSEL
0*
1
10 11 01 00* CPU
Timer 2 SYSCLKOUT
TMR2CLKSRCSEL
PLL VCOCLK
OSCCLK
C28x
Core
CLKIN
SYSCLKOUT
LOSPCP
LSPCLK
(пропуск PLL )
LSPCLK
DIV
SCI, SPI
Остальная периферия тактируется сигналом
SYSCLKOUT
MU
X
1/n
DIVSEL
OSC1CLK
OSC2CLK
EXTCLK
Watchdog
Module
WDCLK
CPUTMR2CLK
* = по умолчанию Для функций контроля SYSCLKOUT может быть выведен на пин XCLKOUT
Архитектура: резюме
Высокопроизводительное 32-битное ядро CPU
Умножение 32x32 или16x16 Атомарные операции чтения-модификации-записи Менеджер прерываний быстрого отклика 32K слов встроенной FLASH-памяти Модуль защиты кода (CSM) Большой выбор периферийных модулей 12-битный модуль АЦП (до 13 каналов) Два аналоговых компаратора До 22 выводов GPIO Коммуникационные интерфейсы
Микроконтроллеры C2000 от Texas Instruments Модуль 2
Среда разработки
программного обеспечения
Содержание модуля
Обзор среды Code Composer Studio: Создание проекта
Настройка Build Options
Создание файла настройки линкера: Описание доступной памяти системы
Указание, где именно размещать секции кода в памяти
Содержание модуля
Обзор среды Code Composer Studio: Создание проекта
Настройка Build Options
Создание файла настройки линкера: Описание доступной памяти системы
Указание, где именно размещать секции кода в памяти
Code Composer Studio
Code Composer Studio включает: Интегрированную среду редактирования/отладки с графическим
интерфейсом
Code Generation Tools
DSP/BIOS
Asm Link
Редактор
Отладка
Compile
Графики, профили
Code Simulator
Development Tool
Внешний эмулятор
MCU Board
Библиотеки
lnk.cmd
Build
Code Composer Studio: IDE
Объединяет: редактирование, создание кода, и отладку
Клавиши использования в один клик
Мощные инструменты графиков/профиля
Скрипты для автоматизирования задач
Встроенный доступ к функциям BIOS
Основана на базе фреймворка с открытым исходным кодом Eclipse
Режимы Edit и Debug (CCSv5)
Каждый из режимов предоставляет набор функций, необходимых для выполнения определенной задачи
Режим Edit
Отображаются меню, необходимые при разработке кода
(проект C/C++, редактор, и т.п.)
Режим Debug
Отображаются меню, необходимые при отладке
(переменные, память, графики и т.п.)
Проект CCSv5
Файлы:
Исходный код (C, assembly)
Библиотеки
Файлы настройки DSP/BIOS
Файлы настройки линкера
Настройки проекта:
Build options (компилятор, ассемблер, линкер, и DSP/BIOS)
Build configurations
Составляющие проекта:
Создание проекта в CCSv5
File New CCS Project
1. Имя проекта, путь сохранения и устройство
2. Дополнительные настройки
3. Шаблоны проектов и примеры
Build options CCSv5 – Компилятор / Линкер
Компилятор 20 категорий для инструментов
генерации кода
Управляет многими аспектами процесса создания приложения Степень оптимизации
Целевое устройство
Настройки компилятора/ассемблера/линкера
Линкер 8 категорий настроек линкера
Определяют различные настройки объединения
${PROJECT_ROOT} указывает текущую папку проекта
Содержание модуля
Обзор среды Code Composer Studio: Создание проекта
Настройка Build Options
Создание файла настройки линкера: Описание доступной памяти системы
Указание, где именно размещать секции кода в памяти
Секции
Программа состоит из разных частей ─ sections
Все стандартные секции начинаются с символа“.”
Компилятор разделяет секции на инициализируемые и неинициализируемые
int x = 2;
int y = 7;
void main(void)
{
long z;
z = x + y;
}
Глобальные переменные(.ebss) Начальные значения(.cinit)
Локальные переменные(.stack) Код (.text)
Секции компилятора
Имя Описание Область памяти
.text код (действия) FLASH
.cinit значения инициализации для глобальных и FLASH
статических переменных
.econst константы (напр. const int k = 3;) FLASH
.switch таблицы перехода по switch FLASH
.pinit таблицы глобальных конструкций (C++) FLASH
Инициализируемые секции
Имя Описание Область памяти
.ebss глобальные и статические переменные RAM
.stack область стека low 64Kw RAM
.esysmem область для функции far malloc RAM
Неинициализируемые секции
Примечание: Во время разработки инициализируемые секции могут быть расположены в RAM с использованием эмулятора
Расположение секций в памяти
.ebss
.cinit
.text
Память
M0SARAM
(0x400)
0x00 0000
0x3F 0000
0x00 0400 M1SARAM
(0x400)
FLASH
(0x10000)
Секции
.stack
Линковка
Линкер
Link.cmd
.map
.obj .out
Описание памяти
Как разместить s/w в h/w
Файл настройки линкера
SECTIONS
{
.text:> FLASH PAGE = 0
.ebss:> M0SARAM PAGE = 1
.cinit:> FLASH PAGE = 0
.stack:> M1SARAM PAGE = 1
}
MEMORY
{
PAGE 0: /* Program Memory */
FLASH: origin = 0x3F0000, length = 0x10000
PAGE 1: /* Data Memory */
M0SARAM: origin = 0x000000, length = 0x400
M1SARAM: origin = 0x000400, length = 0x400
}
Файл настройки линкера: резюме
Описание карты памяти Имя области памяти
Положение (начальный адрес)
Размер
Описание секций Расположение секций ПО в соответствующих
областях памяти
Позволяет выполнить пофайловое разделение
Позволяет разделить области загрузки и выполнения кода
Структура каталога с л.р.
Все измененные файлы находятся в папке Project
Оригинальные исходные файлы всегда доступны в начальном виде в папке Files
Оригинальные исходные файлы
Исходные файлы, добавленные в
проект через «Add Files…»
Вспомогательные файлы и библиотеки
Повышают портируемость проекта
${PROJECT_ROOT} позволяет перемещать папку проекта
Легче обслуживать и обновлять файлы поддержки и библиотеки
Примечание: CCSv5 автоматически добавляет в проект ВСЕ файлы, содержащиеся в папке проекта
Микроконтроллеры C2000 от Texas Instruments
Header-файлы регистров
периферии
Модуль 3
Содержание модуля
Использование Header-файлов, написанных на языке Си для F28027
Программирование периферийных регистров
Как структуры отображаются в файле настроек линкера
Традиционный способ программирования на языке Си
#define ADCCTL1 (volatile unsigned int *)0x00007100
...
void main(void)
{
*ADCCTL1 = 0x1234; //write entire register
*ADCCTL1 |= 0x4000; //enable ADC module
}
Недостатки - Для манипулирования отдельным битом требуется создание специальной маски
- Неудобно отображать битовое поле в окне отладки
- Генерация менее эффективного кода во многих случаях
Приемущества - Просто, быстро и легко набирать текст
- Имена переменных совпадают с названиями регистров (удобно для запоминания)
Структурное программирование на языке Си
void main(void)
{
AdcRegs.ADCCTL1.all = 0x1234; //write entire register
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //enable ADC module
}
Недостатки - Может быть сложно запомнить имена структур (В этом случае помогает функция автозаполнения!)
- Больше ручного набора (снова поможет функция автозаполнения )
Преимущества - Легко манипулировать отдельными битами
- Удобный просмотр в окне Watch! (след. слайд)
- Генерация более эффективного кода (для C28x)
Встроенное в CCSv5 окно регистров
CCSv5: Окно Watch при использовании структур
Эффективно ли структурное программирование?
Вы не напишете этот код более эффективно вручную на ассемблере!
Структурный подход позволяет компилятору эффективно использовать режим адресации и атомарные операции на C28x
Исходный код на C
// Stop CPU Timer0 CpuTimer0Regs.TCR.bit.TSS = 1;
// Load new 32-bit period value CpuTimer0Regs.PRD.all = 0x00010000;
// Start CPU Timer0 CpuTimer0Regs.TCR.bit.TSS = 0;
Сгенерированный код*
MOVW DP, #0030 OR @4, #0x0010
MOVL XAR4, #0x010000 MOVL @2, XAR4
AND @4, #0xFFEF
5 слов, 5 циклов - Легко читать код без коментариев
- Битовые маски встроены в структуры
* Компилятор C28x v5.0.1 с параметром -g и следующими уровнями оптимизации: -o1, -o2, or -o3
Сравнение с использованием #define При использовании #define создаются указатели для доступа к памяти, что менее эффективно и часто проигрывает в оптимальности атомарных операций на C28x
Исходный код на C
// Stop CPU Timer0 *TIMER0TCR |= 0x0010;
// Load new 32-bit period value *TIMER0TPRD32 = 0x00010000;
// Start CPU Timer0 *TIMER0TCR &= 0xFFEF;
Сгенерированный код*
MOV @AL,*(0:0x0C04) ORB AL, #0x10 MOV *(0:0x0C04), @AL
MOVL XAR5, #0x010000 MOVL XAR4, #0x000C0A MOVL *+XAR4[0], XAR5
MOV @AL, *(0:0x0C04) AND @AL, #0xFFEF MOV *(0:0x0C04), @AL
9 слов, 9 циклов - Тяжело читать без комментариев
- Пользователю необходимо определять
битовые маски
* Компилятор C28x v5.0.1 с параметром -g и уровнями оптимизации: -o1, -o2, or -o3
Имена элементов структур Header-файл для F28027 определяет:
Структуры для всей периферии
Имена для всех регистров
Имена для всех битовых полей
Адреса всех регистров
PeripheralName.RegisterName.all // Доступ к 16- или 32-битному регистру целиком
PeripheralName.RegisterName.half.LSW // Доступ к младшей части16- или 32-битного регистра
PeripheralName.RegisterName.half.MSW // Доступ к старшей части 16- или 32-битного регистра
PeripheralName.RegisterName.bit.FieldName // Доступ к конкретным битовым полям
Прим.: [1] “PeripheralName” имена, присвоенные TI, находятся в header-файле 28027. Комбинация заглавных и строчных букв (напр. CpuTimer0Regs).
[2] “RegisterName” имена из технической документации. Всегда заглавные буквы (напр. TCR, TIM, TPR,..).
[3] “FieldName” имена из технической документации. Всегда заглавные буквы(напр. POL, TOG, TSS,..).
Функция автозаполнения редактора
Комплект Header-файлов F28027 (http://www.ti.com, controlSUITE)
Содержит все, что необходимо для структурного программирования
Определяет все биты периферийных регистров и адреса регистров
Набор Header-файлов включает:
\F2806x_headers\include файлы типа *.h
\F2806x_headers\cmd *.cmd файлы линкера
\F2806x_examples примеры для CCS
\doc документация
Расположение комплекта header-файлов controlSUITE C:\TI\controlSUITE\device_support\
.h файлы структуры периферии (1 из 2)
Содержит определения битовых структур для каждого регистра периферии
F2806x_Adc.h
#include “F2806x_Device.h"
Void InitAdc(void)
{
/* Reset the ADC module */
AdcRegs.ADCCTL1.bit.RESET = 1;
/* configure the ADC register */
AdcRegs.ADCCTL1.all = 0x00E4;
};
Ваш файл с исходным кодом на языке C (напр., Adc.c)
// ADC Individual Register Bit Definitions:
struct ADCCTL1_BITS { // bits description
Uint16 TEMPCONV:1; // 0 Temperature sensor connection
Uint16 VREFLOCONV:1; // 1 VSSA connection
Uint16 INTPULSEPOS:1; // 2 INT pulse generation control
Uint16 ADCREFSEL:1; // 3 Internal/external reference select
Uint16 rsvd1:1; // 4 reserved
Uint16 ADCREFPWD:1; // 5 Reference buffers powerdown
Uint16 ADCBGPWD:1; // 6 ADC bandgap powerdown
Uint16 ADCPWDN:1; // 7 ADC powerdown
Uint16 ADCBSYCHN:5; // 12:8 ADC busy on a channel
Uint16 ADCBSY:1; // 13 ADC busy signal
Uint16 ADCENABLE:1; // 14 ADC enable
Uint16 RESET:1; // 15 ADC master reset
};
// Allow access to the bit fields or entire register:
union ADCCTL1_REG {
Uint16 all;
struct ADCCTL1_BITS bit;
};
// ADC External References & Function Declarations:
extern volatile struct ADC_REGS AdcRegs;
.h файлы структуры периферии (2 из 2)
Комплект header-файлов содержит h. файлы для каждого периферийного модуля устройства
F2806x_Device.h Главный подключаемый файл
Подключает остальные h-файлы
Подключайте этот файл (прямо или косвенно) в каждом исходном файле: #include “F2806x_Device.h”
F2806x_Adc.h F2806x_BootVars.h F2806x_Cla.h
F2806x_Comp.h F2806x_CpuTimers.h F2806x_DevEmu.h
F2806x_Device.h F2806x_Dma.h F2806x_ECan.h
F2806x_ECap.h F2806x_EPwm.h F2806x_EQep.h
F2806x_Gpio.h F2806x_I2c.h F2806x_Mcbsp.h
F2806x_NmiIntrupt.h F2806x_PieCtrl.h F2806x_PieVect.h
F2806x_Sci.h F2806x_Spi.h F2806x_SysCtrl.h
F2806x_Usb.h F2806x_XIntrupt.h
Файл определений глобальных переменных F2806x_GlobalVariableDefs.c
Объявляет глобальное определение структуры для каждого периферийного устройства
Каждая структура располагается в своей секции использованием #pragma DATA_SECTION, что позволяет расположить ее в правильной области памяти (см. след. слайд)
Данный файл должен быть добавлен в CCS проект:
F2806x_GlobalVariableDefs.c
#include "F2806x_Device.h"
…
#pragma DATA_SECTION(AdcRegs,"AdcRegsFile");
volatile struct ADC_REGS AdcRegs;
…
F2806x_GlobalVariableDefs.c
Файл настройки линкера для структур F2806x_nonBIOS.cmd and F2806x_BIOS.cmd
Привязывает каждую структуру к области памяти периферии, используя секции с именами периферии
не-BIOS и BIOS версии файла .cmd
Один из этих файлов должен быть добавлен в CCS проект
F2806x_nonBIOS.cmd
или
F2806x_BIOS.cmd
MEMORY { PAGE1: ... ADC: origin=0x007100, length=0x000080 ... }
SECTIONS { ... AdcRegsFile: > ADC PAGE = 1 ... }
F2806x_Headers_nonBIOS.cmd
#include "F2806x_Device.h"
…
#pragma DATA_SECTION(AdcRegs,"AdcRegsFile");
volatile struct ADC_REGS AdcRegs;
…
F2806x_GlobalVariableDefs.c
Примеры проектов Приложение ControlSUITE предоставляет примеры проектов для
каждого периферийного модуля Примеры помогают легко начать новый проект
Преимущества использования header-файлов периферии
Более легкая разработка кода
Прост в обращении
Компиляция более эффективного кода
Увеличение эффективности окна Watch
Компания Texas Instruments сделала за Вас всю работу! Используйте корректный комплект header-файлов для вашего
устройства:
Введите поисковый запрос «controlSUITE» на сайте http://www.ti.com
• F2806x
• F2803x
• F2802x
• F2833x иF2823x
• F280x и F2801x
• F2804x
• F281x
Л.р. 1: Создание проекта и файл настройки линкера
1. Настройка целевого устройства Ход работы
2. Создание нового проекта 3. Настройка компиляции проекта и изменение файла настройки линкера
4. Компиляция и выполнение программы
Описание системы: • TMS320F28027 • Выделены все блоки внутренней памяти RAM Расположение секций: • .text > RAM блок L0SARAM в PAGE 0 (память программ) • .cinit > RAM блок L0SARAM в PAGE 0 (память программ) • .ebss > RAM блок M0SARAM в PAGE 1 (память данных) • .stack > RAM блок M1SARAM в PAGE 1 (память данных)
F28027
Memory
on-chip
memory
0x00 0000 M0SARAM (0x400)
M1SARAM (0x400)
L0SARAM (0x1000)
0x00 0400
0x00 8000
0x3F 0000 FLASH (0x8000)
Микроконтроллеры C2000 от Texas Instruments Модуль 6
АЦП и компаратор
Содержание модуля
Устройство и работа АЦП и компаратора
Использование АЦП для сбора данных
Блок-схема модуля АЦП
12-bit A/D Converter
SOCx
EOCx
ADCINA0
ADCINA7
ADCINB0 ADCINB1
ADCINB7
S/H
A
S/H
B
MU
X
MUX A
RESULT0
RESULT1
RESULT2
RESULT15
Result MUX
MUX B
ADC Generation
Logic Диапазон входных напряжений АЦП:
0 - 3.3В Скорость работы:
до 12.5 MSPS
CHSEL ADC
Interrupt Logic
SOC0 TRIGSEL CHSEL ACQPS
SOC1 TRIGSEL CHSEL ACQPS
SOC2 TRIGSE L CHSEL ACQPS
SOC3 TRIGSEL CHSEL ACQPS
SOC15 TRIGSEL CHSEL ACQPS
Зап
уск
SOC
x
ADCINT1-9
Программно
Внешний вывод (GPIO/XINT2_ADCSOC)
EPWMxSOCA (x = 1 to 8)
EPWMxSOCB (x = 1 to 8)
Таймер CPU (0,1,2)
Запуск АЦП
Сигнал SOCx ADCINT1
ADCINT2
Регистры настройки SOCx
Temp.Sens. ADCINA5
Функциональная схема SOCx АЦП
Данная схема повторяется 16 раз
Программный запуск
TINT0 (CPU Timer 0)
TINT1 (CPU Timer 1)
TINT2 (CPU Timer 2)
XINT2_ADCSOC (GPIO)
SOCA (ePWM1)
SOCB (ePWM1)
SOCA (ePWM8)
SOCB (ePWM8)
T
r
i
g
g
e
r
ADCINT1
ADCINT2
Перезапуск
ADCINT1
ADCINT2
ADCINT3
ADCINT4
ADCINT5
ADCINT6
ADCINT7
ADCINT8
ADCINT9
Выбор
канала
Окно
захвата
Регистр
результата S O C x
E O C x
ADCSOCxCTL
ADCSOCFRC1
ADCINTSOCSEL1 ADCINTSOCSEL2
INTSELxNy
ADCRESULTx
Пример запуска АЦП (последовательное преобразование)
Преобразуем A2 B3 A7 по сигналу ePWM1 SOCB, по окончании формируем прерывание ADCINT1:
Канал A2
Сэмпл 7 циклов Result0
Канал B3
Сэмпл 10 циклов Result1
Канал A7
Сэмпл 8 циклов Result2
SOC0
SOC1
SOC2
Без прерывания
Без прерывания
прерывание ADCINT1
SOCB (ETPWM1)
Канал A0
Сэмпл 10 циклов Result3
Канал B0
Сэмпл 15 циклов Result4
Канал A5
Сэмпл 12 циклов Result5
SOC3
SOC4
SOC5
Без прерывания
Без прерывания
Прерывание ADCINT2
ADCINT2
Программный запуск
Затем, последовательно преобразуем A0 B0 A5 и формируем прерывание ADCINT2:
Пример запуска АЦП (одновременное преобразование)
Непрерывное попарное преобразование каналов с формированием прерываний:
Каналы A0:B0
Сэмпл 7 циклов
SOC0 Без прерывания ADCINT2
Программный запуск Result0
Result1
Каналы A1:B1
Сэмпл 7 циклов
SOC2 Без прерывания Result2
Result3
Каналы A2:B2
Сэмпл 7 циклов
SOC4 Без прерывания Result4
Result5
Каналы A3:B3
Сэмпл 7 циклов
SOC6 Result6
Result7
Каналы A4:B4
Сэмпл 7 циклов
SOC8 Без прерывания Result8
Result9
Каналы A5:B5
Сэмпл 7 циклов
SOC10 Без прерывания Result10
Result11
Каналы A6:B6
Сэмпл 7 циклов
SOC12 Без прерывания Result12
Result13
Каналы A7:B7
Сэмпл 7 циклов
SOC14 Result14
Result15
ADCINT1
ADCINT2
Приоритет преобразования АЦП
Когда несколько флагов SOC устанавливаются одновременно, порядок преобразования каналов определяется установленным приоритетом
Кольцевой приоритет (по умолчанию)
Ни один из SOC не имеет приоритета перед другими
Приоритет определяется только кольцевым указателем
SOC высокого приоритета
SOC с высоким приоритетом вклинивается в кольцевой указатель и выполняется после завершения текущего преобразования
После преобразования высокоприоритетного SOC кольцевой указатель продолжает работу с места прерывания
Функциональная диаграмма приоритета преобразования
Кольцевой указатель Указывает на последний
выполненный SOC и определяет порядок
преобразования
SOC высокого приоритета Определяет границу
между SOC высокого приоритета и кольцевого приоритета
SOC0
SOC1
SOC2
SOC3
SOC4
SOC5
SOC6
SOC7
SOC8
SOC9
SOC10
SOC11
SOC12
SOC13
SOC14
SOC15
Ко
льц
ево
й п
ри
ор
ите
т В
ысо
кий
пр
ио
ри
тет
SOCPRIORITY
RRPOINTER
AdcRegs.SOCPRICTL
Пример кольцевого приоритета
SOC 0 SOC
1
SOC 2
SOC 3
SOC 4
SOC 5
SOC 6
SOC 7 SOC
8
SOC 9
SOC 10
SOC 11
SOC 12
SOC 13
SOC 14
SOC 15
Кольцевой
указатель
Запуск SOC7 SOC7 преобразуется; RRPOINTER указывает на SOC7; У SOC8 наивысший приоритет.
Одновременный запуск SOC2 & SOC12
SOC12 преобразуется; RRPOINTER указывает на SOC12; У SOC13 наивысший приоритет
SOC2 преобразуется; RRPOINTER указывает на SOC2; У SOC3 наивысший приоритет
SOCPRIORITY = 0;
RRPOINTER = 15;
У SOC0 наивысший приоритет
Пример SOC высокого приоритета
SOC 4
SOC 5
SOC 0 SOC
6
SOC 7
SOC 8
SOC 9 SOC
10
SOC 11
SOC 12
SOC 13
SOC 14
SOC 15
Кольцевой
указатель
SOC 1
SOC 2
SOC 3
Высокий приоритет
Запуск SOC7 SOC7 преобразуется; RRPOINTER указывает на SOC7; У SOC8 наивысший кольцевой приоритет
SOC12 преобразуется; RRPOINTER указывает на SOC12; У SOC13 наивысший кольцевой приоритет.
SOCPRIORITY = 4; RRPOINTER = 15; У SOC4 наивысший кольцевой приоритет
Одновременный запуск SOC2 & SOC12
SOC2 преобразуется; RRPOINTER указывает на SOC7.
Тактирование модуля АЦП (схема для л.р.)
Внутренний
OSC1
(10 MHz)
ADCCLK (30 MHz)
К конвейеру АЦП
Окно сэмплирования ACQ_PS
bits
ADCSOCxCTL
0110b
SYSCLKOUT
(60 MHz)
PLLSTS
DIVSEL
биты
10b (/2)
К CPU
Период сэмплирования = (ACQ_PS + 1)*(1/ADCCLK)
PCLKCR0.ADCENCLK = 1
PLLCR
DIV
биты
01100b (x12)
ADCCTL2
CLKDIV
bits
001b (/2)
Тайминги АЦП – Последовательное преобразование
7 тактов
Сэмплирование*
6 тактов 7 тактов
Преобразование
2 такта
Запись
2 такта
Защелкивание
Формирование раннего прерывания
Формирование позднего прерывания
Старт сэмплирования следующего канала
Максимальная скорость преобразования:
30 MГц 13 тактов / 1 сэмпл
= 2.31 MSPS
*Прим.: Минимальная продолжительность сэмплирования – 7 тактов, может быть увеличена
Тайминги АЦП – Одновременное сэмплирование
7 Тактов
Сэмплирование
2 Такта
Защелкивание
13 Тактов
Преобразование канала “A”
Формирование раннего
прерывания канала “A”
Формирование позднего прерывания канала “A”
30 MГц 26 тактов / 2 сэмпла
= 2.31 MSPS
Максимальная скорость преобразования:
Прим.: Минимальная продолжительность сэмплирования – 7 тактов, может быть увеличена
Начало сэмплирования следующего канала (пары)
2 Такта
Запись
6 Тактов 7 Тактов
Преобразование канала “B”
2 Такта
Запись
Формирование позднего прерывания канала “B”
Формирование раннего Прерывания канала “В”
Регистры АЦП AdcRegs.register (lab file: Adc.c)
ADCCTL1 Control 1 Register
ADCCTL2 Control 2 Register
ADCSOCxCTL SOC0 to SOC15 Control Registers
ADCINTSOCSELx Interrupt SOC Selection 1 and 2 Registers
ADCSAMPLEMODE Sampling Mode Register
ADCSOCFLG1 SOC Flag 1 Register
ADCSOCFRC1 SOC Force 1 Register
ADCSOCOVF1 SOC Overflow 1 Register
ADCSOCOVFCLR1 SOC Overflow Clear 1 Register
INTSELxNy Interrupt x and y Selection Registers
ADCINTFLG Interrupt Flag Register
ADCINTFLGCLR Interrupt Flag Clear Register
ADCINTOVF Interrupt Overflow Register
ADCINTOVFCLR Interrupt Overflow Clear Register
SOCPRICTL SOC Priority Control Register
ADCREFTRIM Reference Trim Register
ADCOFFTRIM Offset Trim Register
ADCREV Revision Register – reserved
ADCRESULTx ADC Result 0 to 15 Registers
Регистр Описание
Note: Регистрам ADCRESULTx в header-файле присвоено имя AdcResult.ADCRESULTx (не AdcRegs)
Регистр управления АЦП 1 AdcRegs.ADCCTL1
Разрешение АЦП 0 = АЦП запрещен (но под питанием) 1 = АЦП разрешен
Сброс модуля АЦП 0 = не оказывает воздействия 1 = сброс (сбрасывается в 0 логикой АЦП)
ADCENABLE ADCBSY ADCBSYCHN RESET
12 - 8 15
Старшая часть регистра:
14 13
АЦП занят 0 = АЦП доступен 1 = АЦП занят
Каким каналом занят АЦП Если ADCBSY = 0: последний канал преобразован 1: канал преобразуется
00h = ADCINA0 08h = ADCINB0 01h = ADCINA1 09h = ADCINB1 02h = ADCINA2 0Ah = ADCINB2 03h = ADCINA3 0Bh = ADCINB3 04h = ADCINA4 0Ch = ADCINB4 05h = ADCINA5 0Dh = ADCINB5 06h = ADCINA6 0Eh = ADCINB6 07h = ADCINA7 0Fh = ADCINB7
Регистр управления АЦП 1 AdcRegs.ADCCTL1
Питание АЦП 0 = питание откл. 1 = питание вкл.
Выбор источника опорного напряжения 0 = внутренний 1 = внешний (VREFHI/VREFLO)
ADCBGPWN ADCREFPWD ADCPWDN reserved
7
Младшая часть регистра:
VREFLO CONV
INTPULSE POS
6 5 4 3 2 0
Включение питания cхемы Bandgap источника опорного напряжения 0 = отключено 1 = включено
Питание внутреннего источника опорного напряжения 0 = выкл 1 = вкл
TEMP CONV
ADCREF SEL
1
Формирование импульса прерывания 0 = в начале преобразования 1 = за один цикл до окончания преобразования
Преобразование VREFLO 0 = не подключен 1 = подключен (B5)
Температурный датчик 0 = не подключен 1 = подключен (A5)
Регистр управления АЦП 2 AdcRegs.ADCCTL2
reserved
15 - 3 2 0
CLKDIV4EN CLKDIV2EN ADCNONOVERLAP
1
Делитель тактовой частоты АЦП
CLKDIV4EN CLKDIV2EN ADCCLK
x 0 SYSCLK
0 1 SYSCLK / 2
1 1 SYSCLK / 4
Перекрытие сэмплов АЦП 0 = перекрытие разрешено 1 = перектрытие запрещено
Регистры управления SOC0 – SOC15 AdcRegs.ADCSOCxCTL
TRIGSEL reserved
15 - 11 10 9 - 6 5 - 0
CHSEL ACQPS
Источник запуска SOCx Выбор канала SOCx
0h = ADCINA0 1h = ADCINA1 2h = ADCINA2 3h = ADCINA3 4h = ADCINA4 5h = ADCINA5 6h = ADCINA6 7h = ADCINA7 8h = ADCINB0 9h = ADCINB1 Ah = ADCINB2 Bh = ADCINB3 Ch = ADCINB4 Dh = ADCINB5 Eh = ADCINB6 Fh = ADCINB7
Одиночное сэмплирование
(SIMULENx=0)
Одновременное сэмплирование (SIMULENx=1)
00h = программно 01h = CPU Таймер0 02h = CPU Таймер1 03h = CPU Таймер2 04h = XINT2SOC 05h = ePWM1SOCA 06h = ePWM1SOCB 07h = ePWM2SOCA 08h = ePWM2SOCB 09h = ePWM3SOCA 0Ah = ePWM3SOCB 0Bh = ePWM4SOCA 0Ch = ePWM4SOCB 0Dh = ePWM5SOCA 0Eh = ePWM5SOCB 0Fh = ePWM6SOCA 10h = ePWM6SOCB 11h = ePWM7SOCA 12h = ePWM7SOCB 13h = ePWM8SOCA 14h = ePWM8SOCB
00h – 05h = недейств. 06h = 7 циклов 07h = 8 циклов 08h = 9 циклов 09h = 10 циклов 3Fh = 64 цикла
Период сэмплирования
0h = ADCINA0/B0 1h = ADCINA1/B1 2h = ADCINA2/B2 3h = ADCINA3/B3 4h = ADCINA4/B4 5h = ADCINA5/B5 6h = ADCINA6/B6 7h = ADCINA7/B7 8h – Fh = недейств.
Выбор прерывания АЦП для SOCx AdcRegs.ADCINTSOCSELx
15 - 14
SOC15 SOC14 SOC13 SOC12 SOC11 SOC10 SOC9 SOC8
13 - 12 11 - 10 9 - 8 7 - 6 5 - 4 3 - 2 1 - 0
15 - 14
SOC7 SOC6 SOC5 SOC4 SOC3 SOC2 SOC1 SOC0
13 - 12 11 - 10 9 - 8 7 - 6 5 - 4 3 - 2 1 - 0
ADCINTSOCSEL2
ADCINTSOCSEL1
Выбор прерывания АЦП для SOCx Устанавливает какое из прерываний АЦП запускает SOCx 00 = запрет запуска SOCx от ADCINT (поле TRIGSEL определяет источник запуска SOCx) 01 = запуск SOCx от ADCINT1 (поле TRIGSEL игнорируется) 10 = запуск SOCx от ADCINT2 (поле TRIGSEL игнорируется) 11 = недействительная комбинация
Регистр выбора режима сэмплирования АЦП AdcRegs.ADCSAMPLEMODE
reserved
15 - 8
7
SIMULEN14 SIMULEN12 SIMULEN10 SIMULEN8 SIMULEN6 SIMULEN4 SIMULEN2 SIMULEN0
6 5 4 3 2 1 0
Разрешение одновременного сэмплирования Режим сэмплирования SOCx и SOCx+1 0 = режим одиночного сэмплирования SOCx и SOCx+1 1 = режим одновременного сэмплирования SOCx и SOCx+1
Регистр управления приоритетом SOC AdcRegs.SOCPRICTL
reserved
15 - 11 10 - 5 4 - 0
RRPOINTER SOCPRIORITY
Кольцевой указатель Указывает на последний Преобразованный SOCx и
определяет порядок преобразований
Приоритет SOC Определяет границу между SOC высокого
приоритета и SOC кольцевого приоритета
00h = кольцевой приоритет для всех SOC 01h = SOC0 высокий приоритет (ВП), SOC1-15 – кольцевой приоритет (КП) 02h = SOC0-1 ВП, SOC2-15 КП 03h = SOC0-2 ВП, SOC3-15 КП 04h = SOC0-3 ВП, SOC4-15 КП 05h = SOC0-4 ВП, SOC5-15 КП 06h = SOC0-5 ВП, SOC6-15 КП 07h = SOC0-6 ВП, SOC7-15 КП 08h = SOC0-7 ВП, SOC8-15 КП 09h = SOC0-8 ВП, SOC9-15 КП 0Ah = SOC0-9 ВП, SOC10-15 КП 0Bh = SOC0-10 ВП, SOC11-15 КП 0Ch = SOC0-11 ВП, SOC12-15 КП 0Dh = SOC0-12 ВП, SOC13-15 КП 0Eh = SOC0-13 ВП, SOC14-15 КП 0Fh = SOC0-14 ВП, SOC15 КП 10h = all SOCs ВП (арбитраж по SOC #) 1xh = недейств.
00h = преобразован SOC0, приоритет у SOC1 01h = преобразован SOC1, приоритет у SOC2 02h = преобразован SOC2, приоритет у SOC3 03h = преобразован SOC3, приоритет у SOC4 04h = преобразован SOC4, приоритет у SOC5 05h = преобразован SOC5, приоритет у SOC6 06h = преобразован SOC6, приоритет у SOC7 07h = преобразован SOC7, приоритет у SOC8 08h = преобразован SOC8, приоритет у SOC9 09h = преобразован SOC9, приоритет у SOC10 0Ah = преобразован SOC10, приоритет у SOC11 0Bh = преобразован SOC11, приоритет у SOC12 0Ch = преобразован SOC12, приоритет у SOC13 0Dh = преобразован SOC13, приоритет у SOC14 0Eh = преобразован SOC14, приоритет у SOC15 0Fh = преобразован SOC15, приоритет у SOC0 1xh = недейств. 20h = значение после сброса (ни один из SOC не преобразован)
Регистры выбора прерывания x и y AdcRegs.INTSELxNy
INTxE INTxSEL INTxCONT reserved 7 4 - 0 5 6
INTyE INTySEL INTyCONT reserved
15 12 - 8 13 14 Где x/y = 1/2, 3/4, 5/6, 7/8, 9; 10 зарезервировано.
00h = EOC0 запускает ADCINTx/y 01h = EOC1 запускает ADCINTx/y 02h = EOC2 запускает ADCINTx/y 03h = EOC3 запускает ADCINTx/y 04h = EOC4 запускает ADCINTx/y 05h = EOC5 запускает ADCINTx/y 06h = EOC6 запускает ADCINTx/y 07h = EOC7 запускает ADCINTx/y 08h = EOC8 запускает ADCINTx/y 09h = EOC9 запускает ADCINTx/y 0Ah = EOC10 запускает ADCINTx/y 0Bh = EOC11 запускает ADCINTx/y 0Ch = EOC12 запускает ADCINTx/y 0Dh = EOC13 запускает ADCINTx/y 0Eh = EOC14 запускает ADCINTx/y 0Fh = EOC15 запускает ADCINTx/y 1xh = недейств.
Выбор EOCx в качестве прерывания ADCINTx/y
Разрешение Прерывания ADCINTx/y 0 = запрет 1 = разрешение
Разрешение непрерывного режима ADCINTx/y 0 = формируется один импульс (пока флаг не будет сброшен пользователем) 1 = импульс формируется при каждом EOC
Регистры результатов преобразования АЦП
Режим последовательного сэмплирования (SIMULENx = 0)
Когда АЦП завершает преобразование SOCx, цифровой результат размещается в соответствующем регистре ADCRESULTx
Режим одновременного сэмплирования (SIMULENx = 1)
Когда АЦП завершает преобразование пары каналов, цифровой результат находится в соответствующих регистрах ADCRESULTx и ADCRESULTx+1
LSB MSB
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AdcResult.ADCRESULTx, x = 0 - 15
Входное напряжение
Цифровой результат
AdcResult.ADCRESULTx
3V3 1.65
0.00081 0
FFFh 7FFh
1h 0h
0000 | 1111 | 1111 | 1111 0000 | 0111 | 1111 | 1111 0000 | 0000 | 0001 | 0001 0000 | 0000 | 0000 | 0000
Как преобразовать биполярное напряжение?
Пример: -1.65 V < Vin <+1.65 V
1) Добавить 1.65 вольт к входному напряжению
Vin
1.65V ADCINx
GND
ADCLO
- +
R
R
R - +
R
R C28x
#include “F2806x_Device.h” #define offset 0x07FF void main(void) { int16 value; // signed value = AdcResult.ADCRESULT0 – offset; }
2)Вычесть “1.65” в программе
Встроенная калибровка АЦП Резервная OTP-память содержит калибровочные данные для АЦП
и внутренних генераторов тактовых импульсов
В памяти Boot ROM содержится функция Device_cal(), копирующая калибровочные данные в соответствующие регистры
Функция Device_cal() должна быть выполнена, чтобы АЦП и генераторы тактовых импульсво соответствовали указанным в технической документации параметрам Bootloader автоматически выполняет функцию Device_cal(), поэтому от
пользователя не требуется дополнительных действий
Если Bootloader не используется (например в процессе разработки), Device_cal() должна быть вызвана в приложении:
GEL-функция, использующаяся в CCS, описывается в header-файле
#define Device_cal (void (*)(void))0x3D7C80
void main(void)
{
(*Device_cal)(); // call Device_cal()
}
Ручная калибровка АЦП Если ошибки смещения и усиления, указанные в технической документации*,
недопустимы для Вашего приложения, или Вы хотите скомпенсировать ошибки платы (датчики, смещение усилителей,…) вы можете использовать ручную калибровку
Ошибка смещения Компенсируется в аналоговой части, с помощью регистра ADCOFFTRIM Не сужает полный диапазон Настройте вывод B5 как VREFLO, ADCOFFTRIM на максимальную ошибку, и прочитайте результат Настройте ADCOFFTRIM для получения нулевого результата
Ошибка усиления Компенсируется в программе Незначительные потери в полном диапазоне Требует использования второго вывода АЦП и наличия верхнего опорного
напряжения на этом выводе. Для информации см. документ #SPRAAD8 “TMS320F280x and TMS320F2801x ADC Calibration”
Совет: Для минимизации ошибок, связанных с неидентичностью мультиплексоров подключайте наиболее критичные сигналы к одному мультиплексору и используйте этот мультиплексор для калибровки
* +/-15 LSB offset, +/-30 LSB gain. См.документацию на устройство для уточнения параметров
CH
CH
MU
X
VREFLOCONV
VREFLO
B5
ADCOFFTRIM
АЦП
12-бит
Выбор опорного напряжения АЦП AdcRegs.ADCREFSEL
Температурная стабильность внутреннего источника опорного напряжения составляет ~50 PPM/°C*
Внутренний ИОН позволяет преобразовывать сигналы в диапазоне от 0 до 3.3 вольт
Если этого не достаточно для Вашего приложения, есть возможность подключения внешнего ИОН*
Внешний ИОН позволяет преобразовывать сигналы в диапазоне от VREFLO до VREFHI
Опорные значения изменяют стандартный диапазон 0 - 3.3 вольт
Поле ADCREFSEL в регистре ADCCTL1 управляет выбором ИОН
* См. документацию на устройство для уточнения параметров
2 - 0 15 - 5
ADCREFSEL
Выбор ИОН АЦП 0 = внутренний (по умолчанию) 1 = внешние выводы VREFHI/VREFLO
reserved
4 3
Компаратор
COMP1 ЦАП 10-бит
AIO2 AIO10
COMP1OUT
AIO6 AIO14
COMP2 ЦАП 10-бит
AIO4 AIO12
COMP2OUT ADC
A0
A1
A2
A3
A4
A5
A6
A7
B0
B1
B2
B3
B4
B5
B6
B7
Блок-схема компаратора
DACVAL * (VDDA – VSSA)
1023 V =
Напряжение ЦАП Таблица истинности компаратора
Напряжения Выход
Напряжение A < Напряжение B 0
Напряжение A > Напряжение B 1
0
1 0
1
+
COMPx
-
ePWM Event
Trigger &
GPIO MUX
Sync/ Qual
ЦАП 10-бит
COMPSTS
VDDA
VSSA
Вход B
Вход A
1
0
COMPSOURCE DACVAL CMPINV
COMPDACE
SYNCSEL
QUALSEL
SYSCLKOUT COMPxTRIP V
Регистры компаратора
резерв
15 - 10
DACVAL
9 - 0
Значение ЦАП Диапазон значений 0 – 1023
AdcRegs.DACVAL – Регистр значения ЦАП
резерв
15 - 1
COMPSTS
0 AdcRegs.COMPSTS – Статусный регистр компаратора
Значение выхода компаратора
резерв
15 - 9 7 - 3
SYNCSEL QUALSEL CMPINV COMPSOURCE COMPDACE
8 2 1 0 AdcRegs.COMPCTL – Регистр управления компаратором
Выбор синхронизации Синхронизация выхода перед передачей в модули ETPWM/GPIO 0 = Без синхронизации 1 = С синхронизацией
Разрешение компаратора 0 = запрещен 1 = разрешен
Источник компаратора 0 = внутр. ЦАП 1 = вывод
Инверсия выхода компаратора 0 = без инверсии 1 = инвертирован
Период квалификации 0h = без квал. 1h = 2 такта 2h = 3 такта … … Fh = 15 тактов
Л.р. 2: АЦП
ADC
ADCINA0
RESULT0
... Память данных
CPU копирует результаты в буфер во время прерывания ADC ISR
ePWM2
ePWM2 запускает АЦП используя SOCA каждые 20 мкс (50 кГц)
GND +3.3 V
(GPIO20) Toggle
(GPIO18)
соединитель
Просмотр буфера данных АЦП
Code Composer
Studio
Л.р. 2: Алгоритм программы Начало
Инициализация ePWM2 • очистка счетчика • установка периода • запуск АЦП по периоду • тактирующий сигнал предделителя • разрешение таймера
Главный цикл
while(1)
{
}
Прерывание АЦП
Инициализация системы • PLL и тактирующие сигналы • настройка сторожевого таймера • настройка GPIO • инициализация PIE
Инициализация АЦП • преобразование каналаA0 по периоду модуля ePWM2 • прерывание по EOC для выполнения ADC ISR • создание буфера данных в памяти
ADC ISR • чтение результатов АЦП • запись результатов в буфер • изменение указателя буфера • переключение вывода GPIO • выход из прерывания
1. Настройка модуля ADC
Ход работы
настройка прерывания от АЦП
2. Инициализация модулей ePWM и ADC
Файл Adc.c - настройка преобразования SOC0
Файл Main_6.c
3. Компиляция и загрузка программы
J2:1 - GND
J3:1 - GND
J5:6 - ADCINA0
J3:3 - 3V3
3. Проверка работы ADC
J1:7 - GPIO18
4. Построение графика
Микроконтроллеры C2000 от Texas Instruments Модуль 7
Управление периферией:
ePWM и eCAP
Содержание модуля
Широтно-импульсная модуляция (ШИМ)
Модуль ШИМ (ePWM) и формирование ШИМ-сигнала
Использование модуля захвата (eCAP) для измерения длительности сигнала
Прим.: В F28027 доступно несколько модулей ePWM. Для дополнительной
информации см. документацию на устройство.
Что такое ШИМ?
ШИМ это представление аналогового сигнала в виде последовательности импульсов
фиксированная частота следования импульсов
фиксированная амплитуда импульсов
длительность импульса пропорциональна мгновенной амплитуде сигнала
энергия ШИМ энергия исходного сигнала
t
Исходный сигнал T
t
ШИМ представление
Почему для управления силовыми приборами стоит использовать ШИМ?
Известны требуемые выходные токи и напряжения
Силовые приборы – транзисторы:
Трудно управлять в активном (усилительном) режиме
Легко управлять в импульсном (ключевом) режиме
ШИМ – цифровой сигнал легко формировать MCU
ШИМ
аппрокс.
требуемого
сигнала
Питание DС
Требуемый
сигнал
системы
?
Питание DС
Сложно рассчитать сигнал управления
Сигнал управления – ШИМ
ШИМ
ePWM(ШИМ): Сигналы и связи
ePWMx
ePWMx+1
EPWMxSYNCI
EPWMxSYNCO
PIE EPWMxINT
EPWMxTZINT
ePWMx-1
EPWMxSOCB
EPWMxSOCA
ADC COMP COMPxOUT
EMUSTOP – TZ6
CLOCKFAIL – TZ5
EQEP1ERR – TZ4
CPU
SYSCTRL
eQEP1 EPWMxA
EPWMxB GPIO
MUX
TZ1 – TZ3 GPIO
MUX
ePWM: Блок схема
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB
SYSCLKOUT TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
ePWM: Подмодуль базового счетчика (Time-Base)
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
ePWM: Режимы счета базового счетчика TBCTR
TBCTR
TBCTR
TBPRD
TBPRD
TBPRD
Режим счета вверх
Режим счета вниз
Режим счета вверх и вниз
Фронтовая ШИМ
Симметричная ШИМ
Фронтовая ШИМ
ePWM: Синхронизация фазы
SyncIn
SyncOut
CTR=zero
CTR=CMPB
X
En
o o
o
o
o
o o =120°
Phase EPWM2A
EPWM2B
SyncIn
SyncOut
CTR=zero
CTR=CMPB
X
En
o o
o
o
o
o o =240°
Phase EPWM3A
EPWM3B
SyncIn
SyncOut
CTR=zero
CTR=CMPB
X
En
o o
o
o
o
o o =0°
Phase EPWM1A
EPWM1B
=120°
=120°
=240°
Ext. SyncIn (optional)
To eCAP1 SyncIn
ePWM: Регистры подмодуля Time-Base (файл л.р.: EPwm.c)
Имя Описание Структура
TBCTL Управление EPwmxRegs.TBCTL.all
TBSTS Статус EPwmxRegs.TBSTS.all
TBPHS Фаза EPwmxRegs.TBPHS
TBCTR Счетчик EPwmxRegs.TBCTR
TBPRD Период EPwmxRegs.TBPRD
ePWM: Регистр управления подмодулем Time-Base
EPwmxRegs.TBCTL
Старшая часть:
FREE_SOFT PHSDIR CLKDIV HSPCLKDIV
15 - 14 13 12 - 10 9 - 7
TBCLK = SYSCLKOUT / (HSPCLKDIV * CLKDIV)
Предделитель 1
000 = /1 (по умолч.) 001 = /2 010 = /4 011 = /8 100 = /16 101 = /32 110 = /64 111 = /128
Предделитель 2 000 = /1 001 = /2 (по умолч.) 010 = /4 011 = /6 100 = /8 101 = /10 110 = /12 111 = /14
Поведение при эмуляции
00 = остановка после CTR inc/dec 01 = остановка: Up Mode; CTR = PRD Down Mode; CTR = 0 Up/Down Mode; CTR = 0 1x = не останавливать
Направление счета после синхронизации
0 = считать вниз 1 = считать вверх
(HSPCLKDIV для обеспечения совместимости)
ePWM: Регистр управления подмодулем Time-Base
EPwmxRegs.TBCTL
Младшая часть:
CTRMODE SWFSYNC SYNCOSEL PRDLD PHSEN
6 5 - 4 3 1 - 0 2
Программный запуск синхроимпульса 0 = нет действий 1 = запуск
Настройка выходного синхросигнала (источник сигнала EPWMxSYNC0) 00 = EPWMxSYNCI 01 = CTR = 0 10 = CTR = CMPB 11 = запрет синхросигнала
Режим счета
00 = счет вверх 01 = счет вниз 10 = счет вверх и вниз 11 = остановка счета (по умолч.)
Загрузка значения периода из теневого регистра 0 = загружать при CTR = 0 1 = загружать сразу
Фазовая синхронизация 0 = запрет 1 = по приходу сигнала EPWMxSYNCI CTR = TBPHS
ePWM: Подмодуль сравнения (Counter-Compare)
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
События сравнения ePWM TBCTR
TBCTR
TBCTR
TBPRD
TBPRD
TBPRD
Режим счета вверх
Режим счета вниз
Режим счета вверх и вниз
Фронтовая ШИМ
Фронтовая ШИМ
Симметричная ШИМ
CMPA
CMPA
CMPA
CMPB
CMPB
CMPB
= события сравнения, относящиеся к подмодулю сравнения
ePWM: Регистры подмодуля Counter-Compare
(файл л.р.: EPwm.c)
Имя Описание Структура
CMPCTL Управление EPwmxRegs.CMPCTL.all =
CMPA Сравнение A EPwmxRegs.CMPA =
CMPB Сравнение B EPwmxRegs.CMPB =
ePWM: Регистр управления подмодулем Counter-Compare
EPwmxRegs.CMPCTL
6 5 4 1 - 0
LOADBMODE LOADAMODE reserved
3 - 2
SHDWBMODE SHDWAMODE
Режим работы CMPA и CMPB
0 = теневой режим; двойной буфер 1 = непосредственный режим; теневой регистр не исп-ся
Режим загрузки теневых CMPA и CMPB
00 = загрузка при CTR = 0 01 = загрузка при CTR = PRD 10 = загрузка при CTR = 0 или PRD 11 = запрет загрузки
SHDWBFULL
15 - 10 9 8
SHDWAFULL
7
reserved reserved
Флаг наполненности теневых регистров CMPA и CMPB (бит автоматически сбрасывается при загрузке)
0 = теневой регистр пуст 1 = теневой регистр полон
ePWM: Подмодуль селектора действия (Action Qualifier)
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
ePWM: Варианты действий с выводом для EPWMA и EPWMB
Z
Z
Z X
Z T
CA
CA
CA X
CA T
CB
CB
CB X
CB T
P
P
P X
P T
SW
SW
SW X
SW T
Нет
действий
Сброс в
низкий уровень
Установка в
высокий уровень
Смена логического
уровня
S/W Force
Действия с выводом
EPWM
Если базовый счетчик равен:
Нулю CMPA CMPB TBPRD
ePWM: Фронтовая ШИМ, счет вверх с независимой модуляцией EPWMA / B
Z
P X
CB X
CA
Z
P X
CB X
CA
Z
P X
Z
P X
CB
CA X
Z
P X
CB
CA X
Z
P X
TBCTR
TBPRD
EPWMA
EPWMB
ePWM: Фронтовая ШИМ, счет вверх с независимой модуляцией EPWMA
CA
CB
CA
CB
Z T
Z T
Z T
TBCTR
TBPRD
EPWMA
EPWMB
ePWM:Симметричная ШИМ с независимой модуляцией EPWMA / B
TBCTR
TBPRD
CA
CA
CA
CA
CB
CB
CB
CB
EPWMA
EPWMB
ePWM:Симметричная ШИМ с независимой модуляцией EPWMA
TBCTR
TBPRD
CA
CB
CA
CB
Z
P
Z
P
EPWMA
EPWMB
ePWM: регистры подмодуля Action Qualifier ePWM
(файл л.р.: EPwm.c)
Имя Описание Структура
AQCTLA AQ Control Output A EPwmxRegs.AQCTLA.all =
AQCTLB AQ Control Output B EPwmxRegs.AQCTLB.all =
AQSFRC AQ S/W Force EPwmxRegs.AQSFRC.all =
AQCSFRC AQ Cont. S/W Force EPwmxRegs.AQCSFRC.all =
ePWM: регистр управления подмодулем Action Qualifier EPwmxRegs.AQCTLy (y = A or B)
ZRO CBU CAD CAU PRD
1 - 0
CBD
15 - 12
reserved
3 - 2 5 - 4 7 - 6 9 - 8 11 - 10
00 = запрет действий 01 = сброс в низкий уровень 10 = установка в высокий уровень 11 = смена уровня на противоположный
Действие при CTR = CMPB
при счете вниз
Действие при CTR = CMPB
при счете вверх
Действие при CTR = CMPA
при счете вниз
Действие при CTR = CMPA
при счете вверх Действие при
CTR = 0
Действие при CTR = PRD
ePWM: регистр однократного программного запуска Action Qualifier
EPwmxRegs.AQSFRC
ACTSFA RLDCSF OTSFB ACTSFB OTSFA
1 - 0 15 - 8
reserved
2 4 - 3 5 7 - 6
Варианты загрузки теневого регистра 00 = загружать при CTR = 0 01 = загружать при CTR = PRD 10 = загружать при CTR = 0 or CTR = PRD 11 = загружать сразу (из активного рег.)
Однократный программный запуск действия с выводом B / A
0 = нет действия 1 = однократный запуск разрешен
Однократное действие с B/A при программном запуске 00 = действие запрещено 01 = сброс в низкий уровень 10 = установка в высокий уровень 11 = смена уровня на противоположный
ePWM: регистр многократного программного запуска Action Qualifier
EPwmxRegs.AQCSFRC
CSFA CSFB
1 - 0 15 - 4
reserved
3 - 2
Многократный программный запуск действия с выводом B / A
00 = действие запрещено 01 = многократный сброс в низкий уровень 10 = многократная установка в высокий уровень 11 = действие запрещено
Пример расчета симметричной ШИМ Определение значений TBPRD и CMPA для формирования
симметричного ШИМ-сигнала частотой 2 кГц и заполнением 25% при частоте тактирования 60 МГц
CMPA = (100% - заполнение)*TBPRD = 0.75*15000 = 11250
TBPRD = fTBCLK
fPWM 2 2
1 1
2 кГц
60 МГц . . = 15000 =
Counter
Compare
Period
Вывод PWM
fTBCLK = 60 МГц
CA
CA
fPWM = 2 кГц
(TPWM = 500 мкс)
(TTBCLK = 16.7 нс)
Пример расчета фронтовой ШИМ Определение значений TBPRD и CMPA для формирования
фронтового ШИМ-сигнала частотой 2 кГц и заполнением 25% при частоте тактирования 60 МГц
CMPA = (100% - заполнение)*(TBPRD+1) - 1 = 0.75*(29999+1) - 1 = 22499
TBPRD = fTBCLK
fPWM 2 кГц
60 МГц - 1 = 29999 - 1 =
Счетчик
Сравнение
Период
Вывод PWM
P
CA
fTBCLK = 60 МГц
fPWM = 2 кГц
(TPWM = 500 мкс)
(TTBCLK = 16.7 нс)
ePWM: Подмодуль формирования мертвой зоны (DeadBand)
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
Необходимость мертвой зоны
К нагрузке
Шина питания
Сигналы управления комплиментарны
Транзисторные ключи открываются быстрее, чем закрываются Если оба ключа будут открыты, произойдет короткое замыкание!
ePWM: Блок-схема подмодуля DeadBand
Задержка нарастающего
фронта
In Out
(счетчик 10-бит)
Задержка спадающего
фронта
In Out
(10-bit counter)
0
1
0
1
0
1
1
0
PWMxA
PWMxB
PWMxB
PWMxA S1
S0
S2
S3 FED
RED
OUT-MODE POLSEL
0
1
0
1
S4
S5
IN-MODE HALFCYCLE
ePWM: регистры подмодуля DeadBand (файл л.р.: EPwm.c)
Задержка нарастающего фронта = TTBCLK x DBRED
Задержка спадающего фронта = TTBCLK x DBFED
Имя Описание Структура
DBCTL Настройка EPwmxRegs.DBCTL.all
DBRED Задержка нарастающего EPwmxRegs.DBRED
фронта (10-бит)
DBFED Задержка спадающего EPwmxRegs.DBFED
фронта (10-бит)
ePWM: регистр управления подмодулем DeadBand EPwmxRegs.DBCTL
Выбор полярности
00 = активный высокий 01 = активный низкий, комплиментарные (RED) 10 = активный высокий, комплиментарные (FED) 11 = активный низкий
Управление выводами
00 = модуль запрещен 01 = PWMxA = без задержек PWMxB = FED 10 = PWMxA = RED PWMxB = без задержек 11 = RED & FED (модуль полностью разрешен)
Выбор источника
00 = PWMxA источник для RED и FED 01 = PWMxA источник для FED PWMxB источник для RED 10 = PWMxA источник для RED PWMxB источник для FED 11 = PWMxB источник для RED и FED
OUT_MODE POLSEL
1 - 0 14 - 6
reserved
3 - 2
IN_MODE
5 - 4
HALFCYCLE
15
Тактирование
0 = полный цикл (период TBCLK) 1 = половинный цикл (период TBCLK*2)
ePWM: подмодуль ШИМ ─ Chopper
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
ePWM: Назначение подмодуля Chopper
Позволяет модулировать ШИМ-сигнал высокочастотной несущей
Используется в драйверах для управления затворами силовых приборов на основе импульсных трансформаторов
ePWM: Сигнал подмодуля Chopper EPWMxA
EPWMxB
CHPFREQ
EPWMxA
EPWMxB
OSHT
EPWMxA
Программируемая длительность (OSHTWTH)
Поддерживающие импульсы
Использование «One-Shot Pulse» на EPWMxA и/или EPWMxB
ePWM: Регистры подмодуля Chopper (файл л.р.: EPwm.c)
Имя Описание Структура
PCCTL Управление EPwmxRegs.PCCTL.all
ePWM: Регистр управления подмодулем Chopper EPwmxRegs.PCCTL
CHPEN CHPDUTY CHPFREQ OSHTWTH
0 15 - 11
reserved
4 - 1 7 - 5 10 - 8
Разрешение модуля
0 = запрещен 1 = разрешен
Ширина импульса One-Shot
0000 = 1 x SYSCLKOUT/8 1000 = 9 x SYSCLKOUT/8 0001 = 2 x SYSCLKOUT/8 1001 = 10 x SYSCLKOUT/8 0010 = 3 x SYSCLKOUT/8 1010 = 11 x SYSCLKOUT/8 0011 = 4 x SYSCLKOUT/8 1011 = 12 x SYSCLKOUT/8 0100 = 5 x SYSCLKOUT/8 1100 = 13 x SYSCLKOUT/8 0101 = 6 x SYSCLKOUT/8 1101 = 14 x SYSCLKOUT/8 0110 = 7 x SYSCLKOUT/8 1110 = 15 x SYSCLKOUT/8 0111 = 8 x SYSCLKOUT/8 1111 = 16 x SYSCLKOUT/8
Тактирующая частота подмодуля 000 = SYSCLKOUT/8 1 001 = SYSCLKOUT/8 2 010 = SYSCLKOUT/8 3 011 = SYSCLKOUT/8 4 100 = SYSCLKOUT/8 5 101 = SYSCLKOUT/8 6 110 = SYSCLKOUT/8 7 111 = SYSCLKOUT/8 8
Заполнение несущей модуля Chopper 000 = 1/8 (12.5%) 001 = 2/8 (25.0%) 010 = 3/8 (37.5%) 011 = 4/8 (50.0%) 100 = 5/8 (62.5%) 101 = 6/8 (75.0%) 110 = 7/8 (87.5%) 111 = reserved
ePWM: подмодули цифрового компаратора (Digital Compare) и Trip-Zone
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB SYSCLKOUT
TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
Назначение подмодуля Digital Compare
По сравнению выполняются:
отключение/включение выводов ePWM
формирование прерываний
синхронизация ePWM
запуск преобразования ADC
Входами подмодуля сравнения могут быть:
Выводы аналоговых компараторов (COMP1, COMP2, COMP3)
Входы модуля Trip-zone (TZ1, TZ2, TZ3)
Результаты сравнения формируются в зависимости от состояний входов подмодуля (см. след. слайд)
Для устранения шумовых эффектов может быть использован временный запрет операций сравнения
Сигналы подмодуля Digital Compare
TZ1
TZ2
TZ3
COMP1OUT
COMP2OUT
COMP3OUT
Событие сравнения
A1
Событие сравнения
A2
Событие сравнения
B1
Событие сравнения
B2
Синхронизация PWM
Подмодуль Time-Base
Формирование SOCA
Подмодуль Event-Trigger
Воздействие на PWMA
Прерывание
ПодмодульTrip-Zone
Синхронизация PWM
ПодмодульTime-Base
Формирование SOCB
Подмодуль Event-Trigger
Воздействие на PWMB
Прерывание
Подмодуль Trip-Zone
DCAH
DCAL
DCBH
DCBL
DCTRIPSEL TZDCSEL DCACTL / DCBCTL
DCAEVT1
DCAEVT2
DCBEVT1
DCBEVT2
затемнение
затемнение
События Digital Compare
Разработчик выбирает входы для каждого из событий DCAH, DCAL, DCBH, DCBL
Каждое из событий может использовать два входа DCyH/L (y = A или B)
Разработчик выбирает состояния входов, при которых формируется событие сравнения:
I. DCxH низкий DCxL любой
II. DCxH высокий DCxL любой
III. DCxL низкий DCxH любой
IV. DCxL высокий DCxH любой
V. DCxL высокий DCxH низкий
Особенности подмодуля Trip-Zone Модуль Trip-Zone связан с выводами EPWMxA/B быстрой и не
зависящей от тактирования логикой (время задержки – 25 нс)
Выполнение подпрограмм обработки прерываний при перегрузках по
току или коротких замыканиях может быть недостаточно быстрым,
чтобы защитить оборудование
Режимы работы:
#1) режим one-shot для коротких замыканий или перегрузок по току
#2) режим cycle-by-cycle для операций токоограничения
Ядро
CPU В ы в о д ы
P W M
EPWMxTZINT
TZ6
TZ5
TZ4
TZ3
TZ2
TZ1
Датчики превышения
тока
Режим
Cycle-by-Cycle
Режим
One-Shot
EPWMxA
EPWMxB
COMPxOUT Digital Compare
CPU
SYSCTRL
eQEP1
EMUSTOP
CLOCKFAIL
EQEP1ERR
ePWM: Регистры подмодулей Digital Compare и Trip-Zone
(файл л.р.: EPwm.c)
Имя Описание Структура
DCACTL DC A Control EPwmxRegs.DCACTL.all
DCBCTL DC B Control EPwmxRegs.DCBCTL.all
DCTRIPSEL DC Trip Select EPwmxRegs.DCTRIPSEL.all
DCCAPCTL Capture Control EPWMxRegs.DCCAPCTL.all
DCCAP Counter Capture EPwmxRegs.DCCAP
DCFCTL DC Filter Control EPwmxRegs.DCFCTL.all
DCFOFFSETCNT Filter Offset Ctr EPwmxRegs.DCOFFSETCNT
DCFWINDOW Filter Window EPwmxRegs.DCFWINDOW
DCFWINDOWCNT Filter Window Ctr EPwmxRegs.DCFWINDOWCNT
TZDCSEL Digital Compare EPwmxRegs.TZDCSEL.all
TZCTL Trip-Zone Control EPwmxRegs.TZCTL.all
TZSEL Trip-Zone Select EPwmxRegs.TZSEL.all
TZEINT Enable Interrupt EPwmxRegs.TZEINT.all
TZFLG Trip-Zone Flag EPwmxRegs.TZFLG.all
TZCLR Trip-Zone Clear EPwmxRegs.TZCLR.all
TZFRC Trip-Zone Force EPwmxRegs.TZFRC.all
ePWM: Регистр выбора входов подмодуля Digital Compare
EPwmxRegs.DCTRIPSEL
DCBLCOMPSEL
15 - 12 11 - 8
7 - 4 3 - 0
DCBHCOMPSEL
DCALCOMPSEL DCAHCOMPSEL
Выбор источника LOW Digital Compare B
Выбор источника HIGH Digital Compare B
Выбор источника LOW Digital Compare A
Выбор источника HIGH Digital Compare A
0000 = TZ1 input 0001 = TZ2 input 0010 = TZ3 input 1000 = COMP1OUT input 1001 = COMP2OUT input 1010 = COMP3OUT input Другие значения зарезервированы
ePWM: Регистр настройки события модуля Trip-Zone Digital Compare
EPwmxRegs.TZDCSEL
2 - 0 15 - 12
reserved
5 - 3
DCBEVT2 DCBEVT1 DCAEVT2 DCAEVT1
8 - 6 11 - 9
000 = событие запрещено 001 = DCBH низкий, DCBL любой 010 = DCBH высокий, DCBL любой 011 = DCBL низкий DCBH любой 100 = DCBL высокий, DCBH любой 101 = DCBL высокий, DCBH низкий 11x = зарезерв.
Настройка событий A1/A2 Настройка событий B1/B2
ePWM: Регистр управления подмодулем Digital Compare EPwmxRegs.DCyCTL (y = A or B)
9 8 2 0
reserved
1 7 - 4 15 - 10
EVT1FRC SYNCSEL
EVT2FRC SYNCSEL
EVT2SRC SEL
EVT1SRC SEL
EVT1 SYNCE
EVT1 SOCE
reserved
3
Источник сигнала DCyEVT1 0 = сигнал DCyEVT1 1 = сигнал DCEVTFILT
Источник сигнала DCyEVT2 0 = сигнал DCyEVT2 1 = сигнал DCEVTFILT
Тип DCyEVT1 0 = синхронный 1 = асинхронный
Формирование DCyEVT1 SOC 0 = запрещено 1 = разрешено
Формирование DCyEVT1 SYNC 0 = запрещено 1 = разрешено
Тип DCyEVT2 0 = синхронный 1 = асинхронный
ePWM: Регистр управления подмодулем Trip-Zone EPwmxRegs.TZCTL
TZA TZB
1 - 0 15 - 12
reserved
3 - 2
Действия с EPWMxB / EPWMxA
по сигналам TZ1─TZ6
DCBEVT2 DCBEVT1 DCAEVT2 DCAEVT1
5 - 4 7 - 6 9 - 8 11 - 10
00 = установить в высокоимпедансное состояние 01 = установить в высокий уровень 10 = сбросить в низкий уровень 11 = ничего не делать
Действие с EPWMxA по событию DCAEVT1/2
Действие с EPWMxB по событию DCBEVT1/2
ePWM: Регистр настройки подмодуля Trip-Zone EPwmxRegs.TZSEL
OSHT1 OSHT5 OSHT4 OSHT3 OSHT2
8
OSHT6
15 9 10 11 12 13
CBC1 CBC5 CBC4 CBC3 CBC2
0
CBC6
7 1 2 3 4 5
Trip Zone: режим Cycle-by-Cycle (событие сбрасывается при CTR = 0; т.е. каждый цикл PWM) 0 = воздействие на выводы запрещено 1 = воздействие на выводы разрешено
Trip Zone: режим One-Shot (событие может быть сброшено только программно; остается зафиксированным) 0 = воздействие на выводы запрещено 1 = воздействие на выводы разрешено
14
6
DCBEVT1
DCBEVT2 DCAEVT2
DCAEVT1
Настройка TZ1-TZ6 на однократное или многократное воздействие
ePWM: Регистр разрешения прерываний подмодуля Trip-Zone
EPwmxRegs.TZEINT
OST CBC reserved
15 - 7 0 2 1
reserved
Разрешение прерывания в режиме Cycle-by-Cycle 0 = disable 1 = enable
Разрешение прерывания в режиме One-Shot 0 = запрещено 1 = разрешено
DCBEVT2 DCBEVT1 DCAEVT2 DCAEVT1
Разрешение прерывания По событию DCBEVT 2/1 0 = запрещено 1 = разрешено
3 4 5 6
Разрешение прерывания По событию DCAEVT 2/1 0 = запрещено 1 = разрешено
ePWM: подмодуль Event-Trigger
16-бит
Базовый
счетчик
Логика
сравнения
Селектор
действия
Формирователь
мертвой зоны
PWM
Chopper
Trip
Zone
Теневой
Регистр
сравнения
Теневой
Регистр
периода
Предделитель
Теневой
Регистр
сравнения
EPWMxA
EPWMxB
SYSCLKOUT TZy
EPWMxSYNCI EPWMxSYNCO
TBCLK
Цифровой
компаратор
TZ1-TZ3
COMPxOUT
Event-Trigger ePWM: прерывания и SOC TBCTR
TBPRD
EPWMA
EPWMB
CMPB
CMPA
CTR = 0
CTR = PRD
CTRU = CMPA
CTRD = CMPA
CTRU = CMPB
CTRD = CMPB
CTR = 0 or PRD
ePWM: Регистры подмодуля Event-Trigger (файл л.р.: EPwm.c)
Имя Описание Структура
ETSEL Event-Trigger Selection EPwmxRegs.ETSEL.all
ETPS Event-Trigger Pre-Scale EPwmxRegs.ETPS.all
ETFLG Event-Trigger Flag EPwmxRegs.ETFLG.all
ETCLR Event-Trigger Clear EPwmxRegs.ETCLR.all
ETFRC Event-Trigger Force EPwmxRegs.ETFRC.all
ePWM: Регистр настройки подмодуля Event-Trigger
EPwmxRegs.ETSEL
15 11 7 - 4 2 - 0
INTEN INTSEL reserved
3
SOCBSEL SOCASEL SOCAEN SOCBEN
10 - 8 14 - 12
Разрешение SOCB / A
0 = запрет 1 = разрешение
Условия формирования EPWMxSOCB / A
000 = DCBEVT1 / DCAEVT1 001 = CTR = 0 010 = CTR = PRD 011 = CTR = 0 или PRD 100 = CTRU = CMPA 101 = CTRD = CMPA 110 = CTRU = CMPB 111 = CTRD = CMPB
Разрешение EPWMxINT
0 = запрет 1 = разрешение
Условия формирования EPWMxINT
000 = reserved 001 = CTR = 0 010 = CTR = PRD 011 = CTR = 0 or PRD 100 = CTRU = CMPA 101 = CTRD = CMPA 110 = CTRU = CMPB 111 = CTRD = CMPB
ePWM: Регистр предделителя подмодуля Event-Trigger
EPwmxRegs.ETPS
15 - 14 11 - 10 7 - 4 1 - 0
INTCNT INTPRD reserved
2 - 3
SOCBPRD SOCAPRD SOCACNT SOCBCNT
9 - 8 13 - 12
Счетчик EPWMxSOCB / A (количество произошедших событий) 00 = no events 01 = 1 event 10 = 2 events 11 = 3 events
Период EPWMxSOCB / A (количество событий перед SOC) 00 = запрещено 01 = SOC по первому событию 10 = SOC по второму событию 11 = SOC по третьему событию
Счетчик EPWMxINT (количество произошедших событий) 00 = no events 01 = 1 event 10 = 2 events 11 = 3 events
EPWMxINT Period (количество событий перед INT) 00 = заперщено 01 = INT по первому событию 10 = INT по второму событию 11 = INT по третьему событию
ШИМ высокого разрешения (HRPWM)
Значительно увеличивает разрешение традиционно полученного ШИМ
Использует дополнительно 8-бит для регистров сравнения (CMPxHR), периода (TBPRDHR) и фазы (TBPHSHR) для более точного позиционирования
Обычно используется, когда разрешение ШИМ ниже 9-10 бит, что происходит при частотах ШИМ ~160 kHz(с тактовой частотой 60 МГц)
Не все выводы ePWM поддерживают функцию HRPWM (см. документацию)
PWM Period
Тактирующий
сигал
(60 MHz)
Обычный
шаг PWM
(16.7 нс)
HRPWM
Micro Step (~150 пс)
HRPWM делит шаг ШИМ
на части ─ Micro Steps
(длительность ~= 150 пс,
65 пс в Delfino C2834x)
ms ms ms ms ms ms
Калибровочная логика
Калибровочная логика отслеживает количество Микро шагов за единицу
времени чтобы учесть изменения вызванные
Temp/Volt/Process
Модуль захвата (eCAP)
Модуль eCAP фиксирует значения времени при смене логического уровня на соответствующем выводе
Таймер
Метки
времени
Trigger
Вывод
Варианты использования модуля захвата
Проблема: Вычисление скорости, основанное на измерении изменения положения за фиксированный интервал времени приводит к большим ошибкам вычисления при малых скоростях
Сигнал от квадратурного энкодера
Расчет скорости медленных процессов вращения от инкрементального энкодера:
Измерение временных параметров сигнала
vk x
tk - tk-1
vk t
xk - xk-1
x
Дополнительный ШИМ-генератор
Альтернатива: Вычисление скорости на основании измеренных временных интервалов между фиксированными положениями
Блок-схема модуля eCAP Режим захвата
Счетчик
временной
метки
32-Бит
Регистр
Захвата 1
Предделитель
события
Выбор
полярности 1
Регистр
Захвата 2
Регистр
Захвата 3
Регистр
Захвата 4
Логи
ка с
об
ыти
я
Вывод ECAPx
SYSCLKOUT
CAP1POL
CAP2POL
CAP3POL
CAP4POL
PRESCALE
Выбор
полярности 2
Выбор
полярности 3
Выбор
полярности 4
Блок-схема модуля eCAP Режим ШИМ
Счетчик
временной
метки
32-Бит
Регистр
периода
(CAP3)
Регистр
периода
(CAP1)
Регистр
сравнения
(CAP4)
Регистр
сравнения
(CAP2)
Логика
сравнения
ШИМ вывод ECAPx
Теневой
Теневой
SYSCLKOUT
Непосредственный режим
Теневой режим
Непосредственный режим Теневой
режим
TSTCTR
eCAP: Регистры модуля (файл л.р.: ECap.c)
Имя Описание Структура
ECCTL1 Capture Control 1 ECapxRegs.ECCTL1.all
ECCTL2 Capture Control 2 ECapxRegs.ECCTL2.all
TSCTR Time-Stamp Counter ECapxRegs.TSCTR
CTRPHS Counter Phase Offset ECapxRegs.CTRPHS
CAP1 Capture 1 ECapxRegs.CAP1
CAP2 Capture 2 ECapxRegs.CAP2
CAP3 Capture 3 ECapxRegs.CAP3
CAP4 Capture 4 ECapxRegs.CAP4
ECEINT Enable Interrupt ECapxRegs.ECEINT.all
ECFLG Interrupt Flag ECapxRegs.ECFLG.all
ECCLR Interrupt Clear ECapxRegs.ECCLR.all
ECFRC Interrupt Force ECapxRegs.ECFRC.all
eCAP: Регистр управления 1 ECapxRegs.ECCTL1
CAPLDEN FREE_SOFT PRESCALE
15 - 14 13 - 9 8
Старшая часть:
Поведение в режиме эмуляции
00 = моментальная остановка TSCTR 01 = TSCTR считает до 0 и останавливается 1X = TSCTR не останавливается
Предделитель события 00000 = делит на 1 00001 = делит на 2 00010 = делит на 4 00011 = делит на 6 00100 = делит на 8 11110 = делит на 60 11111 = делит на 62
Загружать CAP1 – 4 Load по событию
захвата
0 = запрещено 1 = разрешено
eCAP: Регистр управления 1 ECapxRegs.ECCTL1
Младшая часть:
CTRRST4 CAP4POL
7 3 0 2
CTRRST3 CAP3POL CTRRST2 CAP2POL CTRRST1 CAP1POL
1 4 5 6
Сброс счетчика по событию захвата
0 = нет сброса(абсолютный режим) 1 = сброс после захвата(разностный режим)
Полярность события захвата
0 = захват по нарастающему фронту 1 = захват по спадающему фронту
eCAP: Регистр управления 2 ECapxRegs.ECCTL2
Старшая часть:
SWSYNC APWMPOL CAP_APWM
10 8 15 - 11
reserved
9
Полярность вывода APWM (действует только в режиме APWM) 0 = активный высокий 1 = активный низкий
Выбор режима
0 = режим захвата 1 = режим APWM
Программный запуск синхронизации счетчика 0 = нет эффекта 1 = загрузка значения TSCTR из CTRPHS для текущего модуля и других модулей (если SYNCO_SEL = 00)
eCAP: Регистр управления 2 ECapxRegs.ECCTL2
Младшая часть:
SYNCO_SEL SYNCI_EN
7 - 6 3 0 2 - 1
TSCTRSTOP REARM STOP_WRAP CONT_ONESHT
4 5
Настройка выходного синхросигна 00 = sync-in в sync-out 01 = sync-out формируется при CTR = PRD event 1X = запрет
Разрешение синхронизации 0 = запрет 1 = разрешение
Управление счетчиком Time Stamp Counter
0 = остановка 1 = запуск
Перезапуск (только в режиме захвата) 0 = no effect 1 = перезапуск захвата
Остановка в однокр./ Возврат в многокр. режиме (только в режиме захвата) 00 = стоп/возвр. после 1 события 01 = стоп/возвр. после 2 события 10 = стоп/возвр. после 3 события 11 = стоп/возвр. после 4 события
Режим работы (только в режиме захвата) 0 = многократный 1 = однократный
eCAP: Регистр разрешения прерываний ECapxRegs.ECEINT
CTR=CMP CTR=PRD
7 3 0 2
CTROVF CEVT4 CEVT3 CEVT2 CEVT1
1 4 5 6
reserved
15 - 8
reserved
0 = запрет прерывания 1 = разрешение прерывания
Разрешение прерывания CTR = CMP
Разрешение прерывания CTR = PRD
Разрешение прерывания
CTR = Overflow
Разрешение прерывания
события захвата 3
Разрешение прерывания
события захвата 1
Разрешение прерывания
события захвата 4
Разрешение прерывания
события захвата 2
Л.р. 3: Управление периферией
ADC
RESULT0
... Память
данных
ePWM2
соединитель
Capture 1 Register
ADC- INA0
TB Counter
Compare
Action Qualifier
ePWM3
eCAP1
Capture 2 Register
Capture 3 Register
Capture 4 Register
Просмотр
буфера АЦП с
результатами
обработки
ШИМ-сигнала
Code Composer
Studio
ePWM2 запускает
АЦП по совпадению
периода используя SOCA
каждые 20 мкс (50 кГц)
CPU копирует результаты в буфер в подпрограмме
обработки прерывания АЦП
1. Настройка модуля ePWM
Файл GPIO.c: настройка вывода GPIO4
Ход работы
Настройка счетчика
Регистр сравнения А
Настройка регистров сравнения
Настройка действий по сравнению
Файл Epwm_7_8_9_10…c:
Регистр периода
2. Компиляция и проверка работы модуля ePWM
J5:6 -ADCINA0 J6:5 – PWM3A
Построение графика во временной области: Tools -> Graph -> Single Time
Построение графика в частотной области: Tools -> Graph -> FFT Magnitude
3. Настройка модуля eCAP:
Файл Main7.c
Файл GPIO.c
Файл Ecap_7_8….c
Настройка и разрешение прерываний eCAP
4. Компиляция, загрузка и выполнение программы
J6:6 - ECAP1 J6:5 – PWM3A
1. Сброс и прерывания
2. Инициализация системы Л.р.: Сторожевой таймер и прерывания
3. Операции с числами Л.р.: Фильтрация ШИМ-сигнала
4. Разработка системы Л.р.: Выполнение программы из FLASH-памяти
5. Интерфейсы
6. DSP/BIOS Л.р.: Выполнение программы DSP/BIOS из FLASH-памяти
Не вошедшие в тренинг материалы
Микроконтроллеры C2000 от Texas Instruments
Спасибо за внимание !