单片机

平时我们看到的单片机最小系统中一般都是有时钟电路,见得太多以至于习以为常,突然之间问起来为什么要有晶振呢?一般我们就答晶振就像人的心跳,哈哈,但是到底他是怎么工作的呢,本期我们一探究竟。

1

1

一、晶振旁边的电容是什么用?可不可以不要?

如上图是51单片机晶振的典型应用电路,一般晶振旁边会带两个30pf或者20pf的电容,这个电容叫做负载电容,这个电容不加也是可以使用的。如果电路不加负载电容,则电路会工作在晶体谐振频率上。这里我们假设晶体的谐振频率为Fr,而加了电容的谐振频率为有载谐振频率我们设为FL,则晶体谐振频率Fr与晶体有载谐振频率FL的关系是:FL=Fr + Ts*CL,其中Ts为晶体的牵引量,单位为ppm/pF。CL为晶体的负载电容,即晶体旁边加的那个电容,单位为pF。所以说不加电容也是可以的,只是电路会工作在晶体谐振频率上即FL=Fr;

当晶体发生谐振后,会呈现为纯电阻,即谐振阻抗。在有载谐振中,谐振电阻一般会与负载电容呈反比例关系。也就是说负载电容越小,电路的谐振阻抗越高,就越不容易起振,输出波形幅度就越小。但是电路直接工作在晶体谐振频率的状态是非常理想化的,我们一般的电路都或多或少的有一些杂散电容,当电路振荡时,这些杂散电容便被视为晶体的负载电容进行工作。由于这些杂散电容一般都很小,且不稳定,这就造成晶体振荡频率不稳定,且谐振阻抗增高,不同的人设计的地电路走线不一样,杂散电容也不同。

  既然有杂散电容存在,那么上面的公式实际应该是:FL = Fr + Ts*(Cy+CL),其中Cy为杂散电容,那么根据不同的电容可以调整CL值,直到电路工作在你所要的频率上,比如51单片机的12MHz。一般时候这个负载电容CL值不要太小,上面说过电容太小,谐振阻抗会变高,不利于起振且输出幅度小。所以这个电容值一般选取在10至30pF之间,22或30pf也是一种经验数值,此时由于负载电容CL值远远大于杂散电容Cy值,因此对杂散电容的不稳定性可以忽略不计,那么加了负载电容的电路就会更稳定,频率更准确。

二、晶振的作用

通过上面的介绍我们了解了晶振的典型电路,而平时我们也有看到晶振和电容封装在一起的,也有的单片机不需要接外部晶振而是直接使用内部晶振,总之,无论我们看见看不见,单片机工作是需要晶振的,这是单片机能正常工作的必要条件之一。

1

晶振,一般我们指的是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波,它是一种无源晶振。而单片机在运行的时候,需要一个脉冲信号,作为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令,这也就是所谓的心跳。无论是简单的51单片机,还是手机里的ARM处理器都是需要晶振的,只是晶振的种类和频率不同。我们本期侧重点是51单片机晶振,别的都类似。 

 

1

单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周期包括12个时钟周期。如果一个单片机外接了一个12MHz的晶振,那么它的时钟周期就是1/12us,它的一个机器周期是12×(1/12)us,也就是1us。

在51单片机的所有指令中,有一些完成比较快的指令,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才可以运行完毕。为了衡量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的时间。

例如,当需要计算DJNZ指令完成所需要的时间时,首先必须要知道晶振的频率,假如我们使用12兆赫兹晶振,那么一个机器周期就是1us,而DJNZ指令是双周期指令,所以执行一次就要2us。如果该指令需要执行500次,那就是1000us,也就是1ms。

机器周期不仅对于指令执行有着重要的意义,而且它也是单片机定时器和计数器的时间基准。比如我们常见的51单片机,通常晶振选择12兆赫兹,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。

说白了,晶振就是给单片机提供工作信号脉冲,这个脉冲就是单片机的工作速度,比如12兆晶振,单片机工作速度就是每秒12兆。

来源: 单片机仿真

围观 416

单片机调试出现一些不常见问题及原因

demi的头像

