毕业设计_基于stm32的智能小车设计(5)

2018-11-27 17:00

基于stm32的智能小车设计

图2.20 舵机角度与脉宽对应图

2.3.2 HC-SR04模块硬件电路设计 超声波模块硬件原理图如下图所示:

图2.21 超声波硬件原理图

HC-SR04模块主要由发射器、接收器和部分电路组成。在此试验中,我们只需简单了解电路的设计,对于其基本原理可以不用过多涉猎,我们只需明白它们的工作原理,并且能够简单运用即可。 2.3.3 HC-SR04模块程序设计

根据硬件电路的设计,我们对避障子程序进行设计,程序流程图如图2.22所示:

- 21 -

基于stm32的智能小车设计

开始系统初始化前进否前方是否有障碍是舵机左转否小车左转小车左方是否有障碍是舵机右转否小车右方是否有障碍小车右转小车后转避障子程序结束 图2.22 避障程序流程图

避障模块在程序设计中,我们的工作主要是: 1、控制超声波的扫描周期

2、采集超声波发射到接受的高电平持续时间t

3、对采集的高电平持续时间t进行处理,判断前方是否有障碍 下面我们就详细介绍我们是怎么通过软件设计来完成这几个步骤的: 1、控制超声波的扫描周期

根据表2-2,我们采用的是TIM2来控制超声波的扫描周期。首先我们把TIM2设置为定时器中断模式,代码格式为void TIM2_Int_Init(u16 arr,u16 psc); 由于配置定时器中断模式十分简单,我们就不在详细介绍,其详细代码见附录4.定时器TIM2的中断周期计算公式为T=((arr+1)*(psc+1))/Tclk。Tclk为系统周期,一般为72Mhz.我们在中断服务程序中控制超声波的发射,我们采用PC7作为触发信号,根据超声波时序图,我们需要在中断程序中给PC7一个持续10ms的高电平,中断服务程序如下:

- 22 -

基于stm32的智能小车设计

void TIM2_IRQHandler(void) //TIM2中断 {

if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)

{

TIM_ClearITPendingBit(TIM2, TIM_IT_Update );

GPIO_SetBits(GPIOC,GPIO_Pin_7);

delay_ms(10);

GPIO_ResetBits(GPIOC,GPIO_Pin_7);

} }

2、采集超声波发射到接受的持续时间t

在本节试验中,我们使用了通用定时器TIM5的输入捕获功能,输入捕获模式具有测量频率或者测量脉冲的宽度的功能。我们开启TIM5通道CH1(定时器5)的输入捕获模式,采集ECHO端口的高电平持续时间。配置定时器5代码格式为: void TIM5_Cap_Init(u16 arr,u16 psc){…}

下面我们就详细讲解一下,如何开启并使用通用定时器的输入捕获功能。 输入捕获的原理,简单的讲就是通过检测TIM5(定时器)通道CH1的边沿信号,当边沿信号发生变化时,当前寄存器的值TIM1_CNT存放到通道的捕获/比较寄存器(TIM5_CCR1)里面。我们的实验就是采集捕获/比较寄存器(TIM5_CCR1)中的值并进行处理,完成相应的动作。为了使TIM5通道CH1具有捕获功能,我们需要用到TIM5_PSC、TIM5_ARR、捕获/比较模式寄存器(TIM5_CCMR1)、捕获/比较使能寄存器(TIM5_CCER)、捕获/比较寄存器(TIM5_CCR1)、DMA/中断使能寄存器(TIM5_DIER)、控制寄存器(TIM5_CR1)。我们下面就简单介绍下下这几个寄存器。

TIM5_PSC、TIM5_ARR、TIM5_CCR1这3个寄存器用法与前节中相同,我们就不在赘述,而在本实验中,捕获/比较寄存器TIM5_CCMR1非常重要,该寄存器的各位描述如下图所示:

- 23 -

基于stm32的智能小车设计

图2.23 TIMx_CCMR1各位描述

我们使用的是TIM5捕获/比较通道CH1,所以图中只介绍[7:0]位。本次试验我们设置CC1S[1:0]=01,IC1PSC[1:0]=00,IC1F[3:0]=0000。

接着我们再来看看捕获/比较使能寄存器TIMx_CCER,本节用到了CC1E和CC1P两位,描述如下图所示:

图2.24 TIMx_CCER最低两位描述

- 24 -

基于stm32的智能小车设计

所以要使能通道CH1输入捕获,CC1E必须设置为1,而CC1P则可以根据实际情况设置。

其次,我们再看看DMA/中断使能寄存器(TIM5_DIER),因为我们使用的是通道CH1,所以我们仅介绍控制通道CH1的位,如下图所示:

图2.25 TIMx_DIER各位描述

通过此图我们知道,我们需要设置CC1IE为1即可。

然后,我们再看看控制寄存器TIMx_CR1,我们只用到了最低位,所以我们仅介绍位0的功能,TIMx_CR1寄存器各位描述及位0功能描述如下如所示:

图2.26 TIMx_CR1寄存器各位描述及位0功能描述

我们要使能计数器,所以位0设置为1。至此,我们所使用的寄存器一一介绍完毕,下面介绍怎么配置输入/捕获步骤:

? 开启TIM5时钟以及GPIOA时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); ? 初始化TIM5,设置TIM5的psc和arr。

TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

- 25 -


毕业设计_基于stm32的智能小车设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:镇宣传工作存在的问题及整改措施

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: