发帖数

43

原创数

43

关注者

16

阅读数

9333

点赞数

2

张角

  • RISC-V鸿蒙开发板单片机简介4(项目连载11)

    讲完了I2C接口,我们下面来看一下UART通信相关的配置。UART接口是GPIO复用功能中最常用的一种硬件通信方式。如果只是单线通信的话,只需要一根数据线就够了,所以我们经常使用uart接口输出程序中的变量,进行调试。

    在这块开发板中,对uart接口进行初始化的函数如下图所示。对UART接口配置,一个非常关键的参数就是波特率的配置。下图中,绿色部分一大块内容都是对波特率配置的程序段,可见其相对来说比较复杂,我们不需要去关注这些实现的细节,实际使用的时候拿过来用就好了。

    image.png

    image.png

    下面,我们对相关的寄存器进行简要的介绍。

    LCRLine Control Register是线控制寄存器,所谓线控制器,主要是用于配置和传输相关的一些参数。比如,第4位是用来做奇偶校验配置的,第0-1位是用来控制一次传送多少个bits的。

    image.png

    image.png

    IER: Interrupt Enable Register,这个是中断控制器主要控制和UART相关的中断操作的,是不是允许相应的中断。

    FCR:是用来控制FIFO 相关的参数的。我们这里不使用FIFO,所以要把它禁止掉。和FIFO相关的参数,这里就不给大家展示了。

    image.png

    MCR,全称是 Modem Control Register,也就是和调制解调相关的寄存器。我们这里配置的两个位一个是RTSRequest to Send),一个是DTRData Terminal Ready)。这两个位,我们在实际使用串口的时候也会经常用到,但是实际一般不配置相应的握手协议。

    image.png

    image.png

    配置好寄存器之后,就要开始发送数据了。数据的发送,主要是THR这个寄存器。THR的全称是Transmit Holding Register。实际发送数据的时候,只需要往这个寄存器里面写入数据就可以了。写入数据之后,UART相关的电路,自动发送数据给接收端。

    image.png

    image.png

     上面就是这块开发板中关于UART配置的简要介绍。整体的思路和STM32的配置是相同的。新思科技的uart外设提供了非常多的寄存器进行的配置,更加贴近底层,但是这需要我们对uart的电路实现以及相关协议进行更加深入的理解才能驾驭得了。


    收藏 0 回复 0 浏览 117
  • 讲透有史以来广受欢迎的运算放大器μA741(1)---镜像电流源,Widlar电

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

    从今天起,我们开始分析运放uA741的内部结构,争取把它的工作原理给大家讲清楚,讲透彻。只有知道了运放的内部结构,我们才真正可能看得清楚运放的一些参数,在运放选型的时候,才会更加有的放矢。

    虽然较新设计的运算放大器在几乎所有可能的方面(速度、噪音、电压范围等等)都超过了它,但最初的741仍然广受喜爱,并在今天依然大量使用。我们对运放的学习,不能仅仅止步于外围电路的搭建,那样对运放的了解不可能深刻。我想通过这一系列的文章,争取能够把uA741这款运放的工作原理给大家讲解得尽可能透彻,让大家在学习运放的时候,能够更加深入,少走一些弯路。

    与设计外围电路不同,电流源在运放内部更加常用。比如恒流源、镜像电流源、Widlar电流源、增强型镜像电流源等等。为什么会出现这样的情况呢?其中最为主要的原因,就是运放需要放大的是差分信号,那么这里就遇到一个问题:如何把电压差转化为一个差值信号。运放内部目前选择的方案,就是把电压差转化为电流差。那么要产生这个电流差信号,就需要恒流源,其实这里类似一个加法。两个电流之和是一个恒流,那么一个电流大了,肯定另一个电流就小了。有了这个电流差之后,运放内部的电路再把这个差值信号转化一个电压差信号,然后通过这个电压差信号驱动中间级的放大电路。中间级的放大电路现在一般采用达林顿管来实现,这样放大倍数就会很大了,假定每一级的放大倍数是200倍,那么达林顿管总体的放大倍数就会有200*200 = 40000倍。实现了信号放大以后,输出级需要解决的就是功率输出的问题了。毕竟运放是一个模拟器件,它需要一定的带载能力,一般情况下,输出级主要是使用推挽电路来做的。当然因为受制于封装的原因,这个电流值也不能太大,所以这里还有保护电路存在(限流作用)。

    整体上运放的工作原理,就如上面所示,741也不例外。

    大家最常见到的电流源,估计就是电流镜或者说叫做镜像电流源源了。它常见的拓扑结构如下图所示。这个电路的目的,就是实现Io电路和Iref几乎是相同的。这样的话,如果我们要想获得一个特定的电流Io,那么我们只需要去设定Iref就可以了,也就是说Iref侧进行电流的设定,在Io侧实现电流的输出。而下面这个电路,就像镜子一样,可以实现电流的映射。

    image.png

    这个镜像电流源的工作原理,大体如下。因为T1T2是在同一个晶圆上刻出来的,所以它们具有较高的对称性。T1T2的引脚是连接在一起的,所以它们对地的电位是相同的。因为对地的电位是相同的,所以它们的基极电流也是相同的。我们说这两个管子是在同一块晶圆上雕刻出来的,那么它们的放大倍数是也是近似相同的。那么当两个管子都是处于放大状态的时候,他们的Ic电流也就是相同,也就是Ic1 = Io

    那么到了此时,我们只是实现了Ic1Io的镜像关系。但是我们设计的目的其实是Io=Iref,是吧,那么也就是说这里存在一定的误差。这个误差值是多少呢,是不是Ibf是吧。按照上图画下来,Ibf = 2*Ib,对吧。如果T1T2这两个运放的放大倍数比较大,我们假定100倍好吧,那么Ibf带来的误差是不是差不多在1/50左右呀。这个误差,是不是可以近似忽略呀,所以我们可以在总体上认为Io就等于Iref。上面提到的就是镜像电流源的工作原理。

    我们明白了镜像电流工作原理之后,要想产生我们需要的电流,比如10uA。按照我们上面的思路,那么第一个工作,是不是要指定Iref。但是这里面临一个问题,就是这个10uA的电流,如果使用电阻限流的方式来搞,那么就需要非常大的电阻。我们假定供电电压是20V,电流是10uA,那么差不多需要2MR的电阻,这个电阻值太大了。电阻值太大了,芯片在封装的时候,就会面临体积上的问题:电阻越大,某种程度上意味着体积越大。这对芯片设计是非常不利的,所以我们面临一个问题,就是如何使用更小的电阻去产生一个较小的电流呢?

    在运放内部,实现这个功能的,就是Widlar电流源。我们也可以把它理解成在镜像电流源上的改进版。这个电流源的拓扑如下图所示。

    image.png

    我这里先给大家分析一下,这个电路的工作原理。本质上,这里是通过R2上电阻的分压,减少了Vbe2的电压值。T1T2这里都是处于放大状态,Vbe2的电压值变小了,那么那么流经BE PN节的电流值也就变小了,进而放大之后的电流值Ic也就变小了。那么这样的话,即使Iref这边有很大的电流,Io那边的电流也不会很大,这样就解决了R1电阻太大不好封装的问题。具体的公式推导如上图所示,Is是二极管的反向饱和电流,UT=k*T/q,是一个常数。但是这个电流源也有一定的问题,大家看一下公式中存在UT这个常数,但是UT是容易受到温度影响的,所以Io自然也就容易受到温度影响。如果,我们对电流的值要求很精密,这个电流源可能就满足不了要求了。

    解决了Iref电流值设定的问题之后,我们基本上解决了运放中电流源设计的主要障碍。但是我们说运放放大部分和功率部分的最好都踩在地上,我们才好进行电路设计是吧。实际上,大家如果常看运放内部的结构图的话,经常会发现恒流源的符号,但是这个符号经常是挂在源端的。比如像LM324这个片子,它内部的恒流源符号很多。关于图中的恒流源是怎么做的,可能会有一些疑问,毕竟这块的电路图,很少有厂商会画出来。

    image.png

    那么也就是说,我们希望的是不是一个P管做的恒流源,不是N管的对吧。一般P管做的恒流源放在源端,N管做的恒流源放在地端是吧。其实P管的恒流源和N管的恒流源思路是一样的

    那么如图所示,Iref是不是就可以映射到Io上去了呀,这样这个电流源是不是就可以为后面的负载所用了,对吧。但是741使用的并不是这样的方案,它使用的是一个电流反馈的思路,本质上应该是一样的。我们下一篇文章,继续分析741运放的电流源的部分。

    image.png


    收藏 0 回复 0 浏览 116
  • MOSFET跨导及夹断区的理解

    大家好!我是张飞实战电子张角老师!今天给大家分享MOSFET跨导及夹断区的理解。

    相比于晶体管,MOSFET这个管子相对来说比较复杂,它的工作过程理解起来还是有一定难度的。那么这其中最难以理解的部分,可能还是MOS管开关损耗的理解。相比导通损耗和续流损耗,MOS管开通和管断的过程要复杂得多。

    为了对MOS的开通过程有更好的分析,我们先回顾两个比较基本的概念。U = I*RR是电阻,它可以有效地表示流过电阻的电流变化对它两端电压的影响作用,比如如果流过这个电阻的电流越大,那么它两端的电压也就越高。电导是电阻的倒数,如果我们用Λ来表示的话,那么上面这个式子就可以转换为I=ΛU。这个式子可以用来表示一个回路中电压的变化对流过这个器件电流的影响。这个影响可以是幅值,也可以是相位,幅值的影响大家都比较清楚,比如加在电阻两端的电压越高,那么流过它的电流也就越大。在对相位的影响上,最典型的场景,比如LC并联谐振电路,这里我们就不展开分析了。

    MOS管这个器件,存在着一个跨导的概念。那么跨导,本质上还是电导,表示一个器件中电压的变化对电流的影响,但是它描述的却是两个回路的相关参数之间的关系。具体在MOS中,跨导gm表示的是Vgs也就是栅极电压对Ids的影响,用公式来描述的话,就是Ids = gm*(Vgs-Vth)。上面这个公式表示的是什么意思呢?①只有当Vgs的电压超过Vth电压之后,Ids电流才会发生明显的变化。②在Vgs达到平台电压之前,Ids的电流和(Vgs-Vth)这两者之间的差值呈现一个正比关系,这个正比关系的比例系数就是跨导。跨导这个概念,有点类似晶体管里面的电流放大倍数β,但是β这个参数表示的是电流和电流之间的关系,所以是放大倍数,不能称之为跨导。跨导这个特性是MOS管固有的自然属性,我们这里暂且不要去深究。

    另外一个比较难以理解的过程,在平台区,Vds的电压才开始直线下降。实际上Vds下降的过程对应着夹断区不断变长的过程。

    图片8.jpg

    从上图可以看出来,夹断点的电压Vpinch-off始终等于Vgs  Vth,也就是不变的。随着夹断区不断变长,Vds的电压肯定是不断变小的,当D端(漏极)的电压也达到Vgs-Vth时,MOS管也就基本被完全开通了。在后续的过程中,Vd的电压会逐渐降低到0V,这个时候基本上Vgd = Vgs(忽略MOS管导通阻抗的话)。一般在实际项目中,我们还会继续抬升Vgs,进一步拓宽沟道宽度,进而减小Rds,但是这个时候Vgs的作用已经很小了。

    分析清楚了两个相对比较难以理解的过程,我们下面就可以较为详细地推导出管开关损耗相关计算了。但是大家注意了,这些计算本质上还只是近似估算,某种意义上讲开关损耗是没有办法精确计算的。

    这篇文章先到这里,下篇文章我们再详细计算MOS管的开关损耗。


    收藏 0 回复 0 浏览 105
  • 基于 RISCV 单片机的鸿蒙开发板-usb转spi硬件电路调试(项目连载2)

    基于 RISCV 单片机的鸿蒙开发板

     

    本项目从这个地方开始连载,连载结束后,会把原理图pdf 版)开源给大家。刚开始大家可能会觉得顺序有些凌乱,主要是因为这个连载不是从最初阶段开始的,后面我会把缺少的部分,比如原理图板块等等一一补上。这样大家看起来,内容就不会显得突兀。

     

    () 硬件电路调试

     

    1. usb spi 部分

     

    电路上电后,通过 linux 中的烧录程序烧录往单片机中烧录程序不成功。但是以下两个条件基本可以确定 FT4222 这个外设是没有问题的。

    ①在 Linux 系统中能够识别 FT4222 这个外设(驱动自动安装的)

    ②在 Linux 系统中连续通过 FT4222 向单片机发送数据,在单片机的 MOSI 引脚处可以通过示波器实测到信号。如图所示:

     

     

    那么问题现在最有可能出现的就是单片机这个地方了,先从以下几个地方入手,看看单片机有没有正常工作。

    1. 供电

    2. 时钟,包含 refclk rtcclk 3.test io clk

    4. 检查 boot 设置

    5. 复位电路

    上面几个指标也就是单片机的最小系统必备的部分。供电部分电压示波器测量如下:

    1. 1.8V

    图片1.jpg


    2. 0.8V

    图片2.jpg

    3. 0.9V

    图片3.jpg

    4. 3.3V

    图片4.jpg


    时钟信号:

    1. refclk 24Mhzpass


    图片5.jpg

    1. rtcclk error

    查到问题了,焊接电路板的过程中把晶振输出引脚和单片机引脚之间的电阻给“震掉” 了。此处建议焊接的时候,震动去锡法还是尽量少用,可能会带来未知的风险。。。

    就下面这个电阻(在这耽误了不少时间)

      图片6.jpg


    焊接上电阻之后的晶振输出波形:

    图片7.jpg

    不过把这个电阻焊接上去之后,烧录依然不成功。那肯定还有其他地方问题没有解决。

    1. test io clk

    这个频率是 92K,是符合设计需求的,pass

     

    boot 电路

    error,原来 boot 电路部分还没有焊接(为了分步调试,有些电路没有焊接。赶快把 boot

    引脚焊接好。

    图片8.jpg


    经查手册,单片机程序烧录的时候,4 号脚应该高,5 号脚为低,也就是 2-3 通,1-4 不通

    图片9.jpg


    在电路板上就是这么一个表现形式,也就是 2 通道 ON1 通道 OFF

    图片10.jpg

    把上述问题解决后,程序就能够烧进去了,如图:

    图片11.jpg

    收藏 0 回复 0 浏览 102
  • 物联网通信技术总结与分析

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

       现在是一个万物互联的时代,既然要实现万物互联,各个物联网设备之间的通信就是一个不可回避的问题。我们常用的单片机的接口比如spii2cuart等等,都属于有线连接,而且寻址和传输协议也相对来说比较简单,这也就决定了它们的主要适用范围主要是板级通信,传输速度不会太远。有线连接中,能够实现较远距离传输的,就是网络接口。借助互联网基础设施中的路由器、交换机以及光纤等转接和传输设备,基于复杂的TCP/IP协议栈,人类构建了庞大的互联网体系,并在此体系上衍生出了各种各样的应用,极大地提供了人们获取信息的速度。

    但是,随着越来越多的设备都需要连接在网络上,进一步提高设备的在线能力,只靠有线通信已经越来越不能满足需求。所以无线通信技术蓬勃发展起来,这里面比较常见的通信协议,包括wifi,蓝牙,zigbee2G3G4G5G等等。这些无线通信协议,都有着自己的技术优势和劣势,以及时代性。目前来看,除去运营商覆盖的网络或者说移动通信网络(2G3G4G5G等)外,最为常用的就是wifi和蓝牙通信技术,它们可以被认为是近距离通信(或者说固定无线通信)的解决方案中的佼佼者,比如我们的手机上一般都会配有wifi和蓝牙通信模块。其中wifi通信,因其天然具有连接互联网能力,所以应用范围更为广泛。

    总体上来说,Wifi和蓝牙通信技术各有各的优势,wifi通信传输的数据量比较大,但是功耗高;蓝牙通信技术,数据传输速度相对要慢一些,但是功耗低。

    另外,Wifi覆盖的范围相对蓝牙来说也更为广泛,覆盖半径可以达到300m,在家庭和办公室使用肯定是可以的。随着wifi技术的发展,有些wifi网络甚至可以覆盖整个办公大楼。蓝牙则不同,它的覆盖范围往往只有十几米。在频段上,蓝牙一直工作在2.45Ghz这个频段;但是Wifi目前有两个频段范,一个是2.4G频段,一个是5G频段。从上面的描述可以看出来,wifi要实现这些功能,具备强悍的穿墙能力肯定是必须的了,但是他们的工作频段是却是一样的,那么一个重要的区别就是他们的功率不一样了:Wifi的功率相对来说非常大,所以能够穿墙。如果从功耗方面来讲,设计10m有效传输距离的蓝牙模块,其功耗只有2.5mW左右,指望它实现穿墙功能,也是难为它了。

    但是蓝牙的超低功耗对于其在电池供电的场景中的使用,提供了非常具有竞争力的优势,所以很多智能门锁主要的通信手段是蓝牙通信。因为Wifi通信功耗太高,一般不太适合电池供电的场景中。

    我们今天着力分析物联网应用中的wifi模组。那么我们这里遇到的第一个问题,就是为什么我们这里提到的是模组,而不是模块呢?wifi模组和芯片有什么样的区别呢?单纯从名字上来看,wifi模组包含的东西就要比芯片要多。多出来的东西主要是什么呢?一般来说,主要是RF射频模块,存储芯片以及Wifi协议栈的实现。RF射频模块的开发,对信号质量,信号完整性都要求比较高,当然其开发难度也比较大,需要的设备也比较多。这个对小批量产品或者需要快速出货的产品,是一个极高的成本。另外,对一些技术能力较弱的公司,也是一个门槛。因此,市场上就出现了专门生产模组的公司,他们利用自己的技术实力把wifi芯片+存储芯片+射频模块等封装在一起,形成一个统一的解决方案。然后再通过通过商业营销,通过大规模的出货,去平摊他们的研发成本,并从中赚到一定的利润。这对物联网的开发者以及他们自己来说,都是一个双赢的方案。如果某款产品的出货量确实非常大,得到了市场的验证以后,这个时候它的开发者有能力也有动力去选择自己去开发wifi模块,去进一步降低成本或者作出更具特色的解决方案。实际上,从商业的角度讲,一般情况下使用通用的wifi模组可能成本更低,因为它的出货量更大。再一个,这些通用的WiFi模组,在实际应用中可能已经经历过各种各样实际场景的检验,进而模组的厂家可能会有不断的产品迭代,所以它的稳定性应该更为可靠。当然这些都是建立在选对wifi模组的基础之上的,如果选错了产品,可能就会适得其反。

    那么我们该如何使用wifi模组呢?这里有两种方式,一种是直接使用wifi模组内部的单片机进行控制及数据采集功能的实现,不过模组内部的单片机一般情况下,性能相对来说没有那么强大而且引脚数量也受限,所以这种方案只能用在功能简单的场景中。再一个,是我们自己根据实际功能的需求,选择匹配的单片机;wifi模组呢,只是作为一个透传的工具而已。具体怎样使用,可以根据自己的实际情况来确定。

    不管实现方式有何不同,wifi模组的使用者一般都只能使用AT命令来操作模组里面集成的wifi模块。当开发者参照模组说明,使用AT指令操作wifi模组时,wifi模组就可以按照命令进行正确的工作,比如联网什么的。

    那么我们刚才提到的透传是什么意思呢?一般情况下,我们的主控单片机和wifi模组之间使用的是UART通信,主控单片机通过UART接口发送AT指令给我们的wifiwifi模组收到指令之后,就按照AT指令的内容进行工作了。因此,从表面上看,我们的wifi模组好像不存在一样,就像我们使用uart接口在进行联网操作。这种场景下,wifi模组可以理解为一个透传模块。因为这种使用方式,我们需要使用两个单片机,相对来说成本比较高一些。但是因为我们要实现相对复杂的功能,如果wifi模组内部的单片机实现不了我们想要的东西,这个也是一个没有办法的选择。

    这里我们拿市场上比较火(使用相对来说较为简单,或者说可能出货量比较大)的一块wifi芯片ESP8266来举例,它自己的内核本身就是一款32位的MCU,内核是Tensilica L1o,采样的是cortex-M3的架构,主频高达135Mhz,有一个32位的乘法器,一个定时器,15个中断。对于简单的IOT产品,ESP8266完全可以兼任MCU主控的工作,这样可以进一步降低成本。

    image.png

    基于这款芯片的模组,淘宝上卖得比较火的比如深圳安信可的ESP-12F等,就是在这款芯片的基础上额外封装了外置存储芯片和RF模块等等。对于较为简单的IOT应用,我们当然是可以直接使用它内部的单片机来实现相应的功能。

    image.png

                       image.png

    从图上可以看出这款模组使用的是板载天线,也就是上图中板子边缘上的金色的线条部分。经过相关资料查询,它的WiFi传输距离可以达到80米,SPI Flash的存储空间是32Mbits,总共有9IO口。更为详细的参数表格,大家可以参考下图。image.png

    image.png

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