4位共阳数码管的有一个位的其中一段不亮,而其他位的该段能正常显示。这有些不符合常理,因为共阳数码管的4个为的段是连在一起的,如果是程序问题或者硬件连接有问题,应该4位全不亮。原因:经排查,原因是发现电

单片机应用中,常常会遇到这种情况,在用单片机制作电子钟或要求根据时钟启控的控制系统时,会突然发现当初校准了的电子时钟的时间竟然变快或是变慢了。 

于是,尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意,只好每过一段时间手动调整一次。那么,是否可使时钟走时更精确些呢?现探讨如下:

误差原因分析

1.单片机电子时钟的计时脉冲基准,是由外部晶振的频率经过12分频后提供的,采用内部的定时,计数器来实现计时功能。所以,外接晶振频率的精确度直接影响电子钟计时的准确性。

2.单片机电子时钟利用内部定时,计数器溢出产生中断(12MHz晶振一般为50ms)再乘以相应的倍率,来实现秒、分、时的转换。大家都知道,从定时,计数器产生中断请求到响应中断,需要3_8个机器周期。定时中断子程序中的数据人栈和重装定时,计数器的初值还需要占用数个机器周期。此外。从中断人口转到中断子程序也要占用一定的机器周期。例如:

从上述程序可以看出,从中断人口到定时/计数器初值的低8位装入需要占用2+2+2=6个机器周期。所以,在编程时一般会把这6个机器周期加入定时/计数器的初值中。但是,从定时,计数器溢出中断请求到执行中断需要几个机器周期(3~8个机器周期)。就很难确定准确值,正是这一原因导致了电子时钟计时的不准。

解决方法

1. 采用高精度晶振方案

虽然采用高精度的晶振可以稍微提高电子钟计时的精确度,但是晶振并不是导致电子钟计时不准的主要因素,而且高精度的晶振价格较高,所以不必采用此方案。
  
2. 动态同步修正方案

从程序人手,采用动态同步修正方法给定时,计数器赋初值。动态同步修正方法如下:由于定时,计数器溢出后,又会从O开始自动加数,故在给定时/计数器再次赋值前,先将定时,计数器低位(TLO)中的值和初始值相加,然后送人定时,计数器中,此时定时,计数器中的值即为动态同步修正后的准确值。具体程序如下:

采用此种方法后,相信制作的电子时钟的精度已有提高了。

3.自动调整方案

采用同步修正方案后,电子时钟的精度虽然提高了很多,但是由于晶振频率的偏差和一些其他未知因素的影响(同一块电路板、同样的程序换了一片单片机后,走时误差不一样,不知是何原因),时间长了仍然会有积累误差。为此,可采用自动调整方案。实际上是一种容错技术。其自动调整原理为:实测出误差Is所需的时间,然后每隔这样一段时间后就对秒进行加“1”或减“1”调整。例如:电子钟每过50小时就慢1秒,其自动调整程序如下:

以下是一个完整实例:


结语

使用此方法调整较费时间,但效果非常好。经实验,一次调整可/以将月误差控制在Is左右,如按此方法再次测出误差Is所需的天数并进行二次调整,其精度会更高。

来源:21ic电子网

围观 92

首先,单片机不是万能的,但没有单片机那是万万不能的。从N年前的单片机,到现在的单片机,单片机只是单片机,其性质并没有太多的改变。只是从原来的“神秘”、“暴利”、“有趣”等等,回归了她原来的真是面目罢了--那只是在说明社会在进步,更加的合理和趋于理性。只是现在的这样回归,有点走了极端,从一个极端走了另一个极端罢了。但相反,社会在这方面的需求却是越来越大,至少在我们的有生之年,这样的“自动化”过程一直会贯穿下去。所以你有什么好担心的,怕自己没有用武之地吗?!怕自己的资薪没有或不高吗?

我自己在单片机和自己熟悉的行业上做了快10年了,不说自己的水平怎么样。说牛不牛,说不牛也牛--该骄傲的时候还是要骄傲的,那是对自己的肯定,该谦虚的时候也要谦虚学习,毕竟单片机总是一个系统工程,方方面面的东西不是自己都要熟悉和精确把握的。要想自己混的不错,我还是那句话---和自己所处的行业结合,那才是王道。

