跳转到主要内容

【CW32L012】MCU的IO口阈值判断

MCU的GPIO外设是我们最常用的外设,也是应用场景最多的外设,我们时常需要读取IO口的高低电平,输出IO口的高低电平,输出的是模拟电压或者是数字电压,模拟电压是根据模拟外设输出的连续电压,不在这篇文章的探讨范围,输出的数字电压是0和1,只有0V或者给芯片供电的VDD。使用GPIO数字输入功能的时候,读取外部电压,高于多少V的电压MCU判断为高电平,低于多少V的电压判断为低电平,这就是一个比较有意思的事情了,而我这篇文章就是要探讨我们MCU对于外部输入电压高低电平的判断。

首先给大家阐明的就是我们测试的平台:

MCU:CW32L012

MCU供电电压:VDD=3.264V:

测试IO:PA10

测试方法:使用了两种测试方法,后文详细阐述

接着我们看一下官方给出的理想实验数据,这是IO口的电气特性:

Image
【CW32L012】MCU的IO口阈值判断

这是GPIO外设的结构框图:

Image
【CW32L012】MCU的IO口阈值判断
Image
【CW32L012】MCU的IO口阈值判断

结构框图中的这个符号需要提前给大家介绍一下,这个三角符号代表的硬件就是施密特触发器,这个器件对于IO口高低电平的判断有极大的影响,他的本质就是带两个不同阈值电压的比较器,有回差(滞环),抗抖动、抗噪声能力极强,专门解决信号毛刺、开关弹跳、波形整形问题,这对于读取外部电压是极其重要的。

施密特触发器的特征是:电压从低往高上升:必须冲到 ≥上限阈值,输出才翻转为高电平,电压从高往高下降:必须跌到 ≤下限阈值,输出才翻转为低电平

方法一:

按数据手册,先调节好相应的电压值(如:0.3*VDD、0.4*VDD、0.5*VDD……),然后分别直接加到IO口上,看MCU程序的高低电平读取结果;

测试结果:

低电平:<0.4*VDD(1.305V)

高电平:>0.5*VDD(1.634V)

中间的电平(1.3~1.6):可能为高,也可能为低

由于测试时,是先调好电压,再接到IO口上,测试完后去掉连接(此时IO口悬空),等调好下一个电压,又再接到IO口上),故此对中间的电平不能起到“施密特触发迟滞”的作用!

方法二:

IO口固接在一个电位器的调节输出端,从0开始增加电压,或者从3.3V开始减少电压,看看MCU程序的高低电平读取结果;

方法二的IO口是一直接在电位器的输出上的,方法一是先调好电压,再接到IO上,测试完后去掉连接(此时IO口悬空),等调好下一个电压,又再接到IO上

测试结果:

1. 从0开始增加电压,增到1.37V时,MCU从原来的低,判定为高。(约为0.4*VDD)

2. 从3.3V开始减少电压,减到1.84V时,MCU从原来的高,判定为低。(约为0.56*VDD)

回差约为:1.84-1.37=0.47V,与数据手册基本一致;并且确认是“施密特触发迟滞电压”起作用了

这是测量的过程,用万用表实测加在PA10IO口上的电压,软件进入调试模式,打断点看程序断在了高电平的判断里还是停在了低电平的判断里。

Image
【CW32L012】MCU的IO口阈值判断
Image
【CW32L012】MCU的IO口阈值判断
Image
【CW32L012】MCU的IO口阈值判断
Image
【CW32L012】MCU的IO口阈值判断

来源:CW32生态社区

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。