-
软件比硬件。简单多了。
意思是说,软件任何初中毕业的人士都可以容易地入门。
事实上很多年轻人在小学就精通软件了。
这说明软件其实入门很容易。
就像搭积木一样。
越是没有被国产教科书所污染过的人。
越容易根据自己的想法发挥自己想象力来编写任何程序。
即使在506070年代的国外的年轻人。
精通软件的都是如此过来的。
任何你能够使用的软件开发环境。
都是足够模块化的。
也就是搭积木的模块都早已具备。
如果搭积木就是你自己的想象力的问题了。
你并非需要计算机专业的学习。
任何事实求实地接近自己的实际问题的人。
都会知道如何编写解决问题的软件。
当然如何能从教科书中吸收好的编程方法。
也是很不错的。
只要没有被教科书所污染和葬送。
软件开发确实是入门容易进级也不难的手艺。
请注意编程确实是一门手艺。
而硬件就不同了。
特别是模拟电路的问题。
没有人能真实地看懂任何一个简单的放大电路。
这是一个不争的事实。
模拟电路的入门远比软件要难。
这是从能自由设计电路的角度看。
而软件即使一个学龄前的儿童也是容易入门并且可以自由设计软件程序的。
但全世界绝对没有超过5个人能够自由设计电路。
即使模拟电路也可以有模块。
但你即使会搭模拟电路等积木。
性质与软件业不同。
因为硬件电路的设计要末是真正的专家。
但全世界不超过3个。
要么是按设计手册知其然不知其所以然地“搭积木”。
长时间的从事模拟电路的人士。
更多的是因为长时间的接触模拟电路而对于模拟电路有了感性认识。
对于一个长达20年从事模拟电路的人来说。
其最大的收获就是退休的时候才刚刚明白其刚参加工作时遇到的第一个模拟电路的工作原理。
做硬件就像中医,火候未到都不算老中医!
电子产品能否做稳定,硬件至关重要,因为硬件设计上的不稳定最后来都是推倒重新设计,软件还可以修改代码编译后重新下载进去。大家做设计的时间久了,会慢慢领会的。
电磁场与电磁波、微波与天线、高速信号处理、信号完整性、PCB布线的 实际措施、系统电磁兼容的处理措施、电路调试的能力与解决电路故障的能力,等等
做硬件设计10年以内的,只是为了生活!
如果15年以上,你一直做硬件设计才是被尊重的高手!
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
软件
硬件
-
01 复位电路设计
关于复位电路的详细解释,可以查看下面的链接: 单片机基础入门:什么是上电复位,复位电路怎么设计
02 LED串联电阻的计算问题
在设计LED驱动电路时,一定要注意LED的正向导通电压,关于LED驱动电路的设计,可以查看下面的链接: 这时可以借助扩展芯片来实现,比如三八译码器74HC138/移位寄存器74HC595等来拓展。
滤波电容分为高频滤波电容和低频滤波电容。
高频滤波电容一般用104容(0.1uF),目的是短路高频分量,保护器件免受高频干扰。普通的IC(集成)器件的电源与地之间都要加,去除高频干扰(空气静电)。
低频滤波电容一般用电解电容(100uF),目的是去除低频纹波,存储一部分能量,稳定电源。大多接在电源接口处,大功率元器件旁边,如:USB接口、步进电机、1602背光显示。耐压值至少高于系统最高电压的2倍。
05 三极管的作用
单片机输出高电平时,三极管导通;单片机输出低电平时,三极管截至。三极管作为开关驱动继电器可以查看下面的链接: 单片机能直接驱动继电器吗?三极管驱动继电器的电路怎么设计 三极管具有三个工作区: 截至区 、 线性区 、 饱和区 。用作放大作用时,三极管工作在线性区。这一块是模电的老大难。三极管是如何实现放大作用的,查看下面的链接: 三极管必知基础知识:线性放大
当基极为高电平时,三极管导通,右侧的导线接地为低电平,当基极为低电平时,三极管截止,输出高电平。
06 数码管的相关问题
上拉电阻选取原则
从节约功耗及芯片灌电流能力考虑应当足够大;电阻大,电流小。
从确保足够的驱动电流考虑应当足够小;电阻小,电流大。
对于高速电路,过大的上拉电阻可能会导致边沿变平缓。
综合考虑:上拉电阻常用值在1K到10K之间选取,下拉同理。
上下拉电阻
上拉就是将不确定的信号通过一个电阻嵌位在高电平,下拉同理。
电平转换,提高输出电平参数值。
OC门必须加上拉电阻才能使用。
加大普通IO引脚驱动能力。
悬空引脚上下拉抗干扰。
08 按键抖动及消除
软件除抖是检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
单片机
复位电路
-
UART协议,由Tx和Rx两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、奇偶校验位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。当波特率为9600bps时,传输一个bit的时间间隔大约为104.16us;波特率为115200bps时,传输一个bit的时间间隔大约为8us。
数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特。 数据通信时序图:
其中各位的意义如下: 起始位:先发出一个逻辑”0”信号,表示传输字符的开始; 数据位:可以是5~8位逻辑”0”或”1”;如ASCII码(7位),扩展BCD码(8位);小端传输,即LSB先发,MSB后发; 校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验); 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平(用于双方同步,停止位时间间隔越长,容错能力越强); 空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送; 注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)。
↑图-1 起始位和停止位
↑图-2 数据位
↑传输“A” 上图是uart协议传输一个”A”字符通过示波器的uart解码而得到的波形示意图。根据此图来介绍一下uart的一些基本参数。
波特率:此参数容易和比特率混淆,其实他们是由区别的。但是我认为uart中的波特率就可以认为是比特率,即每秒传输的位数(bit)。一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。
起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。
数据位:可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。
校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。就比如传输“A”(01000001)为例。
1、当为奇数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为1才能满足1的个数为奇数(奇校验)。图-1的波形就是这种情况。
2、当为偶数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为0才能满足1的个数为偶数(偶校验)。
此位还可以去除,即不需要奇偶校验位。
停止位:它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。可能大家会觉得很奇怪,怎么会有1.5位~没错,确实有的。所以我在生产此uart信号时用两个波形点来表示一个bit。这个可以不必深究。。。
空闲位:没有数据传输时线路上的电平状态。为逻辑1。
传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。比如传输“A”如果是MSB那么就是01000001(如图-2),如果是LSB那么就是10000010(如下图的图-4)
uart传输数据的顺序就是:刚开始传输一个起始位,接着传输数据位,接着传输校验位(可不需要此位),最后传输停止位。这样一帧的数据就传输完了。接下来接着像这样一直传送。在这里还要说一个参数。
帧间隔:即传送数据的帧与帧之间的间隔大小,可以以位为计量也可以用时间(知道波特率那么位数和时间可以换算)。比如传送”A”完后,这为一帧数据,再传”B”,那么A与B之间的间隔即为帧间隔。
↑图-3
↑图-4 上两图和下两图传送的数据和波特率都是一样的,但是有几个参数是故意设置反了从而形成对比。有助于更深入的理解UART。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
通信
单片机
UART
-
PT100是正温度系数的热敏电阻,顾名思义,随着温度的升高,电阻的阻值变大;相反,如果随着温度的升高,电阻的阻值变小,就是负温度系数的热敏电阻。之所以叫做PT100,是因为在0度时其阻值为100欧姆。
PT100之所以应用很广泛,不仅仅是因为测温范围比较宽宽更因为它的线性度非常好,也就是温度每升高一度,其电阻升高的值基本一致,约0.38-0.39欧姆对应1度,通过惠斯通电桥可以测量某个桥臂电阻的变化情况,那么本方案就利用电桥来设计PT100的温度采集方案。由于电桥出来的信号是查分信号且信号较小,所以要通过差分运放将其放大后再送入单片机进行AD采集,本方案选用AD623作为差分运放芯片,这是一颗轨到轨的运放,即能输出的最大电压为供电电压。
做方案时要考虑如下几个问题: A. 测温范围是多少,这决定了其他三个电阻的阻值该如何选取; B. 运放、单片机的供电电压是多少,这决定了运放的放大倍数如何设计,即最大输出不能超过单片机的AD参考电压; 本方案的测温范围为0-200℃,单片机供电电压为3.3V,设计电路图如下:
通过电路图可以看出如下几个问题: A. 运放的增益电阻R51为3.3K,即放大倍数为 G= ( 1+100/3.3 ) =31.3 ,具体详情可参考 AD623 的数据手册; B. 电阻R2=82Ω,即当PT100也为82Ω时,电桥平衡,差分电压为0; C. 运放能输出的最大电压为3.3V,放大倍数为31.3倍,所以最大的输入电压为3300/31.3=105.4mV,R5两端的电压为固定值V2=2.5×2000/2082=2401.5mV,那么R4两端能输出电压为(2401.5-105.4)mV=2296.1mV,即R1最大为(5000/2.296)-2000=177.7Ω;
通过以上计算即可得出,R1的变化范围为(82-177.7)Ω,即测温范围为(-43~205)摄氏度,满足测温范围为(0-200)℃的要求。
电路设计完成后,就可以变成写程序实现温度的采集了。 附温度-电阻对应表:
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
PT100
采集处理电路
-
电视、空调都离不开红外遥控器。空调遥控器其实就是一个红外信号发射装置,而空调机身具有红外接收探头,可以接收遥控器发出的红外信号并解析,从而实现遥控的功能,电视遥控器也是同样的原理。现在有很多手机具有红外功能,通过匹配通讯协议,就能实现手机遥控电视和空调的作用。下面通过 硬件 和 软件 两个方面来和大家分享,红外遥控实现的原理。
本部分内容包括, 红外发射部分原理 、 红外接收部分原理 以及 软件编码部分原理 。
2 红外接收部分电路原理
前文说过,红外发射和红外接收是一对,成对使用。发射管是白色的,接收管是黑色的。可以使用三极管搭建接收电路也可以使用比较器来搭建电路,下面用三极管电路展示红外接收的电路。如下图所示。
在没有接收到红外信号时,接收管不导通,三极管Q1不导通,三极管Q3不导通,单片机接收到持续的高电平;当接收管接收到红外信号时,单片机接收到低电平。当遥控器的按键被按下时,按键对应的编码脉冲就会被单片机所接收到,单片机解析该脉冲,就能知道遥控器上是哪个按键被按下,从而实现用户的操作。 但是,黑色的红外接收管抗干扰能力比较低,在设计电路的时候一般不选用,而是选用专用的红外接收头,最常用的型号为HS0038。而且,其红外接收电路简单,抗干扰能力强。
3 红外软件编码解析
玩转嵌入式
原理
单片机
红外电路
-
一、DMA简介
1、DMA简介
DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。 CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是 可以不需要CPU参与 。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。 DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作--计算、控制等。
2、DMA的工作原理 DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节 ,主要涉及四种情况的数据传输,但本质上是一样的,都是从内存的某一区域传输到内存的另一区域(外设的数据寄存器本质上就是内存的一个存储单元)。四种情况的数据传输如下:
外设到内存
内存到外设
内存到内存
外设到外设 当用户将参数设置好,主要涉及 源地址 、 目标地址 、 传输数据量 这三个,DMA控制器就会启动数据传输,传输的终点就是剩余传输数据量为0(循环传输不是这样的)。换句话说只要剩余传输数据量不是0,而且DMA是启动状态,那么就会发生数据传输。
3、DMA是否影响CPU的运行
在X86架构系统中,当DMA运作时(假设我们从磁盘拷贝一个文件到U盘),DMA实际上会占用系统总线周期中的一部分时间。也就是说,在DMA未开启前,系统总线可能完全被CPU使用;当DMA开启后,系统总线要为DMA分配一定的时间,以保证DMA和CPU同时运作。那么显然,DMA会降低CPU的运行速度。 在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使用不会影响CPU的运行速度。
二、STM32的DMA结构
1、DMA的主要特性
● 12个 独立的可配置的通道(请求)DMA1有7个通道,DMA2 有5个通道
● 每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过
软件来配置。
● 在七个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),假如在相
等优先权时由硬件决定(请求0优先于请求1,依此类推) 。
● 独立的源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标
地址必须按数据传输宽度对齐。
● 支持循环的缓冲器管理
● 每个通道都有3个事件标志(DMA 半传输,DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。
● 存储器和存储器间的传输
● 外设和存储器,存储器和外设的传输
● 闪存、SRAM 、外设的SRAM 、APB1 APB2和AHB外设均可作为访问的源和目标。
● 可编程的数据传输数目:最大为65536 下面为功能框图:
2、两个DMA控制器结构 ① DMA1 controller
② DMA2 controller
3、DMA寄存器列表
① 中断类
DMA_ISR: DMA中断状态寄存器 DMA_IFCR: DMA中断标志位清除寄存器 说明:DMA1、DMA2分别有一组寄存器。
② 控制传输类
DMA_CCRx: DMA通道x配置寄存器 DMA_CNDTRx: DMA通道x数据数量寄存器 DMA_CPARx: DMA通道x外设地址寄存器 DMA_CMARx: DMA通道x内存地址寄存器 说明:
每一个通道都有一组寄存器。
DMA_CPARx、DMA_CMARx是没有差别的,它们都可以存放外设的地址、内存的地址。DMA_CPARx、DMA_CMARx只不过起得名字有差别而已。
4、STM32的DMA工作特点
① DMA进行数据传输的必要条件
剩余传输数据量大于0,DMA通道传输使能通道上DMA数据传输有事件请求前两者都好理解,对于第三点确实需要详细的解释,请看下边的三条。
② 外设到XX方向的传输
假设是ADC到存储器的数据传输,显然ADC的DMA传输的源地址是ADC的数据寄存器。并不是说只要DMA通道传输使能后,就立即进行数据传输。只有当一次ADC转化完成,ADC的DMA通道的传输事件有效,DMA才会从ADC的数据寄存器读出数据,写入目的地址。当DMA在读取ADC的数据寄存器时,同时使ADC的DMA通道传输事件无效。显然,要等到下一次ADC转换完成后,才能启动再一次的数据传输。
③存储器对XX的DMA传输
因为数据是准备好的,不像ADC还需要等待数据到位。所以,不需要对应通道的事件。只要使能DMA数据传输就一直传输,直到达到设定的传输量。
example: 1.内存到内存, DMA传输请求一直有效 2.内存到串口, DMA传输请求一直有效 一种解释: 存储器对存储器的置位,就相当于相应通道的事件有效。对应通道的事件有效和存储器对存储器的置位,就是传输的触发位。每次传输的事件置位一次,完成一次传输。如果是由外设引发的DMA传输,则传输完成后,相应传输事件会置为无效,而存储器对存储器的传输,则一次传输完成后,相应事件一直有效,直至完成设定的传输量。
④外设以DMA方式工作时,能否再以软件方式进行操作? 有一点是肯定的,当外设以DMA方式正在数据传输时,不可能再相应CPU的软件控制命令,否则这不符合逻辑。 但是,倘若外设仅仅配置成DMA工作方式,但是DMA请求并未产生,数据传输并没有进行。此时,软件控制命令仍然能够对外设进行控制。这是笔者在串口以DMA方式发送数据情形下,所得到的测试结论。
三、STM32的DMA软件编程
1、“内存到内存”模式传输
① 初始化配置
uint8_t SendBuff[SENDBUFF_SIZE]; uint8_t ReceiveBuff[RXBUFF_SIZE]; /**
* @brief USART1 TX DMA 配置,内存到内存
* @param 无
* @retval 无
*/ void DMA_Mem2Mem_Config(void) {
DMA_InitTypeDef DMA_InitStructure; /*开启DMA时钟*/ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /*设置DMA源地址*/ DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff; /*设置DMA目的地址*/ DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ReceiveBuff; /*方向:从内存SendBuff到内存ReceiveBuff*/ DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; /*传输大小DMA_BufferSize=SENDBUFF_SIZE*/ DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE; /*ReceiveBuff地址自增*/ DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; /*SENDBUFF_SIZE地址自增*/ DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /*ReceiveBuff数据单位*/ DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; /*SENDBUFF_SIZE数据单位*/ DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; /*DMA模式:正常模式*/ DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ; /*优先级:中*/ DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; /*使能内存到内存的传输 */ DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; /*配置DMA1的4通道*/ DMA_Init(DMA1_Channel4, &DMA_InitStructure); /*失能DMA1的4通道,一旦使能就开始传输*/ DMA_Cmd (DMA1_Channel4,DISABLE);
}
② DMA中断配置
/**
* @brief DMA 中断配置
* @param 无
* @retval 无
*/ void DMA_NVIC_Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure; /* 配置中断源 */ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); /* 配置DMA发送完成后产生中断 */ DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
}
③启动传输
DMA_Cmd (DMA1_Channel4,ENABLE);
2、利用DMA实现循环传输
方法1:单次传输模式 当传输结束时,触发DMA中断,在中断程序中首先失能DMA通道,然后修改该通道的传输数据量。最后重新使能DMA通道,注意只有失能的DMA通道才能成功修改传输数据量。
方法2:循环传输模式 当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。
四、再谈STM32的DMA传输是否影响CPU的运行速度
声明:经过笔者测试,当DMA工作在内存到外设的传输和内存到内存的传输时,都不会影响CPU的运行速度。为了给这种现象一个合理的解释,笔者做以下猜测:
1、S3C2440的DMA传输
S3C2440的SDRAM是外置的,并且SDRAM的数据线、地址线、控制线总共只有一组。假设DMA传输的方向是内存到外设,当DMA运作时,需要占用SDRAM的三类线才才能实现传输;而与此同时CPU也需要通过这三类线来访问SDRAM来读取程序、读写数据。 显然,DMA的运行与CPU的运行有交叉点,DMA就会影响到CPU的运行。
2、STM32的DMA传输
STM32与S3C2440的区别是很大的,S3C2440是微处理器,RAM外置且空间很大;STM32是微控制器,RAM片内集成且空间较小。此时,ST公司就有可能提升DMA的运作效率,使DMA的工作不影响到CPU的运行。 外设与外设之间的DMA传输,因为与CPU的运行没有交叉点(CPU的数据流注意是在Flash、内存、寄存器中传输),所以不会影响CPU的运行速度。唯一有可能影响的是外设与内存或者内存与内存之间的DMA传输。 倘若ST公司的SRAM是一个双口RAM,也就是同时可以由两组接口对RAM进行访问,就可以很好的解决速度影响问题。倘若CPU恒定占有一组接口,而另一组接口留给DMA控制器。那么当外设与内存或者内存与内存之间的DMA传输时,由于不与CPU的访问SRAM接口冲突,所以可以解决速度影响问题。 但其实偶尔还是会影响的,当CPU访问SRAM的空间和DMA访问SRAM的空间相同时,SRAM势必会对这种情况进行仲裁,这可能会影响到CPU的访问SRAM的速度。其实,这种情况的概率也是很小的,所以即使影响CPU的运行速度,也不会很大。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
STM32
DMA
-
小编结合自己的感受用一句话形容一下:
"老师说第一遍不懂,第二遍还是不懂,第三遍还是不懂。"
网友们是这么看模电的:
天书般难懂。
模电=魔电
本科模电就够痛苦了,研究生的高阶模电简直是欲仙欲死。
二极管、三极管、MOS带入门;运放、震荡电路、斩波电路显神通。
课堂上老师讲的都会了 课后又都不会了。
模电学起来不算难,应付考试也简单,刚开始用起来觉得有点难,用的时间长了,感觉越来越难。
……
模电本身是一个非常复杂的学科,模拟电路(Analog Circuit)的含义是处理模拟信号的电子电路。自然界中绝大多数信号都是模拟信号,它们有连续的幅度值,比如说话时的声音信号。
模拟电路可以对这样的信号直接处理(当然需要先转换成电信号),比如功放能放大声音信号,广播电台能将模拟的声音信号、图像信号进行发送。
甚至可以认为,所有电路的基础都是模拟电路(即使是数字电路,其底层原理也是基于模拟电路的)。其重要性不言而喻。
由于数字电路、可编程器件的迅速发展,体现了很多优越特性。很多电子设备都慢慢数字化,但始终还是离不开模拟电路。目前模拟电路中最重要的器件,则非半导体器件莫属。最基本和常用的半导体器件有二极管、三极管、场效应管和运算放大器。
大家普遍会感觉模拟电子技术不是太好学,不如数字电子技术容易理解。为什么好多人会有这种感觉呢?
一些教材和资料讲解上也存在诸多问题,大家有没有这种感觉,看教材就等于看天书!下面总结了几点学习模电难的原因,大家看看自己有没有中招。
对抽象能力要求高
半导体技术与高中时学的基本电学知识有明显区别,基本电学知识有些电学的量是很明确的,有就是有,没有就是没有,但是半导体电子学有些电学量在不同电路中有时要考虑,有时又不需要考虑, 比如三极管的结电容,高频电路中不能轻易忽略,但是低频电路中就可以忽略 。
比如分析三极管放大电路中常用到的直流等效电路和交流等效电路,分析运放电路中用到的虚短和虚断的概念等等,都需要有比较强的抽象思维能力才能理解。
缺乏工程思维
模拟电子技术中经常会遇到哪个量远远大于另一个量,或者电流电压值近似相等这种描述,还有一些典型电路中电阻的取值也经常出现经验值的情况,对于刚开始学习模拟电子技术的小伙伴们可能感觉有点晕菜,不知道哪种情况可以近似,哪种情况不能近似,对于经验值则更是不知道怎么取值了。
比如要用12伏的稳压二极管对输出12伏的直流电压进行稳压,输入电压是15,18或24伏都可以,但哪个更合理呢?
由于半导体器件参数的分散,存在大的偏差,并且诸如电阻器和电容器的部件通常具有大于±5%的误差,并且一些甚至更大。因此,盲目追求严谨的计算意义不大。因此,应特别注意近似计算的训练和处理工程问题的方法。 要理论联系实际,加强电子技术实践能力和实验研究能力并培养工程思想 。
对于这种情况,其实大家可以通过仿真软件分析和实际焊接电路进行测试分析,来不断积累经验。 要把模拟电子电路学好,多想多动手是非常重要的 。
缺乏系统的学习
现在大家通过网络获取信息非常方便,网络上关于模拟电子技术的知识也很多,但是好多内容都是抄来抄去的,对于新人真正要问的一些问题却避而不谈,导致一些不易理解的内容讲解的却很少,甚至根本没有讲解。
这样接受零散的知识,不便系统学习,自然学着学着也不知道那些会了那些没学会。
其次,许多问题没有深入思考,有些问题估计有些工作多年的工程师都没细想过,只是大家都这么用,就照着做罢了, 而其实对这些基本问题的深入理解恰恰能反映出一名电子设计工程师的水平 ,当自己对一个知识点的掌握透彻时,自然对这门学科的理解也提高到一个新的层次。
知识系统庞大
下面用几个模电的重点知识给大家分析。大家可以看看自己掌握的怎么样,如果都十分清楚那么最少模电入门了,反之,就要加强基础知识的积累。
1、什么是共射、共集、共基?它们的区别是什么?
2、三极管的电流放大作用
有集电极c、基极b、发射极e、以及两个PN结:集电结和发射结。集电极面积比较大,基极厚度薄而且载流子浓度比较低。下图是个NPN型的三极管:
当发射结正偏时,电荷分布会发生变化,发射结宽度会变窄;相当于给电子打开了一扇e到b的大门集电结反偏时,电荷分布会也发生变化,集电结宽度会变宽。相当于打开了阻碍电子从c级跑出去的大门,如下方动画所示:
b级会接一个大电阻RB限制电流Ib的大小,跑到b极的那些多余的电子就只好穿越集电结,形成电流Ic,如下方动画所示:
如果基极电压翻倍,电荷分布会继续发生变化,发射结宽度会变得更窄,这扇大门变得更宽了,将会有更多的电子跑到b级。如下方动画所示:
由于RB是大电阻,Ib就算翻倍了也还是很小,所以更多的电子会穿越集电结,让Ic也翻倍。如下方动画所示:
3、运放
运放所传递和处理的信号,包括直流信号、交流信号,以及交、直流叠加在一起的合成信号。而且该信号是按“比例(有符号+或-,如:同相比例或反相比例)”进行的。不一定全是“放大”,某些场合也可能是衰减(如:比例系数或传递函数 K=Vo/Vi=-1/10)。
运放直流指标有输入失调电压、输入失调电压的温度漂移(简称输入失调电压温漂)、输入偏置电流、输入失调电流、输入失调电流温漂、差模开环直流电压增益、共模抑制比、电源电压抑制比、输出峰-峰值电压、最大共模输入电压、最大差模输入电压。
交流指标有开环带宽、单位增益带宽、转换速率SR、全功率带宽、建立时间、等效输入噪声电压、差模输入阻抗、共模输入阻抗、输出阻抗。
模电难,但是非常实用啊!可以这么说,除了硬件工程师外,不管你身处电子行业的什么岗位,学懂模电极可能成为你的核心竞争力,并为你的职业发展创造更多可能性。而现在觉得难只是没有掌握好的学习方法,其实自己脚踏实地的去学,一个一个知识点一个知识点去攻克,会发现这门课程也并没有那么难,下面给大家几个建议。
一、克服心理因素
心理上取得成功是第一步,如果不能克服心理因素,在学习的道路上你会很难坚持下去,遇到困难就容易退缩,这种问题不是我能解决的,还是放弃吧,但是如果你认为模电其实并没有那么难,毕竟身边工程师都能学会,那我觉得我也可以做到,这样在学习的过程中会更加行云流水,从心理学角度分析,其实就是首因效应的影响。所以要相信自己一定可以学懂,就像卡耐基所说:只要下定决心克服恐惧,便几乎能克服任何恐惧。因为,请记住,除了在脑海中,恐惧无处藏。
二、保持钻研精神
如果对模电知识确实看上去就是天书,那么可以重复学习,不懂多请教身边的朋友,老师。比如第一遍是看着教科书学,学的是最基础的知识,主要目的是掌握一些分析问题的方法以及几个重要的结论,知道是怎么得出来的,还有就是学会掌握几种经典的电路图。
第二遍学就是从实践中学习,这才算真正学习模电。通过实践,就会发现原来书本上的电路图纯粹是为了理论分析的,而实际要实现 他,还必须其他的电路辅助,由此才会学习到退偶,隔离,布线,信号走向等等一系列只可意会不可言传的知识。这是个漫长的过程,可能几年,甚至十几年,这就 是为什么我老师常说的:模电就像中医,数电就像西医。
三、学会利用身边各种资源。
在实际操作中,会遇到这样那样的问题,当遇到问题时候,首先要试图自己去解决,当自己的确经过思考之后还是不能解决的,就要利用身边资源去解决问题,老师,同学,论坛,这些都是要善于利用的资源。现在的各种制造商的网站都会提供样片和评估板,还有学习视频和应用手册,这些都要充分利用。特别是应用手册,是避免同学们少走弯路的神器!
四、先对一个领域入手,慢慢深入
久而久之就会发现有很多东西是相似的,可以触类旁通,这样再学另一个领域时就不会有种重头来过的感觉,会让同学感到轻松许多,以上都是我自己总结自身得到的一些感想,希望大家取其精华去其糟粕,一起开心学模电,成功做设计!
最后,模拟电路是一门非常复杂的学科,涉及的知识远不止上面所提的那些。通过课本的学习还远远不够,因为书上都是按照工作原理大致介绍,简化了很多难以理解但实际中必须考虑的问题,因此实际电路和书上的差距非常之大。比如模电书中用运放搭建的三角波发生器,用于实际电路十有八九不能工作。
不过实际电路的主要原理和书中描述是一致的。因此设计模拟电路往往需要大量的经验,有很多东西甚至难以解释无法计算得出。只有学习好理论基础的前提下,多动手实践,培养自己的工程思维才能把模电攻克。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
模拟电路
模电
-
不同供电系统之间、不同模块之间可能存在通讯或者电平转换,为了取消不同电源之间的转换差异,就要使用电平转换电路。今天和大家分享一个NMOS实现的电平转换电路,非常巧妙。如下图:
上图是用MOS管实现的I2C总线电平转换电路,实现3.3V电压域与5V电压域间的双向通讯。挂在总线上的有3.3V的器件,也有5V的器件。
原理分析
简化来看,留下I2C的一根线来分析就可以了,如下图。
分四种情况:
1、当SDA1输出高电平时:MOS管Q1的Vgs = 0,MOS管关闭,SDA2被电阻R3上拉到5V。
2、当SDA1输出低电平时:MOS管Q1的Vgs = 3.3V,大于导通电压,MOS管导通,SDA2通过MOS管被拉到低电平。
3、当SDA2输出高电平时:MOS管Q1的Vgs不变,MOS维持关闭状态,SDA1被电阻R2上拉到3.3V。
4、当SDA2输出低电平时:MOS管不导通,但是它有体二极管!MOS管里的体二极管把SDA1拉低到低电平,此时Vgs约等于3.3V,MOS管导通,进一步拉低了SDA1的电压。
注:低电平指等于或接近0V。高电平指等于或接近电源电压。所以3.3V电压域的器件,其高电平为等于或接近3.3V;5V电压域的器件,其高电平为等于或接近5V。具体要求看芯片的数据手册是怎么说明这个限定范围的,常见的比如说0.3倍的“芯片供电电压”以下为低电平,0.7倍的“芯片供电电压”以上为高电平。也就是说“芯片供电电压”为5V的时候,5 x 0.3 = 1.5V 以下为低电平,5 x 0.7 = 3.5V 以上为高电平。
注意事项
以上是3.3V与5V之间的情况,如果换用其他电压域之间的转换,如3.3V、2.5V、1.8V等电压值的两两之间,需要注意MOS管的Vgs开启导通电压。给MOS管过高的Vgs会导致MOS管烧坏!给过低的Vgs会导致MOS管打不开!不同型号的MOS管这个参数值还不一样!!!
Multisim仿真结果
此时,无论那边是高电平,对方也是输出高电平。
此时,5v端输入低电平,3.3v端也相应为低电平。
此时,3.3v端输入低电平,5v端也相应为低电平。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
NMOS
双向电平转换
-
1.首先,我们会对结构有要求的器件进行摆放,摆放的时候根据导入的结构,连接器得注意1脚的摆放位置。
2.布局时要注意结构中的限高要求。
3.如果要布局美观,一般按元件外框或者中线坐标来定位(居中对齐)。
4.整体布局要考虑散热。
5.布局的时候需要考虑好布线通道评估、考虑好等长需要的空间。
6.布局时需要考虑好电源流向,评估好电源通道。
7.高速、中速、低速电路要分开。
8.强电流、高电压、强辐射元器件远离弱电流、低电压、敏感元器件。
9.模拟、数字、电源、保护电路要分开。
10.接口保护器件应尽量靠近接口放置。
11.接口保护器件摆放顺序要求:
一般电源防雷保护器件的顺序是:压敏电阻、保险丝、抑制二极管、EMI滤波器、电感或者共模电感,对于原理图 缺失上面任意器件顺延布局。
一般对接口信号的保护器件的顺序是:ESD(TVS管)、隔离变压器、共模电感、电容、电阻,对于原理图缺失上面任意器件顺延布局,严格按照原理图的顺序(要有判断原理图是否正确的能力)进行“一字型”布局。
12.电平变换芯片(如RS232)靠近连接器(如串口)放置。
13.易受ESD干扰的器件,如NMOS及CMOS等器件,尽量远离易受ESD干扰的区域(如单板的边缘区域)。
14.时钟器件布局:
晶体、晶振和时钟分配器与相关的IC器件要尽量靠近;
时钟电路的滤波器(尽量采用“∏”型滤波)要靠近时钟 电路的电源输入管脚;
晶振和时钟分配器的输出是否串接一个22欧姆的电阻;
时钟分配器没用的输出管脚是否通过电阻接地;
晶体、晶振和时钟分配器的布局要注意远离大功率的元器件、散热器等发热的器件;
晶振距离板边和接口器件是否大于1inch。
15.开关电源是否远离AD\DA转换器、模拟器件、敏感器件、时钟器件。
16.开关电源布局要紧凑,输入\输出要分开,严格按照原理图的要求进行布局,不要将开关电源的电容随意放置。
17.电容和滤波器件 :
电容务必要靠近电源管脚放置,而且容值越小的电容要越靠近电源管脚;
EMI滤波器要靠近芯片电源的输入口;
原则上每个电源管脚一个0.1uf的小电容、一个集成电路一个或多个10uf大电容,可以根据具体情况进行增减。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
布局
PCB
原则
-
前言
使用过51单片机的朋友会清楚:51单片机在烧写程序的时候需要断一下电再上电;使用过STM32单片机的朋友会清楚:烧写程序时需要设置Boot模式。ESP8266在烧写程序时也需要手动设置模式,STM32的ISP自动下载电路都有了,那么ESP8266有没有自动下载电路呢?答案是有的。下面来分析。
自动下载电路设计
ESP8266下载过程中发现每次都需要去设置GPIO0的状态,如何实现自动给实现GPIO0电平状态的切换呢?看下面的电路。 可以看到这个下载电路相对于普通的CH340G下载电路,这个电路是把CH340G芯片中的DTR和RTS引脚引出到两个S8050的三极管上,去控制nRST和GPIO0的电平。
ESP8266下载模式
根据ESP8266芯片资料要求的下载流程,必须在GPIO0为低电平的状态下,复位芯片,才会进入USART下载模式。 我们看看该自动下载电路是怎么实现这个流程时序的,首先我们还是得从核心器件CH340G分析入手。
核心器件CH340系列
CH340G 是一个USB转串口的集成芯片,关键性能参数如下: 可以看到数据手册中的引脚描述:DTR#引脚是MODEM联络输出信号,数据终端就绪,低(高)有效,在USB配置完成之前作为配置输入引脚,可以外接4.7KΩ的下拉电阻在USB枚举期间产生默认的低电平。RTS#引脚MODEM联络输出信号,请求发送,低(高)有效。这两个MODEM联络信号是由计算机应用程序控制并定义其用途的,在软件下发点击下载按钮后,通常会给DTR#拉低、RTS拉高,然后延时一段时间后,拉高DTR#,RTS#恢复到低电平。 注意: 新设计的电路板可以选用CH340C,内置晶振,无需外接晶振。 从原理图中可以看到这个两个引脚连接的逻辑电路如下:
端口真值表
根据该电路,可以知道当 DTR为1, RTS为0时, nRST复位引脚拉低,反之,GPIO0 引脚拉低,得到的逻辑关系图如下:
这样的化,在点击下载按钮后,CH340G芯片的DTR处于低电平,RTS处于高电平,此时ESP8266的GPIO0被拉低,复位RST信号为高,ESP8266进入下载模式,CH340G的DTR和RTS电平翻转后,RST为0,GPIO0变1,ESP8266进入Flash运行模式,程序正常运行。这样就实现了ESP8266自动下载。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
Wi-Fi
51单片机
ESP8266
-
要想了解电子工程专业用得比较多的软件有哪些,首先我们得了解一下电子工程专业相关的一些技术与行业应用分类。电子工程又称“弱电技术”或“信息技术”,其大致分类及起源学科如图1。
电子工程的应用形式涵盖了电动设备以及运用了控制技术、测量技术、调整技术、计算机技术,直至信息技术的各种电动开关。电子工程的主要研究领域为电路与系统、通信、电磁场与微波技术以及数字信号处理等。 硬件与软件是不可分离的,硬件需要软件来执行其程序实现具体功能。软件需要硬件做载体,它们之间是一个相辅相承的关系。 精通电路知识模拟电路,数字电路,会分析电路图,设计电路图,制作PCB,了解各类电子元器件的原理,用途,型号,精通单片机开发技术,会使用编程语言(汇编语言、C语言),能很熟练的用电脑作为辅助设计工具进行工作,能得心应手的使用常用的设计软件。会分析电路故障,对产品进行调试、检测。 主要要了解电路方面的知识,知道常用电子元器件的作用,原理,会使用电子测量工具,会使用电子生产工具,还要会装配,测试,生产工艺,维修等等,是技术与手动操作的结合。
今天我们就来给大家介绍一下目前被电子工程师用得最多,也是功能比较强大的17款软件工具。
1
Altium designer是一款一体化的电子产品开发系统软件。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件使电路设计的质量和效率大大提高。
2
PADS的前身是 POWER PCB ,这个软件界面菜单很少,易上手。特别是消费类电子产品市场占有率非常高,早期都可以说在消费类产品里面差不多是垄断的地位,比如从早期的 VCD,DVD,MP3 ,MP4,U盘,液晶电视,到现在的平板电脑,行车记录仪,车载电子产品,导航仪,数字机顶盒,安卓智能电视盒、手机等都是绝对的市场占有率。在整个消费类电子产品里面,PADS几乎占了绝对的优势。目前在沿海发达城市里面,PADS还是占主流市场,特别是深圳大部分公司还是用PADS ,其次是allegro 。
3
Cadence Allegro是Cadence推出的先进PCB设计布线工具。Allegro提供了良好且交互的工作接口和强大完善的功能,和它前端产品Capture的结合,为当前高速、高密度、多层的复杂PCB设计布线提供了最完美解决方案。
4
可能有人说这就是一个普通的3D软件,怎么会用在电子工程领域呢?那我来解释一下,之前我在深圳是做治具的,也称夹具。这是一个偏硬件的行业。
简要介绍一下其整个制造流程,分析工程师把客户的文件资料(通常是PCB资料)用Tebo软件分析出来,然后给结构工程师设计治具结构,然后将需要加工的零部件用JD加工出来,然后进行装配。治具是用于PCB(印刷电路板)测试的工具。这是PCB制造的一个下游行业。但却在保证PCB出厂质量这方面起着不可或缺的而作用。
5
Matlab也是值得接触的软件。Matlab在分析数据、开发算法以及创建模型方面都非常好用。
6
LabVIEW是专为测试、测量和控制应用而设计的系统工程软件,可快速访问硬件和数据信息。
7
Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。
8
Visual c++是一款集成开发环境(IDE)。它具有开发和调试 C++代码的工具。
Multisim 工程师们可以使用Multisim交互式地搭建电路原理图,并对电路进行仿真。Multisim提炼了SPICE仿真的复杂内容,这样工程师无需懂得深入的SPICE技术就可以很快地进行捕获、仿真和分析新的设计,这也使其更适合电子学教育。通过Multisim和虚拟仪器技术,PCB设计工程师和电子学教育工作者可以完成从理论到原理图捕获与仿真再到原型设计和测试这样一个完整的综合设计流程。
10
TestStand也是美国国家仪器公司(NI)自主开发研究的一款软件平台。NI TestStand是一款可立即执行的测试管理软件,它可以帮助用户更快地开发自动测试和验证系统。NI TestStand可用于开发、执行和部署测试系统软件。此外,用户还可使用任何编程语言编写的测试代码模块开发测试序列。测试序列可以指定执行流、生成测试报告、进行数据库记录以及连接其他公司系统。最后,用户可借助易用的操作界面,在生产中部署测试系统。
11
Switch Executive是一款开关管理与路由应用软件,能够快速加速开发过程,简化对复杂开关系统的维护。Switch Executive提供交互式配置和自动路由功能,使开关路由系统的设计更加容易。
12
亿图电路图绘制软件是一款适合新手的入门级电路图设计软件,软件界面简单,包含丰富的图表符号,中文界面,以及各类图表模板。版本定期更新,不用担心无法绘制新型元件。适合专业的电子工程师用于电路图的设计。
13
Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件。设计套件结合了易用和强大的功能集,可实现专业PCB的快速设计,测试和布局。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
ElectronicWorkbench
LTspice 电路仿真软件
OrCAD
17
这是一款同时具有CAD和GERBER输入接口的ICT、ATE治具辅助制作软件。能够处理各种GERBER以及埋盲孔、正负片数据。同时具有多种CAD接口,处理数据省时省力,是制作高精密、复杂ICT、ATE测试治具的最佳选择之一。
玩转嵌入式
信息技术
电子工程
软件
-
在嵌入式开发中,我们会经常看到或接触一些专业术语,例如CPU、MPU、MCU和SOC等,并且这些专业术语出现的频率也是非常之高,在面试中也常常会作为提问的知识点,下面我们就来看一下他们之间的特点和区别。
CPU
CPU是Central Processing Unit的缩写,计算机的运算控制核心就是CPU。CPU是由运算器、控制器和寄存器及相应的总线构成。众所周知的三级流水线:取址、译码、执行的对象就是CPU,CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,然后执行指令。而计算机的可编程性其实就是指对CPU的编程。
MPU
MPU是Micro Processor Unit的缩写,指微处理器(这里要注意不是微控制器,很多人会把微处理器和微控制器混淆),微处理器通常代表功能强大的CPU(可理解为增强型的CPU),这种芯片往往是计算机和高端系统的核心CPU。例如嵌入式开发者最熟悉的ARM的Cortex-A芯片,他们都属于MPU。
MCU
MCU是Micro Control Unit的缩写,指微控制器。随着大规模集成电路的出现及发展,把计算机的CPU、RAM、ROM、定时器和输入输出I/O引脚集成在一个芯片上,比如51,STC、Cortex-M这些芯片,它们的内部除了CPU外还包含了RAM和ROM,可直接添加简单的器件(电阻,电容)等构成最小系统就可以运行代码了。而像ARM(Cortex-A系列)直接放代码是运行不了的,因为它本质上只是增强版的CPU,必须添加相应的RAM和ROM。
SOC
SOC是System on Chip的缩写,指的是片上系统。可以这样对比来看:MCU只是芯片级的芯片,而SOC是系统级的芯片,它集成了MCU和MPU的优点,即拥有内置RAM和ROM的同时又像MPU那样强大,它可以存放并运行系统级别的代码,也就是说可以运行操作系统(以Linux OS为主)
另外,SOPC也是一个值得了解的概念,与上述几项概念相比,SOPC的出现频率并不是那么高,但这并不影响它的重要性。SOPC是System On a Programmable Chip的缩写,即 可编程片上系统,SOPC与MCU、MPU、SOC最明显的区别在于:可更改硬件配置,也就是说自己构造芯片。 举个例子说明便于理解,单片机的硬件配置是固化好了的, 我们能够编程修改的就是软件配置,本来是串口通信功能,通过修改代码变成AD采样功能,也就是说硬件配置是固定了的,我们只能通过修改软件来选择其中的一项或多项功能;而SOPC可以修改硬件配置信息使其成为相应的芯片,可以是MCU,也可以是SOC。
结语
在嵌入式开发中,接触频率较多的一般是MCU和SOC,而现在STM32也几乎成为了MCU的代名词,SOC目前则以Cortex-A系列为主,开发难度也有所差异,对于嵌入式从业者来说,弄清楚这些专业概念是必备的。 来源:头条号-嵌入式在左C语言在右
链接:http://www.toutiao.com/i6841833288915485192/
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
CPU
嵌入式
SoC
MCU
MPU
-
早在2008年左右,我就在产品中使用Modbus协议与其它设备进行通信。记得第一款是智能马达保护器,其作为Modbus从,与Modbus主设备进行通信。这么多年来,一直都没有使用开源的Modbus协议代码,而在在不断在自己编写的Modbus协议代码上进行优化,发现问题并解决。 自己写的代码用起来比较得心应用可以针对不同的平台进行优化,将处理器的性能发挥到极致。在此期间,也踩过一些坑,现在做一些总结: 串口数据接收完之后,到通过IO口重新使用接收的时间间隔。
发送完成之后切换接收的延时时间 如上图所示的Td,按照Modbus协议的规定,接收完数据之后,必须要间隔3.5个字符对应的时间才能发送。 如果是9600bps的波特率,8位数据位,1位起始位,1位停止位,无奇偶校验位,则1个字符为10个 bit,对应1.04ms,3.5个字符对应3.5ms。 考虑到总线上的电容对传输延时的影响,建议在发送完数据1.7个字符的时间之后再使能接收。对于这个时间,可能会犯一些错误,比如:
在发送完最后一个字节的发送完成中断中,直接将控制IO口使能485芯片的接收。殊不知,由于电容导致的信号延时,串口数据还没有完全发送到总线,485芯片就被置为接收状态,导致最后几个bit的数据误码;
没有正确理解发送完成中断以及发送缓存器空中断之间的差别;
发送完成中断一般是指串口数据已经从移位寄存器从端口送出。但是并不说明已经被送到RS485总线。从MCU的IO口到RS485总线还需要考虑隔离光耦、电容、RS485芯片的延时;
发送缓存器空中断是指腾出了缓存的位置,可以缓存数据。此时,上一个数据可能还在移位寄存器中被紧张有序地按位移出到IO口,此时把RS485芯片置为接收。还正在移位的数据就嗝屁了。
因此
一定要搞清楚选用的中断是发送完成中断还是缓存器空的中断;
在发送中断中,不能立即切为接收,应当延时一段时间,我现在的做法是不管三七二十一,在发送中断中,如果判断为最后一个byte,则延时1.7ms将RS485设置为接收;
不应该启动定时器进行延时,定时器资源很宝贵,应该在100us左右的定时器中断中,通过变量计数来进行1.7ms左右的延时;
MODBUS从设备多少时间会应答
Modbus是问答式的通信,主设备发送完数据之后,从设备会做出响应。按照Modbus协议规定,从设备3.5个字符时间之后做出响应都是合法的。不同的传感器应答响应时间各不相同。 有些差的传感器可能到几十ms才响应,有些3.5ms左右就立即响应了。 有些甚至没有按照Modbus的协议出牌,还没有到3.5ms左右的时间就响应了。 这就要求主设备在将RS485接收使能之后,立即进行接收状态。 如果是用串口中断进行接收,则应该注意在主程序中是否有关中断的操作,关中断的操作是否影响接收。 每一个串口数据之间的时间间隔
Modbus根据数据之间的时间间隔来判断一桢消息的结束,需要保证一桢消息内的前后数据之间的间隔不超过3.5个字符。 而数据一般在发送中断中发送,有些人为了保证数据完整性,保证数据访问的互斥,很喜欢关中断来保护现场。这种做法一不小心就会使发送两个数据的间隔超过3.5个字符。 特别是当波特率比较高时,更容易出现这种情况。比如,当波特率为38400时,3.5 个字符仅为850us左右,在发送串口数据的时间内,中断关闭850us,Modbus通信就嗝屁了。 如果MCU支持DMA,建议使用DMA+定时器进行数据收发。 作为Modbus从设备时,收到数据之后,多少时间应答
按照Modbus协议要求,3.5个字符之后就可以应答。有些Modbus主设备可以是为了保证实时性,对这个应答时间要求比较苛刻。比如我们前一段时间跟西门子的工控屏对接时,就碰到过这样的问题,总线的波特率为19200bps,我们的设备在收到西门子的命令之后大概在5ms左右做出了应答。但是西门子工控屏却判为错误。之后,我们将应答时间缩短到2ms左右,与西门子的通信才变得正常。 建议在3.5个字符之后,立即应答。 来源:头条号-IT自动化交流
原文链接:http://www.toutiao.com/i6894161680406675981/
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
通信
串口数据
代码
MODBUS
-
Layout是一件过程时而愉快时而痛苦,而结果却绝对享受的事情。对于一个用心Layout的人,到最后总是可以从结果中获得无比的满足与成就感!
记得自己之前有一段时间习惯于直接在99se里先布好局,然后就直接A+A+R。然后随便修改一下就发出去做了。当时觉得Layout只是一个不可忽略的乏味过程罢了。
后来到另一家公司后,做的项目全是复杂的通讯及服务器类产品,动不动上两三个fpga,带几个dsp,各种cpu小系统、ddr、AD/DA之类的。自动布线是不可能的,这辈子都不可能。还好软件不是99se了(99se也承载不起这么复杂的板子)
当第一次手动布线完成一个超过8000个管脚的通讯板时,心中顿时小自豪一把。翻来覆去看自己布的每一层信号,虽然有点丑,但每一跟信号线,每一个扇出,每个等长都是自己调整的。看着这份Layout,就像自己的孩子。后来就有了第二个孩子,第三个孩子……到现在都数不清自己有多少孩子了 似乎是这一份份成就和责任,慢慢开始享受Layout的过程了。其实对于Layout的人来说,整个过程不也是在创作吗。就像画家在画布上作画一样。可能别人看起来枯燥无味的工作,对于我们来说,只要用心,每一次都会是充满新鲜而富有挑战的。关于EMC的考虑、整机的结构干涉、通道的预留、信号线排布的合理性、整体外观的完美性.....这就是我自己的艺术..... 最后,分享一位外国攻城狮从Layout到PCB板的短视频。虽然是so easy的板子,但看到机械铣槽与钻孔时,一件艺术品就这样产生了。最后的PCB拿到手,沉甸甸的成就。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
电路板
PCB
布线
Layout
硬件
-
在嵌入式系统中经常会应用到很多通讯接口/协议,如: RS232、 RS485、 轻量级TCP/IP协议、 LoRa和 Zigbee等多种接口/协议,本篇文章和大家分享一下嵌入式开发中最为常用的RS232和RS485的区别。
RS232和RS485介绍
RS232是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。该标准规定对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。RS232是一种异步传输标准接口,通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现 。 RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得廉价本地网络以及多支路通信链路的配置成为可能。RS485有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用,现在多采用的是两线制接线方式,这种接线方式为总线式拓扑结构,在同一总线上最多可以挂接32个节点。
RS232和RS485区别,主要体现在五点上
连接方式
电平信号
传输距离
传输数据的最大波特率
组网(多机通信)
具体内容如下: 连接方式:RS232最常用的连接方式是三根线:一条发送线、一条接收线及一条地线;RS485一般采用两线制传输:A、B两条传输线。
电平信号:RS232 逻辑1为-3V~-15V,逻辑0为+3~+15V;RS485 -2V~-6V表示逻辑0,+2V~+6V表示逻辑1,电压为A-B的电压。
传输距离:RS232传输距离有限,理论传输距离标准值为15米,实际工程中最大传输距离也不超过30米;RS485传输距离较RS232传输距离远,理论传输距离标准值为1200米,实际工程中可达到2500米。
传输数据的最大波特率:RS232 传输速率较低,最高波特率为19200bps;虽然传输速度较慢,但在工程中很多场合还是比较实用;RS485 传输速率比较高,可达10Mbps;传输速度也快了很多,多被运用到工程的控制信号传输 。
组网(多机通信):RS232不能实现多机通信,原因是RS232为全双工的通信方式,一般的连接方式都为TTL电平,线路空闲时发送和接收的TTL电平都是高电平,电平转换芯片之后得到的RS232电平总是低。现在假设A为主机,B和C为从机,那么A想给B发送信号的时候没有问题,因为A的TXD线连接在B和C的RXD线上面,此时B和C的RXD线都是正常的处于等待接收(空闲)的状态,但是如果B如果收到信号想给A回复的时候,B的TXD与C的TXD线都同A的RXD线连接在一起的,B此时处于发送数据的状态(B即想控制自己的TXD线高低电平之间变化),然而C此时处于空闲状态(C想保证自己的TXD线为低电平不变),这个时候B和C的TXD线之间就出现了通信冲突。所以RS232可以实现点对点的通信方式,但这种方式不能实现组网的功能; RS485可以实现多机通信,原因是RS485为半双工通信方式,即分时实现收和发。总线空闲的状态下需要保证状态为逻辑1,也就是A-B的电压符合逻辑1的电平值。假设此时1为主机,2和3为从机,数据线的连接方式为1,2,3的A连接在一起,1,2,3的B也连接在一起,不存在RS232连接方式的问题。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!
玩转嵌入式
嵌入式
接口协议
RS232
RS485