有些人在抱怨单片机在社会上的方方面面,那只是一个现象或表象罢了,或者说那只是纯电子开发或纯电子开发的配套产品,在面临更加激烈的竞争情况罢了。别说自己只会编编程,做点纯电子的工作就觉得不得了了,那就错了,单片机系统工程没有那么狭隘。如果你走不出这种狭隘,那你注定就是在抱怨的那部分人。就像我前面说的,单片机只是在回归她的本来面目而已。还有就是中国就是太缺少“到了50、60岁的样子”,都还在从事单片机工作的人。也许那也是新兴的中国需要经历的一个过程吧?!

没有什么职业是最好的,只有在当前或相当一段时间内适合自己的职业。就说单片机,对我来说,单片机的工作成果那只是一个配件(当然纯电子产品除外),正因为是“配件”,所以你需要提供相应的物理尺寸,单片机系统的散热,安装条件和安装方式等等情况,需要与你的上下游提供的环境配合好,而不是说我的单片机功能完成了就没我的事了,万事大吉了。就仅对单片机需要实现的功能来说,如果你连功能都实现不了,那我还要你做什么--那只是基础工作。其实,往往上下游提供的环境对你的设计就是一种考验,也有你需要变换N种方案才能比较好的实现的可能。很明显,这样的上下游环境,对你就是一种很好的资源,不过有些人可能就会视而不见,让你更加熟悉自己开发的东西,在这个行业中的使用和价值情况,对自己的今后发展都是一个很好的参考。不像C、C++的人员到了没有发挥平台的时候,就很郁闷了。相反,对单片机来说,我们可以为自己建立那样的可以供自己发挥和发展的平台。

说了那么多,我只是在闲聊,聊聊自己的看法,希望对你有点帮助。

就我的理解出发,单片机是相当“底层”和“硬件”的东西,没有太多高深的数据结构,也没有太多需要技巧的编程算法,只要我们从单片机执行的角度去理解和编程就行了。一个单片机就可以构成一个电子系统,也可以只构成一个智能节点。没有太多高深的东西需要去研究,因为我们只是单片机的应用者而已,别把自己提到“研究”的高度,我们只在“应用”的高度。正因为是在“应用”的高度,所以在熟悉和能精确把握“单片机的使用”的时候,应该把更多的精力放在“单片机的应用”的“使用环境”上。曾经有个牛人,拿着intel的8031的芯片技术手册和内部手册,在一个单片机上实现了你想都没想过能实现的应用,但我认为那个是没有必要的,除非你想搞51芯片开发。说了那么多,如果你还在为单片机而单片机的话,那我觉得你有点可悲了。

多熟悉单片机的上下游环境和条件,那不是很困难的事。我希望自己理解的这些东西,对后来者有点帮助,对新手能够带来点思考的东西,那就够了。

规划高度一:

当有一定的年龄和人力资源后,就可以自己出来做了,当个所谓的半个老板了。但当自己做老板说容易也容易,说不容易也不容易。当初我就是在这样的忐忑中,冲了进去。项目接的很多,周期对自己规定的也很短,往往都是白天在处理前一个或前面项目的维护工作,晚上回来工作到一、二点开发新项目。累就不用说了,有时想想那是在拿自己的命来搏钱啊!!!老婆不太同意我出来自己干,做的好好的也不错。于是,我就对老婆说,可能我不能每个月准时的拿钱养家糊口,但我保证一年下来的平均每个月养家糊口的钱一定不会低于现在。就这样,我开始了走自己的路了。吃苦受累我不怕,付出了没有收获我不怕。怕的就是过不了自己的心理关,也许一直以来都比较好运气和顺利的缘故吧?!作为和我同行的兄弟姐妹们,一定要过了自己的心理关,别太在意今时今日的得失,还有所谓的某些情况下的“面子”。至少我们应该用“最小的代价”来给自己当“学费”。也不怕你们笑话,我的“学费”交的也不少。一个成功的项目,不是你的功能有多好,有多强,而是你的开发成功为你的项目方带来了多少的利润收入,那才是真正的成功了,尽管你只赚了点儿开发费。做项目,别为自己考虑太多,多换位思考一下。人家能信任你,把项目交给你做,你就多该从项目方的角度考虑考虑---也许有时他们的要求有点过分,但所谓不知者不去怪罪了。

