行业应用
Applications
GD32H7系列IO口硬件滤波功能介绍
时间:2024-09-19 15:29 浏览人数:1562


题  

GD32H7系列作为国内首家M7内核MCU一经问世,迅速在国内市场得到了广泛应用,其强大的功能满足了客户的多重需求。H7新增的IO口硬件滤波功能,曾在客户干扰测试中发挥了重要作用,提高了客户系统程序的鲁棒性,让客户产品更具竞争能力。

“硬件滤波这么好用的功能,是不是引脚上来了什么妖魔鬼怪的干扰都能滤除呢?”带着这个问题,我们来一看究竟。




H7简介

2023年5月11日业界领先的半导体器件供应商兆易创新GigaDevice (股票代码 603986) 正式推出中国首款基于Arm® Cortex®-M7内核的GD32H737/757/759系列超高性能微控制器。

GD32H7系列MCU采用基于Armv7E-M架构的600MHz Arm® Cortex®-M7高性能内核,凭借支持分支预测的6级超标量流水线架构,以及支持高带宽的AXI和AHB总线接口,可实现更高的处理性能。内置了高级DSP硬件加速器和双精度浮点单元(FPU),以及硬件三角函数加速器(TMU)和滤波算法加速器(FAC),大幅减轻了内核的负担并有助于提升处理效率。    

GD32H7可广泛用于数字信号处理、电机变频、电源、储能系统、无人机、音频视频、图形图像等各类应用。得益于超高主频以及大存储容量,该系列MCU也适用于机器学习和人工智能等诸多高端创新场景。

1.png





IO口滤波功能介绍

GD32H7通过配置GPIOx_IFTP寄存器,可以为每个GPIO引脚选择输入滤波的类型。对于配置为通用数字输入引脚(GPIO)的情况下,滤波的方式可以是仅同步到CK_AHB或通过采样窗口两种方式来进行,本文介绍采样窗口滤波方式。

2.png


滤波原理:对信号的采样获得3个样本或6个样本,在输入滤波类型寄存器中(GPIOx_IFTP)有详细的描述。每次采样周期由GPIOx_IFL寄存器中的过滤采样频率(FLPRDx)位指定。三个或六个连续采样周期组成一个采样窗口,当采样窗口采样的数据保持相同时,输入的变化将传递给MCU。





官方案例分析

3.png

GD官方用户手册中给了一个案例,图中Tsp表示一个采样点周期,Tsw表示6个采样点组成的一个采样窗口周期。图中上方是输入的GPIO信号,下方是滤波后的GPIO输入信号。可以看到,滤波后的信号和滤波前的信号有延迟,时长约为1个Tsw。A部分是干扰信号,由于A部分高电平的持续时间小于Tsw,所以滤波后的信号可以看到A部分的干扰会被滤除掉。

结合上方讲的原理,H7 IO口滤波又是怎么具体工作的呢?实际上,滤波过程就是一个滑动滤波的过程,滤波的算法不是求样本均值,而是采样点全为一(零)则输出为一(零),如果不为全相同,则参考采样窗口第一个采样的点值作为输出。


4.png


我们看图中左侧第一个红框,假如滤波从此刻开始(下方红色箭头表示随时间向右滑动,CK_AHB上升沿采样),采样的数据为1 1 0 0 0 0,不全相同,则参考第一个采样点过滤器输出为1。采样窗口向右滑动一个采样周期,采样的数据为1 0 0 0 0 0,参考第一个采样点过滤器输出为1。再滑动一个采样周期,采样的数据为0 0 0 0 0 0,输出为0。当滑动到绿框位置时,采样的数据为0 0 0 0 0 1,1为干扰,过滤器输出为0,成功过滤掉A部分干扰,滤波再往右移动一个采样周期,0 0 0 0 1 0,过滤器输出为0,再次过滤掉A部分干扰。以此类推,读者可以计算出结果,从而可以看到A高电平干扰最后都被滤除掉了。





实际操作

已知某外部中断引脚上会出现高电平噪声致使程序非必要地跳转到中断服务子程序中,经示波器观察噪声高电平持续时间不大于1us,AHB总线频率fCK_AHB=300MHz。如何滤除掉这些噪声呢?通过上述的学习,将GPIO口“滤波时间”设置为1us左右就可以将相应的噪声滤除了。那么可以做如下配置和程序设计:

(1)寄存器操作

GPIOx_IFTP寄存器的IFTP0[1:0]=10,表示有6个采样点; 

GPIOx_IFL寄存器的FLPRD0=30,

采样周期Tsp=2×FLPRD0×TCK_AHB=60×TCK_AHB。

(2)采样周期计算

采样宽度为:

Tsw=6×Tsp=6×2×FLPRD0×TCK_AHB=6×2×TCK_AHB; 

根据fCK_AHB=300MHz,采样周期为:

Tsp=60×TCK_AHB=0.2us

采样窗口的持续时间为:Tsw=6×Tsp=1.2us

(3)程序设计

程序假定使用PA0引脚做中断,在PA0引脚外部中断GPIO基础配置之上添加IO口滤波配置程序即可:

gpio_input_filter_set(GPIOA,GPIO_ISPERIOD(30),GPIO_IFTYPE_6_SAMPLE,GPIO_PIN_0)。

(4)滤波结果

这样设置6个采样点,采样周期为0.2us。采样窗口Tsw为1.2us,GPIO引脚上持续时间小于1us的噪声就可以被滤掉了。实际上,也可以设置采样窗口Tsw为1us,具体设置读者可以参考上述步骤设置寄存器进行配置。同时也注意,滤波有延迟,MCU会延时1.2us左右之后再响应中断,注重实时性的研发方案要注意这种情况。




本文小结

本质上讲实际上只要干扰的电平(也可以说是突然变化的电平)持续时间小于采样窗口,才会被过滤掉。那么问题来了,如果信号电平突然发生变化(1变0或0变1),变化后的电平持续时间大于采样窗口会被滤除掉吗?答案是不会,也就是说IO口是个硬件,没有思考能力,如果变化的电平持续时间大于采样窗口,它不会认为是干扰。所以实际项目中一定要根据要根据要滤除的波形设定好采样窗口大小,否则滤波会失败。

还记得文章开始提出的问题吗?

H7 GPIO滤波的使用有一定特点:

(1)待滤除噪声的持续时间必须小于有效信号的持续时间;也就是输入信号必须是窄脉冲(相对采样窗口而言),才能获得较为稳定的滤波效果。

(2)实时性方面,滤波会带来一定的延时(因为只有满足“采样窗口”全1 or 0样本条件,才会输出实际变化信号)。