本帖最后由 YangTwo 于 2024-7-21 12:48 编辑
本实验中的ADC配置为10位分辨率。输入电压施加在设备配置器中配置的其中一个gpio P3.5上。
通过设备配置器中的“电压范围”下拉菜单,可以设置电压范围为0 ~ 1.8 V或0 ~ 3.6 V。
ADC DC采样以定时器周期/定时器输入频率的间隔读取,该间隔可以在设备配置器中配置,如图所示。' makeInterval = Timer_period / Clock_frequency '本例中SysClk配置为96 MHz。因此,间隔为~104 uSec。
主要代码:
while (1)
{
/* Monitoring for every one second */
Cy_SysLib_Delay(1000);
Cy_ADCMic_SetInterruptMask(adcmic_0_HW, CY_ADCMIC_INTR_DC);
Cy_ADCMic_ClearInterrupt(adcmic_0_HW, CY_ADCMIC_INTR);
/* Enable the DC monitoring */
Cy_ADCMic_Enable(adcmic_0_HW);
/* ADC Settling Time */
Cy_SysLib_Delay(10);
/* Enable ADC timer to generate interrupt for reading the sample */
Cy_ADCMic_EnableTimer(adcmic_0_HW);
/* Wait for DC monitoring samples to complete */
while(batmon_cplt);
for (int i = 0; i < NO_OF_DC_SAMPLES; i++)
{
batmon_dc_avg = batmon_dc_avg + batmon_samples[i];
}
batmon_dc_avg = batmon_dc_avg/NO_OF_DC_SAMPLES;
/* Convert the ADC code in millivolts */
batt_level_mv = Cy_ADCMic_CountsTo_mVolts((int16_t)batmon_dc_avg, adcmic_0_config.dcConfig->context );
printf("batt_level_mv = %d \r\n",batt_level_mv);
/* Reset for the next set of readings */
batmon_cplt = 1;
batmon_dc_avg = 0;
}
实物测试:
根据任务要求,搭建简易电阻分压网络,在此选择两个10kΩ电阻串联,进而测试分压。
串口助手输出测试电压值:
接着测试了引脚悬空状态下P3.5引脚电压值:
串口结果:
看来平时不使用的PIN脚还是要做好处理,根据系统设计要求进行引脚悬空、上下拉或者接地处理。
|