[G32A] 极海G32A1465汽车通用MCU评估板测试06+内部ADC调试

[复制链接]
 楼主| 聪聪哥哥 发表于 2025-1-17 18:34 | 显示全部楼层 |阅读模式
今天和分享一下极海ADC调试过程
一:简介:2 个 12 位精度的 ADC,各通道转换模式有单次、连续转换。还可以选择硬件转换触发器和硬件通道。
主要特征:
四个输入时钟源、32 个单端外部模拟输入、可选择的参考电压:外部或交替
输出
单端 12 位、10 位、8 位输出模式输出以右对齐的无符号格式为单端
转换模式:单次转换模式、连续转换模式
高性能:线性逐次逼近算法,高达 12位分辨率、自校准、可编程采样时间转换速度/功率、自动比较大于,小于或等于中断,在范围内或超出范围及可编程值
DMA 支持
转换完成/硬件平均完成标志和中断
可选择的硬件转换触发器与硬件通道选择9)
硬件平均功能
在低功耗模式下运行,降低噪声

二:软件编写流程:
1:系统时钟的选择:根据电路板的硬件设计,由于该开发板并没有外部晶振,这里我们使用的是内部的RC时钟,然后配置ADC的时钟分频器,确保ADC在工作时频率正确,最后使能使用的ADC1的时钟
2:ADC的基本参数配置:
选择合适的ADC模式,支持多种转换模式,单次转换和多次转换的模式,我个人认为还是使用连续多次转换的模式效果更好些。设置好合适的采样周期,ADC的采集到的数据不仅仅和外部传感器输入的实际数据有关,和采样的频率也息息相关,经过我个人的工作经历来说,合适的采样时间才能采集到准确的AD数据,通常采集频率过快,会导致ADC数据不稳定。较高的采样时间会增加数据的稳定性,但是这样会增加程序运行的时间。
3:在软件中配置好ADC转换的来i元,可以时外部触发、定时器或者是中断处触发等等触发方式。
4:开始转换并读取ADC的采集数据结果。

三:软件代码:
  1. void ADC_init(void)
  2. {
  3.     /* Reset adc module */
  4.     ADC_Reset(ADC_INSTANCE);
  5.     /* Initialize ADC based on configuration values */
  6.     ADC_ConfigConverter(ADC_INSTANCE,&adcConvCfg0);
  7.     /* Verify ADC */
  8.     ADC_AutoCalibration(ADC_INSTANCE);
  9.     /* Enable hardware comparison function */
  10.     ADC_ConfigHwCompare(0,&adcCompareCfg0);
  11. }
  1. float ADC_readValue(void)
  2. {
  3.     uint16_t partAdcValue;
  4.     /* Trigger using software */
  5.     ADC_ConfigChan(ADC_INSTANCE, 0u, &adcChanCfg0);
  6.     /* waiting for conversion to complete */
  7.     ADC_WaitConvDone(ADC_INSTANCE);
  8.     /* Obtain conversion flag bits */
  9.     g_compareFlag = ADC_ReadConvCompleteFlag(ADC_INSTANCE,0);
  10.     /* Obtain conversion results */
  11.     ADC_ReadChanResult(ADC_INSTANCE, 0u, &partAdcValue);
  12.     return (float)partAdcValue;
  13. }
  1.        SysTick_Delay_ms(250);
  2.         /* Calculated voltage value */
  3.         adcValue = ADC_readValue() / g_adcMaxValue * g_adcDifference;

  4.         /* serial output ADC conversion value ,Compare flag bits */
  5.         printf("ADC conversion voltage value = %fV    Compare flag bits = %d\r\n",adcValue,g_compareFlag);

  6.         if(g_compareFlag == 0)
  7.         {
  8.             LED_On(LED_RED);
  9.             LED_Off(LED_GREEN);
  10.         }
  11.         else
  12.         {
  13.             LED_On(LED_GREEN);
  14.             LED_Off(LED_RED);
  15.         }
测试ADC输出图片:
ADC.png
实验现象:当旋转板载的电位器时候,可以看到串口工具内ADC的变化情况,同时可以看到板载RGB灯的变化情况;
测试视频如下:
WeChat_20250117182653 00_00_00-00_00_30.gif
ForgottenRealm 发表于 2025-1-21 10:49 | 显示全部楼层
实现的不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

238

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部