TMS320F28003x ADC同步采样与SOC配置实战指南 1. 项目概述与核心价值在电机控制、数字电源或者任何需要高精度实时反馈的嵌入式系统中ADC模数转换器的性能和配置方式往往是决定系统成败的关键。你可能会遇到这样的场景需要同时采集三相电流、母线电压、温度等多个模拟量并且要求这些采样点在时间上严格对齐以确保控制算法的计算基础是同一时刻的“系统快照”。如果采样点存在时间差哪怕只有微秒级的偏移在高速旋转或开关的系统中都可能导致控制环路失稳、效率下降甚至硬件损坏。TMS320F28003x作为TI C2000系列中的主流高性能微控制器其内置的多个ADC模块和灵活的SOCStart-of-Conversion机制为解决这类同步采样难题提供了强大的硬件支持。但手册上零散的寄存器描述和代码片段往往让初次接触的工程师感到无从下手。比如当看到手册里提到“Synchronous Operation with Uneven SOC Numbers”SOC数量不等的同步操作时你可能会疑惑不同ADC模块配置的转换序列长度不同它们真的能同步吗触发溢出了怎么办非重叠转换又是什么场景这篇文章我将结合自己多年在电机驱动和电源项目上“踩坑”的经验为你彻底拆解TMS320F28003x ADC的同步采样、触发配置与SOC应用。我不会只给你粘贴寄存器代码而是会讲清楚每个配置项背后的设计意图、不同模式下的时序行为、以及在实际工程中如何避坑。无论你是正在调试一套新的伺服驱动器还是优化一款数字电源的采样精度这里面的细节都值得你仔细琢磨。2. ADC同步采样机制深度解析2.1 同步操作的本质与前提首先要明确一个核心概念在TMS320F28003x中“同步”指的是多个ADC模块在同一个触发信号边沿同时启动其SOC所定义的转换流程。这里的“同时”是硬件级别的由内部的触发分发网络保证精度在单个SYSCLK周期内。实现同步操作有一个黄金法则所有需要同步启动的ADC SOC必须配置为使用同一个触发源。例如ADCA的SOC0和ADCC的SOC0都选择ePWM3的SOCB作为触发源TRIGSEL 10。当ePWM3产生SOCB触发脉冲时这两个SOC会同时进入采样保持SH阶段。但同步启动并不意味着同时结束。每个SOC的转换时间取决于其配置的采样窗口ACQPS和ADC内核的转换时间固定值。因此同步操作的核心价值在于为多个通道的采样建立了统一的时间基准这对于需要计算矢量如Clarke变换或需要瞬时功率计算的场合至关重要。2.2 SOC数量不等的同步操作详解手册中“Synchronous Operation with Uneven SOC Numbers”这一节是理解ADC灵活性的关键。它打破了“要同步就必须配置一模一样”的思维定式。2.2.1 场景与配置分析假设一个应用场景你需要同步采样电机的两相电流使用ADCA的A4和A0通道和直流母线电压使用ADCC的C0和C1通道。但电流采样需要更高的动态性能因此除了同步点ADCA还需要在同步触发后额外进行一次电流采样用于更复杂的观测器算法。这时你可以这样配置ADCA配置3个SOCSOC0, SOC1, SOC2。ADCC配置2个SOCSOC0, SOC1。触发源全部使用ePWM3_SOCBTRIGSEL 10。对应的关键寄存器配置代码如下// ADCA 配置 AdcaRegs.ADCSOC0CTL.bit.CHSEL 4; // SOC0 转换 ADCINA4 (A相电流) AdcaRegs.ADCSOC0CTL.bit.ACQPS 19; // 采样窗口 20个SYSCLK周期 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL 10; // 触发源: ePWM3 SOCB AdcaRegs.ADCSOC1CTL.bit.CHSEL 4; // SOC1 再次转换 ADCINA4 AdcaRegs.ADCSOC1CTL.bit.ACQPS 30; // 不同的采样窗口31个周期 AdcaRegs.ADCSOC1CTL.bit.TRIGSEL 10; // 同一触发源 AdcaRegs.ADCSOC2CTL.bit.CHSEL 0; // SOC2 转换 ADCINA0 (B相电流) AdcaRegs.ADCSOC2CTL.bit.ACQPS 30; AdcaRegs.ADCSOC2CTL.bit.TRIGSEL 10; // ADCC 配置 AdccRegs.ADCSOC0CTL.bit.CHSEL 0; // SOC0 转换 ADCINC0 (母线电压Vdc1) AdccRegs.ADCSOC0CTL.bit.ACQPS 19; AdccRegs.ADCSOC0CTL.bit.TRIGSEL 10; // 同一触发源 AdccRegs.ADCSOC1CTL.bit.CHSEL 1; // SOC1 转换 ADCINC1 (母线电压Vdc2或温度) AdccRegs.ADCSOC1CTL.bit.ACQPS 30; AdccRegs.ADCSOC1CTL.bit.TRIGSEL 10;2.2.2 时序行为与“触发溢出”陷阱这是最需要理解的部分。当触发信号ePWM3 SOCB到来时所有ADC的SOC0同时启动ADCA开始对A4采样ADCC开始对C0采样。这是严格的同步点。各ADC独立完成自己的SOC序列ADCA的SOC0结束后会自动启动其SOC1再次采样A4然后是其SOC2采样A0。ADCC的SOC0结束后会自动启动其SOC1采样C1。关键点ADCC只有2个SOC它会比ADCA3个SOC更早完成整个转换序列并进入空闲状态。此时如果第二个ePWM3 SOCB触发脉冲在ADCA完成其SOC2之前到来就会发生手册中警告的“Trigger Overflow”情况。ADCC已经空闲它会立即响应这个新触发开始新一轮的SOC0转换。而ADCA还在忙无法响应这个新触发它必须等到当前的SOC2转换完成后才会去处理这个“已到达”的触发信号开始下一轮的SOC0。后果就是ADCA和ADCC的SOC0启动时刻不再同步同步操作被破坏变成了异步操作。在电机控制中这会导致两相电流和母线电压的采样时刻错开引入额外的计算误差和相位延迟。实操心得在设计ePWM触发周期时必须确保触发间隔大于所有ADC模块中SOC数量最多的那个序列的总转换时间。总转换时间需要根据每个SOC的ACQPS和ADC内核转换时间可查数据手册仔细计算并留出足够余量。一个简单的估算方法是(最大SOC数量) × (最大ACQPS转换周期) × SYSCLK周期时间。在实际项目中我通常会在此基础上增加10%-20%的裕量以应对最坏情况。2.3 非重叠转换另一种“逻辑同步”策略手册中“Non-overlapping Conversions”提供了一种巧妙的思路用于解决不同ADC需要不同采样窗口或不同触发相位但又要求数据在时间上“等效对齐”的场景。2.3.1 工作原理假设你有两个需要采样的信号但它们的噪声特性不同需要不同的采样窗口ACQPS。同时你希望它们的采样时刻在系统控制周期内是固定的、可预测的并且彼此错开以减少对电源的瞬时负载。你可以利用两个相位相差180度的ePWM触发信号例如ePWM3的SOCA和SOCB。让ADCA的SOC0由ePWM3_SOCB触发ADCC的SOC0由ePWM3_SOCA触发。由于两个触发信号在时间上完全错开即使两个SOC的ACQPS配置不同它们的转换周期也绝不会重叠。// 假设ePWM3配置为计数增模式周期为1000CMPA500CMPB0。 // 则SOCA在计数值等于CMPA时产生SOCB在计数值等于CMPB时产生相位差180度。 AdcaRegs.ADCSOC0CTL.bit.CHSEL 4; // ADCA采样A4 AdcaRegs.ADCSOC0CTL.bit.ACQPS 19; // 采样窗口20周期 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL 10; // 触发源: ePWM3 SOCB (TRIGSEL10) AdccRegs.ADCSOC0CTL.bit.CHSEL 0; // ADCC采样C0 AdccRegs.ADCSOC0CTL.bit.ACQPS 9; // 采样窗口10周期更短 AdccRegs.ADCSOC0CTL.bit.TRIGSEL 9; // 触发源: ePWM3 SOCA (TRIGSEL9)2.3.2 应用场景与优势这种模式在数字电源的交错并联控制中非常有用。例如一个两相交错并联的Buck电路你需要分别采样两个相位电感的电流。让两个ADC分别由相位差180度的PWM触发进行采样可以确保采样时刻正好位于各自相位PWM波形的中点电流纹波谷值或平均值点这对于电流模式控制是最佳点。虽然两个ADC的采样时刻不同但在每个开关周期内它们相对于各自PWM的时序关系是固定的、同步的因此从系统控制的角度看数据仍然是“同步”可用的。注意事项使用非重叠转换时必须通过ePWM模块精确控制两个触发信号的相位关系。确保在第一个ADC完成转换之前第二个触发不会到来反之亦然避免任何潜在的硬件冲突。同时在软件读取结果时需要清楚这两个结果对应着系统控制周期内两个不同的时间点。3. 采样窗口ACQPS的计算与工程化选择采样窗口的配置ACQPS寄存器直接决定了ADC输入信号的建立精度配置不当会导致采样误差进而影响整个控制系统的性能。手册给出了理论计算公式但在实际工程中我们需要更务实的处理方法。3.1 理论计算RC模型与参数获取手册中的公式基于RC充电模型τ (Rs Ron) * Ch Rs * (Cs Cp)k ln( (Cs Cp) / Ch ) / ln(settling_error / (2^n))t_acq_min k * τ其中Rs信号源阻抗。这是最大的变数取决于你的前端调理电路如运放输出阻抗、分压电阻、滤波电阻。RonADC内部采样开关电阻。查芯片数据手册Datasheet不是技术参考手册TRM。对于F28003x典型值在几百欧姆量级。ChADC内部采样保持电容。查数据手册通常在几皮法到十几皮法。CsADC引脚外部对地电容。包括PCB寄生电容、滤波电容、ESD保护电容等。CpADC通道内部寄生电容。查数据手册。nADC分辨率12位。settling_error可接受的建立误差通常设为0.5 LSB或0.25 LSB。计算示例假设一个典型电流采样电路使用运放直接驱动ADC引脚。Rs运放输出阻抗≈ 0.1Ω 理想运放Ron 500Ω 假设值Ch 12.5pFCs 10pF PCB走线滤波Cp 12.7pFsettling_error 0.25 LSBSYSCLK 120MHz (周期8.33ns)计算过程τ (0.1 500)*12.5p 0.1*(10p12.7p) ≈ 6250.25 psRs影响极小k ln((10p12.7p)/12.5p) / ln(0.25/4096) ≈ ln(1.816) / ln(0.000061) ≈ 0.597 / (-9.70) ≈ -0.0616这里公式似乎有误k应为正数。正确理解应为k -ln(settling_error/(2^n)) / ln( (CsCp)/Ch ) 实际上手册公式(6)的写法容易引起歧义。更常见的理解是所需时间常数倍数k由所需精度和电容比决定。一个经验值是要达到1/2 LSB精度需要约9个时间常数1/4 LSB需要约10个。我们取k10。t_acq_min 10 * 6.25ns 62.5ns所需SYSCLK周期数 62.5ns / 8.33ns ≈ 7.5因此ACQPS ceil(7.5) - 1 7因为ACQPS是采样周期数减1。3.2 工程实践仿真、测试与经验值理论计算依赖于许多不精确的参数尤其是Ron和Cp因此绝不能完全依赖计算。3.2.1 推荐工作流前端电路仿真在SPICE或LTspice中建立ADC的输入模型可从TI官网的模型库中获取和你的驱动电路。施加一个阶跃信号观察采样点电压的建立过程。这是最可靠的方法。基于数据手册最小值数据手册会规定一个最小的ACQPS值例如对于12位模式ACQPS最小值可能为14。这是一个硬性限制任何情况下都不能低于此值。通常为了留有余地我会从比最小值大一些的值开始尝试。实际电路测试静态测试给ADC输入一个非常稳定的直流电压如用基准源配置不同的ACQPS值进行采样观察输出码的噪声和标准差。当ACQPS增加到一定程度后噪声不再明显下降这个值就是比较安全的。动态测试输入一个纯净的中低频正弦波用高精度ADC或示波器作为参考对比MCU ADC的采样结果分析其有效位数ENOB和总谐波失真THD。寻找ENOB不再显著提升的ACQPS拐点。3.2.2 经验法则对于直接由低阻抗运放驱动的电路如电流采样ACQPS在15-25对应16-26个SYSCLK周期通常足够。对于通过电阻分压网络驱动的电路如高压母线电压采样由于源阻抗Rs较大可能几kΩ需要更大的ACQPS可能要到50甚至更高。此时必须在分压网络和ADC引脚之间添加一个电压跟随器缓冲器这是降低源阻抗、保证采样精度的关键。高频系统时钟的权衡SYSCLK越高单个周期越短要获得同样的采样窗口时间就需要更大的ACQPS值。但这不一定是坏事因为更精细的ACQPS调节粒度可能有助于找到最优值。踩坑记录我曾在一个光伏逆变器项目中母线电压采样电路仅使用了电阻分压未加缓冲。尽管将ACQPS调到最大63采样值在负载跳变时仍会出现几十个LSB的偏差。后来在分压后增加了一颗单位增益稳定的精密运放如OPA320作为缓冲ACQPS只需设为20采样就非常稳定准确。这个教训很深刻硬件前端设计是ADC性能的第一道关卡软件配置无法弥补硬件的根本缺陷。4. 实现严格的同时采样与结果处理4.1 硬件同时采样配置“Simultaneous Sampling”是电机矢量控制等应用的刚性需求。TMS320F28003x的每个ADC模块内部虽然没有双S/H电路但通过让多个ADC模块的SOC使用同一个触发源可以实现多个通道在同一个SYSCLK周期内启动采样这在实际应用中就等同于同时采样。配置步骤选择触发源通常选择一个ePWM模块的SOC事件如ePWM1_SOCA作为主触发。配置各ADC的SOC为每个需要同时采样的通道在其所属ADC模块中分配一个SOC通常从SOC0开始并将它们的TRIGSEL都指向同一个触发源。确保ADC空闲触发到来时所有相关ADC必须处于空闲状态。这意味着你的触发周期必须大于最慢的那个ADC完成其所有已配置SOC转换所需的时间。代码示例同步采样三相电流假设分别接在ADCA的A3、ADCB的B2、ADCC的C5。// 使用 ePWM3 SOCB 作为全局同步触发源 #define EPWM3_SOCB_TRIGGER 10 // 配置 ADCA SOC0 AdcaRegs.ADCSOC0CTL.bit.CHSEL 3; // 通道 ADCINA3 AdcaRegs.ADCSOC0CTL.bit.ACQPS 19; // 采样窗口20周期 AdcaRegs.ADCSOC0CTL.bit.TRIGSEL EPWM3_SOCB_TRIGGER; // 配置 ADCB SOC0 AdcbRegs.ADCSOC0CTL.bit.CHSEL 2; // 通道 ADCINB2 AdcbRegs.ADCSOC0CTL.bit.ACQPS 19; AdcbRegs.ADCSOC0CTL.bit.TRIGSEL EPWM3_SOCB_TRIGGER; // 配置 ADCC SOC0 AdccRegs.ADCSOC0CTL.bit.CHSEL 5; // 通道 ADCINC5 AdccRegs.ADCSOC0CTL.bit.ACQPS 19; AdccRegs.ADCSOC0CTL.bit.TRIGSEL EPWM3_SOCB_TRIGGER; // 在ePWM3中配置SOCB触发事件例如在CTR0时产生 EPwm3Regs.CMPB.bit.CMPB 0; // 比较值 EPwm3Regs.ETSEL.bit.SOCBEN 1; // 使能SOCB EPwm3Regs.ETSEL.bit.SOCBSEL 1; // 选择CTRCMPB时触发 EPwm3Regs.ETPS.bit.SOCBCNT 1; // 单次触发模式4.2 结果读取与数据对齐同时采样后结果会存放在各自ADC的ADCRESULT0寄器中。读取时需要注意等待转换完成最可靠的方式是使能ADC的转换结束中断ADCINT1在中断服务程序ISR中读取结果。或者如果转换序列短且可预测也可以轮询ADCINTFLG标志位。读取顺序虽然转换是同时启动的但由于各通道ACQPS可能不同转换结束时间会有细微差别。为了确保读取的是同一触发周期的数据建议在ISR中一次性连续读取所有相关的结果寄存器。CPU的读取速度远快于ADC转换时间差可以认为读取到的数据是“冻结”的同一时刻快照。数据格式处理读取的ADCRESULT是16位整数对于12位ADC数据位于低12位位11:0。需要根据参考电压VREFHI将其转换为实际电压值Voltage (ADCRESULT * VREFHI) / 4096.0。中断服务程序示例__interrupt void adcaIsr(void) { // 读取三相电流的同步采样结果 g_iPhaseA AdcaResultRegs.ADCRESULT0; // ADCA SOC0 结果 g_iPhaseB AdcbResultRegs.ADCRESULT0; // ADCB SOC0 结果 g_iPhaseC AdccResultRegs.ADCRESULT0; // ADCC SOC0 结果 // 进行Clarke变换等后续处理 // ... // 清除中断标志 AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 1; PieCtrlRegs.PIEACK.all PIEACK_GROUP1; // 确认PIE组中断 }实操心得为了最大化系统确定性我强烈建议将ADC中断的优先级设置为最高之一并且ISR中只做最必要的数据读取和搬运例如放到全局数组复杂的数学运算如Park变换、PI调节放到后台循环或更低优先级的任务中。避免在ADC ISR中执行耗时操作否则可能影响下一个PWM周期触发ADC的时机。5. 高级功能与系统集成要点5.1 后处理块PPB的应用ADC模块集成的后处理块Post-Processing Block是一个非常实用的硬件加速单元主要功能包括偏移校准可以从转换结果中自动减去一个预设的偏移值ADCPPBxOFFSET用于软件校准ADC的零点误差。限值检查可以设置上下限ADCPPBxLIMIT当结果超限时自动产生事件可以连接到ePWM的Trip输入实现基于模拟量的硬件保护响应速度极快。延迟捕获可以记录从触发到转换开始之间的延迟用于诊断系统响应时间。配置PPB进行限值保护的示例// 假设ADCA的SOC2用于采样直流母线过压保护 // 1. 将PPB1关联到SOC2 AdcaRegs.ADCPPB1CONFIG.bit.CONFIG 2; // 关联到SOC2 // 2. 设置过压阈值假设3.3V参考3600LSB对应约2.9V AdcaRegs.ADCPPB1LIMIT.bit.LIMITHI 3600; // 高限 AdcaRegs.ADCPPB1LIMIT.bit.LIMITLO 0; // 低限 // 3. 使能PPB1的限值检查 AdcaRegs.ADCPPB1CONFIG.bit.OVERRIDEENABLE 1; // 使能结果覆盖可选 AdcaRegs.ADCPPB1CONFIG.bit.TWOSCOMPENABLE 0; // 二进制原码格式 AdcaRegs.ADCPPB1CONFIG.bit.LIMITxENABLE 1; // 使能限值检查 // 4. 将PPB1事件ADCAEVT1连接到ePWM的Trip Zone // 通过X-BAR配置 XbarRegs.INPUT7SELECT 60; // 将ADCAEVT1连接到INPUT7 (具体值查手册) XbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX0 7; // 将INPUT7连接到OUTPUT3 (EPWM1_TZ1) // 5. 配置ePWM1的Trip Zone使其在ADCAEVT1事件时强制PWM输出高阻态 EPwm1Regs.TZCTL.bit.TZA 2; // TZA事件时EPWMxA输出高阻 EPwm1Regs.TZSEL.bit.OSHT1 1; // 使能单次触发Trip源为TZ1 (来自X-BAR)5.2 内部温度传感器与校准TMS320F28003x内部集成了温度传感器连接到ADCC的通道12ADCIN12。这对于监测芯片结温、进行过热保护或温度补偿非常有用。使用步骤使能温度传感器设置TSNSCTL寄存器的ENABLE位。配置SOC采样该通道将ADCC的某个SOC的CHSEL配置为12。触发转换并读取结果。调用库函数转换使用TI提供的ADC_getTemperatureC()函数将原始ADC值转换为摄氏度。注意这个函数内部可能包含一个基于典型值的线性拟合公式对于精度要求高的场合建议自己在不同温度点进行校准建立更精确的查找表或公式。// 使能温度传感器 AnalogSubsysRegs.TSNSCTL.bit.ENABLE 1; // 配置ADCC的SOC5采样温度传感器通道 AdccRegs.ADCSOC5CTL.bit.CHSEL 12; // 通道12为内部温度传感器 AdccRegs.ADCSOC5CTL.bit.ACQPS 63; // 使用较长的采样窗口 AdccRegs.ADCSOC5CTL.bit.TRIGSEL 0; // 软件触发 // 触发转换并读取 AdccRegs.ADCSOCFRC1.all 0x20; // 软件强制触发SOC5 while(AdccRegs.ADCINTFLG.bit.ADCINT5 0) {} // 等待完成 rawTemp AdccResultRegs.ADCRESULT5; // 转换为温度 float temperatureC ADC_getTemperatureC(rawTemp);5.3 开短路检测OSDetect功能这是一个用于诊断ADC输入引脚故障开路、短路到电源或地的硬件功能。其原理是通过内部开关在ADC输入引脚上连接一个已知的上拉/下拉电阻网络然后测量该引脚上的电压从而推断外部连接状态。使用流程概要正常配置ADC SOC。配置ADCOSDETECT寄存器选择检测模式全量程或零标度。启动一次转换。根据结果判断引脚状态见手册中的真值表。关闭OSDetect模式恢复正常采样。重要提示OSDetect模式下的采样需要远长于正常模式的采样窗口ACQPS因为内部上拉/下拉电阻很大兆欧级导致RC时间常数极大。务必参考数据手册给出的最小ACQPS值通常需要几百甚至上千个SYSCLK周期。此功能主要用于启动自检或故障诊断不宜在正常控制循环中频繁使用。6. 常见问题与调试技巧实录6.1 问题排查清单当你配置的ADC不工作或数据异常时可以按照以下清单排查现象可能原因检查点无转换发生1. ADC模块时钟未使能。2. SOC未正确配置或触发源未产生。3. ADC处于复位状态。1. 检查PCLKCR0寄存器中对应ADC的时钟使能位。2. 检查ADCSOCxCTL的CHSEL,TRIGSEL。用示波器或IO翻转检查触发信号。3. 检查ADCCTL寄存器的RESET位是否已清零。转换结果全为0或固定值1. 模拟输入引脚未连接或外部电路故障。2. 参考电压VREFHI/LO异常。3. 采样窗口ACQPS太短信号未建立。1. 用万用表测量输入引脚电压。2. 测量VREFHI引脚电压是否为预期的3.3V或外部参考。3. 逐步增大ACQPS观察结果是否变化。转换结果噪声大、跳动1. 模拟电源/地噪声大。2. 采样窗口不足。3. 前端驱动能力不够源阻抗高。4. 数字开关噪声耦合。1. 检查模拟电源的滤波确保与数字电源隔离。2. 增加ACQPS。3. 在ADC引脚添加合适的RC滤波注意与ACQPS的匹配。4. 采样期间避免频繁操作与ADC共用电源域的GPIO。同步采样数据错位1. 触发溢出见2.2.2节。2. 各ADC的SOC优先级SOCPRICTL配置冲突。3. 中断响应延迟导致读取时机不一致。1. 增加ePWM触发周期确保大于最长SOC序列时间。2. 检查并统一配置各ADC的SOC优先级。3. 确保在同一个高优先级ISR中读取所有ADC结果。PPB功能不生效1. PPB未关联到正确的SOC。2. PPB配置寄存器未使能。3. 事件输出未通过X-BAR正确路由。1. 检查ADCPPBxCONFIG.CONFIG字段。2. 检查ADCPPBxCONFIG中的使能位。3. 使用寄存器查看工具如CCS的Registers视图追踪X-BAR信号路径。6.2 软件触发与ePWM触发的选择软件触发通过写ADCSOCFRC1寄存器强制启动SOC。优点是灵活随时可以启动。缺点是无法保证精确的、周期性的时序且CPU需要参与每次触发开销大。适用于非周期性的单次采样、调试或初始化阶段的测试。ePWM触发由ePWM模块硬件自动产生。优点是精度高与PWM波形严格同步、不占用CPU资源、可产生精确周期。缺点是配置稍复杂。适用于所有需要周期性、高精度同步采样的实时控制应用是首选方案。6.3 多SOC序列与Burst模式的应用当需要在一个控制周期内采样多个通道时可以配置一个ADC模块的多个SOC它们将按顺序SOC0, SOC1, ...自动执行。顺序采样每个SOC可以配置不同的通道和ACQPS。适用于需要以不同精度采样不同信号或需要交错采样以降低瞬时功耗的场景。Burst模式这是SOC功能的一个高级用法。通过配置ADCSAMPLEMODE寄存器可以让一个触发启动一组Burst预定义的SOC转换。例如一个ePWM触发可以启动SOC0、SOC1、SOC2三个转换分别采样三个不同的电流传感器。这对于需要在一个PWM周期内多个固定点采样的应用如峰值电流、谷值电流检测非常有用。Burst模式能确保这组转换紧密连续地执行中间没有软件干预的延迟。6.4 校准与精度提升出厂时ADC会有增益和偏移误差。对于精度要求高的应用需要进行校准。内部增益校准模式利用INTERNALTESTCTL寄存器可以让所有ADC采样一个内部产生的已知电压0.9 * VREFHI。通过比较各ADC的读数可以计算出它们之间的相对增益误差在软件中进行补偿。这对于需要多个ADC读数做比值运算的应用如三相平衡计算特别有用。外部两点法校准给ADC输入两个精确的已知电压如0.1VREFHI和0.9VREFHI记录ADC输出码。通过这两点可以计算出实际的增益和偏移并在软件中建立线性校正公式V_corrected (raw - offset) / gain。过采样与滤波对于带宽远低于采样频率的信号可以使用过采样技术来提高有效分辨率。例如配置多个SOC采样同一个通道如adc_ex13_soc_oversampling.c示例或将ADC配置为连续转换模式adc_ex5_soc_continuous.c然后对连续多个采样值进行软件平均。平均N个样本可以将有效分辨率提高log2(N)/2位并抑制噪声。最后再分享一个调试中的小技巧在怀疑ADC时序问题时可以利用一个空闲的GPIO引脚来“打点”标记关键事件。例如在ADC中断ISR的入口和出口分别置位和清零该GPIO用示波器观察其脉冲宽度就能准确测量出中断响应和处理时间。同样也可以将ePWM的触发信号输出到GPIO观察其与ADC采样启动之间的实际延迟。这种硬件级的调试手段往往比软件打印更直观、更精确。