1蓝牙协议栈实现形式
蓝牙协议规范遵循开放系统互联OSI(Open System Interconnection)模型,其各个层次如图1所示。
图1蓝牙协议栈模型
蓝牙协议栈按照封装方式有3种不同的实现模型——寄居式、嵌入式和完全嵌入式,分别针对具有不同功能和资源的产品,如图2所示。
对于嵌入式模型,蓝牙协议栈位于蓝牙模块中,应用程序单独运行在主机上,通过适配协议与蓝牙模块通信。嵌入式模型无需主机处理蓝牙上层协议,减少了主机的软件负荷和代码长度,降低了开发难度,对于内存有限的设备是不错的选择。本设计在蓝牙协议栈实现形式上选用了嵌入式模型,通过使用南京国春电子技术有限公司的KC02蓝牙模块,保证通信可靠性并减少了CPU的代码量。
图2蓝牙协议栈实现模型
2蓝牙应用系统设计
在工业现场使用蓝牙无线通信,其系统的硬件设计分为阀门电动装置和手持操作器两部分。
2.1阀门电动装置
阀门电动装置实现阀门本体的控制功能。以LPC2292为核心构建整个嵌入式系统,蓝牙模块采用工业级KC02从模块。整个阀门电动装置的硬件系统如图3所示。
图3阀门电动装置硬件系统
LPC2292是NXP公司基于ARM7TDMIS的一款高性能工业级微处理器。其处理器内核为32位RISC体系结构,具有高密度的16位指令集及极低的功耗。其主要性能参数包括:16 KB内部RAM,256 KB内部Flash,2个32位定时器,6通道PWM输出,2路UART,1路I2C,1路SPI,2路CAN串行总线接口,8通道AD转换;核心工作电压1.8 V,I/O工作电压3.3 V,LQFP144封装,工作温度范围为-40~85 ℃。
KC02蓝牙模块是可进行数据交换和语音通信的蓝牙通信模块。其体积小,外形尺寸长为17.8 mm,宽为15.2 mm;工作电压为3.3 V,拥有UART、SPI和USB串行接口,在本设计中使用处理器的UART与蓝牙模块相连。
2.2手持操作器
手持操作器的功能为搜索从蓝牙,并在主从蓝牙建立链接之后,操作阀门电动装置,并同步显示阀门电动装置屏幕内容。其系统结构以8位AVR单片机ATmega128L为核心,包括按键、液晶显示屏、主蓝牙模块和电源处理4个部分。KC02主蓝牙模块通过串口与单片机相连。手持操作器使用电池,通过电源转换芯片AMS1117稳压后给整个嵌入式系统供电。其硬件系统框图如图4所示。
图4手持操作器硬件系统框图
2.3手持操作器软件流程
手持操作器复位后首先进行各底层硬件的初始化操作,然后根据接收到的按键命令进行相应的操作。其软件流程如图5所示。
图5手持操作器软件流程
对于蓝牙模块的底层驱动主要有以下几个函数:初始化单片机与蓝牙模块的函数void InitBluetooth(void),禁用蓝牙模块的函数void DisableBluetooth(void),复位蓝牙模块的函数void ResetBluetooth(void),断链主从蓝牙链接的函数void DisConnect(void),主蓝牙向从蓝牙发送命令的函数void BluetoothSend(uchar com),判断主从蓝牙是否处于链接状态的函数uchar IfBluetoothConnect(void)以及单片机处理UART接收中断的函数void BluetoothIntServe(void)。
在硬件设计中,将单片机的PD4与蓝牙模块的链接状态端口相连,PD7口与蓝牙模块的RESET引脚相连,PD5与蓝牙模块的断链输入端口相连。以下是蓝牙模块的驱动程序:
void InitBluetooth(void) {
//初始化蓝牙通信的相关寄存器
UCSR0B = 0x00;
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x33;
UBRR0H = 0x00;
UCSR0B = 0x98;
DDRD &= ~(1<<DDD4);//建链指示口置为输入
DDRD |= (1<<DDD5);//断链控制口置为输出
}
void DisableBluetooth(void) {
PORTD |= (1<<PD7);
DDRD |= (1<<DDD7);//PD7口置1
}
void ResetBluetooth(void) {
CLI();//屏蔽掉所有中断
PORTD |= (1<<PD7);
DDRD |= (1<<DDD7);//PD7口置1
msDelay(500);
SEI();//打开所有中断
PORTD &= ~(1<<PD7);
DDRD |= (1<<DDD7);//PD7口置0
}
void DisConnect(void) {
//上升沿断链
PORTD &= ~(1<<PD5);//将断链口置低电平
msDelay(500);
PORTD |= (1<<PD5);//将断链口置高电平
msDelay(500);
PORTD &= ~(1<<PD5);//将断链口置低电平
BluetoothControl = 0;//清零蓝牙控制标志
}
void BluetoothSend(uchar com) {
while(!(UCSR0A&(1<<UDRE0)));
//等待上一字节数据发送完毕
UDR0 = com;
}
uchar IfBluetoothConnect(void) {
return(PIND&(1<<PD4));
//蓝牙处于连接状态时返回为1,不连接时返回为0
}
3蓝牙节点链接过程
处于工业现场的阀门电动装置通常为一个阵列,此时正确完成蓝牙节点的查询以及链接是建立手持操作器与阀门电动装置通信的关键。该过程由手持操作器MCU通过适配协议操作主蓝牙模块完成,一般的链接过程如图6所示。
图6蓝牙节点链接一般过程
由于在工业现场可能有多台阀门同时具有蓝牙无线通信功能,手持操作器与阀门电动装置的链接分为物理链接和逻辑链接,其中逻辑链接为物理链接的一个子集,只有在手持操作器与阀门电动装置之间建立了物理链接,并且手持操作器接收到了确认链接的指令后逻辑链接才建立。此时手持操作器进入操作阀门电动装置并同步显示的状态。阀门电动装置只能被动地接收手持操作器的搜索和链接,其上层程序在处理链接状态时给出提示用于操作者判断蓝牙网络的链接状态。
4系统功能
数据交换功能:手持操作器采用查询应答的方式采集阀门电动装置的实时状态。每隔100 ms,手持操作器就会发出1次查询指令,阀门电动装置将当前状态打包为1帧6字节的数据上传给手持操作器。由于所传输的数据不会包含0xFF和0xFE,可以将其作为1帧数据的起始和结束标志。1帧数据的格式如下:
手持操作器通过同样的数据格式去除掉起始标志和结束标志解析出一帧数据,并同步显示阀门电动装置状态。在手持操作器和阀门电动装置进入阀门参数的同步设置状态时,数据帧长度不固定,按照当前显示页面所需的信息进行数据交换。链接断开提示:当由于外界干扰或距离增加导致手持操作器和阀门电动装置之间链接断开时,手持操作器给出链接断开提示,阀门电动装置则跳出蓝牙无线操作状态,恢复到本地操作模式。
结语
针对将蓝牙无线技术引入阀门电动装置中的实际工程需求,本文分析了其可行性,并且实现了实际软硬件系统,对工业现场的无线技术应用有一定参考价值。