规划高度二:

做一个称职的软硬电子工程师吧。不用学太多,就学一些就行了,也不要去跟风,那个没有必要。有时,你就是去学了,如果没有相应对应的开发任务,学的也是皮毛,不过只要皮毛也可以了,当你真正需要的时候,再拿起来就会快很多,也算是一种储备吧。但你至少要会一种,一种相对来说狭隘的系统吧?!不怕你笑话,我就只会51单片机。先说说我自己了,从事工业自动化方面的机床设备行业:

精通51,了解其他的单片机,精通51汇编,精通CPLD,半精通C51(只用来做点人机界面工作),粗通FPGA(想精通自己做51IP核)。

粗通ARMDSP,粗通ARM和DSP的汇编,了解C编程。

精通三维造型软件SOLIDWORKS(可以为自己的线路板造型和机械设备造型)

粗通机加工大部分的工艺。

精通钣金和焊接。

熟悉数控设备、机床的实现解决方案。

对于每个人来说,学以致用,以前的我什么都想学,什么都用不好,当学的时候,却没有用的发挥平台,都是为学而学。但至少当你要用的时候,重新捡起来的时候,就会很快。就拿ARM来说吧,学的时候学的很努力,从其机理到实现,也做过好多的实验,可现在就是用的少就剩下了点概念的东西了。所以没必要什么都要精通,只要一样,比如51单片机吧,从设计、投板、采购、焊接、一直到调试成成品等等一个系统下来,如果你思考了,如果你精通了,你还怕什么,不给高工资也要给你高年薪了,应该都能了解“老板一将难求”的道理了。

规划高度三:

做一个合格的新手电子工程师吧。对于新手,我的建议是:别上来就是一个什么五年十年规划之类的,我们都是普通人,那种规划不适合普通人。如果我们能将今后一年和二年的规划做好了,那你就已经很了不起了。每天都是一个想法,每月都是一个变化,更别说每年了,只要你在努力,脚踏实地的做事。不要把自己搞的太忙碌了,给自己每天留半个小时想想“心事”了。做好一样,再发散开去,对于电子类的,什么ARM,DSP,51都是相通的。精通了一个体系,那么其他电子类的体系都是相通。怕就怕你什么都不通,都是半通。还半桶水的晃来晃去的,那就有点郁闷和悲哀了!!

来源:电子工程专辑

围观 19

随着大规模集成电路技术的发展,单片微型计算机也随之大发展,各种新颖的单片机层出不穷。单片机具有体积小、重量轻、应用灵活且价格低廉等特点,广泛地应用于人类生活的各个领域,成为当今科学技术现代化不可缺少的重要工具。

单片机系统的开发融合了硬件和软件的相关技术。要完成单片机系统的开发,用户不仅需要掌握编程技术,还需要针对实际应用选择合理的单片机芯片和外围器件,以此为基础,设计硬件电路。

以EN8F154单片机为例,了解单片机开发的规则与注意事项。

设计满足要求的最精简的系统

正确估计单片机的能力,知道单片机能做什么,最大程度的挖掘单片机的潜力对一个单片机系统设计者来说是至关重要的。单片机的能力的关键就在软件设计者编写的软件上。只有充分地了解到单片机的能力,才不会做出“冗余”的系统设计。而采用许多的外围芯片来实现单片机能实现的功能。这样做,即增加了系统成本,也可能会降低了系统的可靠性。

使用看门狗

看门狗电路通常是一块在有规律的时间间隔中进行更新的硬件。更新一般由单片机来完成,如果在一定间隔内没能更新看门狗,那看门狗将产生复位信号,重新复位单片机。更新看门狗的具体形式多是给看门狗芯片相关引脚提供一个电平上升沿或读写它的某个寄存器。使用看门狗电路将在单片机发生故障进行死机状态时,重新复位单片机,像EN8F154本身就带有看门狗。

确定系统的复位信号可靠

一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。

确定系统的初始化有效

