




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
姓名班级学号具体负责的工作联系方式摘 要:本文介绍了用超声波测量物块厚度的系统设计过程。详细介绍了硬件电路的设计过程,软件设计及最终的测试结果。本系统核心控制器件是avr单片机,并用altera的de2开发板测量超声波脉冲间隔,并与主系统实现通信。关键词:超声波;单片机;fpga abstract this article describes the system design process useing ultrasound to measure the thickness of the blocks. describe the hardware circuit design, software development, and the final test results in detailed. the core of the system control device is the avr microcontroller, alteras de2 board measuring ultrasonic pulse interval, and the system can communicate with the main system.keywords ultrasonic;microcontroller; fpga上海交通大学 电子信息与电气工程学院地 址:东川路800号邮 编:200240目录1. 概述11.1 编写目的11.2 名词定义12. 系统综述22.1 系统组成22.2 系统的主要功能23. 系统的硬件结构33.1 硬件总体结构33.2 超声波发射电路33.2.1 脉冲驱动电路描述33.2.2 脉冲发射电路描述43.3 超声波传感器描述53.4 超声波接收电路53.4.1 限幅电路描述63.4.2 初级放大电路描述63.4.3 检波电路描述73.4.4 后级放大电路描述83.4.5 比较整形电路描述84. 超声波软件设计部分104.1 综述104.2 avr单片机程序设计104.2.1 实现功能104.2.2 程序流程104.2.3 端口分配114.2.4 通信部分114.3 fpga程序设计144.3.1 fpga程序流程144.3.2 数据结构154.3.3 仿真结果165. 参考文献176. 附录18第37页上海交通大学 电子信息与电气工程学院1. 概述1.1 编写目的本设计报告是上海交大科技创新4a课程的设计报告。系统地介绍了超声波子系统的各个组成部分的原理、功能以及实现方案,包括硬件部分的电路设计,元件参数设计;软件部分的设计流程。本报告能作为一份科普短文供电子设计爱好者学习,也能作为一份技术资料作为专业人士的参考。并且通过这份报告,总结课程经验,巩固所学知识,为以后的学习打下基础。1.2 名词定义超声波:频率大于20khz的声波为超声波发射波:超声波探头在输入低电平的脉冲激励下产生的超声波回波: 超声波经过折射率不同的界面时产生的反射波,由超声波探头接收单片机:微型计算机系统,由cpu,rom,ram,输入输出设备组成的集成电路fpga:field programmable gate array,现场可编程门阵列2. 系统综述2.1 系统组成系统由超声波发射电路,超声波接收电路,微控制处理模块(avr单片机和gpga)组成。系统框图如图2.1所示。本地主系统fpgaavr atmega16超声波发射电路超声波接收电路图 2.1 超声波测量子系统系统框图2.2 系统的主要功能avr单片机或主系统发出测量指令,控制fpga发出3.3v窄脉冲,触发超声波发生电路发出超声波。超声波在物块表面反射,产生回波。fpga测量脉冲之间的间隔,将测量结果传输给单片机。单片机通过计算得出测量结果。可控制单片机显示测量结果或将结果发送给本地主系统。可以实现对单块测距,多块物块叠加测距。3. 系统的硬件结构3.1 硬件总体结构限幅超声波探头脉冲发射电路脉冲驱动电路初级放大电路检波电路比较整形电路后级放大电路图3.1硬件总体结构表3.1硬件总体结构硬件结构说明超声波发射电路脉冲驱动电路利用fpga的信号驱动cmos管的开关脉冲发射电路利用cmos管的开关产生负脉冲,使超声波探头发生超声波脉冲超声波发射探头发生超声波脉冲,并接收物块界面返回的回波超声波接收电路限幅电路限制超声波发射脉冲和返回脉冲的幅值初级放大电路放大超声波发射脉冲和返回脉冲检波电路对发射脉冲和返回脉冲进行检波后级放大电路放大检波后的信号比较整形电路对检波放大后的信号比较整形,产生最终输入fpga的信号3.2 超声波发射电路3.2.1 脉冲驱动电路描述fpga输入图3.2脉冲驱动电路脉冲驱动电路主要通过来自fpga的输入控制mosfet的导通和关断。此模块的主要功能是将fpga产生的正向窄脉冲经ir4427驱动后,使得场效应管在瞬时导通,从而使后级的高瓷片电容在瞬间一端接地。ir4427的驱动电压是12v。3.2.2 脉冲发射电路描述电路图如所示。图3.3脉冲发射电路理想的负脉冲的如图所示,下降时间在1030ns内,负脉冲维持时间应小于1.5us,最低值应小于-120v。我们所做的电路下降时间为20ns,负脉冲维持时间1.5us,最低值为-200v,基本满足理想波形要求。图3.4理想的负脉冲250v由5v-250v的 dc-dc电源模块产生。当mosfet截止时,250v电压源通过r1和rl向c1充电,则c1两端电压达到250v,为驱动超声波发射做好准备。当mosfet导通时,c1的左端瞬间接地,由于电容的存在,c1的两端瞬时仍然保持250v,紧接着c1和rl构成放电回路,故c1中的电荷被快速释放,在超声波传感器上形成一个负向冲击脉冲,使其发出超声波。负脉冲的最低点电压与mosfet截止时间有关,截止时间越长,充电时间越长,电容两端的电压值越高。负脉冲的绝对值约等于mosfet导通前瞬间电容两端的电压值,最高可达250v。负脉冲的下降时间与mosfet导通电阻有关,而负脉冲持续时间主要与cl与rl放电回路的时间常数有关。我们所选择rl=250,时间常数为250ns。我们得到的负脉冲图片如图所示: 图3.5 实际获得的负脉冲3.3 超声波传感器描述本实验中使用的超声波探头为2.5m的收发一体式探头。超声波在待测物块中的传播速度为2500m/s。3.4 超声波接收电路整体的接受电路如图:限幅限幅放大检波放大比较整形 图3.6 超声波接收电路3.4.1 限幅电路描述电路图如图所示。 图3.7 限幅电路考虑到超声波发射信号有较大的冲击,故采用两级限幅电路,使波形的最大值得到限制。电容c的幅值不宜太大,否则使信号的时间跨度太长,可能使发射信号与回波信号重叠,影响到测量精确度;也不宜太小,否则信号损耗会比较大。我们采用c=0.01uf。3.4.2 初级放大电路描述电路图如图所示。20k图3.8 初级放大电路经过限幅后的回波信号幅值比较小,一般都在几百毫伏,故需要放大后处理。通过放大之后,电路中的信号的幅度达到合适的大小。这里放大倍数要取合适的数值,太小则会导致幅度不够,放大倍数太大则会将信号中的噪声放大到太大而影响后级的判断。在这里我们小组选择放大倍数21被,分别用20k和1k的电阻。3.4.3 检波电路描述电路如图所示。图3.9 检波电路超声波信号经过1个二极管后进行包络检波。二极管用于将信号只保留正的部分,用于包络检波。检波电路的时间常数的选取十分重要。时间常数过小会使检波信号成锯齿状,影响后级的比较。时间常数过大会使一个信号时间的拖尾过大,影响精确性,导致最终薄的物块检测不出来。经过计算时间,我们所选取的电阻为390k,电容为1nf,时间常数为0.39us。3.4.4 后级放大电路描述电路如图所示。ne5532图3.10 后级放大电路将检波后的信号进行放大,使其更容易通过后面的比较电路,产生最后的信号。为了减少噪声的影响,我们这里使用低噪运放ne5532。通过一级正向放大电路,放大倍数为6倍。电路通路上的信号放大倍数一共为126倍。3.4.5 比较整形电路描述电路图如所示。输出到fpga图3.11 比较整形电路对检波放大后的波形进行比较整形,使其最后能够被fpga引脚所读取。由于lm393的电源为+5v,电路最后输出也为+5v。理论上只要超过2.5v就能被fpga认为“1”。lm393为比较器,“+”端输入放大后的信号,“-”端输入参考信号。输入信号可以通过一个变阻器调节。适当的调节变阻器,使“-”端的参考信号达到一个合适的大小,能在滤除噪声的情况下,尽可能将所有的波形信号检测出来,整形成方波。由于lm393的频带不是足够大,所以回波信号上升斜率不是大到可以忽略,故影响了最后精度。4. 超声波软件设计部分4.1 综述avr单片机通过接受用户输入或本地主系统发出的测量指令,控制fpga发出3.3v窄脉冲,触发超声波发生电路发出超声波。超声波始波及回波输入fpga,fpga测量脉冲之间的间隔,将测量结果传输给单片机。单片机通过计算得出测量结果。单片机可显示测量结果或将结果发送给本地主系统。4.2 avr单片机程序设计4.2.1 实现功能avr单片机每5ms进入中断子程序,中断子程序中进行按键检测、控制fpga、物块长度计算、通信等功能。用户可控制单片机发出指令控制fpga发出测量脉冲以及输出显示。控制信号由三个按键产生。单片机与fpga通过端口直接相连,完成控制及数据传输。fpga测量得到脉冲之间的时间间隔。将数据通过并口传输给单片机。单片机由脉冲数计算物块相应的厚度,显示在数码管上,并可与本地主系统通信。4.2.2 程序流程定时器置初值检测按键若sw3被按下,控制fpga发出测量脉冲;若sw4被按下,控制显示第几块物块;若sw2被按下,控制显示物块的厚度还是序号;若sw1被按下,读取fpga的测量结果。根据脉冲数计算相应物块厚度。驱动数码管显示程序流程如图4.1所示。图4.1 atmega16单片机定时器0中断流程其中,sw3为复位控制键,sw3按下后,fpga的复位信号置0,启动一次超声波检测,超声波检测完成后再将数据传输给单片机计算厚度。sw4为显示控制键,按下后显示相应物块的厚度。sw2按键控制切换数码管显示物块的序号和厚度。4.2.3 端口分配pb :fpga 传过来的脉冲间隔数据的低8 位pc:pc0pc3:控制fpga 计算第几个脉冲间隔;pc4:给fpga的复位信号高4 位为按键占用pd:pd0pd3 用于和本地通信,pd4pd6 用于fpga 对块数的选择控制pa:pa5pa7单片机本身的74hc595 占用;pa0pa3:fpga 传过来的脉冲间隔数据的高4 位;pa4接受fpga的检测结束信号4.2.4 通信部分4.2.4.1 avr usart简介 通用同步和异步串行接收器和转发器 (usart) 作为本次实验中的串行通信设备,具有如下的一些特点: (1) 全双工操作 ( 独立的串行接收和发送寄存器 ) (2) 异步或同步操作 (3) 主机或从机提供时钟的同步操作 (4) 高精度的波特率发生器 (5) 支持 5, 6, 7, 8, 或 9 个数据位和 1 个或 2 个停止位 (6) 硬件支持的奇偶校验操作 (7) 数据过速检测 (8) 帧错误检测 (9) 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 (10) 三个独立的中断:发送结束中断 , 发送数据寄存器空中断,以及接收结束中断 (11) 多处理器通讯模式 (12) 倍速异步通讯模式 在硬件上, pin-14 (rxd) 以及 pin-15 (txd) 分别被用来作为接收和发送引脚,如图4.2所示。图4.2 rxd和txd引脚示意图 atmega16 usart同时提供了同步与异步两种通信方式。在本实验中采用的是异步通信。这一通信方式通过在每帧中设置开始、结束位以及波特率来实现发送端和接收端的同步。一帧的格式如图4.3所示。图4.3 帧格式 其中st 为起始位,总是为低电平;08为数据位,长度可设置为59位;p为奇偶校验位,在本实验中不用;sp为停止位,总是为高电平。4.2.4.2 usart的配置 与usart有关的寄存器主要有:ubrr(波特率寄存器)、ucsr(控制寄存器)以及udr(数据寄存器)等。其中ubrr用于设置波特率,分ubrrh和ubrrl;ucsr用于设置合适的帧格式以及使能收发及各中断等,分为ucsra、ucsrb和ucsrc三个寄存器;udr则存储收发数据。配置usart的一般步骤如下: (1)设置波特率; (2)设置帧格式; (3)使能接收端与发送端。 设置波特率需要写ubrr寄存器;准确的说是分别写ubrrh和ubrrl两个寄存器。其中 ubrrh存储高4位,而ubrrl存储低8位。ubrr的取值按式(1)计算。(1) 本次实验中波特率为9600bps,故ubrr的值为0x33。 由于ubrrh和ucsrc共用一个寄存器地址,通过ursel位的值来进行区分,因此写ubrr时需要将该位置零,否则写操作将对ucsrc进行。 下一步是设置合适的帧格式。ucsrb的ucsz2位和ucsrc的ucsz1、ucsz0共同决定字符长度,如表4.1所示。因此为使字符长度为8位,这三位应分别取0、1、1。表4.1 ucsz取值与字符长度的关系ucsz2ucsz1ucsz0字符长度00050016010701181119 由于采用异步通信方式,因而ucsrc的umsel位设为0;因为不采用奇偶校验位,所以upm1、upm0均为0;因停止位为1位,故usbs为0。这样,帧的格式即可符合预定要求。 接下来要使能发送端和接收端。需将ucsrb的rxen和txen位置为1。此外,由于在本实验中,usart采用中断式接收,故需将rxcie也置1,即使能接收结束中断。实现接收中断还需要有对应的中断处理例程isr,其原型如下:isr(usart_rxc_vect)usart收发数据通过读写udr(usart数据寄存器)来进行。对udr执行一次读操作可以将收到的数据读出,执行一次写操作则可将预设的数据发送。需注意的是,只有当该寄存器为空时发送数据才能进行。因ucsra有一位udre用于指示udr是否为空,故读取数据可由以下代码来实现:while( !(ucsra & (1 0);signal sig: std_logic;signal block1 : std_logic_vector(11 downto 0) := (others =0);signal block2 : std_logic_vector(11 downto 0) := (others =0);signal block3 : std_logic_vector(11 downto 0) := (others =0);signal block4 : std_logic_vector(11 downto 0) := (others =0);signal block5 : std_logic_vector(11 downto 0) := (others =0);signal counter: std_logic_vector(11 downto 0) := (others=0);其中,block1 到block5 分别代表fpga 中存储的始波与第一个回波到第五个回波之间的晶振数目, 由此计算出各个物块的厚度。cnt 用16 位来记录一个脉冲的周期, 其中脉冲宽度为203个时钟周期。4.3.3 仿真结果程序的仿真结果如图4.6所示。图4.6 仿真结果5. 参考文献1 科技创新6第03大组-超声波测量子系统设计报告(2008)2科技创新4a讲义.袁焱.20126. 附录a. 开发环境硬件部分稳压电源数字万用表示波器镊子 电源线剪刀电烙铁吸焊器示波器探头软件部分windows 7操作系统quartus ii 8.0avr studiodesign explorer 99seisplay烧写软件b. 程序清单fpga源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ultra_sonic isport (sig_in: in std_logic;clk: in std_logic;rst: in std_logic;key_in: in std_logic_vector(2 downto 0);done: out std_logic;sig_out: out std_logic;data_out: out std_logic_vector(11 downto 0);end ultra_sonic;architecture ultra_arch of ultra_sonic istype state is (ready, b1, b2, b3,b4,b5,over);signal machine_state: state;signal finish : std_logic :=0;signal cnt: std_logic_vector(15 downto 0):=(others=0);-signal sig: std_logic;signal block1 : std_logic_vector(11 downto 0) := (others =0);signal block2 : std_logic_vector(11 downto 0) := (others =0);signal block3 : std_logic_vector(11 downto 0) := (others =0);signal block4 : std_logic_vector(11 downto 0) := (others =0);signal block5 : std_logic_vector(11 downto 0) := (others =0);signal counter: std_logic_vector(11 downto 0) := (others=0);signal sim : std_logic_vector(11 downto 0) := (others=0);beginprocess(clk,rst)beginif(rst=1) thenfinish=0;cnt0);block10);block20);block30);block40);block50);-counter0);elsif (clkevent and clk= 1) thenif(cnt=1111111111111111) thenfinish=1;else cntif(block1111111111111) thenblock1if(block2111111111111) thenblock2if(block3111111111111) thenblock3if(block4111111111111) thenblock4if(block5111111111111) thenblock5 null;end case; end if;end if;end process;process(clk,cnt)variable counter2:std_logic_vector(11 downto 0) := (others=0);beginif(clkevent and clk=1) thenif(cnt0000000000000011) then-previous: if(cnt=0000000000000011)sig_out=0;machine_state=ready;-counter=000000000000;elseif(cnt11001011) then sig_out=1;else sig_out=0;end if;-if(clkevent and clk=1) thenif(sig_in=1) then sim=sim+1;if(sim=101) thencounter2:=counter2+1;counter machine_state machine_state machine_state machine_state machine_state machine_state machine_state null;end case;end if;else sim0); end if;-end if;end if;end if;end process;process(clk)beginif(clkevent and clk=1) thenif(finish=1) thencase key_in iswhen 000=data_outif(block1=111111111111) thendata_out0);elsedata_outif(block2=111111111111) thendata_out0);elsedata_outif(block3=111111111111) thendata_out0);elsedata_outif(block4=111111111111) thendata_out0);elsedata_outif(block5=111111111111) thendata_out0);elsedata_outdata_out0);end case;elsedata_out1);end if;end if;end process;-sig_out=sig;done=finish;end ultra_arch;avr 单片机源程序:/avr application builder : 2010-04-06 12:01:38/ target : m16/ crystal: 8.0000mhz#include #include #include #include comm.h/ 1s软件定时器溢出值,200个5ms #define v_t1s200#define crystal 8000000/变量定义 / 数码管位和指示灯显示数据变量 unsigned char output_sel;/ 数码管段显示数据变量 unsigned char output_8seg;/ 1s软件定时器计数 unsigned char clock1s;/ 1s软件定时器溢出标志 unsigned char volatile clock1s_flag;/ 指示灯驱动信号输出缓存unsigned char led1,led2,led3,led4;/消抖参量unsigned char flag1,flag2,flag3,flag4;/ 数码管扫描驱动指针unsigned char digi_scaner;/ 测试用计数器unsigned int test_counter;/ 测试用计数值十进制表示unsigned char volatile digi4;/数码管显示操作数unsigned char volatile count;/cpld输入数据操作数unsigned char* hhigh;unsigned char*llow;/0unsigned char *llength1,*llength2,*llength3;unsigned char low6;unsigned char high6;unsigned int length6;unsigned int length1,length2,length3,pulsenum;unsigned char flag;unsigned int max;unsigned int volatile counter;/检测完成信号unsigned int volatile done = 0;/函数定义 / / 7段数码显示译码 / 参数:/ data: 需要显示的数字或符号;/ 返回值: 7段译码结果 ( d70 = pgfedcba )unsigned char numtoseg7(unsigned char data) unsigned char aa; switch (data) case 0: aa=0xc0;break; / 0 case 1: aa=0xf9;break; / 1 case 2: aa=0xa4;break; / 2 case 3: aa=0xb0;break; / 3 case 4: aa=0x99;break; / 4 case 5: aa=0x92;break; / 5 case 6: aa=0x82;break; / 6 case 7: aa=0xf8;break; / 7 case 8: aa=0x80;break; / 8 case 9: aa=0x90;break; / 9 case 10: aa=0x88;break; / a case 11: aa=0x83;break; / b case 12: aa=0xc6;break; / c case 13: aa=0xa1;break; / d case 14: aa=0x86;break; / e case 15: aa=0x8e;break; / fcase 20: aa=0x40;break; /*0.*/case 21: aa=0x79;break; /*1.*/case 22: aa=0x24;break; /*2.*/case 23: aa=0x30;break; /*3.*/case 24: aa=0x19;break; /*4.*/case 25: aa=0x12;break; /*5.*/case 26: aa=0x02;break; /*6.*/case 27: aa=0x78;break; /*7.*/case 28: aa=0x00;break; /*8.*/case 29: aa=0x10;break; /*9.*/ case -:aa=0xdf;break; / 破折号 case _:aa=0xf7;break; / 下划线 case :aa=0xff;break; / 消隐default: aa=0xff;break; return(aa);void display_led(unsigned char seg,unsigned char sel) unsigned char i; /先将 sel 数据送74hc595 porta &= (1pa7); / pa7=0; rclk=0 for (i=0;i8;i+) if (sel & 0x80) = 0) /最高位送 u2 ser 端 porta &= (1pa5); / pa5=0 else porta |= (1pa5); / pa5=1 porta &= (1pa6); /pa6=0 porta |= (1pa6); /pa6=1 srclk=1,产生移位时钟信号 sel = 1; /sel 左移一位 /再将 seg 数据送74hc595 for (i=0;i8;i+) if (seg & 0x80) = 0) /最高位送 u2 ser 端 porta &= (1pa5); /pa5=0 else porta |= (1pa5); /pa5=1 porta &= (1pa6); /pa6=0 porta |= (1pa6); /pa6=1 srclk=1,产生移位时钟信号 seg = 1; /seg 左移一位 porta |= (1pa7); / pa7=1; rclk=1 porta &= (1pa7); / pa7=0; rclk=0,产生锁存输出信号void port_init(void) porta = 0x00; /pa口 pa0pa4 作为输入,不用上拉电阻输入 ddra = 0xe0; /pa口 pa7、pa6、pa5为输出 portb = 0x00; /pb口 全做输入 ddrb = 0x00; /pb口 portc = 0xf0; /pc口 pc7、pc6、pc5、pc4接上拉电阻为输入 ddrc = 0x0f; /pc0pc2作为输出 portd &= (1pd7);/设置串口电路发送使能端口 pd口 留作通信 ddrd = 0x00; /pd0和pd1为输出 ucsrb = 0x00; /禁止发送和接收 ucsra = 0x02; /倍速异步模式usx=1 ucsrc = 0x06; /0000 0110,ucsz1=1,ucsz0=1 led1=1; led2=1; led3=1; led4=1;/timer0 initialize - prescale:256/ wgm: normal/ desired value: 200hz/ actual
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论