FR801X adc两个测量通道怎么使用?下面这种方式对吗?调整LDO为3.3v了。
-
struct adc_cfg_t cfg;
// uint16_t result_PD4; uint16_t result_PD5=0; // uint16_t result_PD6; uint16_t result_PD7=0; // uint16_t ref_vol_get = 0; // uint16_t ref_vol_2900 = 2900; uint16_t ref_vol_3300 = 3300; // float vbat_vol_PD4; float vbat_vol_PD5=0; // float vbat_vol_PD6; float vbat_vol_PD7=0; memset((void *)&cfg, 0, sizeof(cfg)); cfg.src = ADC_TRANS_SOURCE_PAD; cfg.ref_sel = ADC_REFERENCE_AVDD; // (2904mV 2.9V) cfg.channels = 0x0A; // 可以四个通道同时使能0x0f cfg.route.pad_to_sample = 1; cfg.clk_sel = ADC_SAMPLE_CLK_24M_DIV13; cfg.clk_div = 0x3f; adc_init(&cfg); adc_enable(NULL, NULL, 0); // 以中断方式返回结果 还有一种回调方式,需要设置回调函数 // adc_get_result(ADC_TRANS_SOURCE_PAD, 0x01, &result_PD4); // PD4 adc_get_result(ADC_TRANS_SOURCE_PAD, 0x02, &result_PD5); // PD5 // adc_get_result(ADC_TRANS_SOURCE_PAD, 0x04, &result_PD6); // PD6 adc_get_result(ADC_TRANS_SOURCE_PAD, 0x08, &result_PD7); // PD7 adc_disable(); // ref_vol_get = adc_get_ref_voltage(ADC_REFERENCE_AVDD); // 注意:该参考电压是对ALDO 2.9v做的校准,如果软件配置ALDO电压改变了,该校准值ref_vol就没有太大参考价值了 // vbat_vol = (result * ref_vol_get) / 1024.0; // mV. // printf("result: %d, ref_vol_get: %dmV, vbat_vol: %fmv, ", result, ref_vol_get, vbat_vol); // 2904?进行了校准 从29000->2904 ADC_REFERENCE_AVDD // vbat_vol = (result * ref_vol_2900) / 1024.0; // mV. // printf("ref_vol_2900 - > adc_value: %fmV, ", vbat_vol); vbat_vol_PD5 = (result_PD5 * ref_vol_3300) / 1024.0; // mV. vbat_vol_PD7 = (result_PD7 * ref_vol_3300) / 1024.0; // mV. printf("ref_3300, vbat_vol_PD5: %fmV, vbat_vol_PD7: %fmV\n", vbat_vol_PD5, vbat_vol_PD7);
-
多通道采集时,一般在adc_enable之后做个delay,保证采样完成; 比如分频配置0x01,
clk = 56k/2/15 = 1.86k = 540us左右,两个通道转换完需要1ms以上。
-
@刘流鎏 在 FR801X adc两个测量通道怎么使用?下面这种方式对吗?调整LDO为3.3v了。 中说:
谢谢。但是我加入 co_delay_100us(100); 还是有些问题,我用一个通道进行测量是准确的,用两个通道测量结果就是不准确的。
我搭建了一个分压电路,产生1.97v和0.59v,供给两个通道。使用两个通道进行测量结果是:
ref_vol: 2904, result: 551mV, vol_PD4: 1562.601563mV
ref_vol: 2904, result: 247mV, vol_PD5: 700.476563mV
(我将LDO调回2.9v,并配置使用PD4,PD5)
-
@刘流鎏 谢谢。但是我加入 co_delay_100us(100); 还是有些问题,我用一个通道进行测量是准确的,用两个通道测量结果就是不准确的。
我搭建了一个分压电路,产生1.97v和0.59v,供给两个通道。使用两个通道进行测量结果是:
ref_vol: 2904, result: 551mV, vol_PD4: 1562.601563mV
ref_vol: 2904, result: 247mV, vol_PD5: 700.476563mV
(我将LDO调回2.9v,并配置使用PD4,PD5)
-
@always123 在 FR801X adc两个测量通道怎么使用?下面这种方式对吗?调整LDO为3.3v了。 中说:
用一个通道进行
struct adc_cfg_t cfg;
uint16_t result[2],ref_vol,voltage_vol1,voltage_vol2;
system_set_port_mux(GPIO_PORT_D, GPIO_BIT_4, PORTD4_FUNC_ADC0);
system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_ADC1);
memset((void*)&cfg, 0, sizeof(cfg));
cfg.src = ADC_TRANS_SOURCE_PAD;
cfg.ref_sel = ADC_REFERENCE_AVDD;
cfg.channels = 0x03;
cfg.route.pad_to_sample = 1;
cfg.clk_sel = ADC_SAMPLE_CLK_64K_DIV13;FR801xH ADC 使用说明 V0.1
软件配置 9 / 13
cfg.clk_div = 0x1f;
adc_init(&cfg);
adc_enable(NULL, NULL, 0);
co_delay_100us(20); // delay 2ms
adc_get_result(ADC_TRANS_SOURCE_PAD, 0x03, result);
ref_vol = adc_get_ref_voltage(ADC_REFERENCE_AVDD);
voltage_vol1 = (result[0] * ref_vol) / 1024;
voltage_vol2 = (result[1] * ref_vol) / 1024;
-
@刘流鎏 ok, 非常感谢