盐城工学院本科生毕业论文 (2010)
(4)电网电源噪声
把供电电压跳变的持续时间At> ls者称为过压和欠压噪声。供电电网内阻过大或网内用电器过多会造欠压器声。供电电压跳变的持续时间lms (5)供电系统的抗干扰 供电系统常采用下列几种抗干扰措施: ① 交流稳压器。它可消除过压、欠压所造的影响,保证供电的稳定。 ② 隔离稳压器。由于浪涌和尖峰噪声主要成份是高频分量,它们不通过变压器级线圈之间的互感祸合,而是通过线圈寄生电容祸合。隔离稳压器初次级间用屏蔽层隔离,减少级间祸合电容,从而减少高频噪声的窜入。 ③ 低通滤波器。它可滤去大于50Hz市电基波的高频干扰。对于50HZ市电基波 , 则通过整流滤波后也能够完全滤除。 ④ 独立功能块单独供电。在电路设计时,有意识地把各种不同功能块的电路单独设置供电系统电源。这样做基本可消除各单元电路因共用电源而引起相互耦合所造成的干扰.在本系统中就采用了这种电源的配置。接地系统的设计测量装置中的地线是所有电路公共的零电平参考点。理论上,地线上所有的位置的电平应该相同。然而,由于各个地点之间必须用具有一定电阻的导线连接,一量有地电流流过时,就有可能使各个地点的电位产生差异。同时,地线是所有信号的公共点所有信号电流都要经过地线。这就可能产生公共地电阻的祸合干扰。地线的多点相也会产生环电流.环路电流会与其它电路产生祸合。所以,认真设计地线和接地点对于系统的稳定是十分重要的。 4.5.5 温度对超声波测距的影响 在精度要求较高的情况下,需要考虑温度对超声波传播速度的影响,对超声波传播速度加以修正,以减小误差。下面公式是超声波传播速度与空气温度的关系。 V = 331.4 + 0.607T 式中,T为实际温度单位为℃,v为超声波在介质中的传播速度单位为m/s。 表 4-1 超声波波速与温度的关系表 温度(℃) 声速(m/s) -30 313 -20 319 -10 325 0 323 10 338 20 344 30 349 100 386 由于声音的速度在不同的温度下有所不同,为提高系统的精度,采用了温度补偿功能。这里采用的主要元器件是是美国Dallas半导体公司生产的单总线数字温度传感器DS18B20,其具有精度高、智能化、体积小、线路简单等特点。将DS18B20数据线与单片机的P1.1口相连,就可以实现温度测量,如图5-3 21 超声波测距系统的设计与实现 图4-19 温度测量芯片 5 软件设计 本设计的软件设计部分十分的重要,距离的换算与显示,就连部分硬件电路不能完成的滤波也要靠程序来完成。而且程序的设计也是本设计的难点。 5.1 程序完成的功能 本次设计的程序需要完成的功能有: (1)超声波的发射和接受控制 (2)消除余振 (3)对回波信号的检测 (4)测距时间到距离的换算 (5)距离的显示 (6)对距离进行判断 5.2 编程语言的选择 在编程语言的选择上,我主要考虑使用我所学过的汇编语言和C语言。下面将对汇编语言与C语言的特点进行比较。 汇编语言是一种面向机器的低级的程序设计语言。它直接利用机器提供的指令系统编写程序,该类程序的可执行指令是与机器语言程序的指令一一对应的。汇编语言由于是面向机器的程序设计语言,与具体的计算机硬件有着密切的关系,因此,可移植性差。但由于汇编指令与机器语言指令一一对应,即一条汇编语言的可执行指令对应着一条机器语言指令,反之亦然。因此,汇编语言可直接利用机器硬件系统的许多特性,如寄存器、标志位以及一些特殊指令等,具有执行速度快、占用内存少等优点。汇编语言的缺点是程序的通用性和可移植性差;程序比较繁琐,调试困难;目标程序比较庞大,运行速度慢。 C语言是一种编译型的程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数,运算速度快,编译效率高,有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化设计语言,支持支持由顶向下结构化程序设计技术。C语言的模块化程序结构可以使程序模块实现共享。在C语言的可读性方面更容易借鉴前人的开发经验,提高程序的开发水平。 22 盐城工学院本科生毕业论文 (2010) C语言应用于单片机编程出了上述特点外,还有以下突出特点:编译器可以自动完成变量存储单元的分配,省去了分配和纪录存储单元的繁琐;不必对单片机和硬件接口的结构有很深入的了解,省去了单片机漫长的学习时间;具有良好的可移植性,只要将程序略加改动就可以将其应用与其他类型的单片机,省去了更改单片机型号时重新编写程序的无奈。因此利用C语言编写程序可以大大缩短目标系统软件的开发周期,程序的可读性明显增加,便于改进、扩充、研制规模更大、性能更完备的系统。C语言的缺点是生成目标代码比较大,但随着大规模集成电路的飞速发展,片内ROM的空间做到16/32 KB的已经很多,所以代码较大已经不是重要的问题了。目前,支持硬断点的单片机仿真器已能很好的进行C语言程序调试,为使用C语言进行单片机编程提供了便利条件。因此,利用C语言进行程序设计已成为单片机开发、应用的必然趋势。 综合以上对两种编程语言特点的比较,并考虑到单片机之间采用串行数据传送,采用C语言编写的话又可以简化许多使用汇编语言时进行浮点运算的不便。再加上本人对C语言程序更加熟悉一点,所以最终决定使用C语言为本次设计的编程语言。 5.3 主要部分程序流程图 如图5-1所示 5.4 实现重要功能的程序的分析 5.4.1实现温度读取功能 uint Read_Temperature(void) //读取温度,返回整数值 { uint c; reset(); //复位18b20芯片 tu=0; //先置位温度正负标示为正 if(r) { write(0xCC); // 跳过多传感器识别skio rom write(0xBE); c=read(); reset(); write(0xCC); write(0x44); //发读内部9字节内容指令 //读两个字 //读完两个字节后复位 // 跳过多传感器识别skio rom // 发启动温度变换指令 23 超声波测距系统的设计与实现 图5-1 程序流程框图 24 盐城工学院本科生毕业论文 (2010) if(c>0x1000){c=c+1;tu=1;} //若温度小于0,tu=1 c>>=4; *0.0625 return c; } else{return r; } } //去掉低四位即为整数温度值,无需 //返回0XFF表示未检测到18B20芯片 5.4.2实现根据温度转化声速 int C_speed(void) //根据温度查算声速值 { uchar y; y=Read_Temperature(); //采温度 if(r){ //若温度有变化则按温度值取声速 { T_C=y; //温度值=变化后的温度值 if(tu==0)speed=332+T_C*0.607; //温度为正则+声速 else speed=332-T_C*0.607; //温度为负则-声速 } }else speed=346.5; //若1820不存在即无法读取温度,声 速=346.5M/S(取25度) return speed; } 5.4.3实现距离计算 float Dis_count() { } 5.4.4 主函数的结构与内容 void main(void) //主函数 float cm; cm=TH1*256+TL1; cm-=7610; cm*=speed; cm/=20000; return cm; //减去限制10M的初值+可调误差值 //计算距离uS*34650m //转换为s 单程 //距离计算函数 25