停车场智能车位引导系统结题答辩支撑材.docx
- 文档编号:5677850
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:18
- 大小:851.85KB
停车场智能车位引导系统结题答辩支撑材.docx
《停车场智能车位引导系统结题答辩支撑材.docx》由会员分享,可在线阅读,更多相关《停车场智能车位引导系统结题答辩支撑材.docx(18页珍藏版)》请在冰豆网上搜索。
停车场智能车位引导系统结题答辩支撑材
停车场智能车位引导系统结题答辩支撑材
我们的成果:
一、自己独立设计了一个CC2430模块PCB电路板:
巴伦设计描述
巴伦的目的是在TX模式下,把两个差分RF引脚的输出结合为一个单端50欧姆RF信号,以及在RX模式下把单端50欧姆天线信号分成一个差分RF信号。
提供给输出阶段的阻抗匹配以及DC也在巴伦中实现。
这个巴伦设计包括两个用于阻抗匹配的组件(L1和L3),一个RF块(L2),以及一个DC块(C2)。
除了上述四个分立组件,还有一个1/2波长的长传输线,用于保证正确的RF信号相位,以及一个70欧姆、23°的传输线用于阻抗匹配。
为了实现合适的性能,适当长度的传输线,以及图4和表1所定义的L2连接点是很重要的。
L3和1/2波长传输线之间的布线的适当尺寸也很重要。
选择这个布线的尺寸以确保合适的阻抗匹配。
巴伦布线的阻抗受第1层布线与下面接地平面之间距离的影响。
CC2420和CC2430EM
的参考设计都使用了1mm厚的两层FR4基板。
强烈建议使用相同的板厚度和基板类型,以达到合适的传输线阻抗。
如果这是不可行的,巴伦和下面接地平面之间的1mm距离可以通过使用一个内部接地层实现。
CC2420和CC243x的最佳阻抗略有不同。
为了获得与巴伦匹配的合适阻抗,除了L1的值之外,可以使用相同的布局和组件值。
对于CC2420,L1应为8.2nH,对于CC2430和CC2480,应为6.8nH。
图2和图3展示了CC2420EM和CC243xEM参考设计中巴伦的原理图。
我设计的PCB电路图:
原理图:
图1
图2
二、应用超声波实现粗略的测距
1、产品特点:
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。
基本工作原理:
(1)采用IO口TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声
波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2;
3、电气参数:
4、超声波时序图:
以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。
一旦检测到有回波信号则输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。
公式:
uS/58=厘米或者uS/148=英寸;或是:
距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。
注:
(1)此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响
模块的正常工作。
(2)测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的
结果
5、51单片机的测试程序:
//晶振=8M
//MCU=STC10F04XE
//P0.0-P0.6共阳数码管引脚
//Trig=P1^0
//Echo=P3^2
#include
#defineucharunsignedchar//定义一下方便使用
#defineuintunsignedint
#defineulongunsignedlong
//***********************************************
sfrCLK_DIV=0x97;//为STC单片机定义,系统时钟分频
//为STC单片机的IO口设置地址定义
sfrP0M1=0X93;
sfrP0M0=0X94;
sfrP1M1=0X91;
sfrP1M0=0X92;
sfrP2M1=0X95;
sfrP2M0=0X96;
//***********************************************
sbitTrig=P1^0;//产生脉冲引脚
sbitEcho=P3^2;//回波引脚
sbittest=P1^1;//测试用引脚
ucharcodeSEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管0-9
uintdistance[4];//测距接收缓冲区
ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;//自定义寄存器
ucharSHZ[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharWZH[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
ucharFZ[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
sbitdula=P2^6;
sbitwela=P2^7;
bitsucceed_flag;//测量成功标志
//********函数声明
voidconversion(uinttemp_data);
voiddelay_20us();
voiddelay(uintk);
voiddisplay(uchara,ucharb,ucharc);
//voidpai_xu();
voidmain(void)//主程序
{uintdistance_data,a,b;
ucharCONT_1;
CLK_DIV=0X03;//系统时钟为1/8晶振(pdf-45页)
P0M1=0;//将io口设置为推挽输出
P1M1=0;
P2M1=0;
P0M0=0XFF;
P1M0=0XFF;
P2M0=0XFF;
i=0;
flag=0;
test=0;
Trig=0;//首先拉低脉冲输入引脚
TMOD=0x11;//定时器0,定时器1,16位工作方式
TR0=1;//启动定时器0
IT0=0;//由高电平变低电平,触发外部中断
ET0=1;//打开定时器0中断
//ET1=1;//打开定时器1中断
EX0=0;//关闭外部中断
EA=1;//打开总中断0
while
(1)//程序循环
{
EA=0;
Trig=1;
delay_20us();
Trig=0;//产生一个20us的脉冲,在Trig引脚
while(Echo==0);//等待Echo回波引脚变高电平
succeed_flag=0;//清测量成功标志
EX0=1;//打开外部中断
TH1=0;//定时器1清零
TL1=0;//定时器1清零
TF1=0;//
TR1=1;//启动定时器1
EA=1;
while(TH1<30);//等待测量的结果,周期65.535毫秒(可用中断实现)
TR1=0;//关闭定时器1
EX0=0;//关闭外部中断
if(succeed_flag==1)
{
distance_data=outcomeH;//测量结果的高8位
distance_data<<=8;//放入16位的高8位
distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
distance_data*=12;//因为定时器默认为12分频
distance_data/=58;//微秒的单位除以58等于厘米
}//为什么除以58等于厘米,Y米=(X秒*344)/2
//X秒=(2*Y米)/344==》X秒=0.0058*Y米==》厘米=微秒/58
if(succeed_flag==0)
{
distance_data=0;//没有回波则清零
test=!
test;//测试灯变化
}
a=distance_data;
if(b==a)CONT_1=0;
if(b!
=a)CONT_1++;
if(CONT_1>=3)
{CONT_1=0;
b=a;
conversion(b);
}
display(ge,shi,bai);
///i=0;
///}
}
}
//***************************************************************
//外部中断0,用做判断回波电平
INTO_()interrupt0//外部中断是0号
{
outcomeH=TH1;//取出定时器的值
outcomeL=TL1;//取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0;//关闭外部中断
}
//****************************************************************
//定时器0中断,用做显示
timer0()interrupt1//定时器0中断是1号
{
TH0=0xfd;//写入定时器0初始值
TL0=0x77;
switch(flag)
{case0x00:
flag++;break;
case0x01:
flag++;break;
case0x02:
flag=0;break;
}
}
//显示数据转换程序
voidconversion(uinttemp_data)
{
ucharge_data,shi_data,bai_data;
bai_data=temp_data/100;
temp_data=temp_data%100;//取余运算
shi_data=temp_data/10;
temp_data=temp_data%10;//取余运算
ge_data=temp_data;
EA=0;
bai=bai_data;
shi=shi_data;
ge=ge_data;
EA=1;
}
//******************************************************************
voiddelay_20us()
{ucharbt;
for(bt=0;bt<100;bt++);
}
voiddelay(uintk)
{
uintx,y;
for(x=k;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(uchara,ucharb,ucharc/*uchard,uchare,ucharf*/)
{
wela=1;
P0=WZH[0];
wela=0;
P0=0x00;
dula=1;
P0=SHZ[a];
dula=0;
P0=0xff;
delay
(1);
dula=1;
P0=0x00;
dula=0;
wela=1;
P0=WZH[1];
wela=0;
P0=0x00;
dula=1;
P0=SHZ[b];
dula=0;
P0=0xff;
delay
(1);
dula=1;
P0=0x00;
dula=0;
wela=1;
P0=WZH[2];
wela=0;
P0=0x00;
dula=1;
P0=FZ[c];
dula=0;
P0=0xff;
delay
(1);
dula=1;
P0=0x00;
dula=0;
}
三、能够用CC2430实现两点的通信和简单的两点之间的测距:
CC2430两点的通信和简单的两点之间的测距原理通过比较发射端的信号强度和接收短信号强度的衰减来进行测距
1、数据发送程序为:
staticvoidappTransmitter()
{
uint32burstSize=0;
uint32pktsSent=0;
uint8appTxPower,Sendflag=0;
uint8n;
chardataTransmitter[]="Sending:
";
//InitializeBasicRF
basicRfConfig.myAddr=TX_ADDR;
if(basicRfInit(&basicRfConfig)==FAILED){
HAL_ASSERT(FALSE);
}
//SetTXoutputpower
appTxPower=appSelectOutputPower();
halRfSetTxPower(appTxPower);
//Setburstsize
burstSize=appSelectBurstSize();
//BasicRFputsonreceiverbeforetransmissionofpacket,andturnsoff
//afterpacketissent
basicRfReceiveOff();
//ConfigtimerandIO
appConfigTimer(PACKET_RATE);
halJoystickInit();
//Initalisepacketpayload
txPacket.seqNumber=0;
txPacket.padding[0]=0x01;//我改的
/****************************我改的
for(n=0;n txPacket.padding[n]=n; }***************************************/ //halLcdClear(); //halLcdWriteLines("PERTester","JoystickPush","start/stop"); halLedClearAll(); halLedSet (1);//appTransmitter模式LED1亮 SendStringData(0,dataTransmitter,sizeof(dataTransmitter),0);//我改的 //Mainloop while(TRUE){ //Waitforusertostartapplication while(! halJoystickPushed()); appStartStop(); //halLcdClear(); //halLcdWriteLines("PERTester","Transmitter",NULL); while(appStarted){ halLedSet(4); if(halJoystickPushed()){ appStartStop(); } if(pktsSent if(appState==TRANSMIT_PACKET){ //Makesuresequencenumberhasnetworkbyteorder UINT32_HTON(txPacket.seqNumber); Sendflag=basicRfSendPacket(RX_ADDR,(uint8*)&txPacket,PACKET_SIZE); //Changebyteorderbacktohostorderbeforeincrement UINT32_NTOH(txPacket.seqNumber); txPacket.seqNumber++; pktsSent++; #ifdefSRF04EB halLcdDisplayValue(HAL_LCD_LINE_2,"Sent: ",(int32)pktsSent,NULL); #else halLcdDisplayValue(HAL_LCD_LINE_3,"Sent: ",(int32)pktsSent,NULL); #endif appState=IDLE; } } else { appStarted=! appStarted; } if(Sendflag==0) { halMcuWaitMs(100); halLedClear(4); halMcuWaitMs(100); } } //Resetstatisticsandsequencenumber pktsSent=0; txPacket.seqNumber=0; halLcdClear(); //halLedClear(3); //halLcdWriteLines("PERTest","JoystickPush","start/stop"); } } 2、接收程序: staticvoidappReceiver() { uint32segNumber=0; int16perRssiBuf[RSSI_AVG_WINDOW_SIZE]={0};//RingbufferforRSSI uint8perRssiBufCounter=0;//Countertokeeptrackofthe //oldestnewestbyteinRSSI //ringbuffer perRxStats_trxStats={0,0,0,0}; int16rssi; chardataReceiver[]="Receiving: "; #ifdefINCLUDE_PA uint8gain; //Selectgain(formoduleswithCC2590/91only) gain=appSelectGain(); halRfSetGain(gain); #endif //InitializeBasicRF basicRfConfig.myAddr=RX_ADDR; if(basicRfInit(&basicRfConfig)==FAILED){ HAL_ASSERT(FALSE); } basicRfReceiveOn(); //halLcdClear(); //halLcdWriteLines("PERTester","Receiver","Ready"); halLedClearAll(); halLedSet(3);//appReceiver模式LED3亮 SendStringData(0,dataReceiver,sizeof(dataReceiver),0);//我改的 //Mainloop while(TRUE){ while(! basicRfPacketIsReady()); if(basicRfReceive((uint8*)&rxPacket,MAX_PAYLOAD_LENGTH,&rssi)>0){ //Changebyteorderfromnetworktohostorder UINT32_NTOH(rxPacket.seqNumber); segNumber=rxPacket.seqNumber; //SubtractoldRSSIvaluefromsum rxStats.rssiSum-=perRssiBuf[perRssiBufCounter]; //StorenewRSSIvalueinringbuffer,willaddittosumlater perRssiBuf[perRssiBufCounter]=rssi; //AddthenewRSSIvaluetosum rxStats.rssiSum+=perRssiBuf[perRssiBufCounter]; if(++perRssiBufCounter==RSSI_AVG_WINDOW_SIZE){ perRssiBufCounter=0;//Wrapringbuffercounter } //Checkifreceivedpacketistheexpectedpacket if(rxStats.expectedSeqNum==segNumber){ rxStats.expectedSeqNum++; } //Ifthereisajumpinthesequencenumberingthismeanssomepacketsin //betweenhasbeenlost. elseif(rxStats.expectedSeqNum rxStats.lostPkts+=segNumber-rxStats.expectedSeqNum; rxStats.expectedSeqNum=segNumber+1; } //Ifthesequencenumberislowerthanthepreviousone,wewillassumea //newdatabursthasstartedandwewillresetourstatisticsvariables. else{ //Updateourexpectationsassumingthisisanewburst rxStats.expectedSeqNum=segNumber+1; rxStats.rcvdPkts=0; rxStats.lostPkts=0; } rxStats.rcvdPkts++; //resetstatisticsifbutton1ispressed if(HAL_BUTTON_1_PUSHED()){ rxStats.expectedSeqNum=segNumber+1; rxStats.rcvdPkts=0; rxStats.los
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场 智能 车位 引导 系统 答辩 支撑
![提示](https://static.bdocx.com/images/bang_tan.gif)