《基于手机蓝牙通信的虚拟示波器设计.doc》由会员分享,可在线阅读,更多相关《基于手机蓝牙通信的虚拟示波器设计.doc(6页珍藏版)》请在三一办公上搜索。
1、基于手机蓝牙通信的虚拟示波器设计周长锁,侯善刚,张 强(中国石油大庆炼化公司,黑龙江大庆 163813) 摘要:用单片机P89LPC938的AD转换功能采集电压波形数据,通过串口蓝牙模块传给智能手机,在手机上显示电压波形。可应用于电气测量回路、可控硅整流等电力电子设备的检修维护工作。关键词:单片机;蓝牙;示波器The Dedign of Virtual Oscilloscope Base on Bluetooth MobileZHOU Chang-suo,HOU Shan-gang,ZHANG Qiang (Petroleum China Daqing Refining&Chemical Co
2、mpany,Heilongjiang daqing 163813 ) Abstract: Collect voltage waveform data through single-chip(P89LPC938) AD converter, Transmit to mobile through the serial port Bluetooth module, the mobile shows the voltage waveform. Can be applied to the electrical measuring circuit, thyristor and other power el
3、ectronic equipment repair and maintenance work.Keywords: Microcontroller;Bluetooth;Oscilloscope0 引言在电气检修工作中,有时要用到示波器查看各种电压波形,普通的示波器体积大、笨重,最重要的是没有电气隔离,操作时要注意不能触电。随着单片机等电子技术的发展,以及智能手机的普及,设计一个能和手机配套使用的虚拟示波器,成本低,携带使用都方便。1 硬件设计电路包括信号预处理、单片机、蓝牙串口模块和电源4部分,电路原理图见图1。图1:蓝牙虚拟示波器电路原理图1.1 信号预处理单片机AD转换电压范围是03.3V,
4、为了能测量交流信号,把输入信号地端接RP3调节出的1.65V,这样就能测到-1.65+1.65V的电压。实际工作中电工测量电压范围从几伏到几百伏,为此加入了电阻降压网络R1、R2、R4、R5、RP1和RP2,这样就能测到60V的电压,再加上个有x10挡(放大10倍)的示波器探头,最大可测到600V电压。LM358是双运放,接成电压跟随器方式,主要作用是提高输入阻抗,使示波器标入阻抗是1M,否则示波器探头放到x10挡时,测量数值会有偏差。运放还能起到当输入信号过大时,限制输入到单片机的信号幅度,保护单片机的作用。共有2个信号输入端,组成双踪示波器,可以比较2路信号的相位关系。1.2 单片机选用了
5、飞利浦的单片机P89LPC938,是基于80C51内核的低功耗FLASH单片机,其内部有7.373MHz振荡器、复位电路、8通道10位AD转换器,8K字节Flash程序存储器、768字节RAM数据存储器,这使得外围电路很简洁。为了提高AD转换速度和提高通信波特率的准确程度,使用了外部12MHz晶振。单片机的P2.0(AD07)、P2.1(AD06)接双运放LM358的电压输出,单片机的P1.0(TXD)、P1.1(RXD)接蓝牙模块的串口。1.3 蓝牙串口模块蓝牙串口模块主要参数:兼容蓝牙V2.0 规范、CLASS 2 标准,传输距离最大10M,支持SPP 服务(串口)。功能多的蓝牙模块可更改
6、主从设置,默认为从设备,可以和电脑或手机蓝牙连接,还可以更改通信波特率,默认是9600bps,可更改为较大的波特率,如115200bps,加快通信速度。默认配对密码是1234,每次搜索蓝牙模块前先给蓝牙模块上电再搜索,再次搜索时要先把蓝牙模块重新上电,否则可能搜索不到。1.4 电源电源选用电池,携带方便,避免外接电源对测量数据的干扰。经三端稳压变为3.3V给单片机和蓝牙模块供电。2 单片机软件编程2.1 程序流程单片机软件用Keil C51编写,主要流程是等待手机发来测试命令,收到命令后根据命令采集数据并存储到内部RAM,采集完一组数据后一起发送给手机,这样一个测试周期完成,等待下一个测试命令
7、,流程图见图2。手机发出测试命令是4个字节,首字节是头标志“0xDB”,第2个字节代表量程选择,如果量程命令是非零字节,表示量程为15V,如果量程命令是零,表示量程为60V。第3、4字节是采样周期数据,控制采样频率,采样周期范围为50us10ms,最高采样频率20kHz。每通道240个数据,共采集480个数据。2.2 数字变量程单片机P89LPC938模数转换精度是10位,手机显示用8位就可以了,利用2位的差别可以实现4倍的数字变量程功能。硬件量程为60V,对应转换后的数字是01023,除以4后的范围是0255,输入信号在15V范围内时,转换后的数字是384639,减去384后的范围还是025
8、5。这样就实现了数字变量程的功能。有了2种量程选择,再配合示波器表笔上带的硬件变量程,使用的时候有4种量程选择15V、60V、150V和600V,能够满足常用的电气设备测量需要。开始初始化端口、定时器初始化AD转换、串口是否有串口数据?继续接收余下3个数据YN0.2s内收到3个数据发送采集到得480字节电压波形数据处理通信数据按量程和周期要求开始采集数据YN图2:单片机程序流程图3 手机软件编程3.1 开发环境配置首先安装J2SE即JDK(jdk-6u22-windows-i586-p.exe),安装完成后,在“我的电脑属性高级”中,配置java环境变量,设置3项属性,JAVA_HOME,PA
9、TH,CLASSPATH,若已存在则点击“编辑”,不存在则点击“新建”, JAVA_HOME指明JDK安装路径,PATH使得系统可以在任何路径下识别java命令,设为%JAVA_HOME%bin;%JAVA_HOME%jrebin,CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar。接着安装WTK(sun_java_wireless_toolkit-2_5_2-ml-windows) ,默认路径是C:WTK25。WTK 的全称是Sun J2M
10、E Wireless Toolkit ,是Sun的无线开发工具包。以上软件均可以在sun的官方网站免费下载。最后安装Eclipse作为开发环境,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。本设计用的是Eclipse3.6.2和EclipseMe1.7.9版本的软件。3.2 蓝牙连接手机蓝牙和蓝牙串口模块之间的连接,是程序设计的重点,也是难点。这个连接过程就是创建一个蓝牙客户端,分查找设备、查找服务、获得连接URL和建立连接4个主要步骤。具体代码如下:/查找蓝牙设备public void MyInquiry() try /获得本地设备LocalDevice localD
11、evice = LocalDevice.getLocalDevice();/获得发现代理 discoveryAgent = localDevice.getDiscoveryAgent(); /开始查找设备 discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this); catch(Exception e) e.printStackTrace(); / DiscoveryListener接口,记录已找到蓝牙设备并显示public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass
12、 cod) trysel.append(remoteDevice.getFriendlyName(true),null); catch(Exception e)sel.append(remoteDevice.getBluetoothAddress(),null); finallyremoteDevices.addElement(remoteDevice); / DiscoveryListener接口,查找设备完成public void inquiryCompleted(int discType) if (remoteDevices.size() 0) /加入其它代码,如查找服务 else /查
13、找服务public void MyServices() try RemoteDevice remoteDevice = (RemoteDevice)remoteDevices.elementAt(sel.getSelectedIndex(); discoveryAgent.searchServices(attrSet, uuidSet, remoteDevice , this); catch(Exception e) e.printStackTrace(); / DiscoveryListener接口,服务查找成功,得到连接ULRpublic void servicesDiscovered(i
14、nt transID, ServiceRecord servRecord)DataElement serviceNameElement = servRecordsel.getSelectedIndex().getAttributeValue(0x0100);String _serviceName = (String)serviceNameElement.getValue();String serviceName = _serviceName.trim(); btConnectionURL = servRecordsel.getSelectedIndex().getConnectionURL(S
15、erviceRecord.NOAUTHENTICATE_NOENCRYPT, false);/DiscoveryListener接口,查找服务完成public void serviceSearchCompleted(int transID, int respCode) if (respCode = DiscoveryListener.SERVICE_SEARCH_COMPLETED) else /打开连接,建立输入、输出通道StreamConnection connection = (StreamConnection)Connector.open(btConnectionURL); 经过以上步
16、骤,手机和蓝牙串口模块建立起了连接,用read、write方法可以互相通信,传输数据了。 3.3 波形显示测试程序用的是三星S3370手机,屏幕分辨率为320x240,屏幕上、下侧用于显示手机状态和按键信息,实际可编程使用的分辨率为200x240,上部170x240部分显示波形,下部30x240显示量程、周期选择菜单。按示波器的习惯把显示波形的界面画出格子,通过查格子可以大致判断波形的幅值和周期。4 结束语制作了测试用电路板见图3,预留了外接电源插座,使用的是外接4节1.5V电池。图3:测试用电路板正反面图上电后不接信号输入,打开手机蓝牙,运行手机上的软件,测试的结果应该显示直线,且直线在中间
17、位置,否则调节RP3使测试直线显示到中间位置,然后2路输入同样的10V直流电压信号,调节RP1、RP2,使直线显示到正确位置,调整完毕。对一个可控硅调节控制电路测试,手机显示见图4。量程20V表示纵向每格为20V,周期6ms表示横向每格6ms。2个按键,每按下“测量”1次,测量1次并显示波形,按“退出”则结束程序的运行。按左右按钮选择量程或周期,按上下则调整量程或周期。经测试,达到了预期设计目的。图4:测试时手机显示的波形参考文献1王森Java手机程序设计入门与应用北京:中国铁道出版社,2003。2周立功. LPC900系列Flash单片机应用技术(上册).北京:北京航空航天大学出版社,2004作者简介:周长锁(1972-),男,黑龙江齐齐哈尔,汉族,高级工程师,工学学士,从事热电厂电气设备技术管理工作。联系人:周长锁 黑龙江省大庆市大同区林源镇电厂(163813) 电话:0459-6719716 13945900286 邮箱:lanting667