PCB布线设计-模拟和数字布线的异同工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势。尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与 模拟 或现实环境接口的电路设计。模拟和数字领域的布线策略有一些类似之处,但要获得更好的工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势。尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与模拟或现实环境接口的电路设计。模拟和数字领域的布线策略有一些类似之处,但要获得更好的结果时,由于其布线策略不同,简单电路布线设计就不再是最优方案了。本文就旁路电容、电源、地线设计、电压误差和由PCB布线引起的电磁干扰(EMI)等几个方面,讨论模拟和数字布线的基本相似之处及差别。模拟和数字布线策略的相似之处旁路或去耦电容在布线时,模拟器件和数字器件都需要这些类型的电容,都需要靠近其电源引脚连接一个电容,此电容值通常为0.1mF。系统供电电源侧需要另一类电容,通常此电容值大约为10mF。这些电容的位置如图1所示。电容取值范围为推荐值的1/10至10倍之间。但引脚须较短,且要尽量靠近器件(对于0.1mF电容)或供电电源(对于10mF电容)。在电路板上加旁路或去耦电容,以及这些电容在板上的位置,对于数字和模拟设计来说都属于常识。但有趣的是,其原因却有所不同。在模拟布线设计中,旁路电容通常用于旁路电源上的高频信号,如果不加旁路电容,这些高频信号可能通过电源引脚进入敏感的模拟芯片。一般来说,这些高频信号的频率超出模拟器件抑制高频信号的能力。如果在模拟电路中不使用旁路电容的话,就可能在信号路径上引入噪声,更严重的情况甚至会引起振动。
上传时间: 2013-11-03
上传用户:shaojie2080
数字地模拟地的布线规则,如何降低数字信号和模拟信号间的相互干扰呢?在设计之前必须了解电磁兼容(EMC)的两个基本原则:第一个原则是尽可能减小电流环路的面积;第二个原则是系统只采用一个参考面。相反,如果系统存在两个参考面,就可能形成一个偶极天线(注:小型偶极天线的辐射大小与线的长度、流过的电流大小以及频率成正比);而如果信号不能通过尽可能小的环路返回,就可能形成一个大的环状天线(注:小型环状天线的辐射大小与环路面积、流过环路的电流大小以及频率的平方成正比)。在设计中要尽可能避免这两种情况。 有人建议将混合信号电路板上的数字地和模拟地分割开,这样能实现数字地和模拟地之间的隔离。尽管这种方法可行,但是存在很多潜在的问题,在复杂的大型系统中问题尤其突出。最关键的问题是不能跨越分割间隙布线,一旦跨越了分割间隙布线,电磁辐射和信号串扰都会急剧增加。在PCB设计中最常见的问题就是信号线跨越分割地或电源而产生EMI问题。 如图1所示,我们采用上述分割方法,而且信号线跨越了两个地之间的间隙,信号电流的返回路径是什么呢?假定被分割的两个地在某处连接在一起(通常情况下是在某个位置单点连接),在这种情况下,地电流将会形成一个大的环路。流经大环路的高频电流会产生辐射和很高的地电感,如果流过大环路的是低电平模拟电流,该电流很容易受到外部信号干扰。最糟糕的是当把分割地在电源处连接在一起时,将形成一个非常大的电流环路。另外,模拟地和数字地通过一个长导线连接在一起会构成偶极天线。
上传时间: 2013-10-23
上传用户:rtsm07
本文介绍一种采用智能数字温度传感器DS18B20进行温度采集,并通过单片机与PC机完成数据处理的系统。 硬件电路由四部分组成:温度数据采集部分,即时温度显示驱动部分,温度数据存储部分和上位PC机数据处理部分。整个硬件设计原理图如图1所示。
上传时间: 2013-10-28
上传用户:wettetw
用单片机制作多功能莫尔斯码电路:用单片机制作多功能莫尔斯码电路莫尔斯电码通信有着悠久的历史,尽管它已被现代通信方式所取代,但在业余无线电通信和特殊的专业场合仍具有重要的地位,这是因为等幅电码通信的抗干扰能力是其它任何一种通信方式都无法相比的。在短波波段用几瓦的功率即可进行国际间的通信,收发射设备简单易制成本低廉,所以深受业余无线电爱好者的喜爱,是业余无线电高手必备的技能。要想熟练掌握莫尔斯电码的收发技术除了持之以恒的毅力外,还需要相关的设备。设计本电路的目的就是给爱好者提供一个实用和训练的工具。 一、功能简介 本电路可以配合自动键体和手动键体,产生莫尔斯码控制信号,设有16种速度,从初学者到操作高手都能适用。监听音调也有16种,均可以通过功能键进行选择。可以按程序中设定好的呼号自动呼叫,设有听抄练习功能,听抄练习有短码和混合码两种模式,分别对10个数字和常用的38个混合码模拟随机取样,产生分组报码,供爱好者提高抄收水平之用,速度低4档的听抄练习是专为初学者所设,内容是时间间隔较长的单字符。设有PTT开关键,可以决定是否控制发射机工作,不需要反复通断控制线。无论当前处于呼叫状态还是听抄状态只要电键接点接通则自动转到人工发报程序。4分钟内不使用电路将自动关闭电源,只有按复位键才能重新开始工作。先按住听抄练习键复位则进入短码练习状态,其它功能不变。从开机到自动关机执行每个功能都有不同的莫尔斯码提示音。本电路具有较强的抗高低频干扰的能力和使用方便的大电流开关接口,以适应不同的发射设备。 二、硬件电路原理硬件电路如图1所示。设计电路的目的在于方便实用,以免在紧张的操作中失误,所以除了听抄练习键外其它键没有定义复用功能。各键的作用在图中已经标出。PTT控制在每次复位时处于关闭状态,每按动一次PTT功能键则改变一次状态,这样可以使用软件开关控制发射。 PTT处于控制状态时发光二极管随控制信号闪亮。考虑到自制设备及淘汰军用设备与高档设备控制电流的不同,PTT开关管采用了2SC2073,可以承受500mA的电流,同时还增加了无极性PTT开关电路,无论外部被控制的端口直流极性如何加到VT3的极性始终不变,供有兴趣的爱好者实验。应该注意,如果被控制的负载是感性,则电感两端必须并联续流二极管,除自制设备外成品机在这方面一般没有什么问题。手动键只有一个接点,接通后产生连续的音频和发射控制信号。在本电路中手动键的输入端是P1.5 ,程序不断检测P1.5电平,当按键按下时P1.5电平为0,程序转入手动键子程序。 自动键的接点分别接到P1.3和P1.4 ,同样当程序检测到有接点闭合时便自动产生“点”或“划”。音频信号从P输出,经VT1放大后推动扬声器发音。单片机的I/O口在输入状态下阻抗较高,容易受到高低频信号干扰,所以在每个输入端口和三极管的be端并联电阻和高频旁路电容,确保在较长的电键连线和大功率发射时电路工作稳定。图2是印刷电路版图,尺寸为110mmX85mm,扬声器用粘合剂直接粘接在电路版有铜箔的面。 三、软件设计方法 “点”时间长度是莫尔斯电码中的基本时间单位。按规定“划”的时间长度不小于三个“点”,同字符中“点”与“划”的间隔不小于一个“点”,字符之间不小于一个“划”,词与词之间不应小于五个“点”。在本程序中用条件转移指令来产生“点”时间长度。通过速度功能键功可以设置16种延时参数。用T0中断产生监听音频信号,并将中断设为优先级,保证在听觉上纯正悦耳。T1用于自动关机计时,如果不使用任何功能四分钟后将向PCON 位写1,单片机进入休眠状态,此时耗电量仅有几个微安。自动键的“点”或“划”以及手动键的连续发音都是子程序的反复调用。P1.2对地短接时自动呼叫可设定为另一内容。为了便于熟悉汇编语言的读者对发音内容进行修改,这里介绍发音字符的编码方法。莫尔斯码的信息与计算机中二进制恰好相同,我们可以用0表示“点”,用1表示“划”。提示音、自动呼叫、听抄内容等字符是预先按一定编码方式存储在程序中的常数。每个字符的莫尔斯码一般是由1至6位“点”、“划”组成,也就是发音次数最多6次。程序中每个字符占用1个字节,字符时间间隔不占用字节,但更长的延时或发音结束信息占用一个字节。我们用字节的低三位表示字节的性质,对于5次及5次以下发音的字符我们用存储器的高5位存储发音信息,发音顺序由高位至低位,用低3位存储发音次数,发音时将数据送入累加器A,先得到发音次数,然后使A左环移,对E0进行位寻址,判断是发“点”还是“划”,环移次数由发音次数决定。对于6次发音的字符不能完全按照上述编码规则,否则会出现信息重叠,如果是6次发音且最后一次是“划”我们把发音次数定义为111B,因为这时第6次位寻址得到的是1。如果第6次发音是“点”,那么这个字符的低三位定义为000B。字符间隔时间由程序自动产生,更长的时间隔或结束标志由字节低三位110B来定义,高半字节表示字符间隔的倍数,例如26H表示再加两倍时间间隔。如果字节为06H则表示读字符程序结束,返回主程序。更详细的内容不再赘述,读者可阅读源程序。四、使用注意事项手动键的操作难度相对大一些,时间节拍全由人掌握,其特点是发出的电码带有“人情味”。自动键的“点”、“划”靠电路产生,发音标准,容易操作,而且可以达到相当快的速度,长时间工作也不易疲劳。在干扰较大、信号微弱的条件下自动键码的辨别程度好于手动键码。初学者初次使用手动键练习发报要有老师指导,且不可我行我素,一旦养成不正确的手法则很难纠正。在电台上时常听到一些让对方难以抄收的电码,这可能会使对方反感而拒绝回答。使用自动键也应在一定的听抄基础上再去练习。在暂时找不老师的情况下可多练习听力,这对于今后能够发出标准正确的电码非常有益。
上传时间: 2013-10-31
上传用户:sdq_123
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943
因为图题所示为周期性数字波,所以两个相邻的上升沿之间持续的时间为周期,T=10ms频率为周期的倒数,f=1/T=1/0.01s=100HZ,占空比为高电平脉冲宽度与周期的百分比,q=1ms/10ms*100%=10%.
上传时间: 2013-10-31
上传用户:angle
PCB布线设计-模拟和数字布线的异同工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势。尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与 模拟 或现实环境接口的电路设计。模拟和数字领域的布线策略有一些类似之处,但要获得更好的工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势。尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与模拟或现实环境接口的电路设计。模拟和数字领域的布线策略有一些类似之处,但要获得更好的结果时,由于其布线策略不同,简单电路布线设计就不再是最优方案了。本文就旁路电容、电源、地线设计、电压误差和由PCB布线引起的电磁干扰(EMI)等几个方面,讨论模拟和数字布线的基本相似之处及差别。模拟和数字布线策略的相似之处旁路或去耦电容在布线时,模拟器件和数字器件都需要这些类型的电容,都需要靠近其电源引脚连接一个电容,此电容值通常为0.1mF。系统供电电源侧需要另一类电容,通常此电容值大约为10mF。这些电容的位置如图1所示。电容取值范围为推荐值的1/10至10倍之间。但引脚须较短,且要尽量靠近器件(对于0.1mF电容)或供电电源(对于10mF电容)。在电路板上加旁路或去耦电容,以及这些电容在板上的位置,对于数字和模拟设计来说都属于常识。但有趣的是,其原因却有所不同。在模拟布线设计中,旁路电容通常用于旁路电源上的高频信号,如果不加旁路电容,这些高频信号可能通过电源引脚进入敏感的模拟芯片。一般来说,这些高频信号的频率超出模拟器件抑制高频信号的能力。如果在模拟电路中不使用旁路电容的话,就可能在信号路径上引入噪声,更严重的情况甚至会引起振动。
上传时间: 2013-11-05
上传用户:604759954
数字地模拟地的布线规则,如何降低数字信号和模拟信号间的相互干扰呢?在设计之前必须了解电磁兼容(EMC)的两个基本原则:第一个原则是尽可能减小电流环路的面积;第二个原则是系统只采用一个参考面。相反,如果系统存在两个参考面,就可能形成一个偶极天线(注:小型偶极天线的辐射大小与线的长度、流过的电流大小以及频率成正比);而如果信号不能通过尽可能小的环路返回,就可能形成一个大的环状天线(注:小型环状天线的辐射大小与环路面积、流过环路的电流大小以及频率的平方成正比)。在设计中要尽可能避免这两种情况。 有人建议将混合信号电路板上的数字地和模拟地分割开,这样能实现数字地和模拟地之间的隔离。尽管这种方法可行,但是存在很多潜在的问题,在复杂的大型系统中问题尤其突出。最关键的问题是不能跨越分割间隙布线,一旦跨越了分割间隙布线,电磁辐射和信号串扰都会急剧增加。在PCB设计中最常见的问题就是信号线跨越分割地或电源而产生EMI问题。 如图1所示,我们采用上述分割方法,而且信号线跨越了两个地之间的间隙,信号电流的返回路径是什么呢?假定被分割的两个地在某处连接在一起(通常情况下是在某个位置单点连接),在这种情况下,地电流将会形成一个大的环路。流经大环路的高频电流会产生辐射和很高的地电感,如果流过大环路的是低电平模拟电流,该电流很容易受到外部信号干扰。最糟糕的是当把分割地在电源处连接在一起时,将形成一个非常大的电流环路。另外,模拟地和数字地通过一个长导线连接在一起会构成偶极天线。
上传时间: 2013-10-19
上传用户:playboys0
X9241概述X9241是XICOR公司生产的、把4个E2POT数字电位器集成在单片的CMOS集成电路上的一种数字电位器。它包含4个电阻阵列,每个阵列包含63个电阻单元,在每个单元之间和2个端点之间都有被滑动单元访问的抽头点。滑动单元在阵列中的位置由用户通过2线串行总线接口控制。每个电阻阵列与1个滑动端计数寄存器(WCR)和4个8位数据寄存器联系在一起。这4个数据寄存器可由用户直接写入和读出。WCR的内容控制滑动端在电阻阵列中的位置,其功能框图如图1所示。X9241工作原理 X9241支持双向总线的定向规约,是一个从属器件。它的高4位地址为0101(器件类型辨识符),低4位地址由A3~A0输入端状态决定。在SDA线上的数据只有在SCL为低期间才能改变状态。当SCL为高时,SDA状态的改变用来表示开始和终止条件(开始条件:SCL为高时,SDA由高至低的跳变;终止条件:SCL为高时,SDA由低至高的跳变)。送给X9241的所有命令都由开始条件引导,在其后输出X9241从器件的地址。X9241把串行数据流与该器件的地址比较,若地址比较成功,则作出一个应答响应。送到X9241的下一个字节包括指令及寄存器指针的信息,高4位为指令,低4位用来指出4个电位器中的1个及4个辅助寄存器中的1个。
上传时间: 2014-01-18
上传用户:黄酒配奶茶
介绍一种存储结构,LDAP,可用于数字证书等平面数据库信息的存储等。
标签: 存储结构
上传时间: 2014-12-20
上传用户:妄想演绎师