个人成就
- 发布了43篇内容
- 获得了2次赞同
- 获得了5次收藏
个人简介
擅长领域
暂时没有设置哦~
-
RISC-V鸿蒙系统开发板源模块原理简介(项目连载6)
电源是开发板能量的来源,一个稳定可靠的电源系统是开发板能够正常工作的先决条件。我们这个开发板电源系统相对来说比较复杂,主要是因为这个开发板上出现的电压种类比较多,而且个别器件对电压的精确度有非常高的要求。
关于各个模块对电压的要求,我这边做一个简要的说明。
首先开发板电源的输入是12V的DC输入;第二,像红外、FT4222HQ、数码管等器件,需要5V的工作电压;第三,W25Q128FVSG存储、温湿度传感器等器件,需要的工作电压是3V3;第四,单片机IO输出的电平是1.8V;第五,这个芯片引脚内部有不少接口的工作电压是0V8;第六,对于芯片的锁相环,需要输入的电压是0V9。从0V8和0V9这两个电压幅值就可以看出来,这个板子对电源电压幅值的精确度是比较高的。
下图是我们开发板上的电源模块,可以直观地看出这个开发板的电源模块还是相对复杂的。
下面我分别介绍一下各个电源模块的设计要点。
首先是12V的电源输入模块。
这个模块电路的设计要点,是D1这个二极管。这个二极管主要的作用其实是防止电源反接。当然这个二极管上的压降是越小越好。这个蓝色的LED主要是提供了人机交互的功能,当它发光的时候,可以提醒你已经上电了,你下面所有的操作都是带电操作。
上图是一个12V转5V的buck电路,输出是5V的直流电源。这个buck电路使用的是SY8113这款芯片实现的,关于这个片子详细的信息大家可以下载下来看一看。这个电路设计的要点,一个是电感的选择,一个是布局。电感的选择尽量是让电感工作在连续模式,电路布局的时候高频大电流的回路尽可能短,越短越好。这样干扰会越来越小,输出的电源也会更加平稳。这里高频电路有两个,一个是从电感到电容,然后再回到芯片内部地的大电流回路,绿色的那条;另外一个是那条红色的回路,输出电压的反馈回路,这条是信号回路。在电路布局的时候,两个电路按理说都是高频的,都应该最短。但是他们毕竟有冲突,芯片周边的空间就只有那么大,这个时候,我们只能优先考虑大电流的。
上图是5V转3V3的buck电路,主要的关注点和上面提到的差不多。只是这里我们把Buck芯片换成了SY8077。另外一个需要注意的是,电压反馈电阻的选择。SY8077 FB引脚上的电压0.6V,如何选择R29和R30是要注意的,在满足电压配比的前提下,尽量选择常用的电阻。还有一个要注意的是,这里的电阻要选择1%精度的。
3V3转1V8的电源,我们使用的是一个线性电源,使用的芯片是RT9065GE。这个地方不涉及到高频信号,布局上相对来说也相对简单,这里就不多说了。为什么这个地方,会使用线性电源,而不是BUCK电源呢,主要还是3V3到1V8的之间的压差比较小,相对来说功率损耗比较低。
上面两个电路是3V3产生0V8和0V9的电路,两个电路本质上没有太大区别,分压电路的选择上不太一样。其实这里不使用Buck电路也是可以的,毕竟单片机的功耗不是太大。相对难点还是分压电阻的选择这块,如何能够使用常用的电阻进行准确的电压配比。
关于开发板电源的简介,我们就先到这里。
-
RISC-V鸿蒙开发板单片机简介4(项目连载11)
讲完了I2C接口,我们下面来看一下UART通信相关的配置。UART接口是GPIO复用功能中最常用的一种硬件通信方式。如果只是单线通信的话,只需要一根数据线就够了,所以我们经常使用uart接口输出程序中的变量,进行调试。
在这块开发板中,对uart接口进行初始化的函数如下图所示。对UART接口配置,一个非常关键的参数就是波特率的配置。下图中,绿色部分一大块内容都是对波特率配置的程序段,可见其相对来说比较复杂,我们不需要去关注这些实现的细节,实际使用的时候拿过来用就好了。
下面,我们对相关的寄存器进行简要的介绍。
LCR:Line Control Register是线控制寄存器,所谓线控制器,主要是用于配置和传输相关的一些参数。比如,第4位是用来做奇偶校验配置的,第0-1位是用来控制一次传送多少个bits的。
IER: Interrupt Enable Register,这个是中断控制器主要控制和UART相关的中断操作的,是不是允许相应的中断。
FCR:是用来控制FIFO 相关的参数的。我们这里不使用FIFO,所以要把它禁止掉。和FIFO相关的参数,这里就不给大家展示了。
MCR,全称是 Modem Control Register,也就是和调制解调相关的寄存器。我们这里配置的两个位一个是RTS(Request to Send),一个是DTR(Data Terminal Ready)。这两个位,我们在实际使用串口的时候也会经常用到,但是实际一般不配置相应的握手协议。
配置好寄存器之后,就要开始发送数据了。数据的发送,主要是THR这个寄存器。THR的全称是Transmit Holding Register。实际发送数据的时候,只需要往这个寄存器里面写入数据就可以了。写入数据之后,UART相关的电路,自动发送数据给接收端。
上面就是这块开发板中关于UART配置的简要介绍。整体的思路和STM32的配置是相同的。新思科技的uart外设提供了非常多的寄存器进行的配置,更加贴近底层,但是这需要我们对uart的电路实现以及相关协议进行更加深入的理解才能驾驭得了。
-
基于 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
2. 0.8V
3. 0.9V
4. 3.3V
时钟信号:
1. refclk 24Mhz,pass
1. rtcclk error
查到问题了,焊接电路板的过程中把晶振输出引脚和单片机引脚之间的电阻给“震掉” 了。(此处建议焊接的时候,震动去锡法还是尽量少用,可能会带来未知的风险。。。)
就下面这个电阻(在这耽误了不少时间)
焊接上电阻之后的晶振输出波形:
不过把这个电阻焊接上去之后,烧录依然不成功。那肯定还有其他地方问题没有解决。
1. test io clk
这个频率是 92K,是符合设计需求的,pass。
boot 电路
error,原来 boot 电路部分还没有焊接(为了分步调试,有些电路没有焊接)。赶快把 boot
引脚焊接好。
经查手册,单片机程序烧录的时候,4 号脚应该高,5 号脚为低,也就是 2-3 通,1-4 不通。
在电路板上就是这么一个表现形式,也就是 2 通道 ON,1 通道 OFF。
把上述问题解决后,程序就能够烧进去了,如图:
-
MOSFET跨导及夹断区的理解
大家好!我是张飞实战电子张角老师!今天给大家分享MOSFET跨导及夹断区的理解。
相比于晶体管,MOSFET这个管子相对来说比较复杂,它的工作过程理解起来还是有一定难度的。那么这其中最难以理解的部分,可能还是MOS管开关损耗的理解。相比导通损耗和续流损耗,MOS管开通和管断的过程要复杂得多。
为了对MOS的开通过程有更好的分析,我们先回顾两个比较基本的概念。U = I*R,R是电阻,它可以有效地表示流过电阻的电流变化对它两端电压的影响作用,比如如果流过这个电阻的电流越大,那么它两端的电压也就越高。电导是电阻的倒数,如果我们用Λ来表示的话,那么上面这个式子就可以转换为I=ΛU。这个式子可以用来表示一个回路中电压的变化对流过这个器件电流的影响。这个影响可以是幅值,也可以是相位,幅值的影响大家都比较清楚,比如加在电阻两端的电压越高,那么流过它的电流也就越大。在对相位的影响上,最典型的场景,比如LC并联谐振电路,这里我们就不展开分析了。
在MOS管这个器件,存在着一个跨导的概念。那么跨导,本质上还是电导,表示一个器件中电压的变化对电流的影响,但是它描述的却是两个回路的相关参数之间的关系。具体在MOS中,跨导gm表示的是Vgs也就是栅极电压对Ids的影响,用公式来描述的话,就是Ids = gm*(Vgs-Vth)。上面这个公式表示的是什么意思呢?①只有当Vgs的电压超过Vth电压之后,Ids电流才会发生明显的变化。②在Vgs达到平台电压之前,Ids的电流和(Vgs-Vth)这两者之间的差值呈现一个正比关系,这个正比关系的比例系数就是跨导。跨导这个概念,有点类似晶体管里面的电流放大倍数β,但是β这个参数表示的是电流和电流之间的关系,所以是放大倍数,不能称之为跨导。跨导这个特性是MOS管固有的自然属性,我们这里暂且不要去深究。
另外一个比较难以理解的过程,在平台区,Vds的电压才开始直线下降。实际上Vds下降的过程对应着夹断区不断变长的过程。
从上图可以看出来,夹断点的电压Vpinch-off始终等于Vgs – Vth,也就是不变的。随着夹断区不断变长,Vds的电压肯定是不断变小的,当D端(漏极)的电压也达到Vgs-Vth时,MOS管也就基本被完全开通了。在后续的过程中,Vd的电压会逐渐降低到0V,这个时候基本上Vgd = Vgs(忽略MOS管导通阻抗的话)。一般在实际项目中,我们还会继续抬升Vgs,进一步拓宽沟道宽度,进而减小Rds,但是这个时候Vgs的作用已经很小了。
分析清楚了两个相对比较难以理解的过程,我们下面就可以较为详细地推导出管开关损耗相关计算了。但是大家注意了,这些计算本质上还只是近似估算,某种意义上讲开关损耗是没有办法精确计算的。
这篇文章先到这里,下篇文章我们再详细计算MOS管的开关损耗。
-
物联网通信技术总结与分析
大家好,我是张飞实战电子张角老师!
现在是一个万物互联的时代,既然要实现万物互联,各个物联网设备之间的通信就是一个不可回避的问题。我们常用的单片机的接口比如spi,i2c,uart等等,都属于有线连接,而且寻址和传输协议也相对来说比较简单,这也就决定了它们的主要适用范围主要是板级通信,传输速度不会太远。有线连接中,能够实现较远距离传输的,就是网络接口。借助互联网基础设施中的路由器、交换机以及光纤等转接和传输设备,基于复杂的TCP/IP协议栈,人类构建了庞大的互联网体系,并在此体系上衍生出了各种各样的应用,极大地提供了人们获取信息的速度。
但是,随着越来越多的设备都需要连接在网络上,进一步提高设备的在线能力,只靠有线通信已经越来越不能满足需求。所以无线通信技术蓬勃发展起来,这里面比较常见的通信协议,包括wifi,蓝牙,zigbee,2G,3G,4G,5G等等。这些无线通信协议,都有着自己的技术优势和劣势,以及时代性。目前来看,除去运营商覆盖的网络或者说移动通信网络(2G,3G,4G,5G等)外,最为常用的就是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指令给我们的wifi,wifi模组收到指令之后,就按照AT指令的内容进行工作了。因此,从表面上看,我们的wifi模组好像不存在一样,就像我们使用uart接口在进行联网操作。这种场景下,wifi模组可以理解为一个透传模块。因为这种使用方式,我们需要使用两个单片机,相对来说成本比较高一些。但是因为我们要实现相对复杂的功能,如果wifi模组内部的单片机实现不了我们想要的东西,这个也是一个没有办法的选择。
这里我们拿市场上比较火(使用相对来说较为简单,或者说可能出货量比较大)的一块wifi芯片ESP8266来举例,它自己的内核本身就是一款32位的MCU,内核是Tensilica L1o,采样的是cortex-M3的架构,主频高达135Mhz,有一个32位的乘法器,一个定时器,15个中断。对于简单的IOT产品,ESP8266完全可以兼任MCU主控的工作,这样可以进一步降低成本。
基于这款芯片的模组,淘宝上卖得比较火的比如深圳安信可的ESP-12F等,就是在这款芯片的基础上额外封装了外置存储芯片和RF模块等等。对于较为简单的IOT应用,我们当然是可以直接使用它内部的单片机来实现相应的功能。
从图上可以看出这款模组使用的是板载天线,也就是上图中板子边缘上的金色的线条部分。经过相关资料查询,它的WiFi传输距离可以达到80米,SPI Flash的存储空间是32Mbits,总共有9个IO口。更为详细的参数表格,大家可以参考下图。
