单片机IO口驱动能力
- 格式:docx
- 大小:808.79 KB
- 文档页数:6
STM32F103 非FT的IO驱动5V继电器
笔者在进行STM32单片机应用方案的设计时,遇到一个问题:就是用STM32驱动5V的继电器。
STM32 只能输出3.3V/0V 的电平,但是驱动5V继电器直接使用STM32 是不现实的。
笔者考虑到使用PNP三极管驱动,电路图如下:
通过修改基极电阻R1能再继电器线圈上获取到1V和3V的电平,此时的三级管Q1工作在放大区,无论是PB0给高还是低,都在放大区,此时,对于有的继电器(电阻值在178欧姆)能实现通断,但是对于大部分的5V继电器是无法动作的,或者是无法断开。
方案二:修改stm32的端口,使用带FT(5V兼容的IO)外接10K的上拉电阻到5V,在把stm32是输出设置为OD(开漏模式),如下图:
此时,完全能输出0V/5V 单片机工作在饱和导通和截止状态,能驱动5V的继电器。
方案三:
笔者在实验时,电路板已经做好了,改IO端口,不太美观,已是有了该方案:基极集电极跨电阻。
此方案,在方案一的基础上不需要修改软件,只需要修改基极电阻值,增加一个基极集电极跨接电阻10K即可,此时,三极管在饱和导通和截止状态,能驱动5V继电器。
较方案二比较,是饱和的程度没有方案二深。
单片机IO口介绍单片机(microcontroller)是一种集成电路芯片,具有运算、存储和控制功能。
它是嵌入式系统中最常用的处理器之一、在单片机中,IO (Input/Output)口是用来进行输入输出操作的接口。
IO口通常包括数字IO口和模拟IO口两种类型。
下面将详细介绍单片机IO口的功能和应用。
1.数字IO口:数字IO口是单片机与外部设备进行数字信号交换的接口。
数字IO口可以进行输入和输出操作,具有以下特点:-输入功能:可以通过读取外部设备的状态或信号,并将其转换为数字信号输入到单片机中进行处理。
例如,传感器的信号输入和按键的输入等。
-输出功能:可以通过将数字信号输出到外部设备,控制其工作状态。
例如,LED的控制、驱动电机或继电器等。
数字IO口通常以引脚(pin)的形式存在于单片机芯片上。
一个引脚包括输入端和输出端,可以根据需要进行配置。
数字IO口操作简单、速度快、精度高,常用于控制和通信等方面。
2.模拟IO口:模拟IO口是单片机与外部设备进行模拟信号交换的接口。
模拟IO口可以进行模拟输入和输出操作,常用于采集和控制模拟信号。
-模拟输入功能:可以从外部信号源中获取模拟信号,并将其转换为数字信号输入到单片机中进行处理。
例如,温度传感器、声音传感器等。
-模拟输出功能:可以将数字信号转换为模拟电压、电流等形式,输出到外部设备中。
例如,通过PWM(脉冲宽度调制)信号控制电机的转速。
模拟IO口通常通过ADC(模数转换器)和DAC(数模转换器)实现。
ADC将模拟信号转换为数字信号,DAC将数字信号转换为模拟信号。
模拟IO口的使用相对复杂,需要进行模数转换和数模转换,但在一些需要对模拟信号进行处理和控制的应用中起到关键作用。
3.应用场景:IO口在单片机系统中广泛应用于各种应用场景。
以下是一些常见的应用场景:-传感器接口:通过IO口连接传感器,读取传感器的输出信号,进行数据采集和处理。
例如温度、湿度、光照等传感器的接口。
看来很多网友都搞不清灌电流和拉电流的概念,下面就此解释一下,希望看过本文后不再就此困扰。
一个重要的前提:灌电流和拉电流是针对端口而言的。
名词解释——灌:注入、填充,由外向内、由虚而实。
渴了,来一大杯鲜榨橙汁,一饮而尽,饱了,这叫“灌”。
灌电流(sink current),对一个端口而言,如果电流方向是向其内部流动的则是“灌电流”,比如一个IO通过一个电阻和一个LED连接至VCC,当该IO输出为逻辑0时能不能点亮LED,去查该器件手册中sink current参数。
名词解释——拉:流出、排空,由内向外,由实而虚。
一大杯鲜橙汁喝了,过会儿,憋的慌,赶紧找卫生间,一阵“大雨”,舒坦了,这叫“拉”。
拉电流(sourcing current),对一个端口而言,如果电流方向是向其外部流动的则是“拉电流”,比如一个IO通过一个电阻和一个LED 连至GND,当该IO输出为逻辑1时能不能点亮LED,去查该器件手册中sourcing current参数。
/viewthread.php?tid=219138&highlight=%2Byez hubenyue单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”(sink current)单片机输出高电平时,则允许外部器件,从单片机的引脚,拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载“(source current)这些电流一般是多少?最大限度是多少?这就是常见的单片机输出驱动能力的问题。
分析一下TTL 的输入特性,就可以发现,51 单片机基本上就没有什么驱动能力。
它的引脚,甚至不能带动当时的LED 进行正常发光。
记得是在AT89C51 单片机流行起来之后,做而论道才发现:单片机引脚的能力大为增强,可以直接带动LED 发光了。
看看下图,图中的D1、D2 就可以不经其它驱动器件,直接由单片机的引脚控制发光显示。
单片机IO口结构及上拉电阻MCS-51有4组8位I/O口:P0、P1、P2和P3口,P1、P2和P3为准双向口,P0口则为双向三态输入输出口,下面我们分别介绍这几个口线。
一、P0口和P2口图1和图2为P0口和P2口其中一位的电路图。
由图可见,电路中包含一个数据输出锁存器(D触发器)和两个三态数据输入缓冲器,另外还有一个数据输出的驱动(T1和T2)和控制电路。
这两组口线用来作为CPU与外部数据存储器、外部程序存储器和I/O扩展口,而不能象P1、P3直接用作输出口。
它们一起可以作为外部地址总线,P0口身兼两职,既可作为地址总线,也可作为数据总线。
图1 单片机P0口内部一位结构图图2 单片机P0口内部一位结构图P2口作为外部数据存储器或程序存储器的地址总线的高8位输出口AB8-AB15,P0口由ALE选通作为地址总线的低8位输出口AB0-AB7。
外部的程序存储器由PSEN信号选通,数据存储器则由WR和RD读写信号选通,因为2^16=64k,所以MCS-51最大可外接64kB的程序存储器和数据存储器。
二、P1口图3为P1口其中一位的电路图,P1口为8位准双向口,每一位均可单独定义为输入或输出口,当作为输入口时,1写入锁存器,Q(非)=0,T2截止,内上拉电阻将电位拉至"1",此时该口输出为1,当0写入锁存器,Q(非)=1,T2导通,输出则为0。
图3 单片机P2口内部一位结构图作为输入口时,锁存器置1,Q(非)=0,T2截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平,正因为这个原因,所以P1口常称为准双向口。
需要说明的是,作为输入口使用时,有两种情况:1.首先是读锁存器的内容,进行处理后再写到锁存器中,这种操作即读—修改—写操作,象JBC(逻辑判断)、CPL(取反)、INC(递增)、DEC(递减)、ANL(与逻辑)和ORL(逻辑或)指令均属于这类操作。
2.读P1口线状态时,打开三态门G2,将外部状态读入CPU。
单片机输出低电平的时候,单个的引脚,向引脚灌入的最大电流为 10 mA;一个 8 位的接口(P1、P2 以及 P3),灌入的总电流最大为 15 mA,P0 允许灌入的最大总电流为 26 mA;全部的四个接口所允许的灌电流之和,最大为 71 mA。
但是当引脚输出高电平的时候,它们的“拉电流”能力可就差多了,竟然还不到 1 mA。
为了合理利用IO引脚的低电平能力强的特点,在外接耗电较大的器件(如LED数码显示器、继电器等)的时候,应该优先选用低电平输出来驱动外部器件。
使用IO口输出高电平驱动负载,就是一个错误的选择。
下图是一个直接利用单片机IO引脚驱动LED的电路。
图中P0口使用低电平驱动方式,只要加上约1K的限流电阻即可,甚至不需要常见的P0口上拉电阻。
发光的段,每个引脚灌电流约为3mA,不发光的段,电流为0。
即使各个段全都发光,电流也不超过P0所容许的电流,这是一个合理的驱动方式。
图中P3口使用了高电平驱动方式,这就必须加上上拉电阻来帮助IO接口输出电流。
电阻也采用了1K,发光的段,LED上的电流约为3mA,不发光的段,电流则为5mA,灌入了单片机的IO引脚。
单片机输出低电平的时候,LED不亮,此时VCC通过上拉电阻把电流全部灌进单片机IO口,并且电流是5mA,单片机输出高电平的时候,VCC通过上拉电阻将电流注入到LED中,led亮。
注意到了吗?LED 不发光的时候,上拉电阻给的电流全部灌入单片机的引脚了!如果在一个 8 位的接口,安装了 8 个 1k 的上拉电阻,当单片机都输出低电平的时候,就有 40mA 的电流灌入这个 8 位的接口!如果四个 8 位接口,都加上 1k 的上拉电阻,最大有可能出现32 × 5 = 160mA 的电流,都流入到单片机中!这个数值已经超过了单片机手册上给出的上限。
此时单片机就会出现工作不稳定的现象。
而且这些电流,都是在负载处于无效的状态下出现的,它们都是完全没有用处的电流,只是产生发热、耗电大、电池消耗快...等后果。
单片机IO口驱动能力2010-12-03 15:27驱动当逻辑门输出端是低电平时,灌入逻辑门的电流称为灌电流,灌电流越大,输出端的低电平就越高。
由三极管输出特性曲线也可以看出,灌电流越大,饱和压降越大,低电平越大。
逻辑门的低电平是有一定限制的,它有一个最大值UOLMAX。
在逻辑门工作时,不允许超过这个数值,TTL逻辑门的规范规定UOLMAX≤0.4~0.5V。
当逻辑门输出端是高电平时,逻辑门输出端的电流是从逻辑门中流出,这个电流称为拉电流。
拉电流越大,输出端的高电平就越低。
这是因为输出级三极管是有内阻的,内阻上的电压降会使输出电压下降。
拉电流越大,高电平越低。
逻辑门的高电平是有一定限制的,它有一个最小值UOHMIN。
在逻辑门工作时,不允许超过这个数值,TTL逻辑门的规范规定UOHMIN ≥2.4V。
由于高电平输入电流很小,在微安级,一般可以不必考虑,低电平电流较大,在毫安级。
所以,往往低电平的灌电流不超标就不会有问题,用扇出系数来说明逻辑门来同类门的能力。
扇出系数NO是描述集成电路带负载能力的参数,它的定义式如下NO= IOLMAX / IILMAX其中IOLMAX为最大允许灌电流,IILMAX是一个负载门灌入本级的电流。
No越大,说明门的负载能力越强。
一般产品规定要求No≥8。
对于标准TTL门,NO≥10;对于低功耗肖特基系列的TTL门,NO≥20扇入、扇出系数:扇入系数--门电路允许的输入端数目。
一般门电路的扇入系数Nr为1—5,最多不超过8。
若芯片输入端数多于实际要求的数目,可将芯片多余输入端接高电平(+5V)或接低电平(GND)。
扇出系数--一个门的输出端所驱动同类型门的个数,或称负载能力。
一般门电路的扇出系数Nc为8,驱动器的扇出系数Nc可达25。
Nc体现了门电路的负载能力。
对于输入电流的器件而言:灌入电流和吸收电流都是输入的,灌入电流是被动的,吸收电流是主动的。
如果外部电流通过芯片引脚向芯片内‘流入’称为灌电流;反之如果内部电流通过芯片引脚从芯片内‘流出’称为拉电流。
人生的意义在于进化299792458 / 40075704 = 7.473162011-09-22 18:4751单片机IO端口的驱动能力单片机输出驱动分为高电平驱动和低电平驱动两种方式,所谓高电平驱动,就是端口输出高电平时的驱动能力,所谓低电平驱动,就是端口输出低电平时的驱动能力,当单片机输出高电平时,其驱动能力实际上是端口的上拉电阻来驱动的,实际测试表明,51单片机的上拉电阻的阻值在330K左右,也就是说如果高电平驱动,本质上就是330K的上拉电阻来提供电流的,当然该电流是非常小的,小的甚至连发光二极管也难以点亮,如果要保证LED正常发光,必须要外接一个1K左右的上拉电阻,如果是一个led还好,要是10个、20个led的话,就要接10个、20个1K的上拉电阻,接电阻的本身是可以的,问题是接了上拉电阻以后,每当端口变为低电平0的时候,那么就有10个、20个上拉电阻被无用的导通,假设每个电阻的电流为5mA计算,20个电阻就是100mA,这将造成电源效率的严重下降,导致发热,纹波增大,以至于造成单片机工作不稳,因此很少有采用高电平直接驱动led的,高电平驱动led实际上就是共阴。
低电平驱动就不同了,端口为低电平0时,端口内部的开关管导通,可以驱动高达30多毫安的驱动电流,可以直接驱动led等负载,当端口为低电平0时,尽管内部的上拉电阻也是消耗电流的,但是由于内部的上拉电阻很大,有330K,因此消耗电流极小,基本上不会影响电源效率,不会造成无用功的大量消耗。
因此51单片机是不能用高电平直接驱动led的,只能用低电平直接驱动led,即只能用共阳数码管,而不能直接用共阴数码管。
youki12345 ( /thread-160467-1-1.html )在51单片机系列中,现在生产厂家很多,兼容型号也很多。
不同厂家生产的单片机P1口的驱动能力是不同的。
下面仅举最常用的3种单片机为例,谈谈驱动能力。
先说说LS型TTL负载。
关于驱动能力的基本问题我一直都不明白驱动是什么.一般的说驱动一个负载,我想只要你的电压达到了一个阈值,那么就可以驱动这个负载啊,为什么有时候又说驱动能力不够了?为什么说一个没有输出缓冲的op是驱动不了小电阻和大电容负载的了?我直接在这个op后面接个大电容或者一个小电阻负载有什么影响了?当我用运放驱动一个大的mos管的时候为什么要级连几个反向器了,我直接把运放的输出接在这个大mos管上面不行吗?-----------------------------------楼主这个问题提得好,我以我自己的理解来试图做个解答。
首先,所谓的驱动能力,指的是输出电流的能力。
比方说,某型单片机通用IO口在高电平时的最大输出电流是20mA,这个20mA的指标,就表征了该IO口的驱动能力。
其次,如果负载过大(就像楼主所说的小电阻),则负载电流有可能超过其最大输出电流,这时我们说驱动能力不足。
再次,出现驱动能力不足,直接后果是输出电压下降,对逻辑电路来说,就是无法保持其高电平,以致出现逻辑混乱,不能实现预期的效果。
这种现象一般是不允许出现的。
------------------------------------因为mos管是有内阻的,每个mos管可以提供的最大电流是有限的.小的mos管提供小电流,大mos管可以提供大电流.楼主问题中说"我想只要你的电压达到了一个阈值,那么就可以驱动这个负载啊", 关键是当负载太大(即电阻太小,电容太大),超出了输出管的驱动能力时,输出的电压就会被拉下来,达不到gnd-vdd的变化范围.极限情况:r无限小,c无限大(gnd),那输出就没有信号变化了!关于51单片机P0口的驱动能力P0是个漏极开路接口,让它工作在灌电流状态下驱动LED是没有问题的.即:VCC>限流电阻>LED>P0.灌电流:IO口为低电平的时候,电流从IO口外面"灌"进单片机相反的就是 "拉电流" IO口为高电平的时候,电流从单片机流出去给负载供电。
单片机IO引脚驱动能力提升篇
来源:互联网作者:
关键字:单片机IO引脚
早期的51单片机,驱动能力很低。
P1、P2和P3口只能驱动3个LSTTL输入端,P0口可驱动8个。
如果想要驱动更多的器件,就要用到“总线驱动芯片”。
经常用的就是74LS244(单向)和74LS245(双向)。
现在常用的 AT89C51 单片机引脚的输出能力已经大多了,从 PDF 手册文件中可查出:
单片机输出低电平的时候,单个的引脚,向引脚灌入的最大电流为 10 mA;
一个 8 位的接口(P1、P2 以及 P3),灌入的总电流最大为 15 mA,P0 允许灌入的最大总电流为 26 mA;
全部的四个接口所允许的灌电流之和,最大为 71 mA。
但是当引脚输出高电平的时候,它们的“拉电流”能力可就差多了,竟然还不到 1 mA。
单片机的输出特性和很多常用的LS系列TTL器件的输出特性是相同的,都有灌电流较大的特点。
实际上,现在常用的单片机IO引脚驱动能力,就和早期的单片机增加了“总线驱动芯片”的效果基本是相同的。
现在的单片机输出低电平的时候,就已经可以直接驱动LED发光了。
上述的数值,也并非是不可逾越的破坏性极限数值。
当略超过这些数值范围的时候,单片机IO引脚的电压,就会发生变化,造成“高电平不高”、“低电平不低”,这就会缩小外接器件的噪声容限。
如果环境再稍有干扰,外接器件就无法正确判定单片机送来的高、低电平,将会胡乱动作。
==================================
为了合理利用IO引脚的低电平能力强的特点,在外接耗电较大的器件(如LED数码显示器、继电器等)的时候,应该优先选用低电平输出来驱动外部器件。
使用IO口输出高电平驱动负载,就是一个错误的选择。
下图是一个直接利用单片机IO引脚驱动LED的电路。
图中P0口使用低电平驱动方式,只要加上约1K的限流电阻即可,甚至不需要常见的P0口上拉电阻。
发光的段,每个引脚灌电流约为3mA,不发光的段,电流为0。
即使各个段全都发光,电流也不超过P0所容许的电流,这是一个合理的驱动方式。
图中P3口使用了高电平驱动方式,这就必须加上上拉电阻来帮助IO接口输出电流。
电阻也采用了1K,发光的段,LED上的电流约为3mA,不发光的段,电流则为5mA,灌入了单片机的IO引脚。
这种电路,给单片机IO引脚带来了很大的电流,一个8位的接口最大有可能被灌入40mA的电流,远远超过了容许的数值。
上拉电阻能够增加大量不需要的电流,不仅会造成单片机工作不稳定,还会导致电源效率的严重下降,发热,纹波增大。
这说明,高电平输出、加上拉电阻,就是一个不合理的驱动方式。
如果只是一个引脚的电流取值稍大一些,还算可以;但是综合考虑一个8位的接口,则每个引脚的电流就不要大于2~3mA。
这样来看,上拉电阻最小应该在1.8K~2.5K之间,不宜再小,以免总电流超过接口所容许的电流。
在网上看到一篇“51单片机P0口上拉电阻的深入研究”的文章,对上拉电阻的最小选择,写的很低,甚至说可以选200欧姆!呵呵,这会烧毁单片机引脚的。
==================================
驱动更大电流的负载,可以使用三极管来扩充电流,也可使用集成芯片ULN2003(或ULN2008),另外也可使用专用的驱动器件L298、各种型号的IGBT等等。
集成芯片的引脚比较密集,维修检查较困难,更换的时候更是不便。
做而论道比较喜欢使用三极管,它的耐压和电流承受能力都远远超过集成芯片,在PCB上布线也很灵活方便。
8550(PNP)和8050(NPN):它们是一组可以配对使用的三极管,特点是集电极允许的电流很大,Icm竟然能达到1500mA!而且还不需要使用散热片。
它们的集电极反向击穿电压BVceo为25V,Pcm为0.5W。
2N5401(PNP)和2N5551(NPN):它们也是一组可以配对使用的三极管,它们的特点是耐压比较高,集电极反向击穿电压BVceo可达160V!它们的最大集电极电流Icm为0.6A,Pcm为0.6W。
不同厂家的产品,参数会稍有不同。
==================================
下面以常见的继电器为负载继续说明驱动方法。
继电器线圈的驱动电流往往要有40mA以上,单片机的引脚肯定是不能承受了,必须用三极管来扩充输出能力。
+5V的大电流负载,用8550(PNP型)驱动电路可见下图。
P3.7输出低电平的时候,在R1中形成Ib约有2mA,经过8550的放大,Ic足够驱动继电器了。
用这个电路,不仅可以驱动继电器,也驱动蜂鸣器、扬声器、多个LED等等,甚至驱动小型的直流电机,也是可以的。
一般来说,电机的工作电流要大一些,只要不超过8550可以输出的最大电流是1500mA即可。
驱动电机时,图中电阻R1的取值应该再小一些。
==================================
用这个电路,可以各种大电流负载,但是做而论道为什么单单要用继电器,来说明问题呢?
因为在网上,发现很多不适当的继电器驱动电路,这些电路都是一个特点,即使用了射极输出电路结构。
射极输出电路要求输入的动态范围要大,而且输出的电压范围永远比输入小0.7V。
射极输出电路就不能有效的利用+5V的电源,实际上,加到继电器上的电压,不足+4V,除非是使用4V的继电器,否则这就是不稳定的隐患。
做而论道给出的电路是共射极结构,有电压放大能力,所以对输入的要求较低,输出动态范围大。
==================================
对于大于+5V的负载,如+12V,上面的电路就不行了。
如果只是简单的把电源由+5V改为+12V,那么单片机输出的高、低电平,还是只有0~5V的变化幅度,这对8550射极的+12V来说,都是低电平。
8550将不能截止。
对于大于+5V的负载,只能使用NPN型的8050三极管来驱动,先以单片机输出高电平来驱动。
电路如下:
==================================
在上述电路中,上拉电阻R2也会带来无谓的电流,其害处前面已经讨论过。
更重要的缺点是:在开机单片机复位后,自然输出的高电平,会使继电器吸合,或者是使电机转动。
(使用ULN2003等芯片扩充输出电流的时候,也存在这个问题。
)
虽然编程的时候,可以先进行接口的初始化,令其马上就输出0。
但是每次开机,还是会有瞬间的大电流冲击,这往往是不允许的。
改进一下,可以再加上个8550,进行倒相,这就可以让单片机用输出低电平来驱动负载。
上图中倒相用的8550,也可以使用“光耦”器件,这样一来,又增加了电气隔离的功能,这就是最完美的单片机输出驱动电路。
电路见下图。
图中的4N25经过实际测量,当LED的电流大于等于4.5mA时,输出端的光电管即可为Q4提供足够的基极电流。
所以图中的R3,可以使用810~1K的电阻。
==================================
上述的各个电路,都是以扩充单片机的输出电流为主题。
其实,很多数字IC的输出端,都存在扩充电流输出能力的问题,这里给出的电路,是普遍适用的。
这里介绍的8050/8550可以输出1500mA的电流,如果要求更大的输出电流,一种方法更换三极管,另外也可以使用专用大功率驱动器件,如L298,固态继电器,IGBT等等。