cgkdzanx 发表于 2025-3-13 15:49:39

8H8K64U的ADC转换电压上升读入数值会下降,电压下降读入数值会上升

原来用IAP15W4K十位ADC没问题,现在试验STC8H8K64U芯片,
发现电压上升到1.50V再往上升ADC转换读入数值会从1208跳到1288,
再上升电压到1.52V,ADC数值变成1236,反而变小了,有跳变。
反过来电压下降也会读入数值突然变大或变小,
就在1.5V这里最明显,而且线性度也不好。
在任何一个电压点上ADC数值波动很小,可以排除干扰因数。
换了一片单片机还是一样,P1口设为高阻输入也一样。
求大神点拨一二,谢谢!
程序是连续9次采样后取中间3次结果算术平均,这在15W上一点没问题。

ADCTIM = 0x3F;                //AD采样时间控制
ADCCFG = 0x2F;                //AD转换右对齐,高4为在前低8为在后,工作频率最慢为F
ADC_CONTR |= 0x80;      //打开AD转换电源

ADC_CONTR = ADC_CONTR | 0x00;       //P1.0为AD转换通道


for (j=0;j<9;j++)    //AD转换9次
    {
      ADC_CONTR |= 0x40;          //启动AD转换,    STC8H8K64U      
      _nop_();
       _nop_();
      while (!(ADC_CONTR & 0x20));   //查询ADC完成标志         STC8H8K64U
          ADC_CONTR &= ~0x20;       //ADC_FLAG清0                STC8H8K64U
          AD_Dat = ADC_RES;    //读入AD转换高4位
          AD_Dat <<= 8;      //左移8位    STC8H8K64U
          Tmp = ADC_RESL;         //读入AD转换低8位                  
          AD_Dat |= Tmp;       //高低字节拼成1个12位数          STC8H8K64U
          Mun_AD = AD_Dat;//存入9次AD转换值
    }






国芯人工智能 发表于 2025-3-13 15:53:00

针对您描述的STC8H8K64U芯片AD转换异常问题,建议从以下几个方面进行排查和优化:<br><br>1. **ADCTIM寄存器配置**<br>   STC8H8K64U的ADC采样时间由ADCTIM寄存器控制,建议根据数据手册调整采样时间,确保采样周期足够长,避免因采样时间不足导致采样值不稳定。可尝试增加采样时间,观察是否有改善。<br><br>2. **参考电压稳定性**<br>   检查ADC参考电压(VREF)是否稳定。STC8H8K64U的ADC性能对参考电压的稳定性较为敏感,建议使用外部高精度参考电压源,并确保电源滤波电容配置合理。<br><br>3. **输入阻抗匹配**<br>   虽然P1口已设为高阻输入,但仍需检查外部电路输入阻抗是否匹配。高阻抗输入容易引入噪声,建议在输入端添加小电容(如100pF)进行滤波,减少高频干扰。<br><br>4. **非线性校正**<br>   由于您提到线性度问题,可能是ADC本身的非线性特性导致。建议对ADC进行校准,采集多点数据并拟合曲线,通过软件进行非线性补偿。<br><br>5. **程序优化**<br>   您的采样算法(9次采样取中间3次平均)在IAP15W4K上运行良好,但STC8H8K64U的ADC特性可能不同。建议增加采样次数(如16次)并采用更复杂的滤波算法(如中值滤波+滑动平均)以提高稳定性。<br><br>6. **硬件排查**<br>   若问题依然存在,建议检查PCB布局,确保模拟信号走线与数字信号走线隔离,减少串扰。同时,确认电源和地线设计是否合理。<br><br>通过以上步骤,应能有效改善AD转换的稳定性和线性度。若问题仍未解决,建议联系STC官方技术支持,获取进一步帮助。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

神农鼎 发表于 2025-3-13 21:13:11





梁工 发表于 2025-3-14 00:13:05

STC8H8K64U的12位ADC比STC15的10位ADC性能好得多,精度就是12位。
请测试我的例程,并将结果贴出来。
07-8H8K64U-15路12位ADC转换-串口1(P3.1)返回结果-C语言

请别修改程序, 直接下载"07-8H8K64U-15路ADC转换-串口1(P3.1)返回结果-C语言"里的"ADC.hex"测试。
下载时选择主频11.0592MHZ. 测试时, 电脑的串口助手设置115200,8,n,1.

本程序演示15路ADC和bandgap查询采样,转换结果转为十进制文本通过串口1(P3.1)发送给上位机,波特率115200,8,n,1,文本方式。


只关心你的那一路ADC值即可,其余的ADC值不用理会。
业余推荐的测试方法:用电位测试,用高精度电压表对比,见下图:





cgkdzanx 发表于 2025-3-14 12:47:23

国芯人工智能 发表于 2025-3-13 15:53
针对您描述的STC8H8K64U芯片AD转换异常问题,建议从以下几个方面进行排查和优化:1. **ADCTIM寄存器配置**...

好了,谢谢!昨天高阻设错了,搞了半天,AD转换口一定要设为高阻
页: [1]
查看完整版本: 8H8K64U的ADC转换电压上升读入数值会下降,电压下降读入数值会上升