系统中的芯片以及器件从上电开始到正常工作的状态往往有一段时间,程序开始时延时一段时间,是让系统中所有器件到达正常工作状态。究竟延时多少才算合适?这取决于系统的各芯片中到达正常工作状态的时间,通常以最慢的为准。一般来说,EN8F154的延时20-100毫秒已经足够。对于系统中使用嵌入式MODEM等“慢热”型的器件来说,则应更长。当然,这都需要在系统实际运行中进行调整。

当然,仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真机,也能进行一些硬件排错。一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。仿真有CPU仿真和ROM仿真两种,所谓CPU仿真是指用仿真机代替目标机的CPU,由仿真机向目标机的应用电路部份供给各种信号、数据,进行调试的办法。

来源:电子发烧友网

围观 52

一、总线概述
计算机系统是以微处理器为核心的,各器件要与微处理器相连,且必须协调工作,所以在微处理机中引入了总线的概念,各器件共同享用总线,任何时候只能有一个器件发送数据(可以有多个器件同时接收数据)。

计算机的总线分为控制总线、地址总线和数据总线等三种。而数据总线用于传送数据,控制总线用于传送控制信号, 地址总线则用于选择存储单元或外设。

二、单片机的三总线结构
51系列单片机具有完善的总线接口时序,可以扩展控制对象,其直接寻址能力达到64k( 2的16次方) 。在总线模式下,不同的对象共享总线,独立编址、分时复用总线,CPU 通过地址选择访问的对象,完成与各对象之间的信息传递。


单片机三总线扩展示意如图1 所示。

1、数据总线

51 单片机的数据总线为P0 口,P0 口为双向数据通道,CPU 从P0 口送出和读回数据。

2、地址总线

51 系列单片机的地址总线为16 位。

为了节约芯片引脚,采用P0 口复用方式,除了作为数据总线外,在ALE 信号时序匹配下,通过外置的数据锁存器,在总线访问前半周期从P0口送出低8位地址,后半周期从P0 口送出8 位数据。

高8位地址则通过P2 口送出。

3、控制总线

51 系列单片机的控制总线包括读控制信号P3.7 和写控制信号P3.6 等,二者分别作为总线模式下数据读和数据写的使能信号。

三、单片机总线时序分析
51 单片机总线时序如图2 所示。

从图2 中可以看出,完成一次总线( 读写) 操作周期为T,P0 口分时复用,在T0 期间,P0 口送出低8 位地址,在ALE 的下降沿完成数据锁存,送出低8位地址信号。在T1 期间,P0 口作为数据总线使用,送出或读入数据,数据的读写操作在读、写控制信号的低电平期间完成。

需要注意的是,在控制信号( 读、写信号) 有效期间,P2 口送出高8位地址,配合数据锁存器输出的低8 位地址,实现16 位地址总线,即64kB 范围的内的寻址。

由于CPU不可能同时执行读和写操作,所以读、写信号不可能同时有效。

四、常见单片机编址电路

1、简单地址扩展

51 单片机的P2 口可以直接作为高8位地址总线使用,在一些简单系统电路中,常使用P2口直接编址驱动。

下面以使用数据缓冲器74LS273 驱动数码显示为例,分析P2 口编址驱动的静态数码显示电路的设计。

一位LED 数码显示单元电路如图3 所示。

WR 与A8( P2.0) 相或提供74LS273的时钟信号,当执行“MOVX @DPTR,A”指令时,地址信息由DPTR 寄存器确定,会出现有效的写信号WR,只有当地址A8 为满足“0”时,写信号才可以作为74LS273 的时钟信号输入,完成数据锁存。

P2 口为A8~A15 的8 位地址线,很容易扩展到8 只LED 数码管,WR 信号分别与A8~A15 按或关系连接,每位地址线均为低电平有效,即可实现8 个有效地址。

该方案电路简单,但有效地址数太少,不适用于复杂系统设计。

2、低8 位地址锁存

通常的设计电路是使用8D 锁存器74LS373 实现地址锁存,74HC573 与之逻辑功能相同,只是引脚布局不一样,使用74HC573 布线更容易。

74LS373 真值表如图4所示。

在输出允许OE 为L、控制使能LE 为H 时,输出为跟随状态;OE 为L、LE 为L 时,输出为保持状态。

