简介:
在汽车电子的应用中,对于汽车的电平的采集会爱很多场景下使用到,根据电瓶的电压等级来决定ECU的行为,本次是使用S32K的ADC 模块来模拟验证车载电瓶电压的采集。以下是S32K1XX 系列的ADC IP框图及Triger Source。


PIN 脚配置:
根据硬件的PIN脚,配置PA6 为ADC 功能,默认ADC 功能回路由到PA6,本地显性的配置为ADC功能。

时钟配置:
ADC0 时钟默认开启,时钟源为内部slow 8M RC时钟(SIRC),以下是时钟树的路由。

ADC 参数配置:
以下是ADC IP 的配置和对应channel 的参数配置

上述参数主要涉及到ADC 的时钟分频的设定,IP内部可以对输入时钟进行1、2、4、8 的分频设置,开发手册说明如下

ADC 转换触发方式的配置,我们配置为软件触发,及参考电压的配置为VrefH and VrefL

/*******************************************************************************
 * adc_config_1 initialization code
 ******************************************************************************/
/* clang-format off */
/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
instance:
- name: 'adc_config_1'
- type: 'adc_config'
- mode: 'general'
- custom_name_enabled: 'false'
- type_id: 'adc'
- functional_group: 'BOARD_InitPeripherals'
- peripheral: 'ADC_0'
- config_sets:
  - adc:
    - adcConverterCfg:
      - 0:
        - name: 'adc_config_1_ConvConfig0'
        - readonly: 'true'
        - clockDivide: 'ADC_CLK_DIVIDE_4'
        - sampleTime: '255'
        - resolution: 'ADC_RESOLUTION_12BIT'
        - inputClock: 'ADC_CLK_ALT_1'
        - trigger: 'ADC_TRIGGER_SOFTWARE'
        - pretriggerSel: 'ADC_PRETRIGGER_SEL_PDB'
        - triggerSel: 'ADC_TRIGGER_SEL_PDB'
        - dmaEnable: 'false'
        - voltageRef: 'ADC_VOLTAGEREF_VREF'
        - continuousConvEnable: 'false'
        - supplyMonitoringEnable: 'false'
    - adcCompareCfg: []
    - adcAverageCfg: []
    - adcChanCfg:
      - 0:
        - name: 'adc_config_1_ChnConfig0'
        - readonly: 'true'
        - interruptEnable: 'false'
        - channel: 'ADC_INPUTCHAN_EXT2'
 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
/**
 * @page misra_violations MISRA-C:2012 violations
 *
 * @section [global]
 * Violates MISRA 2012 Advisory Rule 8.7, External variable could be made static.
 * The external variables will be used in other source files in application code.
 *
 */
const adc_converter_config_t adc_config_1_ConvConfig0 = {
  .clockDivide = ADC_CLK_DIVIDE_4,
  .sampleTime = 255U,
  .resolution = ADC_RESOLUTION_12BIT,
  .inputClock = ADC_CLK_ALT_1,
  .trigger = ADC_TRIGGER_SOFTWARE,
  .pretriggerSel = ADC_PRETRIGGER_SEL_PDB,
  .triggerSel = ADC_TRIGGER_SEL_PDB,
  .dmaEnable = false,
  .voltageRef = ADC_VOLTAGEREF_VREF,
  .continuousConvEnable = false,
  .supplyMonitoringEnable = false
};
const adc_chan_config_t adc_config_1_ChnConfig0 = {
  .interruptEnable = false,
  .channel = ADC_INPUTCHAN_EXT2
};ADC 功能验证
添加如下代码模拟读取电池电压:
#include "sdk_project_config.h"
#include <stdio.h>
#include "littleshell.h"
/********************************************************************************************************
 *                                  Global Function Declarations                                        *
 *******************************************************************************************************/
void adc_init(void)
{
    /* Init ADC IP config*/
    ADC_DRV_ConfigConverter(INST_ADC_CONFIG_1,&adc_config_1_ConvConfig0);
    /* Config channel */
    ADC_DRV_ConfigChan(INST_ADC_CONFIG_1, 0, &adc_config_1_ChnConfig0);
}
uint16_t ADC_Read(adc_inputchannel_t chan)
{
	uint16_t adc_count;
	adc_config_1_ChnConfig0.channel = chan;
	ADC_DRV_ConfigChan(INST_ADC_CONFIG_1, 0, &adc_config_1_ChnConfig0);
	while( (ADC_DRV_GetConvCompleteFlag(INST_ADC_CONFIG_1,0)) == false){};
	ADC_DRV_GetChanResult(INST_ADC_CONFIG_1, 0, (uint16_t *)&adc_count);
	return adc_count;
}
#define AD_GAIN() 13478 //13478 = ((4096*(40.2/(330+40.2)))/(3.3))*100
unsigned int  bat(char argc,char *argv[])
{
    uint16_t value,batt_value;
    value = ADC_Read(ADC_INPUTCHAN_EXT2);
    batt_value = (uint16_t)((((uint32_t)(value) * 100*100)/AD_GAIN()));
    printf("bat %d \r\n",batt_value);
    return 0;
}
LTSH_FUNCTION_EXPORT(bat,"get battry value");下载代码到板子中,调整电源电压通过bat shell 命令打印读取的ADC 电压值信息,验证结果如下,调整开关电源电压,ADC 读取的数值和电源一致,说明ADC功能已经按照工作起来。


 
					
				
 
			
			
			
						
			 
					
				 
					
				 
					
				 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

