本帖最后由 bert 于 2022-2-18 16:41 编辑
AD采样数据异常反馈:使用R7FA2E1A72DFL 最小系统板进行AD采样,参考电压为内部基准电压,采集0.8~0.9v之间的数据全都是0xA00
1,在e2 studio环境下仿真,选择AD00作为采样通道,使用直流电源,逐渐增大电压,记录AD采样值,结果如下: 当电压大于0.8v且小于0.97v时,AD采样值全部都是2560(0xA00), 当电压小于0.8v或者大于0.97v时,采样数据正常。 2,然后又把AD通道:0,1,2,5,6,7,8,9全部采集一遍数据,结果与上述一样,
3,把参考电压改为AVCC或VCC时,采样数据正常。
分析:参考电压为vcc的时候采样全部正常,只有内部基准电压作为参考电压的时候,采样电压为0.8~0.9v之间时,所有采样结果都是0XA00(2560), 通道0,1,2,5,6,7,8,9后,发现采样区间为0.8~0.9v时,采样数据均为0xA00。改用vcc做参考电压采样数据正常。 判断为FSP生成的代码问题,与芯片无关。 解决方法: 1,在工程中ra文件夹下,按照ra-->fsp-->src-->r_adc,可以找到r_adc.c文件,其中的API“r_adc_open_sub”中,有以下一段代码。 代码: #if BSP_FEATURE_ADC_HAS_ADHVREFCNT /* If the internal voltage is set as VREFH, discharge the VREF node for 1 us before setting ADHVREFCNT.HVSEL to 2. * Reference section 35.7 "A/D Conversion Procedure when Selecting Internal Reference Voltage as High-Potential * Reference Voltage" in the RA4M1 manual R01UH0887EJ0100. * * Also wait 5 us before using the ADC. This wait is the responsibility of the application. */ if (ADC_PRV_ADHVREFCNT_VREF_INTERNAL_BIT_1 & p_cfg_extend->adc_vref_control) { p_instance_ctrl->p_reg->ADHVREFCNT = (uint8_t) (p_cfg_extend->adc_vref_control | R_ADC0_ADHVREFCNT_HVSEL_Msk); R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS); } p_instance_ctrl->p_reg->ADHVREFCNT = (uint8_t) p_cfg_extend->adc_vref_control; #endif 如注释内容,使用内部参考电压座位VREFH时,将 ADHVREFCNT.HVSEL 设置为 2 之前需要对VREF 节点进行放电。经**,这里1us的时间可能不太够, 所以将这个延迟时间从1us改为10us,就可以得到正确的AD转换结果了。 R_BSP_SoftwareDelay(10U, BSP_DELAY_UNITS_MICROSECONDS);
2,用内部参考电压的时候需要在AD低电流模式, 当内部参考电压选择为高电位参考电压(HVSEL[1:0] = 10b)时,只能工作在低电流模式(ADCSR。ADHSC = 1)。
3,R_ADC0->ADCSR_b.ADST = 1;//注意,需要用操作寄存器方式来启动AD
|