完成了系统时钟初始化我们接着进行ADC的初始化,首先进行ADC的复位。ADC模式寄存器开启硬件触发使能,使用定时器计数通道0,启用10位量化普通模式,PRESCAL=9,STARTUP=0,SHTIM=2,ADC时钟ADCCK=MCK/((PRESCAL+1)×2)=2.4MHz,启动时间为(STARTUP+1)×8/ADCCK=3.33us,采样与保持时间为(SHTIM+1)/ADCCK=1.25us。然后禁用所有通道禁用寄存器,开启通道使能寄存器CHO。程序详见附录A中ADC初始化部分
计时器的初始化我们首先禁止中断禁用寄存器,使能时钟,禁用时钟选择无效处理,软件触发执行,计数器复位,时钟启动。定时计数器为ADC提供硬件触发,工作在波形模式。选择内部时钟TIMER_CLOCK1=MCK/2=24.0275MHz,时钟上升沿计数器增加,时钟不由外部时钟开启,计数值到达RC值时计数器时钟不停止、不禁用, TIOB对计数器及其时钟无效,波形选择为up模式,有RC比较自动触发,TIOA到达RA则置位,TIOA到达RC则清零。RC=48055000/2/200000=120,RA=RC/2。定时计数器输出波形见图24,频率为200KHz。程序详见附录A定时/计数器初始化部分。
LED的初始化就相对简单了,首先开启PIO使能控制器0到2三个引脚(即禁用该三个引脚外设控制),然后再禁用这3个引脚,通过3线-8线控制芯片到显示可判断PIO三个引脚的可用,然后关闭所有LED显示。这样就完成了LED的初始化。
图24 定时/计数器输出波形
4.4 等待起始至结束
当我们完成了以上的初始化,首先我们想到的就是判定采样启动的时间并开始采样计时。这里我们利用了while语句来等待上升沿的触发,如果不产生上升沿信号我们就一直让它进行判定,直到找到上升沿信号,然后就启动采样计数。启动采样,我们首先利用循环for语句来进行16位的预采样,从而稳定系统采样。(由于我们所测的都是大距离,所以这16位的预采样一般不会在我们所测的时间内)紧接着我们就利用while语句来进行回波的判定,当采集数据Newdata<1.2V(这个1.2V由定时/计数器的3.3V输入电压估计得到)时,判定结果成立时即表示未收到回波脉冲信号,就继续进行数据采集,在刚才16位采样的基础上叠加进行采样计数,这样一直往复判定,直到判定命令不成立时,即我们找到了回波信号,然后退出判定,执行下面的数据处理语句。
以上我们成功找到回波就所得到的采样计数(暂定为cn)。利用cn我们可以来计算信号往返所需时间t,t=cn/Ft(Ft为定时计数器输出频率,由初始化程序可知为200KHz)。然后再由时间t得到雷达与物体间的距离R,R=c*t/2(c为无线波传输速度,c=300M米/秒)。最后,我们设置了8个数码管来分别显示时间t和距离R,这里我们由AT91SAM7364的3个通道通过3线-8线译码器来控制8个数码管。000为第一个数码管的显示,为时间高位万位的显示,001为第二个数码管显示,依次010到111为第三道第八个数码管的显示,显示为时间的百位和个位,以及距离的万位至个位4个。在程序中,我们得到的数码管显示是由第一个到第八个依次显示,而并非同步显示。程序详见附录A主程序main。 雷达测距信号的RAM实现+源代码(10):http://www.751com.cn/tongxin/lunwen_2095.html