基于stm32的智能小车设计毕业设计(编辑修改稿)内容摘要:

块结构及其原理 电机驱动模块的实物图如图 所示: 图 驱动电路实物图 电机驱动模块的主要器件是芯片 LM293D,内部原理图如图 所示: 图 电机驱动内部原理图 全桥式驱动电路的 4 只开关管都工作在斩波状态,如图 所示, K K2为一组, K K4 为另一组,两组的状态互补,一组导通则另一组必定关断。 当K K2 导通时, K K4关断,电机两端加正向电压,电机实现正转或反转制动;当 K K4 导通时, K K2关断,电机两端为反向电压,电机实现反转或正转制动。 驱动模块电路设计 K1 K3 K4 K2 基于 stm32 的智能小车设计 17 电机驱动模块的电路原理如图 所示: 图 驱动模块电路原理图 表 22 是各个端口状态与运动方向的关系,其关系如下表所示: 表 22 端口与运动方向关系表 电机 M1 IN1 IN2 电机 M2 IN3 IN4 停止 0 0 停止 0 0 正转 1 0 正转 1 0 反转 0 1 反转 0 1 - 1 1 - 1 1 驱动 软件程序设计 车轮电机的动作由 GPIO 口的输出实现,本节主要配置运动方向和运动速度,对于运动速度的控制,我们必须使用 PWM,通过改变 PWM 的占空比来调节速度的大小,其主要代码设计如下所示: void TIM3_PWM_Init(u16 arr,u16 psc){ „ .} 要想使 stm32 的通用定时器 TIMx 产生 PWM 输出,需要用到的寄存器有:预分频寄存器( TIMx_PSC)、自动重装载寄存器( TIMx_ARR)、捕获 /比较模式寄存器( TIMx_CCMR1/2)、捕获 /比较使能寄存器( TIMx_CCER)、捕获 /比较寄存器( TIMx_CCR1~4)。 我们先介绍这几个寄存器,然后介绍如何使用库函数产生 PWM输出。 下面我们就简单介绍下这些寄存器: 首先是预分频寄存器( TIMx_PSC),该寄存器可以用设置对时钟进行分频,然后在提供给计数器作为计数器的时钟。 该寄存器的各位功能如图所示: 基于 stm32 的智能小车设计 18 图 TIMx_PSC 寄存器各位描述 接下来介绍 自动重装载寄存器( TIMx_ARR),该寄存器的各位描述如下图所示: 图 TIMx_ARR 寄存器各位描述 通过设置这两个寄存器,我们就可以算出 PWM 的输出周期,计算公式为: Tout=((arr+1)*(psc+1))/Tclk。 其中 Tclk 为系统时钟周期。 其次我们介绍 捕获 /比较模式寄存器( TIMx_CCMR1/2),总共有两个, TIMx_CCMR1 和TIMx_CCMR2, TIMx_CCMR1 控制通道 CH1 和 CH2, TIMx_CCMR2控制 CH3 和 CH4。 因为这 2个寄存器差不多,我们仅以通道 CH1 为例,介绍其中的 TIMx_CCMR1 为例,该寄存器的各位描述如下图所示: 图 TIMx_CCMR1/2 寄存器各位描述 这里我们只介绍该寄存器的 OCxM 位,我们就以 TIMx_CCMR1 中的 OC1M(控制通道 CH1)为例,该位功能如下图所示: 基于 stm32 的智能小车设计 19 图 OC1M 功能描述 我们使用的是 PWM 输出模式,所以 OC1M 必须设置为 110/111。 OC2M(控制通道 CH2)各位描述与 OC1M 相同,我们这要不在叙述。 然后我们介绍 捕获 /比较使能寄存器( TIMx_CCER),该寄存器控制着各个输入 /输出通道的开关,对于该寄存器,各位描述如下图所示: 图 TIMx_CCER 寄存器描述 该寄存器比较简单,因为我们只介绍通道 1,所以我们只讲 CC1E 位。 如果我们想使能输入 /捕获 1,我们只需使用 CC1E 位。 要想使 PWM 从 I/O 口输出,此位必须设置为 1。 最后介绍捕获 /比较寄存器( TIMx_CCR1~4),总共有 4 个,分别对应 CH1~4,因为这 4 个寄存器相似,我们仅以 TIMx_CCR1 为例,该寄存器的给位介绍如下图所示: 图 TIMx_CCR1 寄存器各位描述 基于 stm32 的智能小车设计 20 在输出模式下,该寄存器的值与 CNT 中的值进行比较,根据结果,实现电平的翻转。 至此,我们把用到的几个寄存器都介绍完毕,下面我们就介绍如何通过库函数来配置实现 PWM 三路输出。  开启 TIM3 时钟以及复用功能输出。 使能 GPIO 和端口复用功能时钟。 库函数使能 TIM GPIO 以及复用功能时钟的方法是: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE)。  初始化 TIM3,设置 TIM3 的 PSC 和 ARR。 在开启了 TIM3 的时钟之后,我们要设置 PSC 和 ARR 寄存器的值来控制 PWM 的输出周期。 调用的格式如下: =arr。 =psc。 =0。 =TIM_CounterMode_Up。 TIM_TimeBaseInit(TIM3, amp。 TIM_TimeBaseStructure)。  设置 TIM3_CH CH CH3 的 PWM 模式,使能 TIM3 的 CH CH CH3输出。 在库函数中 PWM 通道设置是通过 TIM_OC1Init~TIM_OC4Init 来设置的,这里我们需要 3 路 PWM 输出,所以 我们需要使用函数 TIM_OC1Init、TIM_OC2Init、 TIM_OC3Init。 库函数的调用格式如下: =TIM_OCMode_PWM1。 =TIM_OutputState_Enable。 = 0。 = TIM_OCPolarity_High。 TIM_OC2Init(TIM3, amp。 TIM_OCInitStructure)。 TIM_OC1Init(TIM3, amp。 TIM_OCInitStructure)。 TIM_OC3Init(TIM3, amp。 TIM_OCInitStructure)。  使能 TIM3。 完成以上配置后,我们要使能定时器 TIM3。 库函数调用格式如下: TIM_Cmd(TIM3, ENABLE)。 基于 stm32 的智能小车设计 21  通过修改 TIM3_CCRx(x 为 1,2,3)来控制占空比。 库函数格式如下: Void TIM_SetComparex(TIM3,uint16_t Compare2)。 我们可以知道,通过定时器 3 控制 PWM 波的占空比,从而实现速度方面的控制。 其中 arr 和 psc 可以控制 PWM 波的周期, TIM3_CCRx 可以控制 PWM 波的占空比。 我们只需要调用此函数就可以实现不同的速度控制。 对于运动方向控制的代码我们就以后退为例, 由于端口寄存器过于简单,我们不在此介绍端口的寄存器。 我们仅介绍如何通过库函数进行端口配置。 对各个 I/O端口配置的过程相似,我们仅以 PD8 为例: 主要 过程 如下所示:  使能 I/O 口时钟 ,调用格式如下所示: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC, ENABLE)。  初始化 I/O 参数 ,调用格式如下所示: =GPIO_Pin_8。 =GPIO_Mode_Out_PP。 = GPIO_Speed_50MHz。 GPIO_Init(GPIOD, amp。 GPIO_InitStructure)。  操作 I/0 口 GPIO_SetBits(GPIOD,GPIO_Pin_8)。 PD8 置 1 GPIO_ResetBits(GPIOD,GPIO_Pin_8)。 PD8 置 0 我们知道了如何对端口进行操作之后就可以随意的控制小车的运动啦, 运动方向的程序设计,其基本函数单元如下所示: void Left_Low(void)。 … 我们调用这些函数,就可以实现不同运动方向的控制。 主要代码详见附录 3. 避障模块设计 在人类身体构造系统中 ,眼睛可以使我们非常方便的采集到外界环境的信息 ,然后 把信息 及时的传输到大脑,并对外界环境 信息 的变化做出相应的处理。 而对智能小车来说,避障模块之于小车就相当于眼睛之于人类。 避障模块可以采集外部地形数据,然后把所采集的地形数据传输到中央处理模块,从而实现躲避障碍的功能。 避障模块所采用的器件在市场中有许多类型,比如红外检测,光位移检基于 stm32 的智能小车设计 22 测,超声波检测等。 本次试验我们使用的是 HCSR04 超声波检测,超声波由于具有检测能力强,传播路径宽,因此我们决定使用 HCSR04 器件。 在使用 HCSR04 模块进行超声波测距的同时 ,我们可以使用舵机进行辅助。 舵机的主要作用是改变 HCSR04 模块的照射方向,从而控制超声波的发射方向。 在程序编写过程中,如果小车前方遇见障碍时,我们可以直接控制舵机的转向,而小车的车身可以保持不变,在测量结束后,小车再做相应的动作。 避障模块器件结构及其原理 HCSR04 超声波测距模块测量范围在 2cm400cm 之间,可以实现无接触式测距功能。 HCSR04 超声波测距模块由一个超声波发射器、一个超声波接收器和控制电路组成,避障模块的实物结构图如图 所示: 图 实物正反面结构图 如结构图所示 VCC 提供 5v 电源, GND 为接地线, TRIG 为触发信号线, ECHO为回向信号输出线。 基本原理如下:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号,在 TRIG 触发沿到来后,超声波发射器会自动发出 8 个 40KHz 的方波,并且检测是否有信号返回,当超声波接收器接收到超声波时,表明有信号返回,通过 IO 口 ECHO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。 因此测量距离 =(高电平持续时间 *340m/s) /2。 测量时序图如图 所示: 基于 stm32 的智能小车设计 23 图 超声波时序图 我们根据时序图,可以编写相应的程序代码。 为了防止发射信号对回向信号的影响,我们的测量周期不易过小。 并且由于 HCSR04 的感应角度不大于 15176。 ,所以测距时,为了防止发射信号丢失,我们要求被测物体的面积不应小于 平方米,否则可能导致测量结果不准确。 舵机在避障模块的主要作用前面已经 提到,本节主要讲解舵机的工作特性。 舵机的实物图如图 所示: 图 舵机实物图 舵机的工作工作原理是 stm32 微处理器发出数据给舵机,舵机内部有一个基准电路,它会产生周期为 20ms,宽度为 的基准信号,它将微处理器传输的直流偏置电压与电位器的电压数据进行比较,获得电压差输出。 经由电路板上的IC 判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂,同时由位置检测器送回反馈信号。 舵机的转动角度与 stm32 所提供的 PWM 信号相关。 标准信号 PWM 周期为 20ms,理论上来讲脉宽为 1~2ms,实际我们的脉宽为 ~,脉宽与所转的角度一一对应。 角度与脉宽的对应图如图 所示: 基于 stm32 的智能小车设计 24 图 舵机角度与脉宽对应图 HCSR04 模块硬件电路设计 超声波模块硬件原理 图如下图所示: 图 超声波硬件原理图 HCSR04 模块主要由发射器、接收器和部分电路组成。 在此 试验中,我们只需简单了解电路的设计,对于其基本原理可以不用过多涉猎, 我们只需明白它们的工作原理,并且能够简单运用即可。 HCSR04 模块程序设计 根据硬件电路的设计,我们对避障子程序进行设计,程序流程图如图 所示: 基于 stm32 的智能小车设计 25 开 始系 统 初 始 化前 进前 方 是 否 有 障 碍舵 机 左 转否是小 车 左 方 是 否 有 障 碍否舵 机 右 转小 车 右 方 是 否 有 障 碍小 车 左 转是小 车 右 转否小 车 后 转避 障 子 程 序 结 束 图 避障程序流程图 避障模块在程序设计中,我们的工作主要是: 控制超声波的扫描周期 采集超声波发射到接受的高电平持续时间 t 对采集的高电平持续时间 t进行处理,判断前方是否有障碍 下面我们就详细介绍我们是怎么通过软件设计来完成这几个步骤的: 控制超声波的扫描周期 根据表 22,我们采用的是 TIM2 来控制超声波的扫描周期。 首先我们把 TIM2设置为定时器中断模式,代码格式为 void TIM2_Int_Init(u16 arr,u16 psc)。 由于配置定时器中断模式十分简单,我们就不在详细介绍,其详细代码见附录 4.定时器 TIM2 的中断周期计。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。