地址锁存电路如图5 所示。OE 接地,LE 接单片机的ALE脚将产生满足时序的低8 位地址信号。

执行以下三条指令会得到如图6所示的时序图。

MOV DPTR,# 0FF55H; 低8 位地址为55H

MOV A,# 0AAH; 待发送数据0AAH→A( 55H 取反)

MOVX,@DPTR,A; A 中的0AAH送地址为0FF55H 的对象中会。

从图6 中可以看出,P0 口先送55H,在ALE 下降沿实现地址锁存,随后送出数据0AAH,在WR 有效( 低电平) 期间锁存器输出低8 位地址55H,P0 口送出数据0AAH。

3、带译码器的复杂地址接口电路

理论上高8 位地址线可以产生256 个有效地址,如何实现地址“扩展”呢? 地址扩展准确描述是地址译码,例如3 根地址线可以译码成8 个地址,4根译码成16 个有效地址。这里选择3-8 译码器实现地址译码,电路图以及对应的编址如表1 所示。

五、单片机总线编址电路实例
总线扩展接口的单片机系统,包括外部32k RAM 扩展、LCD1602 接口、输入输出口。

D0~D7 接数据总线P0 口,地址线A0~A14接单片机地址总线低15 位,单片机地址线A15 接RAM 片选信号,低电平有效,这样RAM 地址分配从0000H 到7FFFH,与74138 译码地址不冲突。

LCD1602 接口电路如图9 所示。

RS、RW 分别接A12、A13,使能信号编址为Y7,这样LCD 的四个驱动地址( 数据读写和命令读写) 为0CFFFH 到0FFFFH ( 无关位为1) 或者8700H 到0B700H( 无关位为0)。

有些时候单片机引脚不够用,还要进行扩展,输入口扩展电路如图10 所示。

利用74HC573( 74LS373) 的高阻态功能,将其输出Q0~Q7 接P0 口,在满足总线地址读操作中,可以把输入InPORT的数据读入单片机的累加器,地址为0F8FFH 或8000H。

输出口扩展电路如图11 所示。

利用74LS273 数据锁存功能,在满足总线地址写操作中,可以把单片机累加器里的数据写入273 锁存输出,地址为0F8FFH 或8000H。由于所用控制总线不同,可以和输入共用地址。

六、结束语
总线扩展是设计单片机控制电路必须掌握的技术,大量的特殊功能IC都支持总线接口, 如ADC0809,TLC7528,DDS 器件AD9851 等。

总线接口的要点就是在严格的控制时序下,总线被分时复用,以实现复杂系统设计。

来源:玩转单片机

围观 270

实际上,只要你了解了三极管的特性对你使用单片机就顺手很多了。大家其实也都知道三极管具有放大作用,但如何去真正理解它却是你以后会不会使用大部分电子电路和IC的关键。

我们一般所说的普通三极管是具有电流放大作用的器件。其它的三极管也都是在这个原理基础上功能延伸。三极管的符号如下图左边,我们就以NPN型三极管为例来说说它的工作原理。由于三极管是由二极管演化而来的,所以大家记住PN结永远都是P指向N的,这样PNP还是NPN—下就很清楚了。

它就是一个以b(基极)电流lb来驱动流过CE的电流Ic的器件,它的工作原理很像一个可控制的阀门。

左边细管子里蓝色的小水流冲动杠杆使大水管的阀门开大,就可允许较大红色的水流通过这个阀门。当蓝色水流越大,也就使大管中红色的水流更大。如果放大倍数是100,那么当蓝色小水流为1千克/小时,那么就允许大管子流过100千克/小时的水。三极管的原理也跟这个一样,放大倍数为100时,当lb(基极电流)为1M时,就允许100mA的电流通过Ice。我这么说大家能理解吗?

这个原理大家可能也都知道,但是把它用在电路里的状况能理解,那单片机的运用就少了一大障碍了。最常用的连接如下图。

我们来分析一下这个电路,如果它的放大倍数是100,基极电压我们不计。基极电流就是10V+10K=lmA,集电极电流就应该是100mA。根据欧姆定律,这样Rc上的电压就是0.1AX50〇=5V。那么剩下的5V就吃在了三极管的C、E极上了。好!现在我们假如让Rb为1K,那么基极电流就是10V+lK=10mA,这样按照放大倍数100算,Ic就是不是就为1000mA也就是1A了呢?假如真的为1安,那么Rc上的电压为1AX50Q=50V。啊?50V!都超过电源电压了,三极管都成发电机了吗?其实不是这样的。见下图:

