• 51单片机P0口上拉电阻的阻值问题

    51单片机P0口上拉电阻的阻值问题

    如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否则电流太大;如果希望亮度小一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K以上时,亮度就很弱了,但是对于超高亮度的LED,有时候电阻为10K时觉得亮度还能够用。通常就用1k的。 对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和LED的情况是一样的;如果是低电位有效,即耦合器输入端接端口和VCC之间,那么除了要串接一个1——4.7k之间的电阻以外,同时上拉电阻的阻值就可以用的特别大,用100k——500K之间的都行,当然用10K的也可以,但是考虑到省电问题,没有必要用那么小的。 对于驱动晶体管,又分为PNP和NPN管两种情况:对于NPN,毫无疑问NPN管是高电平有效的,因此上拉电阻的阻值用2K——20K之间的,具体的大小还要看晶体管的集电极接的是什么负载,对于LED类负载,由于发管电流很小,因此上拉电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K的。对于PNP管,毫无疑问PNP管是低电平有效的,因此上拉电阻的阻值用100K以上的就行了,且管子的基极必须串接一个1——10K的电阻,阻值的大小要看管子集电极的负载是什么,对于LED类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此基极电阻的阻值最好不要大于4.7K。 对于驱动TTL集成电路,上拉电阻的阻值要用1——10K之间的,有时候电阻太大的话是拉不起来的,因此用的阻值较小。但是对于CMOS集成电路,上拉电阻的阻值就可以用的很大,一般不小于20K,我通常用100K的,实际上对于CMOS电路,上拉电阻的阻值用1M的也是可以的,但是要注意上拉电阻的阻值太大的时候,容易产生干扰,尤其是线路板的线条很长的时候,这种干扰更严重,这种情况下上拉电阻不宜过大,一般要小于100K,有时候甚至小于10K。

    时间:2021-03-21 关键词: 51单片机 P0口 上拉电阻 阻值问题

  • 51单片机是怎样存储程序和数据的?

    51单片机是怎样存储程序和数据的?

    MCS-51使用哈弗结构,它的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM(甚至是x86)这种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器/RAM/CPU寄存器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各自为政。 好,说回MCS-51。 对于程序存储器,有片内和片外两部分。而且无论片内程序存储器,还是片外程序存储器,他们的地址是共享的。如果片内4k ROM的话,地址就是0x0000-0x0FFF,从0x1000-0xFFFF就是外部ROM的地址空间。可外部ROM的0x0000-0x0FFF的这一部分是否使用呢,这取决于单片机EA引脚的电平值。EA=1时就是使用内部ROM的这一部分,外部ROM的这一部分浪费不用;EA=0时就是使用外部ROM的这一部分,内部ROM浪费不用。从CODE段读取数据要使用汇编的MOVC指令,单片机会根据MOVC指令、EA状态、要读取的地址值,来自动地判断从什么存储器里取数据。 对于数据存储器,则分为内部数据存储器(IDATA/RAM)和外部数据存储器(XDATA)两个部分,但这两个存储器就不像code存储器那样共享地址空间的了。一般的8051芯片,内部RAM只有128B,从0x00-0x7F,而从0x80-0xFF则是SFR(CPU工作寄存器和各种外设寄存器都在此)的区域。对于8052来说,内部RAM有256B,所以0x80-0xFF是高128B的RAM在使用。可这部分不是SFR专用的吗?是SFR专用,但注意,SFR的访问只能使用“直接寻址方式”(使用特定的汇编指令来实现),区别就在这里。只有通过直接寻址访问的地址才是SFR,否则就是普通的RAM。至于外扩的RAM(XDATA),地址也是从0x0000-0xFFFF的,而且这里的0x0000和内部RAM的0x00是不同的,是完全独立的两个空间。他们的访问方法也是不同的。MCS-51使用MOVX指令,来读写XDATA区。而且,访问XDATA区,是需要DPTR寄存器来辅助的。因为只有DPTR才能装得下十六位的XDATA地址。 所以说,MCS-51读写IDATA区的速度是最快的,而且访问方法也是最多的。访问XDATA区的速度相对就要慢很多。MCS-51的堆栈要优先开辟在IDATA区中,并且在IDATA区中开辟的堆栈,可以使用栈指针寄存器SP来控制。如果栈实在太大,只能开辟在XDATA区中,那么CPU的SP寄存器就很难借力,只能由我们自己来构造堆栈结构和堆栈指针。既然外部程序空间和数据空间都是0-64K(0x0000-0xFFFF),那么我实际上可以为了省事/方便改写程序等原因,外部的CODE和DATA就可以共用一个可擦写存储器了(比如各种RAM什么可擦可写的)。比如系统有64K的外扩MEMORY,低32K我用作保存CODE,并让单片机在这32K之中读取程序运行,高32K我作为用户数据的保存处,完全可以。只是此时本来完全独立的CODE和DATA空间,因为在硬件芯片上共用了一个MEMORY,所以他们之间就可能互相影响了,程序就能自己改写程序了。比如0x0020处是一个指令,我通过MOVX把0x0020处改写了,那么再利用MOVC把0x0020处读取出来,数据就和原来不一样了。 易混淆的症结在于,单片机存储空间是一个逻辑上的概念,是人为划分出来的两个相互独立的空间。而硬件电路上的MEMORY芯片则是现实中的概念,单片机的存储空间最终会落实在电路层面的芯片上,所以逻辑上的存储空间会因为物理上的电路连接而发生重叠。但是在逻辑层面上,这两个空间还是完全独立的。 附:各类存储空间名称的定义: data:固定指前面0x00-0x7f的128个RAM,可以用a寄存器直接读写的,速度最快,生成的代码也最小。 idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mov ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,我不太会,所以这里不提。

    时间:2021-03-21 关键词: 数据 存储程序 51单片机

  • 关于常见的LED驱动电源的特点以及它的分类解析

    关于常见的LED驱动电源的特点以及它的分类解析

    在大家的生活中,可能接触过各种电子产品,然后您可能不知道其中的某些组件,例如其中包含的LED驱动器电源,然后让小编带领所有人学习有关LED驱动电源的知识。 LED驱动电源是将电源转换为特定电压和电流以驱动LED发光的电源转换器。通常情况下:LED驱动电源的输入包括高压工频交流电(即市电),低压直流电,高压直流电和低压高频交流电(如电子变压器的输出)。 LED驱动电源的大多数输出是恒定电流源。可以随着LED的正向压降变化来改变电压。 切换恒流源:使用变压器将高压变为低压,并进行整流和滤波以输出稳定的低压直流电。开关恒流源分为隔离电源和非隔离电源。隔离是指输出高低压隔离,安全性很高,所以外壳的绝缘要求不高。非隔离安全性稍差,但是成本相对较低。传统的节能灯使用非隔离电源,并使用绝缘的塑料外壳进行保护。开关电源的安全性较高(通常输出为低电压),性能稳定。缺点是电路复杂且昂贵。开关电源技术成熟,性能稳定,是目前LED照明的主流电源。 线性IC电源:使用一个或多个IC分配电压。电子元件的类型很少,功率因数和功率效率非常高,不需要电解电容器,寿命长且成本低。缺点是输出高压是非隔离的,并且存在频闪现象,因此需要保护外壳免受电击。市场上没有(de)电解电容器,并且寿命长的是线性IC电源。 IC驱动电源具有可靠性高,效率高,成本低的优点,是未来理想的LED驱动电源。 电阻-电容器降压电源:电容器用于通过其充电和放电提供驱动电流。该电路简单,成本低廉,但性能差,稳定性差,并且当电网电压波动时,容易烧毁LED。同时,输出是高压非隔离的,需要绝缘保护壳。低功率因数和短寿命,通常仅适用于经济型低功率产品(5W以内)。对于大功率产品,输出电流大,电容器不能提供大电流,否则很容易烧坏。 LED驱动电源的特点 1.高可靠性,特别是LED路灯的驱动功率。它安装在高海拔地区,并具有防水铝盒驱动力。如果质量好,就不容易损坏并减少维护频率。 2.高效LED是一种节能产品,驱动电源的效率应高。这对于将电源安装在照明器中的结构特别重要。由于LED的发光效率随着LED的温度升高而降低,因此LED的散热非常重要。该电源效率高,功耗低并且灯中产生的热量更少,从而减少了灯的温度升高。延迟LED的光衰减是有益的。 3.高功率功率因数是电网对负载的要求。通常,对于70瓦以下的电器,没有强制性指标。尽管单个低功率电器的功率因数很低,但对电网的影响很小,但是如果每个人晚上都亮起来,如果同一种负载太集中,则会对电源造成严重污染。电网。据说对于30至40瓦的LED驱动电源,在不久的将来可能会对功率因数有一定的指标要求。 4.当前有两种常用的驱动方法:一种是用于多个恒流源的恒压源,每个恒流源为每个LED提供电源。这样,组合非常灵活,一个LED的故障不会影响其他LED的工作,但是成本会略高。另一个是直流恒流电源,LED串联或并联运行。它的优点是成本略低,但灵活性很差,并且必须解决某些LED故障的问题,而又不影响其他LED的工作。这两种形式共存一段时间。在成本和性能方面,多通道恒流输出电源模式会更好。也许它将是未来的主流方向。 5.电涌保护LED的抗电涌能力相对较弱,特别是抗反向电压的能力。加强这一领域的保护也很重要。一些LED灯安装在室外,例如LED路灯。由于电网负载的激活和雷击的感应,各种电涌将从电网系统侵入,并且某些电涌将损坏LED。因此,LED驱动电源必须具有抑制电涌侵入并保护LED不受损坏的能力。 相信通过阅读以上内容,每个人对LED驱动电源都有初步的了解。同时,希望每个人都能在学习过程中进行总结,以不断提高他们的设计水平。

    时间:2021-03-21 关键词: 恒流 恒压 LED驱动电源

  • 51单片机闪烁灯制作

    51单片机闪烁灯制作

    简介:51单片机闪烁灯制作:在单片机P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭形成闪烁灯状态,一亮一灭的时间间隔为0.2秒。 1.电路原理图 图4.1.1 2.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 3.程序设计内容 (1). 延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 22+2×248=49820×DJNZ R7,$ 2个 2×248 (498 DJNZ R6,D1 2个2×20=4010002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2). 输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETBP1.0指令使P1.0端口输出高电平,使用CLRP1.0指令使P1.0端口输出低电平。 4. 程序框图 5. 汇编源程序 ORG 0 START: CLR P1.0 LCALL DELAY SETB P1.0 LCALL DELAY LJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 6. C语言源程序 #include sbit L1=P1^0; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } void main(void) { while(1) { L1=0; delay02s(); L1=1; delay02s(); } } 完毕!您现在会不会制作自己的闪烁灯了呢?

    时间:2021-03-21 关键词: 发光二极管 闪烁灯 51单片机

  • 基于8051的变速调温系统

    基于8051的变速调温系统

    采用8051作为核心元件,构成变速调温控制系统,适应特殊的温度曲线,而且采用不同的软件系统,可以适应不同的工艺要求,具有良好的可移植性和扩展性。本文给出了系统硬件和软件的总体设计。 在某些生产过程中,温度需要根据工艺要求快速或慢速升降或保持恒定,如果采用人工控制,不但费时费力,而且控制精度与操作人的经验、身体情况、精神状况等有关,易出现较大误差。所以需要设计高性能的温控系统。 以MCS-51系列单片机8051为核心元件,以热电偶作为测温元件,设计全自动变速温控系统,加热炉的加热时间可以根据工艺温度曲线自动调节,从而实现温度的智能控制。 1工作原理 各个时间段的温度预定值存储在存储器中,系统通过程序每隔20 s查询一次当前预定值是否在恒温时间内,如果不在恒温时间内,则取出下一组预定值,否则保持当前设定值,并累计恒温时间。 热电偶测量的温度值转换为电势后,由模数转换电路ADC0809转换为数字量,由P1口送入单片机。每隔10 s由时间中断控制对实测温度进行采样,并将采集到的温度值与设定值进行比较,若实际温度超出预先设定的控制量,系统执行截止或全功率输出指令,从而控制可控硅的导通角,控制温度的升降。若实际温度没有超出预定的控制范围,系统按预定值控制可控硅每秒导通的脉冲数,维持预先的温度曲线。 对控制系统的干扰,一是电网电压的波动导致电热炉失控;二是电热炉本身状况的改变。针对这两种情况,系 统对电网电压和电热炉工况进行采样,经反馈网络传送给控制系统,改变可控硅的通断时间比,从而抵消上述干扰带来的影响。 2硬件设计 8051应用广泛,功能强大,价格低,其内部有4 kBROM程序存储器,128 kBRAM数据存储器,32根I/O线,2个16 b定时/计数器,5个中断源。硬件电路如图1所示。 由于8051内部集成了4 kBROM,根据程序需要进行存储器的扩展,用一片EPROM2716作为8051的外部程序存储器,由8051的P0口传送的2716低8位地址经74LS273锁存后,与2716的低8位相连,高3位A8~A10由P2口的低3位P2.0~P2.2直接传送,ALE的下降沿用来锁存外部地址,并用PSEN作为外部EPROM的选通信号。温度曲线的设定值和可控硅每秒导通脉冲数存放于8051的内部程序存储器中。 当内部存储器被选中,取出下一组温度值时,同时输出下一组预置的每秒导通脉冲数,经锁存器74LS273送往由2片CD40192级连后组成的预置计数器,进行预置计数,当CD40192的PE端为“0”时,锁存于74LS273中的预置数即置于CD40192中,CD40192开始计数,当计满预置数时,计数器清零,并发出一个控制信号,送入过零触发器使可控硅截止。 可控硅过零触发器每秒只导通预置脉冲数,当要求导通时,在电源过零点前就发出一个控制信号,使大功率双向可控硅在电源过零处导通。 热电偶采集的温度模拟信号由ADC0809经P1口送入8051进行数据处理,实测温度与设定温度比较后的偏差值,经接口芯片8255送往显示器进行温度显示。 3程序设计 系统软件主要由主程序模块、A/D转换模块、数据处理模块、显示模块组成。 主程序模块和A/D转换模块程序流程图如图2和图3所示。 在程序运行过程中,8051的定时时钟计数贯穿整个过程,在时钟控制下经软件分频即可求出延时10 s所需的循环次数,每循环一次就向时间累计单元加1,在时间循环过程中的延时段内,可以调用其他子程序去完成其他操作,当达到10 s或20 s定时时间,通过设立标识来识别采样时间间隔。 4总结 本系统的设计简单灵活,其特点是预设温度曲线值可以存储于存储器中,系统按照此预定值调节温度,改变预设温度曲线以及相应的软件,从而适应不同的工艺要求,具有通用性

    时间:2021-03-21 关键词: 8051 变速调温系统 核心元件

  • 关于单片机的C语言编程基础知识(初学注意)

    关于单片机的C语言编程基础知识(初学注意)

    80C51上的C语言编程 C51的特色: (1)学习过C语言的同学在对单片机有了基本了解之后,就可以开始试着写一两个基于单片机的C语言的程序了。C51语言继承了ANSI C 的绝大部分的特性,基本的语法相同,同学们上手会比较快。但是,由于C51语言是对硬件进行控制的编程语言,其本身又在硬件结构上有所扩展以增强C语言对硬件的控制,如关键字sbit,data,code等(后面会讲他们是做什么的)。 (2)因为单片机不是我们平时用的计算机,他的英文名为MCU(微控制器),特点体现在这个“微”字。因而,它里面的硬件资源是非常少的,所以你在写程序的时候就要注意对RAM(存储数据)和ROM(存储程序)的使用。说白了,就是也程序的时候要尽量精简,如各种算法,不要让系统负担太大。少用浮点运算,能够使用unsigned的无符号型数据,就不要使用有符号的(当你写程序时,你会发现很多位置都用的unsigned,不像我们在ANSI C里面不同,不太注意,C51里面就非常注意资源的控制)。避免乘除,多用移位运算(写走马灯程序时,会使用到,很有意思,不是我们想象的用循环控制)。 基本的特性了解之后,我们来讲下,具体的东西: 首先,是C51针对硬件控制增加的一些关键字,数据类型。 (1)bit : 和我们平时用的int,char相同,只不过int是两个字节(16位,16bit),char是单字节(8位,8bit),bit就是一位,取值范围是0和1,类似windows编程里的BOOL。 (2)sbit : sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbit xxx = REGE^6这样的定义(例如,sibt a = P0^0,定义P0口的第0位为变量a,此时对a赋值0或者1时,就是在对P0口的第0位进行控制,赋低电平或高电平),这个sbit量就确定地址了。(sbit大部分是用在特殊功能寄存器中的,方便对寄存器的某位进行操作的。) (3)sfr:用于定义特殊功能寄存器(8位的)(在程序中会写头文件#include,在Keil中右键点击打开reg51.h,就可以看到很多sfr的定义),如sfr P0 = 0x80,就定义了端口P0。 (4)sfr16:同上用于16位的 其次,C51还提供了对8051所有存储区的访问。 8051芯片的存储区从逻辑上分为内部数据存储区,外部数据存储区和程序存储区(内外统一编址)。 80C51有4KB的内部程序存储区(片内ROM)(0000H~0FFFH),其中前43单元有特殊用处,0000H~0002H无条件跳转,0003H~002AH用于存放中断程序(中断程序这里不解释) 256B的内部数据存储区(片内RAM),分为低128B和高128B,有不同作用(可见硬件资源有多小了吧,所以我们要节省使用),低128B又分为为工作寄存器区,又称通用寄存器(00H~1FH),位寻址区(20H~2FH,之前的sbit就是对应位寻址空间中的一位),数据缓冲区(30H~7FH,这个区域就是给用户用得,没有任何限制,一共80个单位) 高128B为特殊功能寄存器(就是上面说的sfr),具体的内容在很多书上面都有。 http://www.mytutorialcafe.com/Microcontroller%20Special%20Function%20Register.htm 给个英文的sfr的解释的网址,不过没必要看,看书就行了。 在这里讲这么多的原因是因为C51中在对变量进行声明的时候还可以明确的指定存储空间。关键字有:DATA,IDATA,BDATA(RAM中高128B),CODE等。 (1)DATA指定RAM中低128B,可以在一个机器周期内直接寻址,寻址速度最快,所以应该把经常使用的变量放在DATA区 例如:unsigned char data system_status = 0; (2)BDATA指定的是RAM中的位寻址区,在这个区域定义的变量可以进行位操作,什么意思呢?举例吧 unsigned char bdata status_byte,这里定义变量status_byte,是一个单字节(8位)的数据变量,我们可以对这个变量中的一位进行置0或置1的操作。我们把 status_byte=0x00,即变量里面的8位都置为了0,前面讲过一个sbit,用于位寻址区域中的一位,sbit a = status_byte^2;a = 1,表示把变量 status_byte的第2位置为了1(0,1,2,3,4,5,6,7共八位),于是变量 status_byte就等于了0x02; (3)CODE 程序存储区,他里面的内容是不变的,我们要使用的一些固定数据存于这个里面就不用占用RAM的空间了,比如我们学习数码管显示程序时,数码管上面的每一个数字都对应一个16进制的数字,我们可以把它存到程序存储区中去,例如: unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 关于特殊功能寄存器sfr的使用,我们以一个简单的程序为例,在80C51芯片的P0^0上接上一个发光二极管LED,一个电阻RES和一个电源VCC,三者串联,电流方向是从电源流向P0^0口。给80C51接上电源,接地,晶振,复位电路。如果使用proteus仿真,则这些电路不用接。 在Keil软件中写程序 #include sbit a = P0^0; void main(){ a = 0; while(1); } 因为芯片刚刚上电,P0管教为高电位,我们在程序中把它置为0;电流就可以流过LED,于是LED灯就会发光。并用while(1)让程序停在这里。 一个最简单的单片机C语言程序就写完了。讲了这么多希望同学们了解,C51对C语言的扩展有所了解,知道可以通过C语言对硬件进行控制,学会常用的关键字。

    时间:2021-03-21 关键词: 单片机 基础知识 C语言编程

  • 有关节电器的节电原理以及它的基本功效有哪些?

    有关节电器的节电原理以及它的基本功效有哪些?

    在科学技术高度发达的今天,各种各样的高科技出现在我们的生活中,为我们的生活带来便利,那么你知道这些高科技可能会含有的节电器吗?市场上各种节电器的宣传广告都很多,节电效果也残次不齐,价格相差胜多, “节电器有用吗?”。但是产品的性价比,及怎么适合各种设备的节电器,这中间就有很大的专业知识。 节电器产品特点:实时在线检测电机的工作状态,从而改变输入电压。当检测到电机在轻载或负载不断变化时,通过可控硅能在百分之一秒以内调整输入电机的电压,使电机的输出功率与实时负载刚好匹配,从而有效地降低电机的功率损耗,改善电机启动、停机性能,达到节电的效果。 节电器的基本功能:高压滤波和能量吸收技术的使用会自动吸收高压电力设备反向电势的能量,并将其不断反馈给负载,从而节省了这部分电力电气设备从高压电网汲取的能量。另一方面,采用国际先进的高压电气参数优化技术,正弦波跟踪技术,纳米技术和组件来抑制和减少电源线中涌入电流,瞬变和高次谐波的产生,从而净化电源。供电,完善高压电网。供电质量可以大大降低电力设备的线损和铜损,铁损,提高高压电气设备的使用寿命和工作效率。在使用过程中,不仅节约了用电,而且大大降低了设备的运行成本。 采用自主知识产权技术,电磁补偿原理,电力电子控制技术,有源滤波器技术和先进的自动智能控制技术,自动调整节电装置,优化电源参数,确保良好的电能质量,有效过滤各种尺寸的瞬态浪涌,降低抑制谐波和杂波,相对平衡电源电压,减少线损,增加负载的有效功率,减少过剩有功功率的过剩损耗,从而达到节电的目的。 本产品适用于单相和三相线路的安装。在电气设备正常工作的情况下,节电率一般为10%-30%,可以最大程度地减少用户的用电支出,还可以保护电气设备并延长使用寿命1.5倍以上,大大降低了设备的使用寿命。电气设备的维护和更换费用。它还具有空载几乎无功耗,过载保护和报警,短路保护等功能。一方面是对车身结构设计的改进,采用了新材料,对旧电机进行了更新改造。另一方面,这是改善电动机运行的外部环境。相控节能技术利用电动机外部运行环境的改善来实现动态电源管理。它是与变频器互补的交流电动机的两种主流节能技术之一。 相控电动机节电器采用集成电路芯片控制技术,该技术由进口组件组成,例如微处理器芯片(CPU),晶闸管和集成双晶闸管。它的核心技术是动态跟踪电动机负载的变化,在电动机运行期间调整电压和电流(以在百分之一秒内完成动作),以确保电动机的输出转矩准确匹配实际的负载需求,并且不改变电动机的转速,不影响电动机的正常运行,并可以有效地避免由于电动机的过大输出而浪费电能。它具有良好的动态节电控制功能,可以有效减少电动机的功率损耗,提高电动机的启停性能,延长电动机的使用寿命。 STM系列节电器一对一安装在电机前端,节电率可达到10-30%。 根据专家的说法,节电器本身就存在,其中大部分用于工业和其他领域,并不适合我们的日常生活。因为真正有效的节电器需要电力电子控制技术,有源滤波技术和先进的自动智能控制技术等多种技术支持,所以原理很复杂,而且看起来并不简单。在市场上使用可以轻松节省电费的节电器,不仅不能节省电费,还可以节省电费。由于您的盲目使用,它还会增加电路损耗,并且会成为用电设备(能耗极小)。通常,市场上的节电器做工粗糙,电容器的老化会引起爆炸,内部电线的短路会引起火灾! 以上就是节电器的一些值得大家学习的详细资料解析,希望在大家刚接触的过程中,能够给大家一定的帮助,如果有问题,也可以和小编一起探讨。

    时间:2021-03-21 关键词: 纳米技术 节电器 正弦波跟踪技术

  • 单介绍51单片机的调试

    单介绍51单片机的调试

    对于一个新设计的电路板,调试起来往往会遇到一些困难,特别是当板比较大、元件比较多时,往往无从下手。但如果掌握好一套合理的调试方法,调试起来将会事半功倍。对于刚拿回来的新PCB板,我们首先要大概观察一下,板上是否存在问题,例如是否有明显的裂痕,有无短路、开路等现象。如果有必要的话,可以检查一下电源跟地线之间的电阻是否足够大。 然后就是安装元件了。相互独立的模块,如果您没有把握保证它们工作正常时,最好不要全部都装上,而是一部分一部分的装上(对于比较小的电路,可以一次全部装上),这样容易确定故障范围,免得到时遇到问题时,无从下手。一般来说,可以把电源部分先装好,然后就上电检测电源输出电压是否正常。如果在上电时您没有太大的把握(即使有很大的把握,也建议您加上一个保险丝,以防万一),可考虑使用带限流功能的可调稳压电源。先预设好过流保护电流,然后将稳压电电源的电压值慢慢往上调,并监测输入电流、输入电压以及输出电压。如果往上调的过程中,没有出现过流保护等问题,且输出电压也达到了正常,则说明电源部分OK。反之,则要断开电源,寻找故障点,并重复上述步骤,直到电源正常为止。 接下来逐渐安装其它模块,每安装好一个模块,就上电测试一下,上电时也是按照上面的步骤,以避免因为设计错误或/和安装错误而导致过流而烧坏元件。 寻找故障的办法一般有下面几种: ①测量电压法。首先要确认的是各芯片电源引脚的电压是否正常,其次检查各种参考电压是否正常,另外还有各点的工作电压是否正常等。例如,一般的硅三极管导通时,BE结电压在0.7V左右,而CE结电压则在0.3V左右或者更小。如果一个三极管的BE结电压大于0.7V(特殊三极管除外,例如达林顿管等),可能就是BE结就开路。 ②信号注入法。将信号源加至输入端,然后依次往后测量各点的波形,看是否正常,以找到故障点。有时我们也会用更简单的办法,例如用手握一个镊子,去碰触各级的输入端,看输出端是否有反应,这在音频、视频等放大电路中常使用(但要注意,热底板的电路或者电压高的电路,不能使用此法,否则可能会导致触电)。如果碰前一级没有反应,而碰后一级有反应,则说明问题出在前一级,应重点检查。 ③当然,还有很多其它的寻找故障点的方法,例如看、听、闻、摸等。“看”就是看元件有无明显的机械损坏,例如破裂、烧黑、变形等;“听”就是听工作声音是否正常,例如一些不该响的东西在响,该响的地方不响或者声音不正常等;“闻”就是检查是否有异味,例如烧焦的味道、电容电解液的味道等,对于一个有经验的电子维修人员来说,对这些气味是很敏感的;“摸”就是用手去试探器件的温度是否正常,例如太热,或者太凉。一些功率器件,工作起来时会发热,如果摸上去是凉的,则基本上可以判断它没有工作起来。但如果不该热的地方热了或者该热的地方太热了,那也是不行的。一般的功率三极管、稳压芯片等,工作在70度以下是完全没问题的。70度大概是怎样的一个概念呢?如果你将手压上去,可以坚持三秒钟以上,就说明温度大概在70度以下(注意要先试探性的去摸,千万别把手烫伤了)。 好了,关于调试的问题,我们今天就暂时讲这么多,如果想要了解更多的调试方法和经验,可以去找一些家用电器维修的书来看看,一个好的设计人员,首先应该是一个好的维修人员。 首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否是电源电压,例如常用的5V。接下来就是检查复位引脚电压是否正常。分别测量按下复位按钮和放开复位按钮的电压值,看是否正确。然后再检查晶振是否起振了,一般用示波器来看晶振引脚的波形,注意应该使用示波器探头的“X10”档。另一个办法是测量复位状态下的IO口电平,按住复位键不放,然后测量IO口(没接外部上拉的P0口除外)的电压,看是否是高电平,如果不是高电平,则多半是因为晶振没有起振。另外还要注意的地方是,如果使用片内ROM的话(大部分情况下如此,现在已经很少有用外部扩ROM的了),一定要将EA引脚拉高,否则会出现程序乱跑的情况。有时用仿真器可以,而烧入片子不行,往往是因为EA引脚没拉高的缘故(当然,晶振没起振也是原因只一)。经过上面几点的检查,一般即可排除故障了。如果系统不稳定的话,有时是因为电源滤波不好导致的。在单片机的电源引脚跟地引脚之间接上一个0.1uF的电容会有所改善。如果电源没有滤波电容的话,则需要再接一个更大滤波电容,例如220uF的。遇到系统不稳定时,就可以并上电容试试(越靠近芯片越好)。

    时间:2021-03-21 关键词: 电路板 调试 51单片机

  • 51单片机与MXA2500GL的振动信号分布式检测

    51单片机与MXA2500GL的振动信号分布式检测

    C8051F020单片机性能特点 CYGNAL的C8051F020是集成模拟、数字信号的混合信号系统级SOC(System On Chip)单片机,与目前常用的51系列单片机指令集完全兼容。采用100脚TQFP封装,体积小,运算速度快。它采用CYGNAL公司的专利CIP- 5l微处理器内核。CIP-5l在提升805l速度上采取了新的途径,即设法在保持CISC结构及指令系统不变的情况下,对指令运行实行流水作业。在这种模式中,废除了机器周期的概念,指令以时钟周期为运行单位。平均每个时钟可以执行完l条单周期指令,从而大大提高了指令运行速度。 与805l相比,C8051F020在相同时钟下单周期指令运行速度为原来的12倍,整个指令集平均运行速度为原来805l的9.5倍,使CYGNAL 单片机系列进入了8位高速单片机行列。同时,C805lF020单片机延续了C805lF系列特有的优先权数字交叉开关配置技术。这项技术的核心就是以硬件方式为内部的数字资源配置端口I/O引脚。与标准复用数字I/O不同,这种结构可支持更多的功能组合。PCA、比较器、定时器等按优先级别分配到所选择端口上。使用者也可以只为所用到的数字资源分配I/O引脚。任何未配置使用的端口I/O被组合在一起,作为GPIO。 MXA2500GL加速度传感器的性能特点 MXA2500GL是MEMSIC公司专利技术生产的双轴式绝对模拟输出加速度传感器。它根据热对流原理在两个轴线都可以进行动态加速度(例如振动)和静态加速度(例如重力加速度)的测量,因此广泛应用于汽车稳定性控制、安全性控制、接近角控制、血压监视器、电子罗盘倾斜校正、数码相机、电梯等领域。与普通压电式加速度传感器不同的是,MXA2500GL实际是按照标准CMOS工艺制造的单片集成电路,它的输出是0.1~4.9V(5V电源的情况)的电压信号,无需电荷放大器就可以直接与A/D卡相连,因此会使整个测试系统不仅结构紧凑,而且抗干扰性非常强。 基本工作原理是:在硅片中心的空腔中悬挂一个气体热源,同时在热源的4个对角(即2个轴线方向)处,均匀放置铝/多晶硅温差电堆(热电偶)。当加速度为零时,热源的温度梯度是对称的,所以4个温差电堆的温度相同,因此这2个轴线方向输出相同的电压。而任何方向的加速度都会扰乱这种平衡的温度形式,使热源的温度梯度不对称。根据热传导的自由对流原理,4个温差电堆的温度及其输出信号—电压都是不同的。但是这些电压信号与加速度是成比例变化的。这样通过测量电压就可以确定加速度的值。在传感器上有两个相同加速度信号通道,一个测量X方向,另一个测量Y方向。 图1给出了它的基本结构。 图1MXA2500GL加速度传感器的结构图 分布式检测系统的硬件架构 系统以C8051F020单片机为从机,PC为主机。由于单片机体积小、功能强、价格低廉,因此性价比非常高。目前主流的PC有2个标准的RS-232 串行口,采用的是EIA电平,而C8051F020单片机的TX引脚(发送数据)、RX引脚(接收数据)使用的是TTL电平,两者之间进行可靠通信必须要用电平转换芯片,系统采用MAX232/MAX485芯片。为了实现资源共享,任务分担的目标,在分布式计算机系统中关键就是确保主机和各从机之间数据通信的准确可靠。 由于PC机本身并不具备多机通信功能,所以目前普遍采用的通信方式有两种:一种是利用“桥梁”硬件—多机通信卡。通信卡一般有两种形式,应用最广的是以51单片机为核心,结合8255、6116、2716等芯片构成的通信卡。该卡可以插在PC的扩展槽中,各从机与通信卡中单片机进行串行通信,而PC通过8255芯片与卡上的单片机进行并行通信。另外一种通信卡仅仅由单片机构成(也就是牺牲一个单片机做通信中转),从机与通信卡及PC与通信卡之间都是串行通信;另一种方式是在PC的串口上软件模拟51系列单片机串口可编程第9位数据功能实现多机通信,系统采用的是后一种方式。另外由于远距离传输,系统中使用了MAX485芯片,同时还使用了光电隔离来提高系统的抗干扰能力。 图2给出了整体硬件架构。 图2分布式检测系统的硬件架构 多机通信协议 C8051F020单片机具有适于多机通信的特殊功能,即方式2(3)。在这2个方式里,接收的第9位进入RB8,然后为停止位。串行口可程控为:当接收到停止位,只有当RB8=1时才产生串行口中断。这个特性可由置位SCON中的SM2控制。多机通信中使用这种特性的方法是:当主机要发送一个数据块给几个从机之一时,它先发送一个目标从机的地址字节,地址字节第9位为1而数据字节第9位为0。当SM2=1时,数据字节不会中断任何从机,然而,地址字节会中断所有从机,这样每一个从机可检查接收到的地址,看是否为寻址自己。被寻址的从机将SM2位清0,准备接收传送过来的数据字节,没被寻址的从机保持 SM2为置位状态,继续处理其它工作。C8051F020单片机方式3下的信息桢格式见图3。 图3C8051F020单片机在方式3下的信息桢格式 PC机的异步串行通信口是采用通用异步接收发送器(简称UART)为核心构成的。UART的产品型号很多,大多采用Ins8250芯片。对UART的编程实际上是对其内部寄存器的操作。UART内部寄存器共有10个。编程时首先要确定串行通信的数据格式,这是通过将选定的数据格式参数写入到线路控制寄存器LCR来完成的,接下来需要将波特率因子写入到波特率因子寄存器来确定双方传输波特率,再通过读线路状态寄存器LSR来判断芯片是否就绪或有错等。通信线路控制寄存器LCR的格式如图4所示。 图4通信线路控制寄存器LCR 通过将参数字节写入到线路控制寄存器,可以将UART编程为这样的串行通信数据格式:1位起始位,8位数据位,1位奇偶校验位,1位停止位,1帧共 11位。既然能够在PC机上实现1帧11位的数据格式,并且改变线路控制寄存器的D5、D4、D3位的值能将奇偶位设定为“恒1”或“恒0”,则若在发送地址帧时将奇偶位设定为“恒1”,在发送数据位时将奇偶位设定为“恒0”,便可以在PC机上模拟51系列单片机的多机通信持点,从而直接利用这种特点实现它们之间的主从分布式多机通信。 主机和从机遵循主从原则,主机用呼叫方式选择从机,数据在主机和从机之间双向传递,各从机之间的相互通信需通过主机作为中介。主从机之间还应传送一些供它们识别的命令和状态字,如以00H表示主机发送从机接收命令,以01H表示从机发送主机接收命令等。 PC主机通信程序的实现方法 对PC机UART的编程是主机通信程序的核心。一般可以通过两种方式实现对UART的操作。一种是直接访问底层地址实现对LCR、LSR、波特率因子寄存器的操作,这种方法只适用于Windows9X.在WindowsNT环境下系统禁止用户程序直接访问硬件和物理地址,因此该方法不可取。具体过程是通过调用标准通信函数inp()、outp()实现的。另一种方式是通过通信控件或WindowsAPI函数间接对LCR、LSR、波特率因子寄存器进行相关操作。因此本系统也使用MSComm控件,而WindowsAPI函数更适合在多现程领域应用。

    时间:2021-03-21 关键词: 振动信号 MXA2500GL 分布式检测 51单片机

  • 关于51单片机晶振的二十一个问题

    关于51单片机晶振的二十一个问题

    一,为什么51单片机爱用11.0592MHZ晶振? 其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。 其二:用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。 这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。 用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。 二,在设计51单片机系统PCB时,晶振为何被要求紧挨着单片机? 原因如下:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。 问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。 晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。现实中,磁力线不常见,电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就 越强,产生的电能量就越强,直到接收到的电信号强度超过或接近晶振产生的信号强度时,IC内的放大电路输出的将不再是固定频率的方波了,而是乱七八糟的信 号,导致数字电路无法同步工作而出错。 所以,画PCB(电路板)的时候,晶振离它的放大电路(IC管脚)越近越好。 三,单片机电路晶振不起振原因分析 遇到单片机晶振不起振是常见现象,那么引起晶振不起振的原因有哪些呢? ① PCB板布线错误;②单片机质量有问题;③ 晶振质量有问题; ④负载电容或匹配电容与晶振不匹配或者电容质量有问题;⑤PCB板受潮,导致阻抗失配而不能起振;⑥ 晶振电路的走线过长; ⑦晶振两脚之间有走线;⑧外围电路的影响。 解决方案,建议按如下方法逐个排除故障: ① 排除电路错误的可能性,因此可以用相应型号单片机的推荐电路进行比较。② 排除外围元件不良的可能性,因为外围零件无非为电阻,电容,很容易鉴别是否为良品。③ 排除晶振为停振品的可能性,因为不会只试了一二个晶振。④试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请参考晶振的使用说明。 ⑤在PCB布线时晶振电路的走线应尽量短且尽可能靠近IC,杜绝在晶振两脚间走线。 四,51单片机时钟电路用12MHZ的晶振时那电容的值是怎样得出来的? 其实这两个电容没人能够解释清楚到底怎么选值,因为22pF实在是太小了。这个要说只能说和内部的振荡电路自身特性有关系,搭配使用,用来校正波形,没有人去深究它到底为什么就是这么大的值。 19.89c52单片机如果不接晶振会有什么后果? 单片机不工作了 程序无法烧入……等等 五,单片机晶振电路中两个微调电容不对称会怎样?相差多少会使频率怎样变化?在检测无线鼠标的接受模块时,发现其频率总是慢慢变化(就是一直不松探头的手,发现频率慢慢变小)晶振是新的! 电容不对称也不会引起频率的漂移,说的频率漂移可能是因为晶振的电容的容量很不稳定引起的,可以换了试,换两电容不难,要不就是的晶振的稳定性太差了,或者测量的方法有问题. 六,单片机晶振与速度的疑问,执行一条指令的周期不是由晶振决定的吗。那么比如51单片机和MSP430,给51接高速晶振,430接低速的,是不是51跑的要快?是不是速度单片机速度仅仅与晶振有关,关键是单片机能不能支持那么大的晶振? 每个单片机的速度是受到内部逻辑门电平跳变速度限制的。两个芯片同时使用同样的晶振,比如12M的。因为AVR是RISC指令集,它在同样外部晶振频率下,比51要快。 比如,51最快能接40M,AVR是16M的晶振。 STC89C52大都用12MHz晶振,但由于其12个时钟周期才是一个机器周期,相当于其主频只有1MHz。 MSP430采用RISC精简指令集, 430单片机若采用内部DCO震荡可达21MHz主频。单个时钟周期就可以执行一条指令,相同晶振,速度较51快12倍。 对于一个51,给他用更高的晶振,速度会快些。但是对于高级的单片机就不一样了。高级单片机内部,一般都是有频率控制寄存器的,所以,简单的增加晶振,可能达到单片机的极限,导致跑飞。 七,请问:有什么方法可以确定某一款单片机在某一大小的晶振下是否能正常工作? 晶振选择太高不太合适,具体晶振上限是多少,恐怕测不出来,只能按照人家单片机的要求,一般STC系列单片机上限是35M或40M,stc单凭上写的有,如STC11F16XE 35I-LQFP44G其中35I就是晶振最高35M的工业级芯片。 超过上限会出现什么样的问题,没有测试过,一般晶振选择12M的比较多,如果选择STC 1T指令的,就相当于12*12=144M的晶振。如果用于串口通信,建议选用11.0592M的或22.184M,选择晶振最主要还是参照人家的说明书。 八,4个AT89C51单片机能否用一个12M的晶振使其都正常工作?一个采用内部时钟方式,其余三个用外部方式...那四个都用内部方式可以不(将4个单片机都并联在一个晶振上)? 可以,其中一个正常接晶振,他的XTAL2输出接到另外三个的XTAL1输入上。 九,单片机的运行速度和晶振大小的关系,若单片机的最高工作频率是40M,晶振是否可以选择24M或更高,但不超过40M,这样单片机的运行速度是否大增?长期在此工作频率下对单片机是否有不良影响?单片机对晶振的选择的原则是怎样的? 当然是有影响的,单片机的工作速度越快,功耗也越大,受干扰也会越厉害,总之最高能跑40M的,跑不超过40M的是没有问题的,只是对相关的技术(如PCB的设计元件的选取等)会高去很多. 十,89c51单片机的复位电路中常采用12MHZ的晶振,实际上市场上稍小于12MHZ,为什么呢? 答:需要串口通讯时一般是用11.0582MHZ的,这样波特率才好算。 用12MHZ的工作周期就容易计算。 十一,单片机晶振上电不起振,但是手碰一下晶振就起振了,为什么?怎么判断单片机晶振是否起振呀? 看看晶振配的电容焊了没有,值有没有错误? 最简单是用示波器,另外可以看一下电源是否正常。 十二,怎样判断单片机外部晶振有没有起振?的STC89C52单片机本来是好好的后来不行了,换了个晶振就好了。但是过了几个小时后又不行了,是怎么回事。还有就是怎样判断晶振是否起振? ①先换一块单片机试试,问题还在则排除单片机;②可能是虚焊造成的,这点要注意;③用STC89C52也碰到过类似的问题,换了块晶振就OK了,好像STC起振不橡AT89S52那么顺。其实对于STC89C52可以直接看30脚(ALE),接个灯,起振一下子就能看出来了。 十三,51单片机晶振上接的电容大小该如何选择?是晶振越大,电容值也要大一些吗,一般常用多大的。有人说常用的从15-33pf,具体如何选择效果最好?比如分别用一个6M和12M的晶振,用多大电容更合适? 15-33pf都可以,一般用的是15P和30P 晶振大小影响不大,常用的4M 和12M 以及11.0592M和20M 24M 都用的 30P 单片机内部有相应的整形电路不必担心 十四,没有程序的空白单片机,外部晶振能起振么? 没有内部晶振的单片机,外部晶振可以起振,如传统类MS51系列单片机有内部晶振的单片机,外部晶振不会起振,需要对外部晶振进行配置后才会起振,如果不对外部晶振进行配置仍使用内部晶振,如silicon lab系列C8051F020单片机 十五,为什么at89c52 P1.0输出2.5v电压,单片机好像未工作,晶振波形是不规则的正弦波可不可以?线路板没有达到预想效果,发光二极管一直亮,感觉还是单片机的问题,P1.0输出2.5v电压,看门狗用的X5045。怎么回事? 将看门狗拿掉,暂时做成最小系统,既只有电源、8952、晶振和两只30P左右的电容。 ①将P1.0口置1,测试该口的电压是否在2.5V以上; ②将P1.0口置0,测试改口电压是否约为0V。 是的话就是OK的,否则就要看看电源电压、晶振、8952了。电源电压是5+、-0.25V,且纹波一定要小 十六,制作max232下载单片机,工作电压都正常,要外加晶振嘛? 当然要加,如果没有外加晶振,那么单片机的时钟电路就没有了,导致单片机串口就不能进行数据传输了,最终这个下载器具就不能下载程序了。 十七,若89c52单片机使用外接晶振,应如何设置? 晶振的两个管脚各接一个20~30pf的电容后分别接入单片机的XTAL1和XTAL2,两个电容的另一端并接后接地即可,不再需要任何设置 十八,晶振的原理,如何产生正弦信号的,详细一点,从电路方面分析? 晶体可以等效为一个电感,与里面的电容形成振荡回路,能量从电感慢慢到电容,再从电容慢慢到电感,周而复始形成振荡。正半周是电容的充放电过程,负半周是电感的充放电过程。 十九,现在要用52单片机做一个交通灯电路。要求是红灯,绿灯30s,黄灯3s。循环变化。那么外界晶振怎样选择?单指令周期多少比较合适?图中外接的两个电容的作用是什么?大小多少合适? 如果选择晶振的话,那两个电容值可以选择:30加减10PF左右的(频率在0~33MHZ之间); 如果选择陶瓷晶振的话,电容值可以选择:40加减10PF左右的(频率在1.2~12MHZ)振荡器应尽量靠近电容。指令周期是可以算的,这个是有公式的! 二十,89c52单片机 晶振频率才12兆,太小了,怎样能改大晶振频率? 外接18.432或者24MHz的晶振。或者换4T的W77E58单片机,这样相当于把工作频率提高3倍。或者换1T的DS89C4XX单片机,这相当于把工作频率提高8倍!用1T的STC12C5A60S2单片机也有这样的效果。 二十一,单片机不能正常工作,晶振问题?如何去检查晶振正常还是不正常?另外看到说晶振跟两个小电容要离得很近,几乎都没剪引脚(就是买回来多长就多长)就插上去了,这个也有关系吗? 用万用表测量单片机连接晶振的两个引脚,正常起振的状态下电压大概比供电电压的1/2略低一些,如果其中一个或全部引脚为电源电压或零就表明没起振。那个引脚长些一般不会有什么影响,相比之下接地更关键些,两个谐振电容接地端到单片机的电源地要尽量近些。

    时间:2021-03-21 关键词: 晶振 机械振动 51单片机

  • 基于AT89C51 单片机的节拍器

    基于AT89C51 单片机的节拍器

    1 硬件电路原理 节拍器以AT89C51 单片机为控制中心,由LED 显示模块、调节键盘模块、声音输出模块组成。图1 是节拍器的电路原理图。ATMEL 公司生产的AT89C51 单片机与MCS51指令系统兼容,40 脚结构,是系统的控制中心。显示模块由四位一体的共阳极蓝色LED 显示器构成,采用动态扫描显示方式, Q11~ Q14是LED 的位选择开关三极管, R6~ R13是数码管段发光二极管的限流电阻。四位一体的LED 数码管完成显示节拍数、各功能代码及参数值的功能。键盘调节模块由4 只按键构成,分别是功能选择键A、设置参数选择键B、参数增加键C和参数减少键D ,4 只按键可以完成各种功能的选择和各参数的设置。声音输出模块由以Q1、Q2、Q3和扬声器为中心的功率放大电路组成,不同频率的脉冲从单片机的P2.6口输出, 经R14限流和功率放大后,推动扬声器发出洪亮的声音。由于输出的音频信号是脉冲波,三极管工作在开关状态,损耗小发热量不大, Q2、Q3使用小功率管C8050和C8550 即可。整个系统硬件结构简单。由外部提供12 V直流电直接供音频功放模块使用,经LM7805 稳压成5 V 后供单片机及LED 显示用。 2 软件说明 软件系统采用模块化结构设计,分别是主程序模块、节拍器模块、键盘识别和参数设置模块等。其中每个模块又由若干个子模块构成。上电或复位后进入调节功能,重复按A键在调节功能、节拍器功能之间轮换。当进入调节功能后,重复按B 键可选中不同的调节对象,再按C 或D 键增加或减少调节对象的参数值,调节时显示调节对象的代码和参数值。 2.1 主程序模块 在主程序模块中完成存储单元的初始化、定时器计数器的初始化、中断初始化、标志位的初始化、扫描键盘,并根据功能选择键A 的值启动以下功能模块之一:参数设置功能、节拍器功能。 2.2 节拍器功能模块 节拍速度在24~400 拍/min 范围内可调,节拍误差小于2%,节拍数为1~9可调。显示器显示节拍数,扬声器发出节拍声,显示节拍数1 时发出600 Hz 的高频声0.1 s ,显示其他节拍数时发出300 Hz 的低频声0.1 s。该模块由节拍延时部分、节拍数显示部分、音频脉冲形成部分组成。节拍功能模块程序流程图如图2 所示。 2.3 参数调节模块 按A 键选择进入参数调节功能模块后,重复按B 键,可以依次选择节拍速度、节拍分度参数的设置,LED 显示器上显示参数类型代码和该参数的数字,按C 或B 键则在该参数的取值范围内循环增加或减少一个单位值。代码1 是节拍数,取值范围1~9。代码2 是节拍速度,取值范围是24~400拍/min。该模块程序由键盘扫描识别部分、参数显示部分、A键处理部分、B 键处理部分和C、D 键处理等子程序组成。 图2 节拍器模块流程图 3 实验 从显示、按键、声音和节拍精度等方面进行测试。 显示观察:处于节拍工作状态时4 个数码管同时循环显示节拍数,练琴时眼睛的余光就能看清节拍数。处于调节模式时,最高位显示待调节的参数代码,其余3 位显示参数值,当参数高位为零时不显示。显示正确。 按键测试:按下功能键A ,可以在参数调节和节拍模式之间转换。当处于参数调节模式时,按下参数更改键B ,可以在节拍数和节拍速度之间转换;按下增加键C 或减少键D ,参数值在当前值基础上增加或减少1 ,并且在参数的调节范围内循环变化。当处于节拍工作模式时,BCD 键不起作用。键盘工作正常。 声音观测:节拍音短促有力,起始拍与其余拍音调区别明显。在钢琴弹奏的环境中清晰可闻。 节拍精度测量:用秒表测量节拍器500 拍所用时间。节拍速度分别为72、112、144 拍/min 的时候, 用时分别为418.1 s、268.9 s、210.5 s ,误差分别为0.29%、0.35%、1.1%。节拍精度达到设计要求。 4 结束语 节拍器的起始拍的声音和其它拍的声音不同,听觉和视觉效果好,节拍精度高,调节方便。多名琴童使用该节拍器练钢琴均取得很好的效果。硬件成本低廉,不易损坏,可以将外形设计成工艺品。基于AT89C51 单片机的节拍器具有较好的应用价值。

    时间:2021-03-21 关键词: 单片机 节拍器 AT89C51

  • ARM-FPGA杜邦线之片间传输--高速数据串扰

    ARM-FPGA杜邦线之片间传输--高速数据串扰

    片间传输--高速数据串扰 这几天调试一个东东,STM32的FSMC传输数据给Bingo自制的VGA控制器,由于没有直接打板,板间用了杜邦线连接。FMSC传输模式为最快的速度,FSMC写时序如下图所示,最快达到了72M(HCLK)的速度。但是我用了杜邦线,,没办法。。。神奇的事情不断地发生,幽灵一直在身边,以此分享给大家点滴心得,虽然我也只是知道皮毛。 下图是我项目中STM32与FPGA间,杜邦线连接的图,杜邦线20cm,FSMC 最高HCLK=72MHz。从右到左分别为D0-D15,CS,RS,WR,RD 先贴一下贵人相助时的聊天记录,众人经验总结,精华部分,值得分享: 高速偏见传输,总结如下: (1)杜邦线不能太长 (2)干扰大了,可以加电容,来避免数据的串扰 (3)供电需要稳定,加退耦电容 (4)电磁干扰 (5)跳变巨大的时候,会有干扰,将数据线与信号线隔离或者分开 (6)异步数据,首先要D触发器锁存 (7)Ffff到0000跳板太大了,干扰太大了 解决方案: 开始相信是STM32代码的问题,我测试代码,以下是我写入的测试代码,1024*768个数据。 void LCD_ColorTest2(void) { u16 i,j; LCD_Write_Address(0,0);//reset ram addr LCD_WriteData_Begin();//Begin to Write data for(i=0;i<768;i++) { for(j=0;j<1024;j++) LCD_WriteData(i*j); } LCD_WriteData_End(); } 每次都会在屏幕2/3的时候挂掉,最后发现,2/3屏幕的时候,DATA=512*1024-1=ffff,下一个数据位0000,问题正在这里,因为跳变,干扰太大了,正如聊天记录说的那样,于是我将WR与RS分离连接到功能相同的边上的引脚(幸亏边上IO也预留了FSCM的IO)。这样眼睁睁的分离了信号线与数据线,奇怪的是,这样竟然真的图像传输完整,数据没有缺失了。如下图所示,黄色为更改为之后的WR与RS信号线。 记得以前在实验室画板子的时候,高速的通信,以太网,RFID等,信号线都要用GND来隔离,杜邦线是最可恶的东西。记得当年那个900M的射频板子,那真的是吃过亏的。

    时间:2021-03-21 关键词: ARM-FPGA 片间传输 高速数据串扰

  • S3C44B0X的最小系统构架

    S3C44B0X的最小系统构架

    一、前言 ARM7TDMI是世界上广泛使用的32位嵌入式RISC处理器,是目前用于低端的ARM处理器核。它的高性能,低功耗,廉价和精简的程序代码一直是市场上的领先者。ARM公司研发了针对ARM图形化的编译器,连接器和调试器,这为整个嵌入式系统的开发调试提供了较好的环境。Samsung S3C44B0微处理器是三星公司提供的高性价比和高性能的微控制器解决方案,它使用ARM7TDMI核,从SamsungS3C4510B停产后,SamsungS3C44B0X更成为同类芯片的主流。 现今许多嵌入式系统要实现复杂的功能都需要操作系统支持,有了操作系统的支持,编写特定的应用程序就比较容易了。本文以uClinux最新源代码包为基础,修改代码以适合S3C44B0X的系统,包括启动程序bootloader,Linux内核源代码修改,根文件系统的定制。 二、硬件架构 一个最小的嵌入式系统包括以下几个部分:CPU、SDRAM、FLASH。但为了调试方便本文介绍的系统带了网口和串口,网口用于传输数据大批量数据,串口用于传输字符数据,这样就可以和主机通信了。硬件框图如图1所示。 系统实验板主要芯片(CPU,UART,FLASH(ROM),ETHERNETSDRAM),管脚连接如图2所示。 图2 S3C44B0X与SDRAM,Flash,以太网口,串口的连接图 三、软件架构 基于uClinux的嵌入式系统软件一般由三部分构成:启动程序(bootloader)、内核文件(kernel)、根文件系统(rootfs)。uClinux源代码包含程序库,Linux内核和根文件系统所需要的应用程序源代码,而启动程序要自己编写。 启动程序先初始化CPU,然后引导uClinux操作系统,操作系统引导起来后会加载根文件系统,加载根文件系统有几种方式,这里采用blockmemory技术(可以避免在启动时传递内核rootfs位置的参数)。根文件系统使用romfs文件系统,这种文件系统相对简单,很适合嵌入式系统的应用。这三部分在FLASH和内存的分配地址如图3和图4所示。 最难调试的部分应该是启动程序部分;对于以后的内核可以根据串口输出的错误信息来判断。笔者采用ARM公司的调试工具AXD来调试bootloader。 1.启动程序(bootloader) bootloader有两大功能:初始化CPU和引导Linux内核(采用将压缩内核拷贝到内存解压方法,这样可以加快启动速度)。 (1)初始化CPU 1)中断向量 ARM要求中断向量表必须放置在从0地址开始,连续8×4字节的空间内。每当一个中断发生以后,ARM处理器便强制把PC指针置为向量表中对应中断类型的地址值。因为每个中断只占据向量表中1个字的存储空间,只能放置一条ARM指令,使程序跳转到存储器的其他地方,再执行中断处理。 所以0地址开始的地方,分配为flash的空间,在0地址开始处放中断向量,作为uClinux的启动代码,实现方式如下: b reset add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 add pc,pc,#0x0c000000 0x0c000000为内存起始地址,uClinux将中断向量放入地址0x0c000008,因为cpu发生中断时仍然会跳转到0地址处的中断向量表中去,所以此处要修改中断向量表的地址,使程序能正确跳转到uClinux实现的中断向量处。由于ARM系统的三级流水线技术,当程序执行到x地址处,pc指针的值其实等于x+8。 在uClinux中相关代码如下: #ifdef CONFIG_ARCH_S3C44B0 #undef vectors_base() #define vectors_base() (0x0c000008) #endif add pc,pc,#0x0c000000这条语句将会有8的偏移量,当pc等于0时,这条指令的执行结果为pc=0x0c000008。 2)中断处理 这段reset代码放在flash中。这样系统每次复位后,会执行flash上的reset代码。 初始化存储器系统 初始化堆栈 在初始化堆栈时应该特别注意,堆栈指针地位置一定不能和其他程序的地址相冲突,否则程序很容易异常。 初始化有特殊要求的端口,设备 初始化用户程序执行环境 改变处理器模式 调用主应用程序 (2)引导Linux内核 主应用程序里放操作系统引导程序的代码,一般此处应该传递给Linux内核启动参数(如ramdisk的位置等),但程序加载内核使用blockmemory技术,所以不用传递参数来加载根文件系统rootfs。只要将Linux内核和rootfs从flash(如图1)拷贝到内存中相应位置(如图2)。拷贝完成后跳转到内核入口地址处执行。具体方法是用将压缩内核的地址转换成函数的指针,并传递处理器号ARCH_NUMBER。这在uClinux内核源代码的目录文件uClinux-dsit/linux2.4.x uClinux-dsit/linux2.4.x/arch/armnommu/tools/Match-types中定义: s3c44b0 ARCH_S3C44B0 S3C44B0 178 2.uClinux系统内核 uClinux的官方网站发布的最新uClinux移植包是uclinux-dist-20040408,它包含了三星S3C4510B的源代码,可以将它移植到S3C44B0平台下。具体内核源代码的改动如下(其中出现的内存地址可以参考图4)。 (1)Linux内核编译配置选项 文件uClinux-distvendorsSamsungS3C44B0config.linux-2.4.x中: #System Type CONFIG_ARCH_MBA44B0=y CONFIG_NO_PGT_CACHE=y CONFIG_CPU_32=y CONFIG_CPU_ARM710=y CONFIG_CPU_WITH_CACHE=y CONFIG_SERIAL_44B0=y DRAM_BASE=0x0c000000#SDRAM起始地址 DRAM_SIZE=Ox01000000#SDRAM大小16M FLASH_MEM_BASE=0x00000000#FLASH起始地址 FLASH_SIZE=0x00200000 #FLASH大小2M 以后的make都以CONFIG_ARCH_S3C44B0=y这选项来解决是编译和$3C4480相关的其他选项。 (2)处理器MAKEFILE文件 文件uClinux-dsit/linux2.4.x/arch/armnommu/Makefie中: ifeq($(CONFIG_ARCH_S3C44B0),y) TEXTADDR=0x0c008000 MACHINE=s3c44bO endif TEXTADDR=0x0c008000#表明未压缩的内核的位置 uClinux-dsit/linux2.4.x/arch/armnommu/boot/Makefie: ifeq($(CONFIG_ARCH_S3C44B0),y) ZRELADDR =0x0c008000 ZTEXTADDR =0x0c300000 endif ZRELADDR=0x0c008000#表明未压缩的内核的位置 ZTEXTADDR=0x0c300000#表明压缩内核的位置 (3)中断向量地址 文件uClinux-dsit/linux2.4.x/include/asm-armnommu/proc-armv/system.h中 #ifdef CONFIG_ARCH_S3C44B0 #undef vectors_base() #define vectors_base()(0x0c000008) #endif 内存地址为0x0e000008的原因在启动程序一处已经提到过。 (4)处理器基本参数和类型 文件uClinux-dsit/linux2.4.x/arch/armnommu/machs3c44b0/arch.c中 MACHINE_START(MBA44B0,"S3C4480") MAINTAINER("MacWang") BOOT_MEM(0x0c000000,0x01c00000,0x01c00000) BOOT_PARAMS(0x0c000100) INITIRQ(genarch_init_irq) MACHINE_END 其中MACHINE_START(MBA44B0,"S3C44B0")的"MBA4480"是在asm/mach-types.h里定义的平台类型 BOOT_MEM(0x0c000000,0x01c00000,0x01c00000)指定了启动的RAM地址0x0c000000,特殊功能寄存器地址0x01c00000,BOOT_PARAMS(0x0c000100)表示内核参数的传递地址。 文件uClinux-dsit/linux2.4.x/arch/armnommu/tools/Match-types中: s3c44b0 ARCH_S3C44B0 S3C44B0 178 178是arch_number 在跳转到内核时,r0=0,r1=arch_number (5)网络驱动 这里采用的芯片是RTL8019AS,数据宽度用的是8位,它和ne2000兼容,所以只要修改ne2000的源代码(I/O起始地址、中断向量号、数据宽度)就可以实现网口的驱动了。 文件uClinux-dsit/linux2.4.x/driver/net/ne.e中: dev->base_addr=base_addr=NE2000_ADDR; dev->irq=NE2000_IRQ_VECTOR; NE2000_ADDR和NE2000IRQ_VECTOR分别是RTL8019AS的I/O起始地址和中断向量号,根据硬件连接改成相应的值。ne_probel函数中wordlength=2代表数据宽度为16位,改为wordlength=1代表数据宽度为8位。 (6)用blockmemory指定地址 对rootfs的加载一般有两种方式,用initrd技术和blockmemory。这里用blockmemory技术指定romfs的地址。(makemenuconfig时选定romfs和romdisksupport) 文件uClinux-dsit/linux2.4.x/driver/block/Blkmem.c中: arena[]={ #ifdef CONFIG_ARCH_S3C44B0 {0,0x0CC00000,-1}, #endif 这样只要将mmfs加载到相应的地址0x0CC00000,内核就可以找到。 修改完成后,编译内核(make menconfig)时要选择支持ramdisk和blkmem。ne2000网卡驱动,romfs和ramfs文件系统,TCP/IP协议的项。 3.根文件系统(rootfs) uClinux源代码包里有直接生成rootfs的工具,它所采用的是romfs格式的文件系统。 定制romfs时选择一些基本的shell命令,包括文件系统的一些命令,用户可根据需要选择自己需要的命令。笔者选择了telnet服务器程序(有利于从远程主机登录到系统上),ftp服务器和客户端命令等网络程序。 最后要结合自己的应用来编写一个uClinux操作系统下的应用程序。有了uClinux操作系统的支持,应用程序的编写就比较容易了。嵌入式uClinux系统下的应用程序和PC机上Linux系统下的编程相似,区别只是调用的库函数不一样。PC机上调试程序比较容易,可以先在PC机上调试代码,再从X86机移植程序到ARM处理器。在移植过程种应注意内存奇地址问题,在X86机上将4字节长的数据存放在一个内存奇地址上一般不会有问题,但在ARM处理器执行时就会产生异常。在Linux下有各种开源的代码,它们功能都比较完善,只要移植到uClinux下就可以了。这大大地增加了嵌入式系统地开发效率。 在uClinux-dist源代码包的usr目录下增加自己的程序文件夹,该文件夹内存放所需的程序和MAKEFILE文件。因为上一级目录的MAKEFILE会对子文件夹内的每个文件夹调用MAKE,所以在上层目录编译romfs时,就可以把这个程序放入根文件系统中。 最后把以上三个步骤生成的二进制文件用烧写FLASH工具分别烧写在如图3所示的flash地址处,就可以在嵌入式系统上运行一个带网络功能的uClinux操作系统了。 四、结语 本文根据笔者所用的嵌入式实验板为平台构建uClinux软件平台,在不同的S3C44B0X嵌入式系统中,根据硬件和应用的不同,可以更改相应的地方

    时间:2021-03-21 关键词: 最小系统 构架 S3C44B0X

  • 对于LDO和DCDC的不同点分析,在选择的时候需要知道哪些?

    对于LDO和DCDC的不同点分析,在选择的时候需要知道哪些?

    随着社会的快速发展,我们的LDO和DCDC也在快速发展,那么你知道LDO和DCDC的详细资料解析吗?接下来让小编带领大家来详细地了解有关的知识。 LDO是low dropout regulator,意为低压差线性稳压器,是相对于传统的线性稳压器来说的。传统的线性稳压器,如78xx系列的芯片都要求输入电压要比输出电压高出2v~3V以上,否则就不能正常工作。但是在一些情况下,这样的条件显然是太苛刻了,如5v转3.3v,输入与输出的压差只有1.7v,显然是不满足条件的。针对这种情况,才有了LDO类的电源转换芯片。 DC-DC电源模块的意思是直流变(到)直流(不同直流电源值的转换),只要符合这个定义都可以叫DC-DC转换器,包括LDO。但是一般的说法是把直流变(到)直流由开关方式实现的器件叫DC-DC。 如果输入电压和输出电压很接近,最好是选用LDO稳压器,可达到很高的效率。所以,在把锂离子电池电压转换为3V输出电压的应用中大多选用LDO稳压器。虽说电池的能量最後有百分之十是没有使用,LDO稳压器仍然能够保证电池的工作时间较长,同时噪音较低。 如果输入电压和输出电压不是很接近,就要考虑用开关型的DCDC了,应为从上面的原理可以知道,LDO的输入电流基本上是等于输出电流的,如果压降太大,耗在LDO上能量太大,效率不高。 DC/DC是将某一直流输入电压转换成另一直流输出电压,常见的有升压式(Boost)、降压式(Buck)、升降压式和反相结构。LDO是low dropout voltage regulator的缩写,就是低压差线性稳压器。它们都是将一种输入电压稳定到某一电压,LDO只能作为降压式输出。 DC-DC转换器包括升压、降压、升/降压和反相等电路。DC-DC转换器的优点是效率高、可以输出大电流、静态电流小。随著集成度的提高,许多新型DC-DC转换器仅需要几只外接电感器和滤波电容器。但是,这类电源控制器的输出脉动和开关噪音较大、成本相对较高。 DC/DC输出电压可通过反馈电阻调节,LDO有固定输出和可调输出两种类型;输入输出电压差是LDO重要参数,由LDO输出电流与输入电流相等,压差越小,芯片内部功耗越小,效率越高。LDO一般最大输出电流有几百mA,而DCDC最大输出电流有几A甚至更大。由DC/DC工作在开关状态导致其纹波/噪声要比LDO差,所以在设计时比较敏感的电路尽量选择LDO供电。如果输入输出电压接近,选择LDO比DC/DC相对效率高,若压差大,选择DC/DC高,因LDO输出电流与输入电流基本相等,压降太大,耗在LDO上能量太大,效率就不高。 如果你的输出电流不是很大(如3A以内), 而且输入输出压差也不大(如3.3V转2.5V等)就可以使用LDO的稳压器(优点是输出电压的ripple很小)。 否则最好用开关式的稳压器, 如果是升压, 也只能用开关式稳压器(如果ripple控制不好,容易影响系统工作)。 在选择DC-DC芯片时,要避免靠近敏感的弱信号,避免直接给这类电路直接供电。DC-DC工作的开关频率在设计时也是要考虑,避免出现开关频率直接或间接通过混频对信号干扰,在不确定下,最好把同步信号SYNC接由可控的PWM来调整工作在不同的开关频率下。 近几年来,随著半导体技术的发展,表面贴装的电感器、电容器、以及高集成度的电源控制芯片的成本不断降低,体积越来越小。由於出现了导通电阻很小的MOSFET可以输出很大功率,因而不需要外部的大功率FET。例如对于3V的输入电压,利用芯片上的NFET可以得到5V/2A的输出。其次,对于中小功率的应用,可以使用成本低小型封装。 以上就是LDO和DCDC的有关知识的详细解析,需要大家不断在实际中积累经验,这样才能设计出更好的产品,为我们的社会更好地发展。

    时间:2021-03-21 关键词: 芯片 LDO DCDC

  • RFID低功耗电子标签和手持阅读器设计开发

    RFID低功耗电子标签和手持阅读器设计开发

    射频识别RFID(Radio Frequency Identification)是近20年来蓬勃兴起的一种自动识别技术,它的应用领域十分广泛,如油田采油车出入自动识别管理与监测系统就是一个很好的例子,它能使管理人员及时掌握油田采油车辆和油井采油动态[1],以便更好地进行合理调度与管理等。 本文设计开发的RFID电子标签和阅读器应达技术参数指标如表1和表2所示。 1 硬件设计 1.1 总体方案 本文设计开发的射频收发系统的组成如图1所示。计算机通过异步串口向ARM控制器传送指令;ARM控制器再通过nRF24L01按照一定通信协议[2]将信号发送给指定地址的标签;若标签处于阅读器范围内[3],经外部触发后,会发送标签的一些相关信息给阅读器;阅读器部分的无线收发模块通过串口将接收到的数据上传至上位机进行数据显示处理。 1.2 电路设计 1.2.1 低功耗电子标签 单片机与nRF24L01连接电路设计如图2所示。 MSP430F149单片机的P1.6引脚接收来自nRF24L01的中断,低电平有效;由P1.7引脚控制nRF24L01的CE端,CE端的电平决定nRF24L01工作在接收模式还是发送模式;由P5.0引脚控制nRF24L01的片选使能CSN,CSN为低后SPI接口等待执行指令,每一条指令的执行都必须经过一次CSN由高到低的变化;MISO和MOSI分别为串行输入和输出,分别由P5.1和P5.2引脚控制。 1.2.2 阅读器 ARM系列单片机STR711FR2芯片与nRF24L01连接电路设计如图3所示。由单片机的P0.7引脚来控制CE端;由P0.10引脚接收来自nRF24L01的中断;由P1.9引脚控制nRF24L01的片选使能CSN;由P0.12引脚控制串行输出口MOSI;由P0.13引脚控制串行输入口MISO。STR711FR2采用16 MHz有源晶振,与上位机采用串口通信。 2 软件设计 2.1 通信协议和串口中断 本文所设计的RFID通信模块实现的功能包括广播识别、读/写标签编号、读/写标签密码、读/写标签数据信息。该通信协议如表3所示。 若在通信协议中设置较短的地址和校验可以提高传输的效率,同时为增强程序的运行效率,阅读器采用UART全局接收中断模式,以保证即时接收到上位机的指令。阅读器串口中断子程序如下: void UART0_IRQHandler(void) { int k; for (k=0; k<18; k++) UART_ByteReceive(UART0, (u8*) & bRByte[k], 0xFF); uart_flag=1; } 2.2 软件流程图 2.2.1 阅读器指令发送子程序 阅读器上电后,检查阅读器与上位机通信是否正常,当调试好串口工作后,按如图4所示的发送主程序流程进行指令发送。首先进行初始化,将nRF24L01的工作模式、通信地址及通信速率等参数配置好,然后等待上位机的数据包。阅读器在对上位机发送来的指令校验无误后,会向指定标签发送数据包,标签收到数据包后会发送一帧应答数据包,阅读器接收到应答数据包后,在PDA显示出来,至此完成一次数据的传递。 当有多个标签时,阅读器采用分时发送识别指令方式,可知道哪个标签没有在阅读器范围内。但应注意的是,阅读器每次向标签发送指令后,都应随后再发送一包指令来清理标签自动应答缓冲区(W_ACK_PAYLOAD),避免下次发送不同的指令时出现应答错误。 2.2.2 标签指令接收子程序 标签上电后,首先进行初始化,使标签完成一些配置寄存器的设置,然后进入待机模式,当标签进入阅读器的范围内,经阅读器唤醒后,标签会产生接收中断跳入监听指令子程序,即从低功耗模式转入工作模式,开始监听空中的数据包。当自动应答有效时,ACK消息将被发回。标签指令接收子程序流程图如图5所示。 2.3 电子标签低功耗模式软件编程实现 低功耗标签子程序设计如下所示: while(1) { if(flag_r==0) CLR_CE; //使NRF24L01进入待机模式 WDTCTL=WDT_MDLY_32; //定时器 IE1|=WDTIE; BIS_SR(LPM0); //单片机进入LPM0模式 while(flag_wr==1||flag_r==1) //接收中断标志 { IE1|=0x00; flag_wr=0; lag_r=0; //接收标志清零 BIS_SR(LPM2);} //使单片机进入LPM2模式 delay(3000); } 3 标签测试结果与分析 标签设计可根据需要设计出两种天线形式,本次测试设计出板载天线[4]和外置天线两种电路板。测试时可将毫安表串联于电路中,观察标签的功耗变化,在不同的功耗下分别进行测试。测试结果表明,外置天线和板载天线都能满足使用者要求。外置标签通信测试结果如图6所示。 从图中可以看出,功耗在12.3 mA时,随着阅读器与电子标签距离的增加,到达10 m处通信成功率恒定为100%,此时标签一直处于接收模式;设置并调整软件中相关参数使得标签功耗为6 mA左右时,随着距离的增加,在6 m以内通信成功率为100%,大于6 m时通信成功率会有一定的下降,但能保证在90%以上;设置并调整软件相关参数使得功耗降低到1.2 mA左右时,随着距离的增加通信成功率会明显降低,但在10 m以内仍能保证较高的通信成功率,此时功耗已降到最低,通过重复2~3次识别,其成功率完全能满足使用需求。 本文设计了一种由单片机控制、以nRF24L01为无线射频收发芯片的RFID通信方案,其特点是通信快速和功耗较低。电子标签在不工作情况下,功耗可降到1.2 mA左右。该设计还适用于多个电子标签场合,阅读器采用分时向标签发送指令的方式,每次发送后应再发送一包指令清理标签自动应答缓冲区(W_ACK_PAYLOAD),以避免下次出现应答错误。 该设计所研制的样机具有功耗低、通信快速、误码率低、抗干扰性好、能识别多个标签等特点,能满足对体积和功耗要求较高的油田开发设备的实际使用要求。

    时间:2021-03-21 关键词: RFID 低功耗电子标签 手持阅读器

发布文章