发新帖本帖赏金 40.00元(功能说明)我要提问
返回列表
打印
[技术讨论]

GPIO驱动能力的区别

[复制链接]
1020|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
理工科的小伙伴们应该或多或少都用过单片机,写过点亮跑马灯的代码。对下面的代码应该不会陌生:这是一段初始化GPIO的定义过程。
其中有一行是专门定义驱动速度快慢,对于STM32单片机而言,有lowmediumhigh三种速度可供选择。当时写代码的时候,并不知道这些代码改变了硬件什么状态,只知道照着例程copy就行,但是工作后,才明白,每一行代码背后都会有底层硬件逻辑的变化,速度选取快慢会对硬件功能有影响的。
STM32F103单片机的I/O端口基本结构图可以看出,开关速度频率的设置是针对输出信号的,用来控制推挽结构的晶体管。对于单片机,GPIO口是挂接在AHB总线上,输入状态是恒定的,按时钟APB2分频时钟进行刷新的。
通过查看规格书,可以看出GPIO输出速度有三种模式,分别:最大输出速度2MHz最大输出速度10MHz最大输出速度50MHz,关于这个最大速度是指的压摆率的意思:当信号的上升时间tr加下降时间tf小于三分之二个周期,并且占空比为50%的时候的最大频率。如下图所示的频率特性。如果trtf占据的周期时间太长,就会导致高电平和低电平的时间太短。trtf是受硬件电路决定,比如驱动电流,负载电容等等因素。
当频率提高的时候,周期T就会慢慢缩短,此时trtf的时间还是不变的话,就会造成trtf在一个周期的占比逐渐提升,从而使得稳定高电平和稳定低电平的Thold-time越来越短。而使输出的数字信号能有效的被接收端正确识别,Thold-time就不能太短,很多芯片对Thold-time是有限制说明的,所以当Thold-time缩短到六分之一周期T的时候,就不能再短了。信号此时的频率就是最大频率。可以通过下图看出,tr=tf=5ns,最大速度频率是50MHz,周期T=20nsThold-time就只有5ns,也就是周期的四分之一,此时负载电容容值再增大,就会导致Thold-time时间太短,而不能被正确识别。所以GPIO的最大频率是受限于上升时间和下降时间。
从硬件来看,信号的上升时间和下降时间是由电路的驱动能力和负载电容决定的,对于单片机而言,驱动能力就是输出电流大小,这个由单片机决定,所以设置了最大速度,那么就决定了负载电容不能超过某一个限值,否则就会导致输出达不到预期的速度。当负载电容一定的时候,单片机的驱动电流越大,上升下降时间就越小,Thold-time时间就会更长,就更能满足下级电路的要求-也就是推挽电路的开关。通过讨论,也了解了,改变上升时间需要改变驱动电流大小和负载电容大小,在单片机内部,设置不同的最大速度模式,就改变了单片机内部模块的输出电阻,输出电阻大小决定了输出驱动电流的改变。从而也就达到了改变上升时间和下降时间的目的。
通过FFT分析可知,越大的上升时间,其谐波分量就越少,也就是驱动电流越小,就越有利于EMI的设计。但输出频率就不会太高。所以需要在开关速度和EMI之间取平衡,得到最好的效果。在仅仅点亮几个LED的时候,就使用最低的频率,够用就行。

使用特权

评论回复

打赏榜单

21ic小管家 打赏了 40.00 元 2023-06-07
理由:签约作者奖励

发新帖 本帖赏金 40.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

133

帖子

3

粉丝