我们还是用水管内流水来比喻电流,当这个控制电流为10mA时使主水管上的阀开大到能流过1A的电流,但是不是就能有1A的电流流过呢?不是的,因为上面还有个电阻,它就相当于是个固定开度的阀门,它串在这个主水管的上面,当下面那个可控制的阀开度到大于上面那个固定电阻的开度时,水流就不会再增大而是等于通过上面那个固定阀开度的水流了,因此,下面的三极管再开大开度也没有用了。因此我们可以计算出那个固定电阻的最大电流10V+50Q=0.2A也就是200mA。就是说在电路中三极管基极电流增大集电极的电流也增大,当基极电流lb增大到2mA时,集电极电流就增大到了200mA。当基极电流再增大时,集电极电流己不会再增大,就在200mA不动了。此时上面那个电阻也就是起限流作用了。

共发射极电路NPN管,ib变大时,实质上是给基区注入空穴,如果是这样的话,注入的空穴将会中和更多发射极过来的电子,理论上ic便会变得更小才对啊,为什么ic还会以相应倍数P放大呢?

图中所画的是三极管内部电流流向【NPN型管,箭头指向代表电流方向】,现在基极电流增大到2,说明在基区有更多的电子被基区空穴所复合,按理来说,集电极电流应该减少啊【因为有更多的电子在基区被复合,流到集电区的电子就少了】,但是现实情况却是集电极电流被放大到了6。显而易见,我在增大基极电流的同时,发射极电流也在增大,并且基极电流增大一倍,发射极电流也增大一倍,这是为什么?

换句话说,我增大基极电流一倍,则从发射区到达基区的电子将会被多出一倍的空穴所复合,但是,又是什么原因使得此时此刻发射极发射出了比原来多出一倍的电子,比如右图比原来【左图】多出了1个单位的电子被基区空穴复合,但同时,发射区却多射出了4个单位的电子。我人为的增加了1个单位的基极电流,而发射极却多射出了4个单位的电子,增加了4单位的电流,why?

不要用公式ie=ib-ic=(1+3)ib说明,请从三极管内部载流子的微观运动情况加以分析说明,

答案

1 发射区向基区发射电子

由于发射结处于正向偏置,多数载流子的扩散运动加强,发射区的多数载流子(电子)向基区扩散(称为发射),同样基区的多数载流子(空穴)也向发射区扩散,但由于发射区的电子浓度远远高于基区的空穴浓度,两者比较可忽略基区空穴向发射区的扩散。由于两个电源Eb和Ec的负极接在发射极,所以发射区向基区发射区向基区的电子都可以从电源得到补充,这样就形成了发射极电流le.

2 电子在基区的扩散与复合

从发射区发射到基区的电子到达基区后,由于靠近发射结附近的电子浓度高于靠近集电结附近的电子浓度,所以这些电子会向集电结附近继续扩散。在扩散的过程中,有小部分电子会与基区的空穴复合,由于电源Eb的正极与基极相连,这些复合掉的空穴均可由Eb补充,因而形成了基极电流lb。因基区做的很薄,电子在扩散过程中通过基区的时间很短,加上基区的空穴浓度很低,所以从发射区发射到基区的电子在基区继续向集电结附近扩散的过程中,与基区空穴复合的机会很少,因而基电极的电流很小,大部分电子都能通过基区而到达集电结附近,所以集电极电流很大。

来源:21ic电子网

围观 49

在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着工程师。为帮助工程师解决单片机设计上的难题,纳出单片机开发中应掌握的几个基本技巧。

一、 如何提高C语言编程代码的效率

用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。 先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。

各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长 5-20%。

对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统 所能支持的数据类型和算法。

虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作 上。所以如果对这些特性不了解,那么调试起来问题就会很多,反而导致执行效率低于汇编语言。

二、 如何减少程序中的bug?

