论文部分内容阅读
摘 要:随着社会生活的快节奏发展,人们遗失东西的现象经常发生,为了防止重要的东西丢失,高精度的防丢器应运而生。本文设计并实现了一款高精度的电子防丢器,它包括发射部分和接收部分组成,发射部分置于防丢物品上,接收部分放在身边携带,发射器和接收器的距离超过预定的距离就会报警,其中主控芯片选择STM32F103,无线接收发送芯片选择DWM1000。
关键词:防丢器;DWM1000;STM32F103
一、电子防丢器介绍
1.1 防丢器功能
电子防丢器是一种能探测出距离远近的高科技电子装置,它能防止您携带的贵重物品遗失,防止随行的儿童走失等。
1.2 电子防丢器的特点
一是使用方便,适用性广。防丢器是发射机和接收机两部分组成,体积小巧,便于携带,不会对外出造成任何负担,所以可以广泛用于手机、钱包、箱包、小孩等贵重物品或人身上防丢及防偷之用。二是功能齐全,性能稳定。具有安全距离可任意调节,防丢和寻找功能。其报警方式为警音提示。
二、防丢器的硬件设计
2.1 主控芯片设计
本设计采用STM32F103C8T6芯片,STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。
STM32F103C8T6使用高性能的 ARM CortexTM-M3 為内核的 32 位微控制器,最高工作频率可达168MHZ,内置高速存储器,丰富的增强型 I/O 端口和外设连接到外部总线。包含 1个12 位的 ADC、2 个比较器、2 个 16 位通用定时器、2 个 32 位通用定时器、2 个 16 位基本定时器、2 个 16 位高级定时器。还包含标准的通信接口:2 个 I2C 接口、3 个 SPI 接口、1 个 USB 接口、1 个 CAN 接口、1 个 SDIO 接口和 8 个 UART 接口。工作电压为 2.0V ~ 5.5V。多种省电工作模式保证低功耗应用的要求。基于以上特点,本设计选择此款芯片,硬件原理图如下:
2.2 无线通信发射机接收机设计
本设计无线通讯模块选择DWM1000,DWM1000是IEEE802.15.4-2011标准的超宽带无线收发模块根据DecaWave的DW1000集成电路。DWM1000可在实时定位系统(RTLS)对象的位置精度到10厘米的室内,高数据率通信,高达6.8 MB / s,并具有优良的通信范围可达300米,由于相干接收技术。该模块集成了DW1000,天线,巴伦,和晶体。这个模块是理想的原型和低到中等体积的应用,因为它减少了开发时间,因此,需要一个内部射频专家。DecaWave模块DWM1000优化无与伦比的室内精确定位和数据通信实时定位系统(RTLS)和无线传感器网络(WSN)。它运行在各种各样的市场,包括EPOS和零售、汽车、农业、建筑控制与自动化、工厂自动化、医疗、安全、仓储物流及其它系列。
硬件设计原理图如下:
三、防丢器软件设计
3.1 发射机程序设计
3.1.1 发射机主控流程设计
当DWM1000 发送一条信息后,如果明确知道收到信息的其它模块会回复一条信息,那么就需要在发送后打开接收器。当然可以选择立即打开接收器,但是根据实验数据大概估计会回复数据的时刻,可以延时一段时间在打开接收器。接上面,打开接收器就在等数据,如果等不到就过段时间自动关闭接收器。
void txcallback(dwDevice_t *dev)
{
dwTime_t departure;
dwGetTransmitTimestamp(dev,&departure);
switch(txPacket.payload[0])
{
case POLL: //01 tag transmit
{
poll_tx = departure;
}
break;
case FINAL://03 tag transmit
{
final_tx = departure;
}
break;
case LAST://05 tag transmit
{
rangingComplete = 1;
}
break;
}
3.1.2发射机报警程序设计
超距离报警程序设计,如果发射机检测到接收机距离超过设定距离或者检测不到接收机时,会发出相应的报警音提示。程序如下: if((bDisAlarmVoice==1)&&(bDisAlarmCancel == 0))
{
if(bAlarmFindExit==1&&bAlarmLowPowerExit==1)
{
bAlarmDisExit=0;
if(1 == musicPlay1(AlarmScore))
{
bDisAlarmVoice=0;
bAlarmDisExit=1;
if(bkeyDisCancle==1)
{ bDisAlarmCancel =1;
bkeyDisCancle=0;
}
}
}
}
如果接收机找到并且已经出现在安全距离之内,发射机发出已经找到的提示音,程序设计如下:
if((bDisStatus==1)&&(bDisOverOne==0))
{
if(bAlarmDisExit==1&&bAlarmLowPowerExit==1)
{
bAlarmFindExit=0;
if(1 == musicPlay1(FindScore))
{
bDisStatus=0;
DisOvernum=0;
bAlarmFindExit=1;
bDisAlarmCancel=0; bDisAlarmVoice=0;
}
}
}
如果发射机的电量偏低,还会发出电量偏低的提示音,程序设计如下: if(bLowPowerAlarm==1&&b10mincancel==0)
{
if((bAlarmDisExit==1)&&(bAlarmFindExit==1))
{
bAlarmLowPowerExit=0;
if(1 == musicPlay1(LowPowerScore))
{
bLowPowerAlarm=0;
b10mincancel=1;
bLowPowernum=1; bAlarmLowPowerExit=1;
}
}
}
}
3.2接收机程序设计
3.2.1 接收机流程设计
发射机发出信号之后,接收机先比对地址,如果地址一致则回复发射机,发射机接收到回复信号后,再次向接收机发送测距信号,接收机接收到信号后返回测算距离给发射机。程序设计如下:
switch(rxPacket.payload[TYPE])
{
case POLL: //01 Anchor received
{
poll_rx = arival;
txPacket.payload[TYPE] = ANSWER;
dwNewTransmit(dev);
dwSetDefaults(dev);
MAC802154_HEADER_LENGTH+2);
dwSetData(dev,(uint8_t*)&txPacket,MAC802154_HEADER_LENGTH+3);
dwWaitForResponse(dev,true);
dwStartTransmit(dev);
}
break;
case FINAL: //03 Anchor received
{
reportPayload_t *report =(reportPayload_t *)(txPacket.payload+2);
final_rx = arival;
txPacket.payload[TYPE] = REPORT;
memcpy(&report->pollRx,&poll_rx,5);
memcpy(&report->answerTx,&answer_tx,5);
memcpy(&report->finalRx,&final_rx,5);
dwNewTransmit(dev);
dwSetDefaults(dev);
MAC802154_HEADER_LENGTH+2+sizeof(reportPayload_t));
dwSetData(dev,(uint8_t*)&txPacket,MAC802154_HEADER_LENGTH+3+sizeof(reportPayload_t));
dwWaitForResponse(dev,true);
dwStartTransmit(dev);
}
break;
case LAST://05 Anchor received
{
if(rxPacket.payload[COMMAND]==0X02)
{
rxPacket.payload[COMMAND]=0;
bAnchorClose = 1;
}
else if(rxPacket.payload[COMMAND]==0X03)
{
rxPacket.payload[COMMAND]=0;
bAnchorChoose=1;
}
else if(rxPacket.payload[COMMAND]==0X01)
{
rxPacket.payload[COMMAND]=0;
if(rxPacket.payload[SEQ]!=CHOOSE)
{
bAnchorChoose=1;
}
else
{
bAnchorSleep=1;
}
}
}
break;
}
3.2.2接收機报警程序设计
接收机电量过低时报警音提示,程序设计如下:
if(bLowPowerAlarm==1&&b10mincancel==0)
{
if(bAlarmExit==1)
{
bAlarmLowPowerExit=0;
if(1 == musicPlay1(LowPowerScore))
{
bLowPowerAlarm=0;
b10mincancel=1;
bLowPowernum=1; bAlarmLowPowerExit=1;
}
}
}
四、小结
本设计采用STM32作为主控芯片,采用DWM1000作为无线测距芯片,精度较高,设计系统稳定可靠,功耗较低,结构小巧,已经成功做出产品应用。
参考文献
[1]许子虎.基于GPS定位系统的共形阵列天线与接收机设计[D].安徽大学,2015.
[2]叶聪.基于nRF905的电子防丢器设计[J].冶金自动化,2008年S2,1018-1020.
[3]夏守行.防丢器的设计[J].电子制作,2008年06期.
[4]崔占琴,马虎山.一种无线报警器的设计与实现[J].现代电子技术,2006年06期.
关键词:防丢器;DWM1000;STM32F103
一、电子防丢器介绍
1.1 防丢器功能
电子防丢器是一种能探测出距离远近的高科技电子装置,它能防止您携带的贵重物品遗失,防止随行的儿童走失等。
1.2 电子防丢器的特点
一是使用方便,适用性广。防丢器是发射机和接收机两部分组成,体积小巧,便于携带,不会对外出造成任何负担,所以可以广泛用于手机、钱包、箱包、小孩等贵重物品或人身上防丢及防偷之用。二是功能齐全,性能稳定。具有安全距离可任意调节,防丢和寻找功能。其报警方式为警音提示。
二、防丢器的硬件设计
2.1 主控芯片设计
本设计采用STM32F103C8T6芯片,STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。
STM32F103C8T6使用高性能的 ARM CortexTM-M3 為内核的 32 位微控制器,最高工作频率可达168MHZ,内置高速存储器,丰富的增强型 I/O 端口和外设连接到外部总线。包含 1个12 位的 ADC、2 个比较器、2 个 16 位通用定时器、2 个 32 位通用定时器、2 个 16 位基本定时器、2 个 16 位高级定时器。还包含标准的通信接口:2 个 I2C 接口、3 个 SPI 接口、1 个 USB 接口、1 个 CAN 接口、1 个 SDIO 接口和 8 个 UART 接口。工作电压为 2.0V ~ 5.5V。多种省电工作模式保证低功耗应用的要求。基于以上特点,本设计选择此款芯片,硬件原理图如下:
2.2 无线通信发射机接收机设计
本设计无线通讯模块选择DWM1000,DWM1000是IEEE802.15.4-2011标准的超宽带无线收发模块根据DecaWave的DW1000集成电路。DWM1000可在实时定位系统(RTLS)对象的位置精度到10厘米的室内,高数据率通信,高达6.8 MB / s,并具有优良的通信范围可达300米,由于相干接收技术。该模块集成了DW1000,天线,巴伦,和晶体。这个模块是理想的原型和低到中等体积的应用,因为它减少了开发时间,因此,需要一个内部射频专家。DecaWave模块DWM1000优化无与伦比的室内精确定位和数据通信实时定位系统(RTLS)和无线传感器网络(WSN)。它运行在各种各样的市场,包括EPOS和零售、汽车、农业、建筑控制与自动化、工厂自动化、医疗、安全、仓储物流及其它系列。
硬件设计原理图如下:
三、防丢器软件设计
3.1 发射机程序设计
3.1.1 发射机主控流程设计
当DWM1000 发送一条信息后,如果明确知道收到信息的其它模块会回复一条信息,那么就需要在发送后打开接收器。当然可以选择立即打开接收器,但是根据实验数据大概估计会回复数据的时刻,可以延时一段时间在打开接收器。接上面,打开接收器就在等数据,如果等不到就过段时间自动关闭接收器。
void txcallback(dwDevice_t *dev)
{
dwTime_t departure;
dwGetTransmitTimestamp(dev,&departure);
switch(txPacket.payload[0])
{
case POLL: //01 tag transmit
{
poll_tx = departure;
}
break;
case FINAL://03 tag transmit
{
final_tx = departure;
}
break;
case LAST://05 tag transmit
{
rangingComplete = 1;
}
break;
}
3.1.2发射机报警程序设计
超距离报警程序设计,如果发射机检测到接收机距离超过设定距离或者检测不到接收机时,会发出相应的报警音提示。程序如下: if((bDisAlarmVoice==1)&&(bDisAlarmCancel == 0))
{
if(bAlarmFindExit==1&&bAlarmLowPowerExit==1)
{
bAlarmDisExit=0;
if(1 == musicPlay1(AlarmScore))
{
bDisAlarmVoice=0;
bAlarmDisExit=1;
if(bkeyDisCancle==1)
{ bDisAlarmCancel =1;
bkeyDisCancle=0;
}
}
}
}
如果接收机找到并且已经出现在安全距离之内,发射机发出已经找到的提示音,程序设计如下:
if((bDisStatus==1)&&(bDisOverOne==0))
{
if(bAlarmDisExit==1&&bAlarmLowPowerExit==1)
{
bAlarmFindExit=0;
if(1 == musicPlay1(FindScore))
{
bDisStatus=0;
DisOvernum=0;
bAlarmFindExit=1;
bDisAlarmCancel=0; bDisAlarmVoice=0;
}
}
}
如果发射机的电量偏低,还会发出电量偏低的提示音,程序设计如下: if(bLowPowerAlarm==1&&b10mincancel==0)
{
if((bAlarmDisExit==1)&&(bAlarmFindExit==1))
{
bAlarmLowPowerExit=0;
if(1 == musicPlay1(LowPowerScore))
{
bLowPowerAlarm=0;
b10mincancel=1;
bLowPowernum=1; bAlarmLowPowerExit=1;
}
}
}
}
3.2接收机程序设计
3.2.1 接收机流程设计
发射机发出信号之后,接收机先比对地址,如果地址一致则回复发射机,发射机接收到回复信号后,再次向接收机发送测距信号,接收机接收到信号后返回测算距离给发射机。程序设计如下:
switch(rxPacket.payload[TYPE])
{
case POLL: //01 Anchor received
{
poll_rx = arival;
txPacket.payload[TYPE] = ANSWER;
dwNewTransmit(dev);
dwSetDefaults(dev);
MAC802154_HEADER_LENGTH+2);
dwSetData(dev,(uint8_t*)&txPacket,MAC802154_HEADER_LENGTH+3);
dwWaitForResponse(dev,true);
dwStartTransmit(dev);
}
break;
case FINAL: //03 Anchor received
{
reportPayload_t *report =(reportPayload_t *)(txPacket.payload+2);
final_rx = arival;
txPacket.payload[TYPE] = REPORT;
memcpy(&report->pollRx,&poll_rx,5);
memcpy(&report->answerTx,&answer_tx,5);
memcpy(&report->finalRx,&final_rx,5);
dwNewTransmit(dev);
dwSetDefaults(dev);
MAC802154_HEADER_LENGTH+2+sizeof(reportPayload_t));
dwSetData(dev,(uint8_t*)&txPacket,MAC802154_HEADER_LENGTH+3+sizeof(reportPayload_t));
dwWaitForResponse(dev,true);
dwStartTransmit(dev);
}
break;
case LAST://05 Anchor received
{
if(rxPacket.payload[COMMAND]==0X02)
{
rxPacket.payload[COMMAND]=0;
bAnchorClose = 1;
}
else if(rxPacket.payload[COMMAND]==0X03)
{
rxPacket.payload[COMMAND]=0;
bAnchorChoose=1;
}
else if(rxPacket.payload[COMMAND]==0X01)
{
rxPacket.payload[COMMAND]=0;
if(rxPacket.payload[SEQ]!=CHOOSE)
{
bAnchorChoose=1;
}
else
{
bAnchorSleep=1;
}
}
}
break;
}
3.2.2接收機报警程序设计
接收机电量过低时报警音提示,程序设计如下:
if(bLowPowerAlarm==1&&b10mincancel==0)
{
if(bAlarmExit==1)
{
bAlarmLowPowerExit=0;
if(1 == musicPlay1(LowPowerScore))
{
bLowPowerAlarm=0;
b10mincancel=1;
bLowPowernum=1; bAlarmLowPowerExit=1;
}
}
}
四、小结
本设计采用STM32作为主控芯片,采用DWM1000作为无线测距芯片,精度较高,设计系统稳定可靠,功耗较低,结构小巧,已经成功做出产品应用。
参考文献
[1]许子虎.基于GPS定位系统的共形阵列天线与接收机设计[D].安徽大学,2015.
[2]叶聪.基于nRF905的电子防丢器设计[J].冶金自动化,2008年S2,1018-1020.
[3]夏守行.防丢器的设计[J].电子制作,2008年06期.
[4]崔占琴,马虎山.一种无线报警器的设计与实现[J].现代电子技术,2006年06期.