[APM32F407]ADC输入阻抗&电压对采样精度的影响

  • 背景
  • APM32F407的一个应用项目,发现ADC端口输入方波时,基准电压会随着输入方波信号跳变而上下跳变。
  • 如下图,黄色波形是监测到的基准电压Vref绿色波形是ADC端口输入的方波信号,方波信号在0~4.5V跳变。2.5V的基准电压,会跳到2.75V。

  • 最终排查发现ADC端的输入阻抗过小导致的Vref不稳,直接影响了ADC的采样精度。
  • 改动ADC部分原理图

    ADC端口输入阻抗为200Ω,VREF电压是3.3V转2.5V。
    
    

  • 猜测导致此问题可能的原因

    针对这个问题,做了以下方案的排查,测试反馈的结果还是差强人意。

    • 把MCU固件刷掉,单独给ADC管脚输入一个方波,再监测vref管脚是否还会受到影响(排查跟硬件、芯片、代码相关性)

       1、发现问题仍然存在,这说明跟软件配置相关性不大。
       2、下载代码到开发板对比,是否是代码问题。(开发板端正常,验证了跟软件无关)

    • 排查基准芯片的影响--断开2.5V  VREF基准,把MCU  VREF+换到MCU3.3V供电端,看是否还会受到AD输入电压影响。

       1、测试结果还是有影响,问题仍然存在。

  • 检查板子电源,外围电路的影响。
  •  查看MCU手册,ADC部分对输入阻抗是由要求的。根据软件配置的Ts选择适配的输入阻抗。


   

  • 图中RAIN为输入阻抗(芯片外的电路)
  • Radc是采样电阻,Cadc是采样电容(芯片内部电路)
  • ADC采集时,会有电流流入,输入阻抗会产生一个压降。
  • ADC充电常数:Tc=(Radc+Rain)xCadc,可见,Tc时间过长或者过短都会影响ADC采样精度。
  • 结合另一个知识点,当ADC输入电压超过基准电压,不管时间长短,都会向基准电压源注入电流,因此基准电压源一定会吸收一定量的电流,在此输入阻抗RAIN吸收了部分电流。如果输入阻抗过小,就导致能量溢出,当ADC输入电压从0V跳变到4.5V时(超过2.5V基准电压),导致基准电压源吸收电流,电压变大,产生基准电压跟随跳变。
  • 因此基准电压源可集成具有足够的驱动电流的缓冲器,也可以采用运算放大器作为缓冲器(客户电路直接是通过LDO3.3V转2.5V的基准电压,没有缓冲器)。

    所以,将输入阻抗改大到10K,或者在基准电压源增加缓冲器,使用稳压源作基准电压。这样问题就解决了。
---------------------
作者:Fordhs168
链接:https://bbs.21ic.com/icview-3262280-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: APM32F030是一款32位微控制器芯片,程序跳转是指在程序执行过程中无条件或有条件地改变执行地址,使程序跳转到其他指定的地址处继续执行。 在APM32F030中,程序跳转可以通过修改程序计数器(Program Counter,简称PC)来实现。PC是一个特殊的寄存器,用于指向下一条将要执行的指令地址。通过改变PC的值,就可以改变程序的执行流程。 在APM32F030中,程序跳转使用跳转指令来实现。通过跳转指令,可以无条件地将程序跳转到指定的地址,或根据特定条件来判断是否跳转。 比如,可以使用无条件跳转指令“JMP”来实现无条件跳转。通过设置跳转指令的操作数为目标地址,执行该指令时就会将PC的值设置为目标地址,使程序跳转到目标地址处继续执行。 另外,还可以使用有条件跳转指令,如“JE”(等于跳转)、“JNE”(不等于跳转)、“JZ”(零跳转)等,根据特定条件来判断是否跳转。例如,可以通过判断某个标志位的状态,来确定是否执行跳转指令。 总之,在APM32F030中,程序跳转是通过修改PC的值来实现的。通过使用跳转指令,可以无条件或有条件地改变PC的值,从而实现程序的跳转,改变程序的执行流程。这样,可以根据实际需要,实现复杂的程序逻辑和功能。 ### 回答2: APM32F030是一款微控制器芯片,程序跳转是指在程序执行过程中,从当前位置跳转到其他位置继续执行程序的操作。在APM32F030中,程序跳转可以通过使用函数指针或者汇编语言来实现。 首先,函数指针是一种指向函数的指针变量,通过函数指针,我们可以将某个函数的地址赋值给函数指针,然后可以通过调用函数指针来执行这个函数。如果想要在程序中实现跳转到其他位置执行的功能,可以定义一个函数指针变量,并将需要跳转的位置的函数地址赋值给函数指针,然后通过调用函数指针来执行跳转到该位置的程序代码。 其次,汇编语言是一种低级的编程语言,可以直接访问计算机的硬件资源。在汇编语言中,通过使用跳转指令可以实现程序的跳转。APM32F030支持汇编语言编程,通过使用汇编语言编写一段程序代码,可以实现程序的跳转操作。 总结起来,APM32F030的程序跳转可以通过使用函数指针或者汇编语言来实现。函数指针适用于高级语言编程,而汇编语言适用于底层编程,根据具体的应用场景和开发需求,选择合适的方式来实现程序跳转。 ### 回答3: APM32F030是一款基于ARM Cortex-M0内核的微控制器,其具有支持程序跳转的功能。程序跳转是指在程序的执行过程中,通过特定的指令或条件,将控制权从当前位置转移到另一个指定的位置。 在APM32F030中,程序跳转可以通过使用汇编语言或C语言中的跳转指令来实现。例如,使用汇编语言的跳转指令可以是B(无条件跳转)、BL(带链接的跳转)、BEQ(等于零时跳转)等。这些指令可以在程序中的特定位置使用,以实现在需要的时候改变程序的控制流。 具体来说,要进行程序跳转的操作,可以按照以下步骤进行: 1. 首先,确定需要跳转的目标位置。这可以是代码的另一个函数、循环体、条件语句等。 2. 在需要执行跳转的位置,通过使用适当的跳转指令将控制权转移到目标位置。这可以是使用汇编语言编写的指令,也可以是通过C语言中的特殊语法来实现。 3. 跳转到目标位置后,程序会从该位置继续执行。这样可以实现在运行时改变程序流程,实现不同的功能。 需要注意的是,在进行程序跳转时,需要确保目标位置的代码是可执行的,并且满足程序的逻辑要求。否则,可能会导致程序运行错误或异常。 总的来说,APM32F030支持灵活的程序跳转功能,通过适当的跳转指令,可以实现在程序的不同位置之间切换控制权,以满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值