硬件:S32K144开发板
软件:S32DS 2.2
1,S32K144硬件连接说明
本章使用S32K144芯片的ADC0,其中CH2、CH3分别接一个可调变阻器,实现模拟信号的采集。
ADC0通道2 ----> PTA6
ADC0通道3 ----> PTA7
2,S32DS的ADC配置
打开基础工程,双击Components框(1)下方的Components按钮(2)打开外设配置工具Components Library 。双击外设配置工具Components Library 下方的adc选项(3)添加adc外设。最后双击adcConv1(4)进入ADC配置界面。可以双击空白处最大化窗口方便配置。
下方是转换设置,分别是Sample time(1)采样时间,默认为12,采样时间越长准确性越高。Resolution(2)采样分辨率,默认为8bit。Trigger(3)触发方式,默认为软件触发。Voltage Reference(4)参考电平标准。
下面我们增加一个ADC的采样通道。选择Channel configuration(1)进行通道配置,点击+号(2)新增一个通道设置。在Input Channel(3)选项中选择我们对应的通道。Chnconfig0对应通道2,Chnconfig1对应通道3,完成配置后如(4)。至此ADC外设配置完成,下面开始进入代码的编写。
3,S32DS的ADC常用函数说明
1,ADC初始化配置函数ADC_DRV_ConfigConverter。输入变量instance基地址,输入变量config配置结构体。
void ADC_DRV_ConfigConverter(const uint32_t instance,
const adc_converter_config_t * const config);
2,ADC自动校准函数ADC_DRV_AutoCalibration。输入变量instance基地址。
void ADC_DRV_AutoCalibration(const uint32_t instance);
3,ADC配置通道函数ADC_DRV_ConfigChan。输入变量instance基地址,输入变量chanIndex触发方式,输入变量config通道配置结构体。
void ADC_DRV_ConfigChan(const uint32_t instance,
const uint8_t chanIndex,
const adc_chan_config_t * const config);
4,等待ADC转换完成函数ADC_DRV_WaitConvDone。输入变量instance基地址。
void ADC_DRV_WaitConvDone(const uint32_t instance);
5,获取ADC转换值函数ADC_DRV_GetChanResult。输入变量instance基地址,输入变量chanIndex触发方式,输入变量result转换结果值。
void ADC_DRV_GetChanResult(const uint32_t instance,
const uint8_t chanIndex,
uint16_t * const result);
4,S32K144的ADC实战
首先添加几个变量和宏定义。分别是ADC参考电压、ADC的采样值、ADC的电压值、ADC最大量程。
#define ADC_MAX 256 //8位,最大为256
#define ADC_VREF 3.3f //参考电压3.3V
float adcValue; //adc采集电压值
uint16_t adcRegValue; //adc读取到寄存器值
float adc0_ch2_Vloat; //adc0通道2的电压值
float adc0_ch3_Vloat; //adc0通道3的电压值
其次编写读取转换ADC值的函数,如下所示。
float adc0_ch2_read(void)
{
ADC_DRV_ConfigChan(INST_ADCONV1, 0U, &adConv1_ChnConfig0);
ADC_DRV_WaitConvDone(INST_ADCONV1);
ADC_DRV_GetChanResult(INST_ADCONV1, 0U, &adcRegValue);
adcValue = ((float)adcRegValue/ADC_MAX)*ADC_VREF;
return adcValue;
}
float adc0_ch3_read(void)
{
ADC_DRV_ConfigChan(INST_ADCONV1, 0U, &adConv1_ChnConfig1);
ADC_DRV_WaitConvDone(INST_ADCONV1);
ADC_DRV_GetChanResult(INST_ADCONV1, 0U, &adcRegValue);
adcValue = ((float)adcRegValue/ADC_MAX)*ADC_VREF;
return adcValue;
}
再其次,编写main函数和while(1)循环中的内容,进行Bulid编译,随后进行Debug测试。
ADC_DRV_ConfigConverter(INST_ADCONV1, &adConv1_ConvConfig0);//初始化ADC0
ADC_DRV_AutoCalibration(INST_ADCONV1);//自动校准ADC
while(1)
{
adc0_ch2_Vloat = adc0_ch2_read();//读取ADC的值
adc0_ch3_Vloat = adc0_ch3_read();
}
最后,可以查看变量值发现试验成功,读取到ADC电压值。
感谢各位的观看,喜欢的朋友记得关注博主哦~后续还会继续出与S32DS的相关文章,浅浅的期待一下吧。