移植屠龙刀ADC的程序出错。
用32G12K128设计一块板子,使用了屠龙刀的08-16路ADC轮询-每路16次ADC转换取中间8次求平均值-串口1返回结果,串口打印所有ADC通道的值为4095.请问问题所在。板子的MCU是3.3V供电,曾用5V给VREF管脚供电,发现错误后,把VREF管脚改接了3.3V。 在分析您所描述的问题时,我们可以从以下几个方面进行深入探讨:1. 电源电压与参考电压(VREF)的匹配
您提到MCU的供电电压为3.3V,并且最初错误地将VREF引脚接到了5V,随后更正为3.3V。这一步骤是正确的,因为ADC的参考电压(VREF)应当与MCU的供电电压相匹配,以确保ADC转换的准确性。如果VREF高于MCU的供电电压,可能会导致ADC转换结果不准确或损坏ADC模块。
2. ADC转换结果的异常
您提到所有ADC通道的转换结果均为4095,这通常表示ADC模块检测到了满量程的输入电压。在12位ADC中,4095对应于最大数字值,意味着ADC输入电压等于或超过了VREF。可能的原因包括:
输入信号问题:检查ADC输入引脚是否确实接入了有效的模拟信号。如果输入引脚悬空或接入了错误的信号,可能会导致ADC检测到高电平。
硬件连接问题:确保ADC输入引脚与外部电路的连接正确,没有短路或断路。
ADC配置问题:检查ADC的配置寄存器,确保ADC模块正确初始化,并且采样时间、通道选择等参数设置正确。
3. 轮询与平均值计算
您提到使用了08-16路ADC轮询,并且每路进行16次ADC转换,取中间8次求平均值。这一方法可以有效减少噪声对ADC结果的影响。然而,如果ADC转换结果本身存在问题(如始终为4095),那么平均值计算也无法纠正这一问题。因此,首先需要解决ADC转换结果异常的问题。
4. 串口通信
您提到通过串口1返回ADC结果,并且串口打印所有ADC通道的值为4095。这表明串口通信功能正常,但ADC转换结果存在问题。建议在调试过程中,逐步检查ADC转换的每个环节,包括硬件连接、ADC配置、信号输入等。
5. 调试建议
为了进一步诊断问题,您可以采取以下步骤:
检查硬件连接:使用万用表测量ADC输入引脚的电压,确保其与预期值一致。
简化测试:尝试仅对一路ADC进行测试,排除多路轮询可能带来的复杂性。
逐步调试:从最基本的ADC配置开始,逐步增加功能,观察每一步的结果。
参考手册:仔细阅读MCU的数据手册,确保所有配置参数符合要求。
6. 结论
综上所述,您所遇到的问题可能源于ADC输入信号的异常或ADC配置的不正确。建议从硬件连接和ADC配置两个方面入手,逐步排查问题。通过仔细的调试和验证,您应该能够找到问题的根源并解决它。
希望以上分析对您有所帮助。如有进一步的问题,欢迎继续交流。
[本文内容由国芯人工智能辅助生成,仅供参考] 是例程这样还是移植后的程序这样全4095.
另外上传原理图看看
还有没有别的板子,这个是不是VREF 5V误接已经玩废了{:4_167:}
确定AVREF接了3.3V?
直接下载例子的HEX文件测试看看。 梁工 发表于 2025-4-27 18:03
确定AVREF接了3.3V?
直接下载例子的HEX文件测试看看。
原来的hex文件不行了,我把USB函数删了,把串口打印放在了P3.0、P3.1上,其他的没有改动。BGV怎么也是4095,我在用USB下载程序时,log上还显示是1.189V。 ercircle 发表于 2025-4-27 17:54
是例程这样还是移植后的程序这样全4095.
例程没有问题,移植后出的问题。 RobinHou 发表于 2025-4-27 21:22
例程没有问题,移植后出的问题。
那就上传修改后的程序看看 下载程序时的log,至少说明BGV通道是好的。 RobinHou 发表于 2025-4-27 22:22
下载程序时的log,至少说明BGV通道是好的。
VCC是3.3V,VREF接过5V,单片机大概率烧毁
因为任意脚电压都不能超过VCC、GND范围
BGV是存储在系统ISP区的,是直接读取FLASH,读出是固定值,不是实时测量电压,读出正确的值也不能代表单片机其他硬件是完好的
具体分析需要上传原理图和程序
我直接烧录8楼附件里面的hex文件到屠龙刀核心板上测试ADC输出数据是正常的。
程序应该没有问题,还是排查一下板子,更换芯片试试。
页:
[1]