LLC数字控制TMS320F28034,5-DSP的ADC及比较器配置介绍

LLC数字控制TMS320F28034,5-DSP的ADC及比较器配置介绍

  • [1 TMS320F28034 ADC原理](#1 TMS320F28034 ADC原理)
  • [2 概述](#2 概述)
  • [3 SOC配置](#3 SOC配置)
  • [4 同步模式采样](#4 同步模式采样)
  • [5 ADC中断](#5 ADC中断)
  • [6 ADC上电顺序](#6 ADC上电顺序)
  • [7 ADC寄存器](#7 ADC寄存器)
  • [8 比较器概述](#8 比较器概述)
  • [9 DAC基准](#9 DAC基准)
  • [10 比较器寄存器](#10 比较器寄存器)
  • [11 编程实现](#11 编程实现)
    • [11.1 ADC采样编程](#11.1 ADC采样编程)
    • [11.2 比较器编程](#11.2 比较器编程)
  • [12 C2000数模转换及比较器总结](#12 C2000数模转换及比较器总结)

配套代码例程

1 TMS320F28034 ADC原理

分辨率:指ADC所能分辨的最小模拟输入量,通常用 ADC的位数表示。如:12位ADC的分辨率为12位,10位 ADC的分辨率为10位。

转换精度:指实际输入的模拟值与理论输入的模拟值 (根据ADC输出推算)之间的偏差。常用数字量最低有 效位 LSB 的几分之几表示。

转换时间和转换速度:转换时间指完成一次ADC所需的 时间。转换速度是转换时间的倒数。


2 概述

内置两个采样/保持(S/H)电路的12位ADC内核

同步采样模式或顺序采样模式

模拟输入量:0V~3.3V(固定的),或者VREFHI~ VREFLO(比例模式)

以全系统时钟运行,无需预分频

多路复用输入16个通道

16个SOC(Star-of-Conversion)配置

16个结果寄存器(可单独寻址),用于存储转换值

多个触发源 -S/W ---软件立即启动 -ePWM 1~ePWM 7 -GPIO XINT2 -CPU定时器0/1/2 -ADCINT1/2

9个灵活的PIE中断,在任意转换之后可以配置中断请求


3 SOC配置

SOC:是一种配置设置,它定义的是单通道单转换。包 含3个配置:启动转换的触发源、转换通道、采样保持窗口。 每个SOC都是单独配置,即触发源、通道、采样保持窗 口可任意组合,可实现从"使用不同触发器、不同通道的单 独采样"到"使用单个触发器、相同通道的过采样"。 触发源:ADCSOCxCTL、ADCINTSOCSELy、 通道和采样保持窗口: ADCSOCxCTL寄存器。

4 同步模式采样

同步采样:ADC包含两个采样/保持电路,允许同时对两 个不同的通道进行采样,保证两个信号之间的采样延迟最短。 使用ADCSAMPLEMODE寄存器对一对SOCx进行配置。 偶数编号的SOCx和它之后的奇数编号的SOCx(如SOC0和 SOC1)配成一对,连接同一个使能位(此时SIMULEN0)。

同步采样配置:

 任意一个SOCx触发源都可以启动一对转换。

 那对转换通道将由A通道和B通道组成。

 同时采样两个通道。

 转换A通道转换后产生偶数编号的EOCx脉冲,B通道转换后产 生奇数编号的EOCx脉冲。

 A通道的转换结果存放在偶数编号的ADCRESULTx寄存器中,B 通道的转换结果则存放在奇数编号的ADCRESULTx寄存器中。

例如:如果ADCSAMPLEMODE.SIMULEN0位置1且SOC0配 置如下:

 CHSEL = 2(ADCINA2/ADCINB2通道)

 TRIGSEL = 5(ADCTRIG5= ePWM1.ADCSOCA) 当

ePWM1.ADCSOCA触发时,ADCINA2和ADCINB2将 会同时被采样。ADCINA2立即转换,结果存ADCRESULT0中 ,产生EOC0脉冲;ADCINB2被转换,结果存ADCRESULT1 中,产生EOC1脉冲。

5 ADC中断

 16个SOCx产生16个EOCx(End-of-Conversion)标志。

 EOCx可设置为转换开始或结束时。

 ADC的9个中断配置选择EOC0~ EOC15信号作为中断源。

 ADCINT1和ADCINT2信号可作为SOCx的触发源。这对连 续转换来说非常有用。

6 ADC上电顺序

ADC在复位后是关闭状态。在必须在PCLKCR0.ADCENCLK 先使能时钟。启动ADC的操作如下:

  1. 如果使用外部参考源,在ADCCTL1.ADCREFSEL使能。
  2. 在ADCCTL1寄存器(5-7位ADCPWDN, ADCBGPWD, ADCREFPWD)中启动参考源、带隙和模拟电路。
  3. 通过设置ADCCTL1.ADCENABLE使能ADC。
  4. 在首次转换之前延时1毫秒。

7 ADC寄存器

关于寄存器的详细介绍可以参考官网的参考文档。

8 比较器概述

 真正的模拟电压比较器

 可以提供两个外部模拟输入,一个DAC内部基准

 输出可以异步传输,也可以通过限定单元与系统时钟周 期同步,进行简单滤波

 输出可软件取反

 输出被传送到ePWM触发区(Trip Zone)模块和GPIO 输出多路复用器


9 DAC基准

10 比较器寄存器



比较器变成流程:

编程流程:

使能COMP时钟:(PCLKR3.COMPxENCLK)

使能ADC内的帶隙:ADCTRL1.ADCBGPWD=1

若用DAC,使能VSSA:ADCTRL1.VREFLOCONV

GPIO和AIO引脚复用设置

COMP控制寄存器设置:使能、反向输入源、输出取反、同 步等设置:COMPCTL

若用DAC则设置:DACVAL.DACVA

11 编程实现

11.1 ADC采样编程

根据原理图可知:

ADC采集共有三种:输出电压采集、输出电流采集、基准调压滑动变阻器采集。

(1)配置ADCCTL1寄存器

(2)配置INTSEL1N2寄存器

(3)配置ADC触发源

(4)配置采集顺序

(5)配置采集速度

bash 复制代码
/*****************************************************************************
 * 函    数: FunAdcInit(void)
 * 功    能:   输出电压采样(ADCINTA1,ADCINTB1,ADCINTB2);
 *           输出电流采样(ADCINTA3,ADCINTB3,ADCINTB4);
 *          滑动变阻器采样(ADCINTA6);
 * Parameters  :
 * Returns     :
*****************************************************************************/
void FunAdcInit(void)
{
    EALLOW;
    // ADC 采集数据允许倍覆盖;
    AdcRegs.ADCCTL2.bit.ADCNONOVERLAP=0;
    // ADCCLK = SYSCLKOUT(60Mhz)
    AdcRegs.ADCCTL2.bit.CLKDIV2EN=0;
    // ADC ONESHOT不启动
    AdcRegs.SOCPRICTL.bit.ONESHOT = 0;
    // ADC SOC0优先级最高,SOC0~16均在轮询中;
    AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0;
    // SOC1~15 均同步采集;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN2=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN4=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN6=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN8=1;
    /*
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN8=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN10=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN12=1;
    AdcRegs.ADCSAMPLEMODE.bit.SIMULEN14=1;
    */

    // SOC0~7优先级最高,其他的采样轮询顺序优先级
    AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0x09;

    AdcRegs.ADCSOC0CTL.bit.CHSEL = 1;// SOC0<->ADCINTA1(输出电压) SOC1<->ADCINTB1(输出电压)
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA触发采样
    AdcRegs.ADCSOC0CTL.bit.ACQPS   = 7;// 采样窗口7+1*CLK

    AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;//SOC2<->*** SOC3<->ADCINTB2(输出电压)
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;// ePWM1 SOCA触发采样
    AdcRegs.ADCSOC2CTL.bit.ACQPS   = 7;// 采样窗口7+1*CLK

    AdcRegs.ADCSOC4CTL.bit.CHSEL = 3;//SOC4<->ADCINTA3(输出电流) SOC5<->ADCINTB3(输出电流)
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 5;// ePWM1 SOCA触发采样
    AdcRegs.ADCSOC4CTL.bit.ACQPS   = 7;// 采样窗口7+1*CLK

    AdcRegs.ADCSOC6CTL.bit.CHSEL = 4;//SOC6<->**  SOC7<->ADCINTB4(输出电流)
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 5;// ePWM1 SOCA触发采样
    AdcRegs.ADCSOC6CTL.bit.ACQPS   = 7;// 采样窗口7+1*CLK

    AdcRegs.ADCSOC8CTL.bit.CHSEL = 6;//SOC8<->ADCINTA6(输出滑动电位器)
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 5;// ePWM1 SOCA触发采样
    AdcRegs.ADCSOC8CTL.bit.ACQPS   = 7;// 采样窗口7+1*CLK

    /*
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC13CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 0;
    AdcRegs.ADCSOC15CTL.bit.TRIGSEL = 0;
    // 通道配置
    AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
    AdcRegs.ADCSOC2CTL.bit.CHSEL = 2;
    AdcRegs.ADCSOC3CTL.bit.CHSEL = 3;
    AdcRegs.ADCSOC4CTL.bit.CHSEL = 4;
    AdcRegs.ADCSOC5CTL.bit.CHSEL = 5;
    AdcRegs.ADCSOC6CTL.bit.CHSEL = 6;
    AdcRegs.ADCSOC7CTL.bit.CHSEL = 7;
    AdcRegs.ADCSOC8CTL.bit.CHSEL = 8;
    AdcRegs.ADCSOC9CTL.bit.CHSEL = 9;
    AdcRegs.ADCSOC10CTL.bit.CHSEL = 10;
    AdcRegs.ADCSOC11CTL.bit.CHSEL = 11;
    AdcRegs.ADCSOC12CTL.bit.CHSEL = 12;
    AdcRegs.ADCSOC13CTL.bit.CHSEL = 13;
    AdcRegs.ADCSOC14CTL.bit.CHSEL = 14;
    AdcRegs.ADCSOC15CTL.bit.CHSEL = 15;
    // 采样窗口40*CLK
    AdcRegs.ADCSOC0CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC1CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC2CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC3CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC4CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC5CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC6CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC7CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC8CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC9CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC10CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC11CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC12CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC13CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC14CTL.bit.ACQPS = 40;
    AdcRegs.ADCSOC15CTL.bit.ACQPS = 40;
    */

    // ADC 模拟电路内部核模块上电
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1;
    // ADC 参考电路内部核模块上电
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;
    // ADC Bandgap电路内部核模块上电
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;
    // ADC启动;
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1;
    // ADC开始 转换前延迟1ms
    DELAY_US(1000l);
    EDIS;
}

11.2 比较器编程

bash 复制代码
void FunCompInit(void)
{
    EALLOW;
    Comp1Regs.COMPCTL.bit.COMPSOURCE = 1;
    // 接受数据连续两个SYSCLKOUT时钟一致,COMPOUT才输出;
    Comp1Regs.COMPCTL.bit.QUALSEL = 5;
    // 输出信号饭庄;COMP+>COMP-,输出低电平;反之,输出高;
    Comp1Regs.COMPCTL.bit.CMPINV = 1;
    // COMP-链接内部DAC模块
    Comp1Regs.COMPCTL.bit.COMPSOURCE = 0;
    // 内部DAC有DAC Valu寄存器控制;
    Comp1Regs.DACCTL.bit.DACSOURCE = 0;
    Comp1Regs.DACVAL.bit.DACVAL =500;
    // 比较器和DAC使能;
    Comp1Regs.COMPCTL.bit.COMPDACEN = 1;
    EDIS;
}

配套代码例程

12 C2000数模转换及比较器总结

总的来说,C2000系列微控制器的ADC和比较器模块是实时控制应用中重要的部分,能够帮助系统准确地获取和处理模拟信号,并根据条件产生相应的响应。这些模块的性能和功能对于实时控制应用的成功实现至关重要。

配套代码例程

相关推荐
mucheni7 分钟前
迅为iTOP-RK3576开发板/核心板6TOPS超强算力NPU适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品
arm开发·人工智能·边缘计算
杜小暑35 分钟前
动态内存管理
c语言·开发语言·动态内存管理
YuforiaCode1 小时前
第十二届蓝桥杯 2021 C/C++组 直线
c语言·c++·蓝桥杯
国科安芯1 小时前
面向高性能运动控制的MCU:架构创新、算法优化与应用分析
单片机·嵌入式硬件·安全·架构·机器人·汽车·risc-v
AnsenZhu1 小时前
2025年Redis分片存储性能优化指南
数据库·redis·性能优化·分片
阿让啊1 小时前
C语言中操作字节的某一位
c语言·开发语言·数据结构·单片机·算法
拾忆-eleven2 小时前
C语言实战:用Pygame打造高难度水果消消乐游戏
c语言·python·pygame
再睡一夏就好2 小时前
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
linux·服务器·c语言·c++·笔记
embedded_w4 小时前
U8G2在PC端模拟(C语言版本)
c语言
电鱼智能的电小鱼4 小时前
基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌
linux·网络·人工智能·嵌入式硬件·无人机·边缘计算