一:ADC的基础知识:
ADC 即模拟-数字转换器(Analog-to-digital converter),是一种用于将连续的模拟信号转换为离散的数字信号的器件。就比如我们可以将我们生活中的温度、压力、声音这样的模拟信号通过ADC转化为可以通过单片机处理的数字信号。
MCU包含12位逐次逼近A/D转换器(ADC12)单元。最多可选择13个模拟输入通道、温度传感器输出和内部参考电压进行转换。
A/D转换精度可选12位、10位和8位,从而在生成数字值时优化速度与分辨率之间的权衡。
ADC12支持以下工作模式:
单扫描模式,按通道编号升序转换选定通道的模拟输入
连续扫描模式,可按通道编号升序连续转换所选通道的模拟输入。
分组扫描模式,将通道的模拟输入分为两组(A组和B组),并根据通道编号从小到大依次对每组选定通道的模拟输入进行转换。
在群组扫描模式下,请选择两个群组(群组A和B)。您可分别选择每个群组(群组A、B)的扫描起始条件,并分别在不同的时间开始对各群组进行扫描。此外,当设置群组A的优先级控制操作时,ADC12会在群组B进行A/D转换期间接受群组A的扫描起始请求,从而暂停群组B的转换过程。这可使您能够对群组A的A/D转换起始赋予更高的优先级。
在双触发模式下,选定通道的模拟输入会在单扫描模式或群组扫描模式(群组A)下进行转换,而由第一和第二A/D转换启动触发器所转换的数据则被分别存储在不同的寄存器中,从而实现A/D转换数据的双工传输。
每次扫描开始时执行一次自诊断,ADC12生成的三个参考电压值之一被进行A/D转换。
温度传感器输出值和内部参考电压可同时与通道的模拟输入一起进行选择。首先对该通道的模拟输入进行第一次A/D转换,随后是对温度传感器输出值的转换,最后是对内部参考电压的转换。
ADC12还具备比较功能(窗口A和窗口B)。该比较功能用于指定窗口A的上参考值和窗口B的下参考值,并在所选通道的A/D转换值满足比较条件时输出中断信号。
A/D数据存储缓冲区是一个环形缓冲区,由16个缓冲区组成,用于依次存储A/D转换后的数据。
二:FSP库的配置:
void adc0_init(void)
{
fsp_err_t err = FSP_SUCCESS;
/* Initializes the module. */
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Enable channels. */
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
}3.2 ADC 读取函数:void ReadAdcValue(void)
{
fsp_err_t err = FSP_SUCCESS;
R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false; while (!scan_complete_flag)
{
/* Wait for callback to set flag. */
err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data1);
assert(FSP_SUCCESS == err);
a0=(adc_data1/4095.0)*3.3; printf("ADC VALUE=%5d",adc_data1);
}
}四:具体应用如下所示:4.1 使用的火焰传感器模块火焰检测模块可以检测火焰或者波长在 760nm~1100nm 范围内的光源,通过旋转可调节电位器,可以设定火焰检测模块感应火焰的强度,当火焰强度达不到设定阈值时,D0端输出高电平,当火焰强度超过设定阈值时,DO端输出低电平,AO端供ADC采集火焰检测模块的模拟量
模块特性:
可调节电位器阻值范围:阻值最大为 10K,用户可以根据实际需要,调整阈值以适应不同的火焰强度条件
工作电压范围:3.3~5V
工作温度范围:-40°C~+85°C
检测距离与角度:打火机实验最远约1.5m,火焰越大与对正角度越小,检测距离越远,适合60度左右范围内
使用输出形式:DO数字量(TTL高低电平);AO模拟量(0~4.5V以下)特性说明:此模块适用作定性分析,当只用D0信号时,供电建议用5V;若要用A0信号,考虑单片机ADC量程使用3.3V供电
这里需要用多次采集和计算:
根据 ADC采集到A0脚的模拟量来判断火焰强度情况,模块适用作定性分析,无精确换算公式,若要判断环境状态,请根据实际环境做多次标定测试,例如记录下模块在实测环境中不同火焰状态的ADC值,程序划定判断范围4.2 实物测试图:
我要赚赏金
