【AUTOSAR实战系列 · TC23x篇】ADC模块原理与EB配置

发布时间:2026/6/15 17:06:09

【AUTOSAR实战系列 · TC23x篇】ADC模块原理与EB配置 ADC模块1 ADC介绍功能将模拟信号转换为数字信号应用场景同步转换和非同步转换同步转换TC234平台支持2路通道同时采样转换。在ADC模块内配置两个硬件单元ADC0、ADC1不同的硬件模块的相同通道在同一时刻进行采样。非同步转换一组通道的每个Channel是依次采样。同步采样需要使用到TOM的通道7输出的PWM波的周期中点触发ADC硬件采样来和另一个ADC的相同通道进行同步采样比较。1.1 ADC kernel硬件转换单元结构VADC模块的系统框图如下外部连接主要有以下部分Analog reference voltage VAREFADC参考电压也是ADC的量程Analog reference ground VAGNDADC参考基准地Analog input Channels CHxADC模拟电压输入引脚Ext.multiplexer control MUX [2:0]多路复用控制器用于控制ADC输入通道的外部多路复用器允许选择不同的模拟信号源一般很少使用。内部主要有以下模块AD converterAD转换器主要负责逐次逼近转换的实现Conversion control转换控制器主要负责转换模式的设置例如采样时间ADC分辨率等Interrupt Generation中断发生单元主要用于向IR模块产生中断信号Result Handling结果处理器可以对转换结果进行一系列处理例如数据压缩滤波构建FIFO结构等Request control请求控制器主要负责处理转换请求仲裁等1.2 电气属性TC23x的ADC使用有CANSW表示的开关电容每个输入引脚都存在寄生电容。在采样阶段CANSW通过输入多路复用器由理想开关和串联电阻RAIN构成连接到选定的模拟输入CHx。CHx开关在采样阶段时关闭并将电容场连接到输入电压VAINx。内部阻抗REXT的模拟电压源值VS提供应转换的模拟输入。在采样阶段相应的开关闭合电容场闭合CAINSW开始充电。由于RC组合具有低通特性要实际转换的电压VC并不立即跟随VS。模拟电压源REXT和所需的转换精度定义了所需的采样相位长度。为了减少REXT的影响并过滤输入噪声建议在ADC的模拟输入引脚处引入快速外部阻抗电容器CEXT。1.3 生成转换请求组的转换请求单元自主地处理转换请求的生成。三个请求源(2组特定源和后台源)可以生成模拟通道转换的请求。仲裁器解析并发请求并选择接下来要转换的通道。在触发事件发生时请求源请求转换某个模拟输入通道或通道序列。软件触发器直接激活相应的请求源。外部触发器将请求源激活与外部事件同步例如来自定时器产生PWM信号或来自端口引脚的触发脉冲。每个请求源可以在单次或连续模式下运行:在单次模式下程序转换(序列)被触发后要求一次。必须再次触发后续的转换(序列)。在连续模式下程序转换(序列)在触发一次后自动重复请求。有两种类型的请求源可用:队列扫描源可以为任意序列的输入通道发出转换请求。这个序列的通道号可以自由编程。这支持通道扫描源无法覆盖的特定于应用程序的转换序列。此外还支持序列中同一通道的多个转换。排队源永久地或按规则的时间基础转换一系列输入通道。通道扫描源可以为输入通道的连贯序列发出转换请求。这个序列从最高启用的通道号开始并继续向较低的通道号前进。所有可用通道可为扫描序列启用。每个通道在每个序列中转换一次。扫描源永久地或按规则的时间基础转换一系列输入通道。例如如果以低优先级编程则可以在后台任务中扫描一些输入通道以更新非时间关键的信息。队列扫描Queued Scan队列扫描是一种将多个转换请求组织成队列的机制。队列扫描是一种针对单个ADC转换器的扫描模式。在这种模式下转换请求被组织成一个队列转换器按照队列中的顺序依次处理这些请求。这种方式适用于需要按特定顺序进行转换的场景可以确保转换请求的执行顺序与队列中的顺序一致。在这种模式下每个转换请求可以指定一个优先级转换器会根据这些优先级来决定处理请求的顺序。这种模式适用于需要根据任务紧急性来动态调整转换顺序的场景。通道扫描Channel Scan通道扫描通常指的是按照一定的顺序自动遍历并转换一系列预定义的通道。在通道扫描模式下转换器会自动按顺序处理每个通道的转换请求无需手动干预。这种模式适用于需要连续监测多个传感器信号的场景可以确保所有通道都能被周期性地转换。1.4 模拟输入通道配置对于每个模拟输入通道可以配置一些参数来控制该通道的转换。通道控制寄存器定义以下参数1、通道参数该通道的采样时间和结果的数据宽度通过输入类来定义。每个通道可以选择自己组的两个类中的一个或两个全局类中的一个。2、参考选择可以为大多数通道选择替代参考电压3、结果目标转换结果值存储在组特定的结果寄存器或全局结果寄存器中。4、结果位置结果值可以按左对齐或按右对齐存储。确切的位置还取决于配置的结果宽度和数据积累模式。5、与标准转换限制检查比较每当新结果值可用时可以生成通道事件。通道事件生成可以限制在用户可配置频带内部或之外的值。6、断线检测此安全功能可以检测到模拟信号源传感器缺少连接。7、转换的同步同步转换在多个转换器上同时执行。1.5 转换处理结果A/D转换器可以对转换结果数据进行一定程度的预处理然后再存储起来供CPU或DMA通道检索。转换结果处理包括以下功能将转换结果存储到用户可配置的寄存器根据结果宽度进行数据对齐进行等待读取模式以避免数据丢失结果事件数据压缩或反混叠滤波2 ADC硬件资源分布3 EB工程搭建3.1 配置Adc非同步转换ADC软件转换使用ADC1的通道4AN16采集Sensor电压值原理图1选择Adc-General选项卡勾选AdcDeInitApi勾选AdcEnableStartStopGroupAp使能软件触发ADC采样AdcPriorityImplementation决定ADC硬件各个请求源的优先级选择这里设置为空2选择选择Adc-AdcConfigSet选项卡双击打开配置文件AdcCongfigSet0。①配置AdcCongfigSet0-GeneralAdcAnalogClockDividerADC模拟时钟分频系数。配置为4表示设置为5分频AdcDigitalArbiterClockDividerADC仲裁周期分频系数。配置为3表示设置为4分频AdcLowPowerSupplyVoltageADC参考电压AdcRefPrechargeControlADC参考电压预充电控制AdcSleepModeADC休眠模式AdcSystemClock时钟源选择②配置AdcCongfigSet0-AdcglobInputClass该选项卡主要用于配置ADC采样的参数AdcGlobChSampleTime全局通道采样时间AdcGlobChResolution全局通道分辨率③配置AdcCongfigSet0-AdcHwUnit1AdcHwUnit-GeneralAdcArbitrationRoundLength仲裁长度AdcHwUnitId对应的硬件单元AdcPostCal位置校准AdcRequestSource x Prio各个请求源的优先级由于其前面配置AdcPriorityImplementation为空所以这里不可选AdcSyncConvMode同步模式2AdcHwUnit-AdcChannel定义ADC硬件单元对应的通道根据自己的需求添加通道这里添加一个通道AN16看ADC硬件资源分布图可以看到对应的物理通道号为20。双击打开通道0的配置文件AdcChannel0配置General选项AdcAnChannelNumADC硬件通道AdcChannelId软件层使用的逻辑 IDAdcChannelRefVoltsrcHigh通道的参考电压AdcInputClassSelection输入类型的选择3AdcHwUnit-AdcGroup配置General选项AdcGroupAccessModeADC组访问模式配置单次读取ADC_ACCESS_MODE_SINGLE单次访问保存一组数据ADC_ACCESS_MODE_STREAMING连续访问保存多组采样数据通过设置AdcStreamingNumSamples来觉得保留最新的几次数据AdcGroupConversionModeADC组转换模式配置单次转换ADC_CONV_MODE_ONESHOT单次转换触发一次转换一次ADC_CONV_MODE_CONTINUOUS触发一次连续转换AdcGroupRequestSourceADC组请求源需要配置对应的中断REQSRC0_8STG_QUE对应Irq中的SR0REQSRC1_NCH_SCAN对应Irq中的SR1……AdcGroupTriggSrcADC组触发源选择软件触发配置AdcGroupDefinition将通道添加到组中4配置AdcHwUnit-AdcKernelInputClass配置两个组内的Class注意记得开启对应的中断和配置对应的Port引脚为模拟输入3.2 配置Adc同步转换使用ADC1_CH11和ADC0_CH11硬件同步采样分别采集预驱A4911的A相电流和B相电流的AD值。1Adc-General选项卡相比于非同步配置此处需要额外使能3个函数AdcGrpNotifCapabilityAdcMasterSlaveSyncAdcHwTriggerApi2Adc-AdcConfigSe选项卡①General同上②AdcGlobInputClass同上③AdcHwUnit添加两个ADC硬件单元配置第一个ADC硬件1AdcHwUnit_0-General将AdcSyncConvMode配置为ADC_SLAVE2AdcHwUnit_0-AdcChannel添加一个通道G0_CH11_AN113AdcHwUnit_0-AdcGroup添加一个组包含该通道1Adc0HwSyncGrp1 General默认配置2Adc0HwSyncGrp1- AdcGroupDefinition4AdcHwUnit_0-AdcKernelInputClass配置第二个ADC硬件1AdcHwUnit_1-General2AdcHwUnit_1-AdcChannel添加一个通道G1_CH11_AN231进入G1_CH11_AN23选项卡使能AdcSyncChannel。在通道中只有AdcSyncConvMode选择了ADC_MASTER才有使能AdcSyncChannel的选项。3AdcHwUnit_1-AdcGroup同样添加一个组包含该通道1General当访问模式是 SINGLE单次访问且触发源是软件触发SW且转换模式是 ONESHOT单次转换那么必须配置为 LINEAR 模式。当访问模式仍是 SINGLE但触发源是硬件触发HW或者是连续转换模式CONTINUOUS那么必须配置为 CIRCULAR环形缓冲模式2AdcHwTrigSignal3AdcGroupDefinition4AdcHwUnit_1AdcKernelInputClass3.3 配置Mcu-Gtm-Cmu参考4.2.13.4 配置Mcu-Gtm-Tom1配置完Cmu然后进入GtmConnections配置ADC1通道的GTM触发通道为Tom1Ch7由于前面的Master组中AdcHwGatePin配置为ADC1_GTSEL_RS0_RS1_RS3_TIM_TRIG1所以这里选择GtmTriggerForAdc_1GtmTrigger1Select下面的配置项“ADC1”对应GtmTriggerForAdc_1“TIM_TRIG1”对应GtmTrigger1Select2配置Tom1的TomChannel_03配置Tom1的TomChannel_73.5 配置Port前面使用到ADC0_CH11ADC1_CH4ADC1_CH11查看ADC通道的映射表格分别对应P40.11P41.4P41.11需要将对应的引脚配置为模拟通道输入3.6 配置IrqAdc1SwGrp0使用REQSRC1_NCH_SCAN则需要开启ADC1的SR1Adc1HwSyncGrp1使用REQSRC0_8STG_QUE则需要开启ADC1的SR0如果ADC0通道也使用到了中断触发需要开启对应的SRx4 Tasking工程搭建4.1 导入库文件和EB生产的配置文件4.2 添加导入文件的路径在Include Paths项目下\${workspace_loc:/\${ProjName}/Aurix_MC-ISAR/adc_infineon_tricore} \${workspace_loc:/\${ProjName}/Aurix_MC-ISAR/adc_infineon_tricore/ssc} \${workspace_loc:/\${ProjName}/Aurix_MC-ISAR/adc_infineon_tricore/ssc/inc} \${workspace_loc:/\${ProjName}/Aurix_MC-ISAR/adc_infineon_tricore/ssc/src}5 API接口API接口解释Adc_InitAdc初始化接口Std_ReturnType Adc_SetupResultBuffer设置采样结果Adc_StartGroupConversion软件触发Group转换Adc_EnableHardwareTrigger硬件触发Group转换6 Demo示例6.1 非同步转换#defineNUMBER_OF_ADC_CH(1)Adc_ValueGroupType AdcResultBuff[NUMBER_OF_ADC_CH];intmain(void){Std_ReturnType RetVal;Mcu_Init(Mcu_ConfigRoot[0]);// 初始化McuRetValMcu_InitClock(0);if(RetValE_OK){while((Mcu_GetPllStatus())0){}Mcu_DistributePllClock();}Port_Init(Port_ConfigRoot[0]);// 初始化PortDio_Init(Dio_ConfigRoot[0]);// 初始化DioAdc_Init(Adc_ConfigRoot[0]);// ADC初始化// 设置Group0数据保存位置Adc_SetupResultBuffer(AdcConf_AdcGroup_AdcGroup_0,AdcResultBuff);/* Irq */IrqAdc_Init();Mcal_EnableAllInterrupts();while(1){// 软件触发Group转换Adc_StartGroupConversion(AdcConf_AdcGroup_AdcGroup_0);Sensor5V((double)AdcResultBuff[0]/4095.0)*5.0/(10.0/20.0);}}6.2 同步转换在初始化之后使用硬件触发Group转换然后开启TomAdc_ValueGroupType AdcResultBuff[3];intmain(void){Std_ReturnType RetVal;Mcu_Init(Mcu_ConfigRoot[0]);// 初始化McuRetValMcu_InitClock(0);if(RetValE_OK){while((Mcu_GetPllStatus())0){}Mcu_DistributePllClock();}Port_Init(Port_ConfigRoot[0]);// 初始化PortDio_Init(Dio_ConfigRoot[0]);// 初始化DioAdc_Init(Adc_ConfigRoot[0]);// ADC初始化IrqAdc_Init();Mcal_EnableAllInterrupts();// 设置Group0数据保存位置Adc_SetupResultBuffer(AdcConf_AdcGroup_Adc1SwGrp0, AdcResultBuff[0]);Adc_SetupResultBuffer(AdcConf_AdcGroup_Adc1HwSyncGrp1,AdcResultBuff[1]);Adc_EnableHardwareTrigger(AdcConf_AdcGroup_Adc1HwSyncGrp1);Gtm_SetTomShadowValSr1(1,7,2500);while(1){Adc_StartGroupConversion(AdcConf_AdcGroup_Adc1SwGrp0);Sensor5V((double)AdcResultBuff[ADC1_CH4_AN16]/4095.0)*5.0/(10.0/20.0);IA_FBAdcResultBuff[2];IB_FBAdcResultBuff[1];}}7 测试MCUTC234调试器Lauterbach调试软件TRACE32 ICD TriCore USB7.1 非同步转换劳德巴赫中监测变量值如下7.2 同步转换劳德巴赫中监测变量值如下

相关新闻