基于ccd传感器智能汽车软件的设计与研究p内容摘要:

CNTX 清 0,也就是说 PWMCNTX 不能被置 0以外 的数值, 图 PWM 波 产生 的过程。 8 图 PWM周期: )(通道时钟周期 1P W M P E R x T ( 2) 脉宽左对齐,起始高电平输出,占空比计算公式: 100%1P W M P E Rx 1P W M D T Y x 占空比 ( 3) 由于总线时钟在调试过程中经常会人为地进行调整,而如果我们每次进行调整都将再次对每个 PWM 寄存器进行 分频,预分频的调整,以达到预期的输出周期(舵机 100Hz 左右,电机 10KHz 左右),这样给调试带来了不便,故部分程序编写进行了相应的处理: 头文件中进行如下宏定义: define Bus_Freq 80000000 //总线频率 80MHz define PWM_PRCLK 0X22 //CH_A = CH_B = BUS_FREQ/4 define CH_A_FREQ 20200000 //时钟 A 频率 ,此值为 Bus_Freq 4 分频后计算所得值 define CH_B_FREQ 20200000 //时钟 B 频率 ,此值为 Bus_Freq 4 分频后计算所得值 define CH_SA_FREQ 1000000 //时钟 SA 频率 define CH_SB_FREQ 4000000 //时钟 SB 频率 define CH_SA_DIV CH_A_FREQ/(CH_SA_FREQ*2) //CH_SA_DIV = 4 define CH_SB_DIV CH_B_FREQ/(CH_SB_FREQ*2) //CH_SB_DIV = 1 //舵机频率选择 50~ 200Hz define ServoFreq 80//舵机频率 100Hz(此处数值对应舵机频率) //DC 电机频率选择 0~ 25KHz define MotorFreq 20200//DC 电机频率 20KHz(此处值对应直流电机的工作频率 ) 9 在 源文件中进行如下处理: void pwm_init(void){ PWMPRCLK = PWM_PRCLK。 //ClockA,B 时钟总线 =总线频 /4=20MHz PWMSCLA = CH_SA_DIV。 //CH_SA_FREQ = CH_A_FREQ/CH_SA_DIV/2 PWMSCLB = CH_SB_DIV。 //ClockSA=ClockSB=8MHz/(2*4)=1MHz PWMCTL_CON45 = 1。 //组合 PWM45 PWMCTL_CON67 = 1。 //组合 PWM67 PWMCTL_CON23 = 1。 //组合 PWM23 PWMCLK_PCLK5 = 1。 //PWM5 使用 SA PWMCLK_PCLK3 = 1。 //PWM3 使用 SB PWMCLK_PCLK7 = 1。 //PWM7 使用 SB PWMPER45 = CH_SA_FREQ / ServoFreq。 //写 PWM45 的周期寄存器,提供给舵机 PWMPER23 = PWMPER67 = CH_SB_FREQ / MotorFreq。 //写 PWM23,PWM67 的周期寄存器,提供给直流电机 PWMPOL_PPOL5 = 1。 //极性为正 PWMPOL_PPOL3 = 1。 //极性相反 PWMPOL_PPOL7 = 0。 //极性相反 PWMCAE = 0x00。 //左对齐 PWME_PWME5 = 1。 //使能 PWM45 PWME_PWME3 = 1。 //PWM23 控制电机速度 PWME_PWME7 = 0。 } 经过以上处理后,如果总线频率 Bus_Freq 改变的话,我只要简单计算新的 Bus_Freq经 PWM_PRCLK (此处为 4分频 )分频后的频率,并将 CH_A_FREQ 声明为新值,其它不作改变。 如: Bus_Freq 开始为 32020000 经 4 分频 ( PWM_PRCLK=0x22)得时钟 A频率为 8 000000Hz,因此将 CH_A_FREQ 声明为 8000000,经公式 ( 4) 计算得 CH_SA_DIV = 4。 若 Bus_Freq改为 80000000Hz,则 4分频后时钟 A频率 20200000Hz,则将 CH_A_FREQ 声明为 20200000 10 则通过公式( 4)计算得 CH_SA_DIV=10。 之所以能这样处理的原因是 PWMSCLA、 PWMSCLB 能够进行 1*2, 2*2 直到 255*2 的连续分频,这样 CH_SA_DIV 可为 2~ 512 中任意一个偶数,而根据公式( 4) 处理恰好可得到 2~ 512 中的偶数之一。 2__ ____  F R E QSACH F R E QACHD IVSACH ( 4) 同时本程序编写可很方便地对舵机工作频率进行软调: define ServoFreq 100 //表示舵机工作频率为 100Hz。 根据公式 : Se r v oF r e qF R E QSACHP WMP E R __45  ( 5) 计算得 PWMPER45=10000,而对应舵机的 PWM通道(本设计中舵机用的是 PWM45)的 PWM周期根据公式( 2)得: SST )1(1 1010 46  即对应舵机频率为 100Hz。 同时其占空比可根据公式( 3)求取。 由于 PWPER45=10000,固PWMDTY45 的值变化范围为 1~ 10000,即对应的占空比可调值有 10000 个。 实际中因舵机左右转角位置限制使其可变的点数大概在 600 个左右。 同理直流电机可调范围根据公式( 6)可得 PWMPER23=200;即: 100%*201P W M D T Y 231P W M P E R23 1P W M D T Y 23 占空比 所以 PWMDTY23 变化范围为 0~ 201。 整体来说,此部分初始化相对复杂,其范围也要求较为严格,并且直接关系到舵机、直流电机的响应时间和稳定性。 在实际应用中,如果对应舵机的 PWM 通道的频率设置过高(高于 200Hz),可以很明显听到舵机发出断续声响。 定时 函数 初始化 在编程时基本都会用到延时程序,但是延时程序的一大缺点就是造成系统资源严重浪费,只要执行延时程序,除了中断函数的打断,系统就只能等待,直到延时程序执行完毕,系统才能继续执行,从程序的并行处理的角度来说,这样的延时程序浪费了高性能 MCU的处理能力。 所以,本系统利用 XS128芯片 的定时器模块,设计了一个定时函数,该定时函数的主要功能是:在程序中由用户设定要定时的时间以后,定时开始,同时,系统可以接 11 着执行其他的程序,定时时间到了之后,系统进入中断服务程序,在该中断服务程序中,用户可以设置定时结束后想要完成的功能。 这样,从程序的并行处理来说,本系统充分利用了系统资源,提高了系统执行的效率。 在定时器函数中,主要是把 MCCTL寄存器的 MCZI和 MCEN置 1,这样可实现开定时器 ,中断使能的功能。 在设置寄存器之后,执行 MCCNT=time*BUS_CLK,对 MCCNT赋初值,其中 time为要 定时的时间 (us), MCCNT为一个递减计数器。 写 MCCNT会自动清中断标志。 在定时结束后,即 MCCNT从初始值递减为 0时,进入其对应中断函数 MDC_ISR()。 在 MDC_ISR()中断函数中,先清标志位 (MCFLG_MCZF=1),再执行定时后想要实现的功能,本系统中, ATD0CTL2 |= ATD0CTL2_ASCIE_MASK。 —— 开启 ATD中断使能 ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK)。 —— DJM位置 1是左对齐转换后数据, SCAN位置 1是使能 ATD持续转换。 如上所示,在中断服务程序中,用户设置的功能是开启 ATD0、 ATD1中断使能,这样一旦中断的中断触发脉冲到来,对应的中断服务程序就可以被执行了,进而完成 ATD0或 ATD1中断服务程序的功能。 第四章 信号采集与处理 本设计的控制系统通过摄像头采集图像后对采集到的图像进行数据处理再据此判断引导线(黑线)的位置及其变化趋势,从而 运用相应的控制算法 对转向和速度进行控制。 由此可见信号采集和处理部分的重要性。 而 对于摄像头智能车来说,信号的采集与处理 又是较为复杂的一个部分 , 本章内容是设计中的 一个难点部分。 本 知识 本设计中在对信号采集与处理方案具体介绍前先论述传感器及图像信号的基本知识。 这些内容也是之后信号采集与处理方案分析的关键。 摄像头 工作原理 在“飞思卡尔”智能汽车竞赛中,根据信号提取方案的不同可以分成摄像头组、光电组、电磁组等不同类型的智能车。 本设计中所采用的是摄像头组的方案,因此,图像信号的提取是以 CCD摄像头为基础的。 12 摄像头主要由镜头,图像传感芯片和外围电路构成。 图像传感芯片又是其最重要的部分,摄像头的指标取决于图像传感芯片的指标;该芯片要配以合 适的外围电路才能工作,将它们制作在一块电路板上,再配上镜头、外壳、引线和接头,这就构成了通常所见的摄像头。 摄像头通常引出三个端子,分别为电源端,地端和视频信号端 (有的摄像头还有一个音频信号端)。 其中电源使用 12V 供电,视频信号输出为模拟信号,可以直接使用普通电视的视频输入端口输入并显示出来。 摄像头的主要工作原理 介绍如下:传感器 按 照 一定的分辨率,以隔行扫描的方式逐点扫描,当扫描到某点时,就通过图像传感芯片将该点处图像的灰度转换成与灰度成一一对应关系的电 压 值,然后将此电压值通过视频信号端输出。 这就像我们看 书一样,我们会一行一行的看。 然后,看完一页 再 跳到下一页。 所不同的是,摄像头是隔行扫描的,所以它会有奇场和偶场之分。 本设计所采用的 摄像头每秒扫描 25帧 图像,每 帧 又分奇、偶两场,先奇场后偶场, 奇场时只扫描图像中的奇数行,偶场时则只扫描偶数行。 故每秒扫描 50场图像。 可见,每场信号持续时间为 20ms。 每场又有 310线(行),故每行的扫描时间大约为 64us。 摄像头图像信号 简介 摄像头 图像信号 的 组成如图 所示。 本部分内容上海交通大学的技术报告的说明非常详细,在此简述如下: 当 摄像头 扫描完一行,视频信号端 就输出一 个 低于最低视频信号电压的电平,这样 在 每行图像对应的电压信号之后会有一个电压“凹槽”,此“凹槽”叫做行同步脉冲,它是扫描换行的标志。 然后,跳过一行(因为摄像头是隔行扫描的方式),开始扫描新的一行,如此下去,直到扫描完该场的视频信号,接着就会出现一段场消隐区。 此区中有若干个复合消隐脉冲(简称消隐脉冲),在这些消隐脉冲中,有个脉冲它远宽于(即持续时间长于)其他的消隐脉冲,该消隐脉冲又称为场同步脉冲,它是扫描换场的标志。 场同步脉冲标志着新的一场的到来。 不过,场消隐区恰好跨在上一场的结尾部分和下一场的开始部分 , 要 等场消隐区过去,下一场的视频信号才真正到来。 13 图 图像信号组成 摄像头有两个重要的指标:分辨率和有效像素。 分辨率实际上就是每场行同步脉冲数,这是因为行同步脉冲数越多,则对每场图像扫描的行数也越多。 事实上,分辨率反映的是摄像头的纵向分辨能力。 有效像素常写成两数相乘的形式,如“ 320 240”,其中前一个数值表示单行视频信号的精细程度,即行分辨能力;后一个数值为分辨率,因而有效像素=行分辨能力 分辨率。 摄像头 的 选择 摄像头的性能,对本设计所述的一些算法影响较大。 关于摄像头的选择方 法,根据参赛经验并参考其他说法总结如下: 摄像头分黑白的和彩色的这两种,为达到寻线目的,只需提取探测画面的灰度信息,而并不使用色彩信息,所以本设计中采用黑白摄像头,相较使用同等分辨率的彩色摄像头而言,这样可减少单片机采样摄像头输出视频信号的负担,同时,在软件编写方面也会方便很多。 关于 CCD和 CMOS摄像头的选择,根据实际经验我认为 CCD摄像头在动态性能上面要优于后者,但在稳定性能方面不如 CMOS摄像头。 也就是说如果运动速度较快,用前者的效果要好于后者。 基于设计要求达到的速度已经不满足于低速巡线行驶,而要追 求尽可能高的速度,本设计最终选择了 CCD摄像头。 另外,根据经验,现在市场上能买到的摄像头参数中的输入电流要尽量 选择 大一点。 对于 摄像头线数 的选择 , 大量实验显示 线数不能太高,因为单片机的处理速度有限,线数越高, 尽管可提高纵向分辨能力,却会减少单。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。