Placa LAUNCHXL-F28379D
LaunchPad C2000 Delfino: CCS, DAC/ADC, aquisição de dados
Objetivo
Descrição da placa microcontrolada LAUNCHXL-F28379D (LaunchPad C2000 Delfino) e do microcontrolador TMS320F28379D, os recursos da placa (depurador, alimentação, LEDs, conectores), os sinais disponíveis nos BoosterPacks e o roteiro para criar, compilar e gravar o primeiro projeto no Code Composer Studio (CCS). É a base para os demais projetos e notas deste repositório.
O microcontrolador TMS320F28379D
O F28379D é uma placa da família Delfino F2837xD, voltada ao controle de conversores de potência e acionamentos elétricos.
| Recurso | TMS320F28379D |
|---|---|
| CPUs | 2 × C28x de 32 bits, 200 MHz, com FPU (ponto flutuante simples), TMU (trigonometria) e VCU-II |
| Coprocessadores | 2 × CLA (Control Law Accelerator), um por CPU, 200 MHz |
| Memória | até 1 MB de Flash (com ECC) e 204 KB de RAM |
| ADC | 4 módulos, modo 16 bits (diferencial) ou 12 bits (simples) |
| PWM | 24 canais ePWM (12 módulos), 16 com alta resolução (HRPWM) |
| Captura/encoder | 6 × eCAP, 3 × eQEP |
| Analógicos | 8 comparadores com janela (CMPSS), 3 DACs de 12 bits, SDFM (8 canais) |
| Comunicação | SCI (UART), SPI, I²C, CAN, McBSP, USB, uPP, EMIF |
- o ePWM gera PWM complementar com tempo morto em hardware e dispara o ADC (SOC) sincronizado com a portadora — a amostragem fica no centro do pulso, sem ripple de chaveamento;
- o CLA executa a malha de controle em paralelo à CPU, com latência determinística;
- a TMU acelera \(\sin\), \(\cos\) e \(\operatorname{atan2}\), usadas nas transformações de Park e no PLL.
A placa LaunchPad
A LAUNCHXL-F28379D é dividida em duas regiões, separadas por uma barreira de isolação:
- lado do depurador (USB): emulador XDS100v2 integrado (JTAG via USB) e porta serial virtual (back-channel UART), alimentados pela USB do computador;
- lado alvo: o F28379D, cristal de 10 MHz, reguladores de 3,3 V, referência de tensão de 3,0 V para os ADCs, LEDs, botão de reset e os conectores BoosterPack.
| Item | Função |
|---|---|
| USB (XDS100v2) | gravação, depuração e porta serial virtual (SCI-A, GPIO42/GPIO43) |
| Cristal 10 MHz | fonte de clock; com o PLL: \(10\ \text{MHz} \times 40 / 2 = 200\ \text{MHz}\) |
| LEDs de usuário | GPIO31 (azul) e GPIO34 (vermelho) — DEVICE_GPIO_PIN_LED1/LED2 na C2000Ware |
| Reset | botão de reset do F28379D |
| Chave de boot | seleciona o modo de boot (GPIO72/GPIO84) |
| BoosterPack | dois sites de 40 pinos (J1–J4 e J5–J8) |
| Encoder / CAN | conectores para eQEP e transceptor CAN |
| Referência ADC | \(V_{REFHI} = 3{,}0\ \text{V}\) — faixa de entrada analógica \(0\) a \(3{,}0\) V |
Designadores de jumpers (alimentação/isolação) e posição padrão da chave de boot devem ser conferidos no User’s Guide (SPRUI77) antes de acoplar BoosterPacks ou circuitos externos; os pinos de J1–J4 estão na seção Conectores do BoosterPack 1. As entradas analógicas não toleram 5 V: todo sinal de medição deve estar condicionado para a faixa \(0\)–\(3{,}0\) V.
Alimentação
No uso de bancada com o computador, a placa é alimentada pela própria USB. Quando acoplada a um BoosterPack de potência, o lado alvo compartilha o terra desse circuito; a isolação do XDS100v2 protege o computador, mas a configuração dos jumpers de alimentação deve ser revista para não interligar fontes.
Modos de boot
| Situação | Comportamento |
|---|---|
| Depurador conectado (CCS) | o CCS carrega o programa em RAM ou Flash e controla a execução |
| Placa isolada, boot da Flash | o programa gravado na Flash roda ao energizar (aplicação autônoma) |
Conectores do BoosterPack 1 (J1–J4)
Numeração padrão do BoosterPack (1 a 40), a usada nas notas e nos projetos (J3.26, J4.40…). As colunas seguem a disposição na placa, da esquerda para a direita; cada linha é uma fileira de pinos. Em negrito, os pinos usados nos projetos deste repositório.
| J1 | J3 | J4 | J2 |
|---|---|---|---|
| 1 — 3V3 | 21 — 5V | 40 — GPIO0 / EPWM1A | 20 — GND |
| 2 — GPIO32 | 22 — GND | 39 — GPIO1 / EPWM1B | 19 — GPIO61 / SPIA STE |
| 3 — GPIO19 / SCIB RX | 23 — ADCIN14 | 38 — GPIO2 / EPWM2A | 18 — GPIO123 / SD1 CLK1 |
| 4 — GPIO18 / SCIB TX | 24 — ADCINC3 | 37 — GPIO3 / EPWM2B | 17 — GPIO122 / SD1 D1 |
| 5 — GPIO67 | 25 — ADCINB3 | 36 — GPIO4 / EPWM3A | 16 — RESET |
| 6 — GPIO111 | 26 — ADCINA3 | 35 — GPIO5 / EPWM3B | 15 — GPIO58 / SPIA SIMO |
| 7 — GPIO60 / SPIA CLK | 27 — ADCINC2 | 34 — GPIO24 / OUTPUTXBAR1 | 14 — GPIO59 / SPIA SOMI |
| 8 — GPIO22 | 28 — ADCINB2 | 33 — GPIO16 / OUTPUTXBAR7 | 13 — GPIO124 / SD1 D2 |
| 9 — GPIO105 / I2CA SCL | 29 — ADCINA2 | 32 — DAC1 (PWM filtrado) | 12 — GPIO125 / SD1 CLK2 |
| 10 — GPIO104 / I2CA SDA | 30 — ADCINA0 / DACOUTA | 31 — DAC2 (PWM filtrado) | 11 — GPIO29 / OUTPUTXBAR6 |
- J3: só entradas analógicas (0–3,0 V); o pino 30 é também a saída do DAC-A (DACOUTA);
- J4.31 e J4.32 não são o DAC interno: são PWM filtrado por RC (1 kΩ, 100 nF) dos EPWM8B (GPIO160) e EPWM8A (GPIO159);
- O segundo site (J5–J8, pinos 41 a 80) repete o arranjo com ADCs, EPWM4–6 e SPIB, e ainda não é usado aqui.
Pinos usados nos projetos:
| Pino | Sinal | Uso |
|---|---|---|
| J3.26 | ADCINA3 | \(y\) do filtro Sallen-Key (SK01–SK09); \(V_o\) do buck (BK01Degrau) |
| J3.30 | DACOUTA / ADCINA0 | \(u\) do filtro Sallen-Key (DAC-A); \(V_o\) do buck no PWM_prbs (ADCINA0) |
| J4.40 | GPIO0 / EPWM1A | chave do buck (BK01Degrau, PWM_prbs); braço A, chave de cima (VSI01) |
| J4.39–J4.35 | EPWM1B, EPWM2A/B, EPWM3A/B | braços A, B e C do inversor (VSI01, BOOSTXL-3PHGANINV) |
| J2.13 | GPIO124 | habilitação do driver do BOOSTXL-3PHGANINV (VSI01) |
| J3.22, J2.20 | GND | terra comum com o circuito externo |
Fontes: esquemático da LaunchPad (R2.0, em c2000ware/boards/LaunchPads/LAUNCHXL-F28379D/) e o arquivo de placa do SysConfig (boards/.meta/LAUNCHXL_F28379D.syscfg.json) da C2000Ware.
Primeiro projeto no CCS
Pré-requisitos
- Code Composer Studio instalado com suporte a C2000 real-time MCUs;
- C2000Ware (contém a
driverlib, os arquivos de dispositivo e os exemplos); - Placa ligada pela USB — o sistema deve reconhecer o XDS100v2.
Criar o projeto a partir de um exemplo
- File → Import → CCS Projects e selecionar
C2000Ware/driverlib/f2837xd/examples/cpu1/led/(exemploled_ex1_blink); - Marcar Copy projects into workspace e copiar a pasta do projeto para este repositório;
- Em Properties → Build → C2000 Compiler → Predefined Symbols, conferir o símbolo
_LAUNCHXL_F28379D— ele faz odevice.husar o clock e os LEDs da LaunchPad; - Escolher a configuração de build:
- CPU1_RAM — programa carregado na RAM (rápido para depurar, perdido ao desligar);
- CPU1_FLASH — programa gravado na Flash (persiste, roda sem o CCS);
- Target configuration: dispositivo TMS320F28379D, conexão Texas Instruments XDS100v2 USB Debug Probe.
Código mínimo (pisca-LED)
#include "driverlib.h"
#include "device.h"
void main(void)
{
Device_init(); // clock 200 MHz, watchdog desligado, periféricos habilitados
Device_initGPIO(); // desbloqueia os GPIOs
GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD);
GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT);
Interrupt_initModule(); // PIE
Interrupt_initVectorTable();
EINT; // habilita interrupções globais
ERTM; // habilita depuração em tempo real
for (;;)
{
GPIO_togglePin(DEVICE_GPIO_PIN_LED1);
DEVICE_DELAY_US(500000); // 0,5 s
}
}Compilar, gravar e depurar
- Build (martelo) — gera o
.outna pasta da configuração (CPU1_RAM/ouCPU1_FLASH/, ignoradas pelo Git); - Debug (inseto) — conecta ao XDS100v2, grava e para em
main(); - Resume (F8) — o LED azul deve piscar a 1 Hz;
- Janela Expressions para observar variáveis em tempo real (com
ERTMhabilitado).
Excitação e medição: DAC e ADC
Para ensaios em malha aberta e em malha fechada, a placa gera um sinal com o DAC e mede a resposta com o ADC, ambos referenciados a \(V_{REFHI} = 3{,}0\) V.
| Recurso | Pino (LaunchPad) | Faixa | Resolução |
|---|---|---|---|
| DAC-A (DACOUTA) | J3.30 | 0–3,0 V | 12 bits (\(3{,}0/4095 \approx 0{,}73\) mV) |
| ADC-A, canal ADCINA3 | J3.26 | 0–3,0 V | 12 bits, modo single-ended |
Uma saída GPIO (3,3 V) ou um sinal de 5 V não pode ir direto ao ADC. Trabalhar em torno de um ponto de operação (p.ex. 0,6–1,4 V) mantém DAC, ADC e o circuito externo longe das saturações; o circuito externo deve ser alimentado de modo que sua saída fique em 0–3,0 V.
Amostragem disparada por hardware
Padrão usado nos projetos: o CPU Timer 0 define o período de amostragem \(T_s\); seu sinal TINT0 dispara a conversão do ADC (SOC0) e o fim da conversão gera a interrupção ADCA INT1, onde roda a lei de controle/excitação. Assim \(T_s\) não depende do tempo de execução do software.
CPU Timer 0 (Ts) ──TINT0──► ADC-A SOC0 ──fim de conversão──► ISR adcA1ISR
y(k) ← ADC
u(k) ← lei de controle/excitação
DAC ← u(k)static void adc_init(void)
{
ADC_setPrescaler(ADCA_BASE, ADC_CLK_DIV_4_0);
ADC_setMode(ADCA_BASE, ADC_RESOLUTION_12BIT, ADC_MODE_SINGLE_ENDED);
ADC_setInterruptPulseMode(ADCA_BASE, ADC_PULSE_END_OF_CONV);
ADC_enableConverter(ADCA_BASE);
DEVICE_DELAY_US(1000);
// SOC0: canal ADCINA3, disparado pelo CPU Timer 0, janela de 64 ciclos
ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT0,
ADC_CH_ADCIN3, 63U);
// Fim da conversao do SOC0 gera ADCA INT1
ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
}
static void timer_init(void)
{
CPUTimer_stopTimer(CPUTIMER0_BASE);
CPUTimer_setPreScaler(CPUTIMER0_BASE, 0U);
CPUTimer_setPeriod(CPUTIMER0_BASE, (uint32_t)(DEVICE_SYSCLK_FREQ * TS_S) - 1U);
CPUTimer_reloadTimerCounter(CPUTIMER0_BASE);
CPUTimer_enableInterrupt(CPUTIMER0_BASE); // gera o TINT0 que dispara o ADC
}
__interrupt void adcA1ISR(void)
{
float y = adc_le_volts();
float u = controle_passo(y); // lei de excitação ou de controle
dac_escreve_volts(u);
ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);
}Como o DAC é escrito depois da leitura do ADC, \(u(k)\) só afeta a saída a partir de \(y(k+1)\): todo modelo discreto obtido com este padrão tem atraso de uma amostra.
Buffers de aquisição
Para guardar os ensaios, os vetores ficam nos blocos de RAM global (RAMGS), declarados com #pragma DATA_SECTION(y_buf, "ramgs0"). Buffers grandes (milhares de amostras em float) podem exceder um único bloco: nesse caso, juntar blocos GS no arquivo .cmd do linker ou gravar em uint16_t.
Exportar dados do CCS para CSV
- Rodar o ensaio até o fim (p.ex.
ensaio_concluido = 1) e pausar a execução; - Na janela Expressions, adicionar os vetores (
y_buf,u_buf); - Exportar os vetores para CSV — o arquivo sai com um bloco por variável:
y_buf,,,u_buf,
Sample,Value,,Sample,Value
0,0.597802162,,0,0.600000024
1,0.594871759,,1,0.600000024
...A exportação da lista de Expressions em JSON guarda só os nomes das variáveis, não os valores. O formato CSV acima é lido pela função le_csv_ccs() dos scripts de análise (Notas/IdentificacaoSallenKeyPRBS/analise/plota_degrau.py).
Conexões
- Identificação do Filtro Sallen-Key — ensaios ao degrau e PRBS e identificação ARX usando os recursos desta nota;
- Controle do Inversor Trifásico — exemplo de aplicação desta placa.
Referências
- Texas Instruments. LAUNCHXL-F28379D — C2000 Delfino LaunchPad — User’s Guide (SPRUI77).
- Texas Instruments. TMS320F2837xD Dual-Core Microcontrollers — Technical Reference Manual (SPRUHM8).
- Texas Instruments. TMS320F2837xD Dual-Core Microcontrollers — Datasheet (SPRS880).
- Texas Instruments. C2000Ware —
driverlib/f2837xd/examples/.