对于如何减少程序的bug,给出了一些建议,指出系统运行中应考虑的超范围管理参数有:

1.物理参数。这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。合理设定这些边界,将超出边界的参数都视为非正常激励或非正常回应进行出错处理。

2.资源参数。这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆叠深度。在程式设计中,对资源参数不允许超范围使用。

3.应用参数。这些应用参数常表现为一些单片机、功能单元的应用条件。如E2PROM的擦写次数与资料存储时间等应用参数界限。

4.过程参数。指系统运行中的有序变化的参数。

三、如何解决单片机的抗干扰性问题

防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。单片机干扰最常见的现象就是 复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干扰最重要的是处理好复位状态。

一般单片机都会有一些标志寄存 器,可以用来判断复位原因;另外你也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标 志直接跳到相应的程序。这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新复位过。

四、 如何测试单片机系统的可靠性

有读者希望了解用用什么方法来测试单片机系统的可靠性“当一个单片机系统设计完成,对于不同的单片机系统产品会有不同的测试项目和方法,但是有一些是必须测试的:

1.测试单片机软件功能的完善性。这是针对所有单片机系统功能的测试,测试软件是否写的正确完整。

2.上电、掉电测试。在使用中用户必然会遇到上电和掉电的情况,可以进行多次开关电源,测试单片机系统的可靠性。

3.老化测试。测试长时间工作情况下,单片机系统的可靠性。必要的话可以放置在高温,高压以及强电磁干扰的环境下测试。

4、ESD和EFT等测试。可以使用各种干扰模拟器来测试单片机系统的可靠性。例如使用静电模拟器测试单片机系统的抗静电ESD能力;使用突波杂讯模拟器进行快速脉冲抗干扰EFT测试等等。

还可以模拟人为使用中,可能发生的破坏情况。例如用人体或者衣服织物故意摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率电钻靠近单片机系统工作,由此测试抗电磁干扰能力等。

来源: ittbank

围观 10

下面介绍了基于PIC单片机与16位串行D/A转换的原理:

1.基本原理

D/A转换器相当于一种译码电路,它将数字输入传换为模拟输出:

其中,D是数字输入,VR是模拟参考输入,Vo是模拟输出。这里模拟输出可以是电压,也可以是电流,式中 数字D是一个小于1的值。

式中an为1或0,由数字对应位的逻辑电平来决定,N是数字输入D的位数。由此(3.2)由此(3.1)

当参考电压输入TIp.固定时,转换器的模拟输出D成正比关系。对于单位数字量的变化,模拟输出是按等 幅度的阶跃量变化的。

2.原理图

(1)串行D/A转换器。

串行D/A转换器一般由数字输入、基准电压源、模拟开关、电阻或电容网络、加法电路、运算放大器、模 拟输出等组成,如图1所示,根据集成度不同D/A转换器中可能不全包括其中的部分。图2所示为这种转换器 的原理图。


图1 集成D/A转换器的组成框图


图2 串行D/A转换器

数模转换器的基本工作原理是基于权的控制,即权电压或权电流相加。D/A转换器的几种常见结构,根据加 权网络等部分实现方法的不同,常见的DAC结构有电流型、电压型、电荷型等,每一类又细分为若干小类, 接下来将分别进行介绍。

(2)权电阻型D/A转换器。

权电阻型D/A转换器的电路框图如图3所示。


图3 权电阻型D/A转换器的电路框图

权电阻型D/A转换器是实现二进制数模转换的最简单的一种网络结构。其缺点是位数增多时,电阻的取值范 围很大,如要实现8位D/A转换器,电阻比值将高达128∶1,这一比值在工艺制造上难以实现,并且该结构对 于电阻精度的苛刻要术也使得的这结构的实现更加困难。

(3)R-2R梯形电阻网络D/A转换器。

图4所示为R-2R梯形电阻网络D/A转换器的电路原理框图。


图4 R-2R梯形电阻网络D/A转换器

(4)电流衰减型D/A转换器如图5所示。


图5 电流衰减型D/A转换器

总结:以上就是基于PIC单片机与16位串行D/A转换的原理,可以广泛的运用到需要进行D/A转换的场合中。

来源:畅学单片机

围观 120

页面

订阅 RSS - 单片机