工频50Hz的滤除电路.docx
- 文档编号:9852464
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:28
- 大小:355.52KB
工频50Hz的滤除电路.docx
《工频50Hz的滤除电路.docx》由会员分享,可在线阅读,更多相关《工频50Hz的滤除电路.docx(28页珍藏版)》请在冰豆网上搜索。
工频50Hz的滤除电路
3.5工频50Hz的滤除电路
工频干扰是经络信号的主要干扰,虽然前置放大电路对共模干扰具有较强的抑制作用,但有部分工频干扰是以差模信号方式进入电路的,且频率处于经络信号的频带之内,加上电极和输入回路不稳定等因素,前级电路输出的经络信号仍存在较强的工频干扰,所以必须专门滤除。
采用如下图所示是有源双T带阻滤波器,该电路的Q值随着反馈系数
(0<
<1)的增高而增高,Q值与
的关系如下:
,调节R16和R17的比值可改变Q值。
图3-10
3.5.1参数计算:
,
,C7=C8=C,C6=2C
先取
,由公式
计算得
,在软件上模拟后,调整为:
,
,
,
。
3.5.2Q值讨论
50Hz陷波器的传递函数为:
(1)
幅频特性为:
(2),
=1,
=100
rad。
国家允许交流供电频率在49.5~50.5Hz范围内,所以50Hz陷波器的Q值并不是越高越好,太高时,阻带过窄,若工频干扰频率发生波动,则根本达不到滤除工频干扰的目的。
而Q值太小时,又可能会滤掉有用信号。
选择3dB处截止频率为47.5Hz,52.5Hz,将
,
分别代入
中计算得,Q1=9.74,Q2=10.24,所以取
=10,R17=22M,R16=510K。
软件模拟设计50Hz陷波器幅频特性如下所示:
3.6后级放大电路
后级放大采用反相放大器,反相放大器一般形式如下图所示:
图3-12
在此电路上加一个电容,就可以同时实现放大和滤波,称之为实用反相放大器。
低端截止频率设计为0.05Hz,由式
=0.05Hz来定C10,R18的值,取C10=33
,
R18=100K。
再由
=-5,取R19=510KΩ。
高端截止频率
,由此式计算出C11的值,取C12=680
。
图3.14
设计实用反相放大器的模拟幅频特性如下所示(输入信号1mV):
图3-15
3.7总结和讨论
信号经过放大、滤波、处理后送入单片机进行A/D变换,一方面将A/D变换后的数据通过USB传到主机;
经络系统的前向通路对目前面世的许多医学仪器起着不可漠视的重要角色;这相当于一个基石,没有了它,经络信号就不能很好的放大和给A/D采集,所以当前对经络的研究是至关重要的。
刚要做时,我觉得无法入手,经过长时间的对相关资料的了解,明白自己首要做的事情就是要了解经络信号的特点,因为经络信号输出时的幅度不上5mV,那么选择一个适合的放大器对设计是第一个要点,在课题的一步步设计下去,碰到的问题不少,如放大电路中芯片的选择,在对比经络放大的各种要求才确定一个最方便、最实用的办法。
根据经络信号的特点,设计了一个带通滤波器、一个陷波器来对信号进行滤波,也使我明白了多阶滤波器的设计;还有一点很重要的就是电容和电阻的参数确定比较繁琐,在选取使要考虑电阻标称值。
第4章软件分析与设计
4.1系统总体设计
USB数据采集系统软件设计主要包括两部分:
一是USB设备端的单片机软件,主要完成USB协议处理与数据交换(多数情况下是一个中断子程序)以及其它应用功能程序。
二是PC端的程序,由USB设备驱动程序和应用程序两部分组成。
公司在Express的开发包中提供了一个通用驱动程序,我们对该驱动程序进行了封装,完成应用程序与USB操作系统的接口功能。
应用程序根据下位机的数据包格式及通信协议,提取出各种信息供其它模块使用。
PC端程序的开发难度比较大,程序员不仅要熟悉USB协议,还要熟悉Windows体系结构并能熟练运用DDK工具。
4.2固件程序设计
4.2.1USB接口固件设计
对于单片机控制程序,目前没有任何厂商提供自动生成固件的工具,因此所有程序都要由自己手工编制。
根据USB协议,任何传输都是由主机开始的,这样单片机作它的前台工作,等待中断。
主机首先要发令牌包给USB设备,设备接收到令牌包后就给单片机发中断,单片机进入中断服务程序,首先读C8051F320的中断寄存器,判断USB令牌包的类型,然后执行相应的操作。
因此,USB单片机程序主要就是中断服务程序的编写。
在USB单片机程序中要完成对各种令牌包的响应,其中比较难处理的是SETUP包,主要是端口0的编程。
4.2.2单片机主程序设计
主程序由两部分组成:
第一、初始化单片机;第二、主循环部分,其任务是可以中断的,并对经络信号进行处理。
在此选用了KeilC51语言进行了程序的调试和软件仿真。
KeilC51开发系统可以完成编辑、编译、连接、调试和仿真等整个开发流程。
可以用它来编辑C或汇编文件,然后由C51或A51编译器生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS).ABS文件由OH51转换成标准的HEX文件,以提供给调试器使用,进行源代码级调试,直接对目标板进行调试,也可以直接写入程序存储器中。
4.2.2.1初始化过程初始化程序分为两个部分,首先初始化单片机内部寄存器,定时器,设置看门狗和外部I/O口,以及USB相关得寄存器进行初始化。
4.2.2.2主循环部分完成初始化工作后,就可作其它的前台工作了,并在前台判断是否有Setup包(通过一个变量,当中断服务程序检测到有Setup包时,设置该变量),然后执行响应的控制传输。
本系统的主程序流程图如图4-2所示。
图4-1主程序流程图
图4-2中断程序流程图
中断服务程序对时间敏感的,必须马上执行。
前面己经提到C8051F320中的单片机固化程序主要就是中断服务程序。
主程序和中断程序之间的数据交换主要是靠数据缓冲器和事件标志来完成的。
如中断流程图4-3所示,中断程序主要进行端点的控制。
如表4-1所示,USB提供3组端点,其中端点0为设备缺省支持的控制端点:
端点1为普通端点,可以作为块传输或中断传输端点;端点2称为主端点,主要用于大块数据的传输,采用双缓冲技术以更好的支持实时应用的等时传输,支持DMA操作。
可以通过SetMode命令从1种传输模式中选择一种设置,即将主端点设置为等时传输或非等时传输。
端点
索引
传输方向
最大包尺寸(字节)
0
0
1
OUT
IN
16
1
2
3
OUT
IN
16
2
4
5
OUT
IN
64
表4-1C8051F320端点类型
块输出端点:
当D12需要接收一个来自USB总线上的数据包时,向CPU产生一个中断请求,CPU接收到中断请求信号后,马上服务于中断程序。
在中断服务程序中,用单片机固化程序来将D12内部寄存器的数据转移到数据缓冲器(CPU内部RAM)中并等待主程序来处理,且将D12内部寄存器清空以便接收新的数据包。
CPU可接着执行它的主程序,并且检查数据缓冲器中是否有新的数据并加以处理。
在这种结构下,CPU不管数据是来自USB总线、串行口还是并行口,它的主要任务是查看数据缓冲器是否有新的数据以便处理。
控制端点:
它和块输出端点在数据处理方面概念相同。
当中断服务程序(ISR)在接收和储存控制数据包的同时,设置相应的寄存器标志。
因为所有的标准设备、类等都是在协议层中处理的,ISR的这种结构则可以保持它的效率。
下面给出控制端点输出(如图4-4)和控制端点输入(如图4-4)处理程序流程图。
图4-4
图4-5
4.2.3设备配置信息
这是系统枚举并配置USB设备所依据的一系列数据结构的定义。
这些数据结构完全遵循USB规范,并对厂商和设备特征。
主要包括:
1个设备描述符,,1个配置描述符,1个接口描述符,2个端口描述符,和若干字符串描述符(包括标识,厂商,产品,序列号)。
这里,2个端口描述符定义分别定义了1个中断输出和1个中断输入端点,查询间隔为50毫秒。
设备描述符中定义厂商ID,产品ID。
两个ID构成硬件ID,系统将根据硬件ID查找并自动加载所需要的驱动程序。
图4-6分层通信模型
图4-6中的通信模型是对主机与USB设备的一个分层通信模型的描述,它表明主机与USB设备之间软件以及数据通信的对应关系。
主机软件通过对USB设备的端点和管道进行操作实现主机与USB设备之间的通信,USB总线接口层为主机和USB设备提供了物理的连接,USB设备层是通过控制管道将系统软件与逻辑设备连接起来,功能层通过数据管道将客户软件与USB设备的功能接口连接起来。
对于USB设备层和功能层而言,这两层d都有其层间的逻辑通信,而这种逻辑通信实际上是通过USB总线接口层来完成其数据传输的。
4.3设备驱动程序
驱动程序使用在主机上,用来程序化一个UBS设备。
在WindowS系统下,主机与设备之间的USB通信必须经过设备驱动程序来传输。
设备驱动程序知道如何与系统的UBS驱动程序、以及与存取设备的应用程序沟通。
应用程序不需要知道
它所通信的设备,其实际的连接地址、信号种类以及通信所用的协议等细节,这些工作是由设备驱动程序来处理的。
应用程序只需知道设备的名称,或是设备的功能即可。
4.3.1USB驱动程序层
WindowS系统中管理设备通信的部分是I/O子系统(I/0Subsystem)。
I/O子系统分成数层,每一层包含一个或多个驱动程序,通信的要求在这些层次间分别传递。
在1/0子系统内有一个UBS子系统,包含有处理所有设备的UBS通信的驱动程序。
4.3.2函数驱动程序
函数驱动程序(functinodrive)r让应用程序与UBS设备,通过API函数来沟通。
这些API函数属于Windwos的Win32子系统,Win32子系统同时也管理着执行应用程序、读取键盘与鼠标输入、在屏幕上显示输出等用户函数。
函数驱动程序同时知道如何与较低级的总线驱动程序沟通,总线驱动程序控制着硬件。
图34是应用程序与各个驱动程序,如何一起完成UBS通信的结构图。
函数驱动程序通常被指为设备驱动程序,不过设备驱动程序除了函数驱动程序外,还包含总线驱动程序。
函数驱动程序可以是一个类别驱动程序,或者说一个特定的设备驱动程序。
当设备或是子类别的要求超过类别驱动程序的能力时,会有辅助的过滤器驱动程序来增加类别驱动程序的能力。
一个上层的过滤器驱动程序位于类别驱动程序的上方,如图34所示。
从应用程序传来的要求,会先经过上层的过滤器驱动程序,然后才传给类别驱动程序。
一个下层的过滤器驱动程序位于类别驱动程序与总线驱动程序之间,类别驱动程序将要求传递给下层过滤器驱动程序,然后再传给总线驱动程序。
USB的总线驱动程序包含:
(一)根集线器驱动程序(root一hubdriVer)
(2)总线类别驱动程序(bus一elassdriVer)
(3)主机控制器驱动程序(host一eontrollerdriVer)
根集线器驱动程序管理连接端口的初始化,以及与设备驱动程序和总线类别驱动程序之间的通信。
总线类别驱动程序管理总线的电源、检测、UBS事务以及USB外设的设备驱动和应用程序与根集线器驱动程序和主机控制器驱动程序之间的通信。
主机控制器驱动程序启用主机控制器的硬件,与UBS系统软件之间的通信。
主机控制器驱动程序之所以与总线类别驱动程序分开,是因为WindwoS支持多个类型的主机控制器,每一个主机控制器有自己的驱动程序。
总线类别驱动程序属于WindwoS的一部分,所以设备驱动程序的编写不需要知道总线类别驱动程序的工作细节。
4.3.3USB设备被发现的过程
一个USB设备接入计算机后,要经过如下的步骤被主机所发现。
1.USB外设所连的HUB检测到所连接的USB外设,并自动通知主机,以及它的端口变化状态,这时外设还是处于禁止状态。
2.主机通过对HUB的查询以确认外设的连接。
3.现在,主机己经知道有一台新的USB外设连接到USB系统中,然后,它激活这个HUB的端口,并向HUB发送一个复位该端口的信号。
4.HUB将复位信号保持10ms,为连接到该端口的设备提供最大不超过100mA的电流,这时外设处于Powered的状态,它所有的寄存器都被清空。
5.在外设分配到唯一地址以前,它的默认信道是主机默认的地址,然后主
机通过读取默认信道所使用的地址来读取设备的特征字,从而能够为设备找到相应的设备驱动程序。
6此时主机分配给外设一个唯一的USB地址,从此以后就用该地址与设备通信,这时设备叫Addressed状态
7.主机通过端点0来读取设备描述符,从而为设备进行配置做准备。
8.经主控器件仲裁后,对设备进行配置,这样设备就被配置成功了。
经过以上的八个步骤后,一台USB设备就进入工作状态了。
4.3.4Windows驱动程序描述
在Windows下,与USB外设的任何通信必须通过USB设备驱动,这个驱动知道如何与系统的USB驱动和访问设备的应用程序通信。
设备驱动是保证应用程序访问硬件设备的软件组件,使得应用程序不必知道物理连接、信号和与-个设备通信需要的协议等的细节,可以保证应用程序代码只通过外设名字访问外设或端口目的地gaol。
应用程序不需要知道外设连接端口的物理地址,不需要精确监视和控制外设需要的交换信号。
设备驱动通过在应用层和硬件专用代码之间的转化来完成它的任务。
应用层代码一般使用一套操作系统支持的函数,硬件代码则处理那些访问外设电路的必要协议。
设备驱动能与应用程序之间相互通信是通过Windows提供的API函数,这些函数使应用程序能够控制显示器、处理信息、访问存储器、读写磁盘和其它设备。
对于一些标准设备,Windows提供通用驱动;而对于一些实时数据采集系统属于自定义的设备,对此Windows并不提供通用的驱动,所以需要为设备编写自定义的驱动,并且必须遵循微软在Windows98以上版本中为用户定义的Win32驱动模式。
尽管Windows98和Windows2000提供了很多标准接口函数,但编制设备驱动程序仍是USB开发中最困难的部分。
随着USB设备的大量开发和使用,目前己经出现了一些专门的USB开发套件。
另外还有许多第三方软件厂商提供了各种各样的生成工具,像Compuware的driverworks,BlueWaters它们能根据USB设备十分容易地生成高质量USB设备驱动程序,减少了开发的困难。
Win-
Driver还包括一个功能强大的硬件探测器和调试器,在写入代码前,可通过调试器对硬件进行全面的测试。
这种方式能够在写驱动程序前,校验硬件是否按照期望的那样工作。
WinDriver能根据检测到的USB设备自动生成设备驱动程序代码以及INF文件,用户几乎可以不加修改就可直接编译生成USB设备驱动程序。
Win-Driver还能根据用户对USB设备的具体操作生成程序代码,用户可以将此程序代码直接加入到用户应用程序中,另外,还可直接利用WinDriverAPI函数开发应用程序。
4.3.5USB设备驱动程序设计
一个完整的驱动程序要完成以下工作:
初始化;创建与删除设备;处理应用层程序的打开和关闭句柄的请求;处理应用层程序的输入/输出请求;串行化对设备的访问;访问硬件;调用其它驱动程序;取消UO请求;超时I/0请求;处理可热插拔设备的加入和删除事件;电源管理和WMI。
(1)WDM设备驱动程序结构作为WNIXP推荐的一项技术来说,USB的驱动程序是WDM类型的。
WDM驱动程序在层次上主要可以分为两层:
功能驱动程序和总线驱动程序。
另外,为处理一些特定设备的请求,还有一些过滤驱动程序。
USB总线驱动程序负责枚举和控制低速的USB总线。
功能驱动程序知道如何控制设备的主要功能。
它对IRP进行操作后,向下交与总线驱动程序处理。
驱动程序主要任务就是处理各种I/0(输入输出)请求。
I/0请求包(IRP)是驱动程序操作的中心。
它是一个内核“对象”,是一个预先定义的数据结构,带有一组对它进行操作的I/0管理器例程。
I/0管理器接收一个I/0请求,然后再把它传递到合适的驱动程序栈中的最上层驱动程序之前,分配并初始化一个IRP。
一个IRP有一个固定的首部和可变数目的IRP栈单元块。
每个1/O请求有一个主功能代码,并可能有次功能代码。
它们都有各自的例程用来进行相关处理。
USB驱动程序的入口例程为DriverEntryo,负责主功能代码调度。
它接收不同的IRP,根据类型调用相应的分发例程。
(2)应用程序与WDM的通信应用程序是用户运行的程序,包括支持自定义硬件的特殊用途的应用程序。
设备驱动使得应用程序不必知道物理连接、信号和与一个设备通信需要的协议等的细节。
设备驱动可以保证应用程序代码只通过外设需要的交换信号(忙、选通等)。
Windows包括应用程序接口(API)函数,使得设备驱动能与应用程序之间相互通信。
这些函数是使得应用程序能够控制显示器、处理信息、访问存储器、读写磁盘和其他设备以及更多的几千个函数中的一部分。
用于读写USB设备的API函数是ReadFile,WriteFile和DeviceIOControl。
在Win32系统中,每个设备都被抽象为文件,应用程序只需要简单的调用几个API函数,就可以实现对设备的控制。
如:
当应用程序调用API函数CreateFile来打开设备时,操作系统向驱动程序发送IRPMJCREATE。
驱动程序接到后,调用相应的处理例程。
打开设备的操作,需要先后调用4个API函数:
(1)用该USB设备的标识符(GUID)作为一个参数,调SetupDiGetClassDevs,传回一个设备信息群,包含指定类别内的所有设备;
(2)调用SetupDiEnumDevicelnterfaces函数,根据GUID,传回上面设备信息群内的一个设备的信息;
(3)调用SetupDiGetDevicelnterfaceDetail函数,传回这个设备的路径;
(4)按照传回的路径,调用CreateFile函数,开启设备的通信。
4.4应用软件的设计
数据采集系统应用软件主要是对采集到的经络数据进行处理。
在主窗口显示被测者的经络波形,以便能够直观的了解被测者生理的大概状况。
而存储形式为数据形式,以便能够具体进行分析。
使用此应用程序采集经络数据的主窗口如图4-7所示。
经络数据采集软件能够存储经络数据,打开经络数据贺存储波形。
除此之外,还可以放大或缩小主窗口,以便能够方便的查看经络波形。
从应用程序主窗口可以观察到被测者的经络波形,可以发现,经络压力在.周期为2HZ.符合经络的基本特征。
也可以调节功能放到或缩小经络波形,以满足观测者的需要。
4.5本章小结
USB设备的软件设计主要包括两部分:
一是USB设备端的单片机软件,主要完成USB协议处理与数据交换(多数情况下是一个中断子程序)以及其它应用功能程序(比如采样、A/D转换等);二是PC端的程序由USB通信程序和用户服务程序两部分组成,用户服务程序通过USB通信程序与系统USBDI(USBDeviceInterface)通信,由系统完成USB协议的处理与数据传输。
PC端程序的开发难度较大,开发者不仅要熟悉USB协议,还要熟悉Windows体系结构。
在本章中系统的介绍了本课题的软件设计与实现,同时给出了部分程序。
另外,对于应用程序的设计也做了简单的描述。
第5章经络数据采集系统的调试
5.1调试步骤
要快、成功地开发一个USB设备,正确、合理的调试方法是必不可少的环节。
调试基本分为硬件和软件两步进行:
首先对硬件电路外部设备(单片机部分)进行调试。
然后,借助PC机调试软件将设备端的USB协议(主要有描述符请求、端口配置、地址设置以及基本数据交换)调通,用调试好的USB设备接口来开发、调试PC软件,加上USB设备端的其它用户程序,对整个完整的系统进行系统调试。
5.2硬件的调试与验证
经络数据采集系统的硬件调试主要有以下几步:
·检查电路原理图是否有错误;
·根据电路原理图检查PCB图是否有错误;
·制板,根据PCB图检查PCB板是否有错误,主要检查是否有线粘连;
·焊件,测试各个元件管脚连接是否有错误,并检查是否有虚焊脱焊的问题。
·加电测试电源部分工作是否正常,晶振部分工作是否正常;
·下载C08051F320的程序,测试电路其他各部分工作是否正常;
·测试完毕。
5.3软件的调试与验证
在调试USB设备时,可使用UsbView程序检测设备是否能被Windows枚举并配置,如果成功,还可在该程序中查看设备描述符、配置描述符和端点描述符是否正确。
之后可以使用DriverWizard生成一个通用驱动程序,在Windows提示安装驱动程序时,选择DriverWizard生成的驱动程序。
其实DriverWizard生成的仅是一个Windows控制台的应用程序,它会调用安装DriverWizard时安装在系统中的通用USB驱动程序。
使用该程序就可测试设备是否能够正确传输数据以及传输速度。
该程序也可作为最终产品USB传输部分的框架;如果不能满足要求,也可用WDM重新编制驱动程序,用调试好的USB设备来开发、调试主机软件。
根据前人的经验,我们在单片机程序调试过程中对以下问题进行了总结,在编写单片机固件程序时,需要注意:
单片机的中断是否设置为电平触发:
中断后一定要读上次传输状态寄存器,以清除中断寄存器中的中断标志。
这样,单片机的中断输出才能变回高电平,这一点非常重要;
在接收到Setup包后,是否调用ACKsetup命令重新使能端口。
在向IN端点写完数据后,是否调用ValidateBufer(命令FAH),指明缓冲区中的数据有效,可以发送到主机;当读完数据后,是否调用ClearBufer(命令F2H),以保证可以接收新的包;
通过调用ReadChipID(命令FDH)检查C8051F320是否工作。
该命令要读两个字节数据。
5.4抗干扰措施
电子系统中的干扰源是多方面的,给系统调试造成很多问题。
经过总结,我们的数据采集系统的干扰原因主要有:
系统与各元件接地策略的不尽合理、PCB的分布参数,电磁干扰等。
为了尽量的减少千扰,必须采用符合本系统特点的抗干扰技术。
抗干扰技术是保证系统能否正常工作的关键技术,它涉及到系统设计的很多方面。
为了降低干扰,在设计中我们在硬件和软件上都采用了抗干扰技术。
5.4.1硬件抗干扰措施
5.4.1.1PCB大面积接地在PCB布线时,采用了大面积接地策略,使得所有数字地、模拟地直接连到近旁相应的地线上,尽量减少连线长度以减少分布电感。
PCB上的走线实现是由敷铜腐蚀而成,每条走线必然存在一定大小的等效电阻。
而接地引线上如果有较大的电压降,就会给系统带来较大的干扰。
所以,在布置PCB地线时,尽量加宽地线,减小地线的等效电阻,能够达到减小干扰的效果。
5.4.1.2模拟地与数字地分开在系统中,普遍存在两种形式的地信号,即模拟地和数字地。
在数字电路中,由于各器件的开关特性,使系统中存在大量的瞬态大幅度脉冲,如果这些脉冲混入要求比较精确的模拟地中,将会对系统的测量精度、稳定度等产生很大影响,所以在PCB布线时,我们把这两种地线分开走线。
5.4.1.3防静电措施静电干扰对系统危害比较大,甚至还可能击穿器件。
为了避免静电对系统的干扰。
设计中采用了以下措施:
PCB布线保持环路面积最小;
使导线长度尽量短;
加强电源线和地线之间的电容藕合;
通过采取以上的措施,并且在设计实现时避免引入不必要的干扰,在实际应用中取得了较好的效果。
5.4.2软件抗干扰措施
仅仅在硬件上采取抗干扰措施是远远不够的,必须在软件上采取措施,才
能使系统的抗干扰能力更好。
在软件部分,我主要采用软件陷阱,程序口令和
软件滤波等方法。
5.4.2.1软件陷阱和程序口令用“软件陷阱+程序口令”对付指针跑飞。
当系统受到外界干扰时,指针会飞到另一段程序中,或跳到空白段去。
如果指针
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工频 50 Hz 电路