




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、停车场智能车位引导系统结题答辩支撑材我们的成果:一、 自己独立设计了一个CC2430模块PCB电路板:巴伦设计描述巴伦的目的是在TX模式下,把两个差分RF引脚的输出结合为一个单端50欧姆RF信号,以及在RX模式下把单端50欧姆天线信号分成一个差分RF信号。提供给输出阶段的阻抗匹配以及DC也在巴伦中实现。这个巴伦设计包括两个用于阻抗匹配的组件(L1和L3),一个RF块(L2),以及一个DC块(C2)。除了上述四个分立组件,还有一个1/2波长的长传输线,用于保证正确的RF信号相位,以及一个70欧姆、23°的传输线用于阻抗匹配。为了实现合适的性能,适当长度的传输线,以及图4和表1所定义的L
2、2连接点是很重要的。L3和1/2波长传输线之间的布线的适当尺寸也很重要。选择这个布线的尺寸以确保合适的阻抗匹配。巴伦布线的阻抗受第1层布线与下面接地平面之间距离的影响。CC2420和CC2430EM的参考设计都使用了1mm厚的两层FR4基板。强烈建议使用相同的板厚度和基板类型,以达到合适的传输线阻抗。如果这是不可行的,巴伦和下面接地平面之间的1mm距离可以通过使用一个内部接地层实现。CC2420和CC243x的最佳阻抗略有不同。为了获得与巴伦匹配的合适阻抗,除了L1的值之外,可以使用相同的布局和组件值。对于CC2420,L1应为8.2nH,对于CC2430和CC2480,应为6.8nH。图2和
3、图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、超
4、声波时序图:以上时序图表明你只需要提供一个10uS以上脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者uS/148=英寸;或是:距离=高电平时间*声速(340M/S)/2;建议测量周期为60ms以上,以防止发射信号对回响信号的影响。注:(1)此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。(2)测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果5、51单片
5、机的测试程序: /晶振=8M/MCU=STC10F04XE/P0.0-P0.6共阳数码管引脚/Trig = P10/Echo = P32#include <reg52.h> /包括一个52标准内核的头文件#define uchar unsigned char /定义一下方便使用#define uint unsigned int#define ulong unsigned long/*sfr CLK_DIV = 0x97; /为STC单片机定义,系统时钟分频 /为STC单片机的IO口设置地址定义sfr P0M1 = 0X93;sfr P0M0 = 0X94;sfr P1M1 = 0X
6、91;sfr P1M0 = 0X92;sfrP2M1 = 0X95;sfrP2M0 = 0X96;/*sbit Trig = P10; /产生脉冲引脚sbit Echo = P32; /回波引脚sbit test = P11; /测试用引脚uchar code SEG710=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/数码管0-9uint distance4; /测距接收缓冲区uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i; /自定义寄存器uchar SHZ=0x3f,0x06,0x5b,0
7、x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar WZH=0xdf,0xef,0xf7,0xfb,0xfd,0xfe;uchar FZ=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;sbit dula=P26;sbit wela=P27;bit succeed_flag; /测量成功标志/*函数声明void conversion(uint temp_data);void delay_20us(); void delay(uint k);void display(uchar a,uchar b ,uchar c)
8、;/void pai_xu();void main(void) / 主程序 uint distance_data,a,b; uchar CONT_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; /由高电平变低电平,触发外部中断E
9、T0=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
10、毫秒(可用中断实现) 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秒=
11、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_() interrupt 0 / 外部中断是0号 outcomeH =TH1; /取出定时器的值 outcomeL =
12、TL1; /取出定时器的值 succeed_flag=1; /至成功测量的标志 EX0=0; /关闭外部中断 /*/定时器0中断,用做显示timer0() interrupt 1 / 定时器0中断是1号 TH0=0xfd; /写入定时器0初始值 TL0=0x77; switch(flag) case 0x00:flag+;break; case 0x01:flag+;break; case 0x02:flag=0;break; /显示数据转换程序void conversion(uint temp_data) uchar ge_data,shi_data,bai_data ; bai_data=
13、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; /*void delay_20us() uchar bt ; for(bt=0;bt<100;bt+); void delay(uint k)uint x,y;for(x=k;x>0;x-)for(y=110;y>0;y-)
14、;void display(uchar a,uchar b ,uchar c/*uchar d,uchar e,uchar f*/)wela=1;P0=WZH0;wela=0;P0=0x00;dula=1;P0=SHZa;dula=0;P0=0xff;delay(1);dula=1;P0=0x00;dula=0;wela=1;P0=WZH1;wela=0;P0=0x00;dula=1;P0=SHZb;dula=0;P0=0xff;delay(1);dula=1;P0=0x00;dula=0;wela=1;P0=WZH2;wela=0;P0=0x00;dula=1;P0=FZc;dula=0;P
15、0=0xff;delay(1);dula=1;P0=0x00;dula=0;三、 能够用CC2430实现两点的通信和简单的两点之间的测距:CC2430两点的通信和简单的两点之间的测距原理通过比较发射端的信号强度和接收短信号强度的衰减来进行测距1、数据发送程序为:static void appTransmitter() uint32 burstSize=0; uint32 pktsSent=0; uint8 appTxPower,Sendflag=0;uint8 n; char dataTransmitter=" Sending: " / Initialize BasicRF
16、 basicRfConfig.myAddr = TX_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); / Set TX output power appTxPower = appSelectOutputPower(); halRfSetTxPower(appTxPower); / Set burst size burstSize = appSelectBurstSize(); / Basic RF puts on receiver before transmission of packet, and tur
17、ns off / after packet is sent basicRfReceiveOff(); / Config timer and IO appConfigTimer(PACKET_RATE); halJoystickInit(); / Initalise packet payload txPacket.seqNumber = 0; txPacket.padding0=0x01; /我改的 /*我改的 for(n = 0; n < sizeof(txPacket.padding); n+) txPacket.paddingn = n; */ / halLcdClear();/ h
18、alLcdWriteLines("PER Tester", "Joystick Push", "start/stop"); halLedClearAll(); halLedSet(1); /appTransmitter 模式LED1亮 SendStringData(0,dataTransmitter,sizeof(dataTransmitter),0); / 我改的 / Main loop while (TRUE) / Wait for user to start application while(!halJoystickPushe
19、d() ); appStartStop(); / halLcdClear();/ halLcdWriteLines("PER Tester", "Transmitter", NULL); while(appStarted) halLedSet(4); if( halJoystickPushed() ) appStartStop(); if (pktsSent < burstSize) if( appState = TRANSMIT_PACKET ) / Make sure sequence number has network byte order
20、 UINT32_HTON(txPacket.seqNumber); Sendflag=basicRfSendPacket(RX_ADDR, (uint8*)&txPacket, PACKET_SIZE); / Change byte order back to host order before increment UINT32_NTOH(txPacket.seqNumber); txPacket.seqNumber+; pktsSent+; #ifdef SRF04EB halLcdDisplayValue(HAL_LCD_LINE_2, "Sent: ", (i
21、nt32)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); / Reset statistics and sequence number pktsSent = 0; txPacket.seqNumb
22、er = 0; halLcdClear();/ halLedClear(3);/ halLcdWriteLines("PER Test", "Joystick Push", "start/stop"); 2、接收程序:static void appReceiver() uint32 segNumber=0; int16 perRssiBufRSSI_AVG_WINDOW_SIZE = 0; / Ring buffer for RSSI uint8 perRssiBufCounter = 0; / Counter to keep tra
23、ck of the / oldest newest byte in RSSI / ring buffer perRxStats_t rxStats = 0,0,0,0; int16 rssi; char dataReceiver="Receiving: "#ifdef INCLUDE_PA uint8 gain; / Select gain (for modules with CC2590/91 only) gain =appSelectGain(); halRfSetGain(gain);#endif / Initialize BasicRF basicRfConfig.
24、myAddr = RX_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); basicRfReceiveOn();/ halLcdClear();/ halLcdWriteLines("PER Tester", "Receiver", "Ready"); halLedClearAll(); halLedSet(3); /appReceiver 模式LED3亮 SendStringData(0,dataReceiver,sizeof(dataReceiv
25、er),0); / 我改的 / Main loop while (TRUE) while(!basicRfPacketIsReady(); if(basicRfReceive(uint8*)&rxPacket, MAX_PAYLOAD_LENGTH, &rssi)>0) / Change byte order from network to host orderUINT32_NTOH(rxPacket.seqNumber); segNumber = rxPacket.seqNumber; / Subtract old RSSI value from sum rxStats
26、.rssiSum -= perRssiBufperRssiBufCounter; / Store new RSSI value in ring buffer, will add it to sum later perRssiBufperRssiBufCounter = rssi; / Add the new RSSI value to sum rxStats.rssiSum += perRssiBufperRssiBufCounter; if (+perRssiBufCounter = RSSI_AVG_WINDOW_SIZE) perRssiBufCounter = 0; / Wrap ri
27、ng buffer counter / Check if received packet is the expected packet if (rxStats.expectedSeqNum = segNumber) rxStats.expectedSeqNum+; / If there is a jump in the sequence numbering this means some packets in / between has been lost. else if (rxStats.expectedSeqNum < segNumber) rxStats.lostPkts += segNumber - rxStats.expectedSeqNum; rxStats.expectedSeqNum = segNumber + 1; / If the sequence number is lower than the previous one, we will assume a / new data burst has started and we will reset our statis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第2.6练 指数与指数函数(解析版)-2024年高考数学一轮复习精讲精练宝典(新高考专用)
- 2022年北京市初三一模道德与法治试题汇编:遵守社会规则
- 2024人工智能法律伦理
- 2020-2021学年江苏省南京外国语河西初级中学等三校七年级(下)期中数学试卷
- 衢州屋檐防水施工方案
- 2024年广西地区中考满分作文《给小广的一封信》5
- 第1课 十字路口-认识多图层动画 教学设计-2023-2024学年辽师大版(2015)初中信息技术八年级下册
- 合同范例和合同范例区别
- 代销电器合同范例
- 可持续发展的工作实践计划
- 透水砖铺装施工方案
- 危急值报告制度
- 道路桥梁工程技术专业学生职业规划书
- 《十步讯问法》读书笔记
- GB/T 42599-2023风能发电系统电气仿真模型验证
- 术前肺功能评估的意义
- 分布式文件系统
- 手枪的基础射击演示文稿
- 浮针疗法的学习课件
- 12K101-1 轴流通风机安装
- 上海市中小学生语文学业质量绿色指标测试
评论
0/150
提交评论