本帖最后由 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脚还是要做好处理,根据系统设计要求进行引脚悬空、上下拉或者接地处理。
|