发帖数

43

原创数

43

关注者

16

阅读数

9333

点赞数

2

张角

  • 讲透有史以来广受欢迎的运算放大器μA741(4)---输入阻抗及输入级差动放大

    大家好,我是张飞实战电子张角老师!

    image.png

    我们来看下T1T2这两个管子的作用,这两个管子主要是用来提高输入阻抗增益的。由于Q2本身的Ic电流很小(假定是20uA),我们假定VBVC是相等的,那么T1T2Ic也是相同的,这个每个管子的Ic只有10uA。假定这个这两个管子每个管子的放大倍数是200,那么T1T2这两个管子每个管子分配的Ib电流只有 10uA/200 = 0.05uA = 50nA

    那么对于输入信号而言,只有有500nA的通流能力,那么信号的输入就不会失真。当然这里只是估算,但是它从本质上说明了这个运放对输入信号的内阻基本上是没有要求的,不是说内阻一定要多小,需要多高的驱动能力,这样也就提高了这个运放的通用性。当然现在新型的晶体管运放,使用的是两级三极管去提高运放的输入阻抗,这样信号就更不容易失真。

    image.png

    再一个这个运放使用的是N管来提高输入阻抗的,那么这里就有一个问题,也就是如果N管是站在地上的。那么信号也就必须要具备驱动N管的能力,至少信号在A点处产生的电压值呀大于0.7V才行。这样其实也就是提高了对信号的要求,大家想一想,对于一个本来就很微弱的信号,再对它的电压幅值提要求,是不是有点不切实际。uA741为了解决这个问题,使用了一个什么方案呢?它是使用双电源供电来解决这个问题的,它给运放提供了正负两路电源,也就是说T1T2这两个三极管它的E极电位其实并不是0V,而是负压,这样是不是就解决了输入信号电平电位的问题。但是这个动作又带来了新的问题,那就是必须得有负压电源,那么也就从另外一个方面增加了电路的成本。

    目前较新的运放,对内阻的提高上,主要是使用双P管的方案。这样一方面提高了输入阻抗,另外一方面对放大信号的电压幅值没有什么要求,相当于对uA741这款运放的输入级进行了改进。

    image.png

    T5T6这两个管子起到什么作用呢?我们再来回顾一下这个运放的工作过程,当IN-大于IN+的时候,T2Ic电流是不是大于T1Ic电流,那么自然T5Ic电流大于T6Ic电流。我们是T5T6这两个管子,他们的基极电位是相同的,由于它们的Ic电流不同,所以它们的E极电位是不同的。由于T5Ic大于T6Ic,所以T5Ve大于T6Ve,所以Ibt5<Ibt6。大家注意一下T5T6两个管子的电流状态,Ict6 < Ict5, 然而Ibt6>ibt5,那说明T5这个管子在往放大的状态移动,而T6这个管子在往饱和的方向移动。当IN-IN+两个管子的压差达到一定程度的时候,T6这个管子也就达到深度饱和状态。所以说T5T6这两个管子的存在提高了差分的增益,使得T5这个管子的Vc输出的电压更高。如果没有这两个管子,只有两个电阻,那么输入端的增益就要相对小不少,我们再从另外一个角度说明一下,T5本身的Rce也是一个可变电阻,它集电极到源之间的电流也就是Ic电流越大,那么也就是从源到T5集电极的内阻越小;反过来说,也就是T5Rce变得越来越大,这样T5Vc电压也就越来越大。从这个角度上也可以看出来T5T6这两个管子的存在提高了输入级的放大增益。

    T7这个管子的存在主要是增加对称性,减小运算放大器本身不对称带来的误差。这个我们下节课再分析。


    收藏 0 回复 0 浏览 164
  • ESP8266物联网开发板设计4 ---继电器和温湿度检测模块的设计

    大家好,我们今天继续物联网开发板硬件电路设计相关的探讨。

    电源和单片机最小外围电路都设计完成了以后,按照我们的规划,剩下还有两个模块需要去考虑,一个是继电器控制电路,一个是温湿度检测模块。

    继电器是一个开关型器件,而且是一个隔离型的开关器件。开关器件相对来说比较好理解,我们可以通过控制触点的开通和管断,来实现开关的效果。就比如继电器开通的时候,相应的模块就可以工作了,因为通上电了么;继电器关断的时候,那么模块就不工作了。因为我们的开发板是联网的,我们是不是就可以实现远程对设备进行操作呀。

    为什么说继电器是隔离型的开关器件呢?一个最直观的感受,就是原副边可以不站在一个地上是吧,也就是说原副边可以没有任何电气上的连接。继电器工作原理,大家估计都比较熟悉了。原边线圈通上电之后,就变成了电磁铁。既然是电磁铁,那么就会有吸引力,有了吸引力,弹片就会被吸附。按照下面的示意图来看,受控电气就会开始工作。

    image.png

    大家看一下,原边和副边之间是不是完全没有电气上的连接。两边发生关系的渠道其实就是电磁力。这个东西有点像光耦,光耦的原副边发生关系是原边的光信号,是吧。继电器和光偶一个比较大的区别是继电器的副边可以通大电流,因为整体的阻抗小,所以一般用于大功率器件。但是光耦就不同了,它本质上还是流控型的半导体器件,所以通不了大功率,一般是当做开关信号来使用。

    明白了继电器的工作原理,我们来选择一个常用的继电器,看看该如何设计它的驱动电路。我们看一款松乐的继电器的线圈规格,它的线圈功耗有两种,一个是0.6W,一个是0.8W

    image.png

    相比之下,0.8W的吸附力相对强一些,继电器的工作也会更稳定。为什么这么说呢?大家看一下,如果继电器线圈使用得是+5V电压驱动,0.6W的时候,流过线圈的电流是120mA,但是0.8W的时候,这个电路有160mA。流过线圈的电流大,电磁铁的吸附力也就更强;电磁铁的吸附力更强,接触电阻也就更小,副边通大电流的时候就更加稳定。

    我们这里以0.6W12V线圈来举例,这个时候,流过线圈的电流是不是有50mA。那么继电器的驱动电路该如何设计呢?首先这个肯定是一个开关,所谓的开关就是导通的时候阻抗无穷小,断开的时候阻抗无穷大。再一个这个开关应该是一个受控开关,而且受控信号应该是从单片机发出来的。单片机发出来的信号肯定是非常微弱的。那么结合上述两点,这个开关应该是一个电子开关。我们熟悉的电子开关,主要有两个,一个是三极管,一个是MOS管。三极管和MOS管的一个主要区别是MOS管导通的Rdson更低,可以通过更大的电流。但是整体上相对来说,价格更高一些。我们这里使用三极管就够了,一般三极管Ice可以轻松达到100mA。三级饱和导通的时候,Vce0.3V,这样三极管的功耗才有0.03WSOT23封装的三极管可以轻松搞定。

    思路理顺了之后,我们来看一下驱动电路是如何进行设计的。

    image.png

    T1这个三极管就是我们刚才提到的开关管,M点连接到单片机的引脚,当M点的电位为高的时候,三极管T1就开通了,饱和导通的时候T1Rce很小,那么从+12V这条回路的内阻完全有继电器来决定,从规格书上可以看出来,这个内阻在240R,那么流过继电器的电流是12V/240R = 50mA,也就达到了我们的设计目的。D4这个管子起到什么作用呢?它主要是续流的时候,起作用。继电器在关断的时候,内部的线圈必须有续流回路。如果没有续流回路,就会产生严重的dv/dt,也就是线圈两端会产生尖峰电压,可能就会把三极管的CE端击穿。整体上也就是说,电感的能量是以电流来维持的,电流是必须要有回路才能存在。不管怎么说,能量都是不可以突变的。我们就得想办法给继电器的电感提供一个续流回路。最上面的两个电容,大电容主要是稳压的作用,相等于能量资源池,进一步降低了电源端的阻抗;小电容,主要是滤波作用。这个是电容的基本工作原理。

    分析完了继电器的驱动电路,我们来看一下温湿度检测的电路设计,温湿度检测这块,我们使用的是SHT20这块芯片,这个芯片大概的样子如下图所示。

    image.png

    这个芯片内部有一个I2C的通信模块,单片机和这个芯片之间可以通过I2C协议进行通信。关于I2C通信的协议,大家可以自己去搜索一下,它就是一个同步通信协议,和SPI类似。只不过它的寻址是靠地址码来实现的,SPI通信模块,则是通过片选线来实现的。具体指令类型,可以参见它的datasheet说明。

    image.png

    image.png

    image.png

    如果我们自己用GPIO口来模拟I2C通信时序,一定要严格按照它的通信要求来,这里一个是命令格式,一个是通信速率相关的设定,比如通信的频率最高是400KhzSCLSDA的高是多长时间等等,这些都要符合规定,这样才能通信成功。

    我们以湿度测量来举例,看看它的通信过程是一个什么样子的。SCL时钟信号时钟由主机控制,SDA绿实线为主机发送数据,SDA绿虚线为从机发送数据。具体的操作说明,可以从截图中就看出来,我这里就不再进一步解释了。

    第一步,发送湿度测量指令。

    image.png

    第二步,读取测量到的温湿度数据。

    image.png

    因为这个模块完全是数字接口,内部的温度检测部分的模拟电路,我们也不用管,所以实现起来相对比较简单。我们又不需要进行芯片设计,只是去使用它,所以考虑问题也不需要那么复杂。但是I2C协议的实现是建立在开关器件是开漏输出的前提下的,所以SCLSDA这两条线都需要上拉电阻。

    image.png

    关于物联网开发板原理图的设计,我们就先到这里。

    收藏 0 回复 0 浏览 161
  • 讲透压敏电阻的工作原理、选型以及相关计算

    大家好,我是张飞实战电子张角老师!

    我们今天分享一下压敏电阻的选型以及相关计算的知识。

    首先我们需要回答一个问题,为什么需要压敏电阻。压敏电阻,顾名思义,对电压很敏感的电阻;中文这个“敏感”对应到电路中,应该就是一个非线性的变化:当电压达到一定的数值的时候,器件的阻抗呈现出剧烈的变化,这个剧烈的变化应该是量级上的。我们之所以会需要这种特性的电阻,肯定是电气设备中会遇到这样的源,需要这样的响应;反过来说,如果没有这样的响应,电路中的其他相邻或者相关器件就会出问题。

    大自然的起电方式,其实主要有两种,一个是感应起电,一种是摩擦起电。我们常用的水电、风电、火电等等,本质上属于感应起电,发电的过程本质上属于机械能通过电磁感应现象转化成电能的过程。这些电能经过升压之后,进行远距离传输,然后再经过降压,最后变成我们日常使用的220V的交流电。摩擦起电,我们比较熟悉的就是静电现象,以及雷电现象。静电,大家很多人肯定都有切实的感受,尤其是在冬天的时候。雷电,其实蕴含着非常巨大的能量,可是因为它的位置飘忽不定以及瞬间非常高的电能释放,人类到目前为止也没有办法驯服雷电,让它为人类所用。目前能做的,还是想办法避免它造成的灾害。

    image.png


    感应起电

    image.png


    静电

    image.png

    雷电

    其实压敏电阻这个器件之所以被发明出来,就是为了在雷击的发生的时候,防护器件的。雷电的存在是不以人的意志为转移的,对于这个电源,我们利用不了它,但是总不能被其所害。由于雷电产生的高压高能量具有瞬间性,那么必然要求防护器件也具有这样的响应特性。压敏电阻也就应运而生了。

    image.png

    压敏电阻外观上,大体就是这个样子。它的内部结构是什么样子的呢?实际上压敏电阻是使用陶瓷工艺制作而成,它内部的微观结构中包含氧化锌的晶粒以及晶界。晶粒因为内部晶体分子排列非常整齐,所以电阻率很低;晶界则不然,它的电阻率却很高。相互接触的两个晶粒之间相当于形成了一个齐纳二极管的势垒,这个其实就是一个压敏单元。每个压敏单元的击穿电压差不多是在3.5V。压敏电阻的基体就是很多这样的单元进行串联和并联而成。串联的单元越多,它的击穿电压也就越高;并联的单元越多,它的通流量也就越大。压敏电压在工作的时候,它的每个单元都在承受浪涌电能量,而不像齐纳二极管那样,只有结区才承受电功率,这也就是压敏电阻能够承受大得多的浪涌能量的原因。

    我们先来看一下压敏电阻的位置,一般在开关电源中,压敏电阻处在接线端子的后面,和LN之间的负载是并联的。


    image.png

    我们看一下雷击能量过来的时候,压敏电阻是如何实现对相关器件保护的。正常工作的时候,压敏电阻两端之间的阻抗是非常大的,可以近似地看成是开路的(实际上存在着非常微小的漏电流,一般10-20uA)。一旦雷击能量来了,会有瞬间高压加载压敏电阻上,这个时候压敏电阻就会被击穿,呈现出非常低的阻抗。这个内阻在雷电这个能量源的内阻Re面前,相对来说非常小,那么根据电阻分压的原理压敏电阻上的电压就会非常小。压敏电阻和后级负载是并联关系,因为压敏电阻相对负载电阻来说也非常小,所以大量能量都是从压敏电阻流过,被压敏电阻吸收了。通过这样的方式,就实现了对负载的保护。


    image.png

    讲完了压敏电阻的基本原理,我们来看一下压敏电阻该如何选型,既然要提到选型,肯定离不开压敏电阻的各种参数,只有深刻理解了这些参数,我们才能对压敏电阻的选型更加自如。我们先来看一下,常用的471KD10和471KD20这两款压敏电阻。

    image.png

    我们首先需要回答的是,这个命名是什么意思,一般情况下命名标记上往往会一个器件最关键的信息。这个名字可以分为两个部分,第一个部分是471K:471,表示压敏电压是47*10^1 = 470V; K表示精度误差在+/-10%左右。第二部分,D10(或者20),表示压敏电阻的直径是10mm还是20mm,从数据上来看,肯定直径越大,压敏电阻的个头越大。


    下面,我们就从名字入手来解释压敏电阻的一些指标。第一个关键词就是压敏电压,那什么是压敏电压呢?压敏电压是指在压敏电阻上加上一个直流电压,如果流过压敏电阻的电流达到1mA,这个时候的直流电压就被称之为压敏电压,所以有时候压敏电压也用U1mA或者V1mA来表示。比如对于471KD10,这款压敏电阻,它的压敏电压就是470V。因为器件的一致性问题,或者说误差的存在,K级别的压敏电阻的压敏电压在423V(470V*0.9)到517V(470V*1.1)之间。


    我们下面来看一下最大允许工作电压,这个指标的意思其实是压敏电阻能够长时间承受的最大电压,这个电压分为交流电压和直流电压。一般最大允许的交流电压是压敏电压的0.64倍,最大允许的直流电压是压敏电压U1mA的0.82倍。


    最大钳位电压也就是我们说的残压或者说最大限制电压,是指给压敏电阻施加规定的8/20us波冲击电流时它两端的电压。这个8/20us冲击电流是什么意思呢?也就是8us中达到峰值电流的90%,20us后电流降低到峰值电流的50%,这个冲击电流是模仿雷电的冲击电流来设计的。从这个电流的波形上就可以看出,压敏电阻其实并不需要太快的响应速度,这个器件更重要的使命是能够能量吸收掉,当然这个都是相对于TVS二极管而言的。我们选择压敏电阻的时候,它的残压一定要小于被保护电器的耐压水平,否则就达不到保护的目的。


    我们这里要注意呀,有些产品的datasheet中,在这一栏里面有一个和钳位电压相对应的电流值。其实这个电流值的意义不大,我们只需要关注最大钳位电压这个值。

    image.png

    最大通流量,是指最大脉冲电流的峰值是指环境温度为25°情况下,对于规定的冲击电流波形和规定的冲击电路次数而言,压敏电压变化不超过+/-10%的最大脉冲电流。大家可以看一下,471KD10的最大通流量可以达到2500A,这个电流是超级大的。用这么大的电流去冲击压敏电阻的话,会对压敏电阻这个器件本身造成伤害的。基本上打个10来次,压敏电阻就损坏掉了。我们选择压敏电阻的时候,器件本身所能够承受的最大通流量一定要大于实际工作中所承受的通流量。


    我们这里需要注意了,在datasheet里面,最大限制电压这个值是在一定的电流值下测出来的,比如我们这个471KD10就是在25A的时候,最大限制电压为775V。实际进行EMC测试的时候,冲击电流肯定是大于这个的,比如我们进行4000V雷击测试的时候,考虑走线上的电阻、压敏本身的电阻、NTC的电阻,差不多有5R左右,那么冲击电流就有800A左右。那么此时的限制电压或者说钳位电压是多少呢?实际上压敏电阻通流越大,肯定限制电压也就越高,但是这个升高的幅值没有那么大,也就是说电流越大,压敏电阻的阻抗越低。U = I*R,有增长,但是增长的速度是放缓的。25A的时候,最大限制电压是775V,压敏电阻的等效内阻差不多是31R;我们假定800A的时候,它的限制电压是1500V,此时压敏电阻的等效内阻是1.875R,为什么这个地方是假定呢,因为实际测试的时候,很少会去测这个值。大家可以看到一半压敏电阻的后面,还有X电容、Y电容等吸收措施,这个电压其实是上不去的。实际测试的时候,比如我们做8000V的雷击实验,实测X电容上端的电压大约在500V左右,大概就是这个样子。

    image.png

    讲完了这个,后面还有一个最大能量值,其实这个最大能量值也是和压敏电阻的直径强相关的。我们说雷击的电压虽然高,但是毕竟时间短暂是吧,所以能量总值不是很大是吧。我们这里可以来算一下,比如4000V的雷击,回路的总阻抗还是以5R来算,那电流值差不多是800A,我们说雷击的持续时间一般是20us是吧。那么我们来算一下,这么短的时间内,雷击总共释放了多少能量呢?


    E = U * I * t = 4000V * 800A * 20S ÷ 1000000 = 64J

    我们这里采用了估算的方式是吧,实际上电流不是一直都是800A的,具体波形上面我们也画出来的,那这样算的话,实际雷电释放的能量差不多只有30J左右。这里面有不少能量被电线、保险丝、NTC电阻吸收掉了,实际上压敏电阻吸收的能量还要少一些。


    我们来看一下,最后一个指标,压敏电阻的额定功率。471KD10的额定功率是不是只有0.4W呀,也就是说压敏电阻不能持续通过很小的电流是吧。这个从它的封装大小也能看出来,实际上压敏电阻不工作(没有雷击)的时候,它的漏电流是很小的,一般小于20uA,所以正常工作的时候,这个封装功率都是可以满足要求的。但是供电电压是不稳定的,那么流过压敏电阻的电流值也会变大,但是长期工作下,471KD10所能承受的最大功率也就是0.4W。


    讲完了压敏电阻的各个参数,我们具体选型的时候,最主要的两个指标。一个就是压敏电压,一个就是通流量。我们国内市电的电压是220V,但是这个电压是有波动的,尤其是在供电质量相对较差的农村。我们假定正常情况下,电压有20%的波动,那么市电的有效值也就变成了264V。我们根据有效值和峰值的关系,可以推算出来市电的峰值电压在373V。这个373V也是一个大体的估计值,实际上峰值电压可能比这个还高。我们选择的471KD10这个压敏电阻,我们计算下来它的开启电压是在423V到517V之间,是吧。但是我们说这个+/- 10%其实是正态分布的,也就是说存在极个别的压敏电阻开启开启电压小于423V的。综合考虑电网的不稳定性和压敏电阻精度的问题,选择开启电压大于470V是相对合适的。最大通流量这个指标,根据刚才我们的算法,大体评估一下就可以了,这里很难有精确的计算。实际进行EMC测试的时候,如果不能通过,就换大一号的。如果空间不够,我们还可以选择加强型的。


    如果我们想降低残留电压,可以使用压敏电阻和气体放电管串联的办法,如下图所示。

    image.png

    上图的方案采用的是391压敏电阻+600V的气体放电管,因为气体放电管导通之后残余电压非常低,压敏电阻这里选择391的,动作之后它的残余电压相比471也要低不少。391的钳位电压是650V左右,471的钳位电压是775V。R1、R2的作用是为了减少气体放电管上的电压,因为陶瓷放电管电容只有几个pF,但是压敏电阻有几百个pF,根据电容分压,陶瓷放电管上的电压基本就等于电源电压。


    讲完压敏的好处,我们来看一看压敏电阻的缺点。我们前面提到过,压敏电阻主要是用来防止雷击的,雷击的能量其实是us级别的,实际上压敏电阻的反映时间差不多是ns级别。另外它的个头也相对较大,那么要实现对芯片器件更为精细的保护,这个时候压敏电阻就有点吃力了。这个时候,一般使用TVS二极管,它的反应时间更为迅速,响应时间为ps级别的,而且它的体积也相对比较小,比如0603或者0402封装。当然TVS二极管不能流过较大能量,所以它一般处于防护的最后级。

    我们关于压敏电阻的分享,就先到这里。


    收藏 0 回复 0 浏览 160
  • 斜坡补偿的由来

    大家好,我是张飞实战电子张角老师!

    在开关电源中,有一个相对不容易解释清楚,但是对整个系统的稳定性又起到重要作用的知识点-斜坡补偿。我们打算后面用一系列文章来深入探讨一下这方面的知识,争取让大家能够对这块内容有相对深入的理解。

    我们首先需要回答的问题,就是开关电源系统为什么需要斜坡补偿,或者说斜坡补偿解决了哪方面的问题?从宏观上看,开关电源的调节系统可以分为两部分,一个是内环电流环,一个是外环电压环。之所以把电流环称之为内环,主要是因为它的调节速度更快,属于单周期调节。电压环,调节速度相对电流环肯定是更慢的,对于输出滤波电容来说,电压是电流的积分。电流环调节的结果要经过数十个周期之后,才能在电压信号上做出反应。

    当系统的输出电流或者说电感电流,因为负载变化或者输入电压变化产生扰动的时候,在电压环起到调节作用之前,有可能发生电感电流的次谐波震荡,或者说是电感电流的振铃现象。

    这里之所以说是有可能,主要是因为这个现象发生在CCM模式下,而且占空比大于50%的时候。当占空比小于50%的时候,扰动电流的震荡会自动趋于收敛。我们下面用图形化的方式给大家演示一下。

    image.png

    上图是占空比小于50%的时候,负载变化引起的电流扰动。大家可以看一下,这个扰动在几个周期后,会自动收敛。具体为什么会收敛呢?我们可以推算一下电流扰动量的变化公式。

    image.png

    大家可以看一下,当占空比小于50%的时候,Ton的时间内电流上升的斜率大于Toff时间内电流下降的斜率。那么这个电流抖动量的变化趋势和这两个斜率的比值很有关系。

    具体的推导公式,如上图所示。我们这里是分两个三角形来进行计算的。在θ0的三角形内,根据正切关系可以得到δIoIt(两个三角形的公共部分)比例关系式①。实际上这个正切关系本质上是不是就是斜率呀。同样的,在θ1这个三角形内,我们也可以得到式子②。这两个式子化简以后,就会得到关系式③。大家可以看一下,δI1是不是要比δIo要小呀,因为m2小于m1,对吧。当占空比小于50%的时候,是不是m2一定小于m1呀。那么经过几个周期的迭代,是不是扰动量慢慢变小后,系统也就收敛了。

    但是当占空比大于50%的时候,也就是m2大于m1的时候,这个扰动量是不是也来越大,结果也就会出现电感电流的震荡,如下图所示。

    image.png

    对于控制系统的开关芯片而言,Ton的时间也就会出现波动,也就是会出现所谓的大小波交替现象的发生。这个波动的电流对系统的稳定性是无益的,需要想办法解决掉。那么该怎么解决呢?这个也就是斜坡补偿的由来:既然这种情况下m2大于m1,我们能不能通过斜坡补偿的方式使得整体的斜率大小关系发生改变呢?

    下篇文章,将会对这个问题进行更深入的分析。

     


    收藏 0 回复 0 浏览 159
  • RISC-V鸿蒙系统开发板SPI通信模块调试3(项目连载6)


    大家好,我们继续SPI通信接口部分的调试分析。

    上篇文章我们提到CLK的波形幅值最高处只有2.2V,远远没有达到3.3V这一芯片工作电压。同时CLK波形的底部也不是0V。我们因此怀疑RISC-V单片机发出的CLK波形,存储芯片有可能分辨不出来。应该说这个怀疑是合理的。如果大家想从最基础的原理上去辨别出来这个波形的正确性,需要仔细去研读单片机和Flash存储芯片的datasheet。因为我们这块板子是参考睿思芯科一块老的开发板来进行设计的,在他们原有的开发板上这个Flash存储芯片是可以正常读取的。那么我们可以先测试一下原有板子这个引脚处的CLK波形是什么样子的,对比一下就知道,CLK的这个波形是不是正确的。

    下图是我们实际测试到的他们原有开发板上CLK引脚处的波形,大家可以看一下这个波形。这个波形的幅值和频率和我们现有开发板上的波形是一致的,那换句话说我们这个我们板子上的CLK信号也是可以让存储芯片正常工作的。

    图片13.jpg

    既然CLK波形是没有问题,那为什么还收不到数据呢?那我们看一下MOSIMISO的波形,看一看到底是哪里出问题了。如果单片机这一侧能够发送控制信号到W25Q128这一侧,按理说应该是MOSI这条回路是没有问题的。如果MISO这条回路,在单片机侧能够收到波形,那说明MISO这条信号传输回路没有问题;某种意义上它还可以说明,存储芯片W25Q128FVSG收到单片机指令之后,进行了响应。

    图片14.jpg

    大家看一下这个波形,这个是MOSI回路在W25Q128这一侧测到的波形。这个至少可以说明了刚才我们提到的结论:单片机成功给W23Q128发送了信号。

    图片15.jpg

    大家看一下这个波形,这个是MISO回路在芯片这一侧的波形。如果使用示波器的捕获功能,同时使用两个通道来捕获波形,一个是MISO,一个是CLK,那么截取的波形就是下面这个样子。

    图片16.jpg

    同样地,这个图片也说明了一个结论,那就是W25Q128确实收到了单片机发出的指令,并且进行了响应,只是波形不对。那问题出在哪了呢?大家看一下MISO的波形,这个信号也出现了“高”没有“高”上去,有些地方“低”却没有“低”下来的情况。波形看起来比较奇怪,看不出来,这个到底是什么数据。

    问题卡在这里了,那到底是哪里出错了呢?

    首先引起怀疑的就是时钟信号的频率有点太高了,以至于MISO这根线上相应的器件响应速度根本反应不过来,或者是发生了震荡,所以才导致了这种高不高、低不低的情况发生。

    解决这个问题的办法,一般是在发送引脚和接收引脚之间串联一个电阻,用以防止震荡的发生,但是因为我们这个电路已经画好了,已经没有办法再增加电阻。目前能够尝试的办法就是降低信号发送的频率了。降低信号的频率之后,震荡自然也就不会发生了。

    图片17.jpg

    调试的方向明确了,我们要从软件上把通信时钟的频率降低下来,这里要做三处更改。因为SPI接口读取Flash的程序是使用Linux kernel里面的框架来写的,改动起来相对来说比较复杂。

    主要修改的地方有三处,我们在这里耽误了不少时间,主要的原因是这个kernel框架比较复杂。SPI1_CLK_DIV_DWH是一个宏,我们可以通过更改这个宏的值,来改变系统时钟分频的系数。

    图片18.jpg

    图片19.jpg

    图片20.jpg


    不过,比较悲催地是,频率降低以后,MISO的波形依然是不对的,还是这种不高不低的样子。那就奇怪了,这到底是什么原因引起的呢?实在是有点难以理解呀。信号传输的电路都是通的,而且都有波形出来,只是波形不对,难道是存储芯片坏了?不应该呀。实在是不应该出现这样的错误。

    那读取W25Q128 ID的波形具体应该是什么样子的呢?根据W25Q128这个芯片的datasheet,读取它的ID时,MISO返回的数据应该是这样的。

    图片21.jpg

    调试到这个时候,实在是已经没有可怀疑的了。只能是怀疑睿思芯科提供的参考原理图是错误的(芯片刚刚出来,资料不齐全,这个也是可以理解的),经过仔细的引脚比对,果不其然,他们提供的原理图接口顺序是不对的。我的天!在这里,来来回回调试了一周的时间,最后的结果竟然是原理图错了!!!虽然都是用的这四个引脚,但是接线顺序是不对的,唯一正确的就是CLK!!!

    把接线顺序调整后,实测MISO的波形,如下。

    图片22.jpg

    高位在前,低位在后,大家是不是可以判断出这个波形表示的数据是(EFh)呀。

    读取ID的指令只要能够发送成功,那么其他指令自然也是可以发送成功的。程序模块中对Flash芯片的数据擦除、写入也就成功了。

    现在需要总结的一个问题是,为什么刚一开始的时候,我没有怀疑到它的原理图可能是错误的呢?我总结一下,可能有两个原因。第一是,芯片本身的资料是不全的,引脚核对工作不是那么方便;第二是,他们提供了一个参考的板子,这个板子上的SPI Flash芯片是可以正常读取的,这个现象在一定程度上,打消了我对他们接线图的怀疑。这个事情告诉我们,对于不成熟的东西,一定要仔细根据最可靠的文档来核对自己的电路是不是正确。因为不成熟,大家都比较容易犯错,以至于以讹传讹。

    希望我分享的相关调试经验,能够给大家带来一些帮助。


    收藏 0 回复 0 浏览 149
×
张角