《毕业设计_基于stm32的智能小车设计.docx》由会员分享,可在线阅读,更多相关《毕业设计_基于stm32的智能小车设计.docx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 stm32 的智能小车设计摘要本次试验主要分析了基于 STM32F103 微处理器的智能小车控制系统的系统设计过程。此智能系统的组成主要包括 STM32F103 控制器、电机驱动电路、红外探测电路、超声波避障电路。本次试验采用 STM32F103 微处理器为核心芯片,利用 PWM 技术对速度以及舵机转向进行控制,循迹模块进行黑白检测,避障模块进行障碍物检测并避障功能,其他外围扩展电路实现系统整体功能。小车在运动时, 避障程序优先于循迹程序,用超声波避障电路进行测距并避障,在超声波模块下我们使用舵机来控制超声波的发射方向,用红外探测电路实现小车循迹功能。在硬件设计的基础上提出了实现电机控制
2、功能、智能小车简单循迹和避障功能的软件设计方案,并在 STM32 集成开发环境 Keil 下编写了相应的控制程序,并使用mcuisp 软件进行程序下载。关键词:stm32;红外探测;超声波避障;PWM;电机控制- 1 -基于 stm32 的智能小车设计AbstractThis experiment mainly analyzes the control system of smart car based on microprocessor STM32F103 system design process. The composition of the intelligent system mai
3、nly including STM32F103 controller, motor drive circuit, infrared detection circuit, circuit of ultrasonic obstacle avoidance。 This experiment adopts STM32F103 microprocessor as the core chip, using PWM technique to control speed and steering gear steering, tracking module is used to detect the blac
4、k and white, obstacle avoidance module for obstacle detection and obstacle avoidance function, otherperipheral extended circuit to realize the whole system functio 。n Whenthe car is moving, obstacle avoidance program prior to tracking, using ultrasonic ranging and obstacle avoidance obstacle avoidan
5、ce circuit, we use steering gear under ultrasonic module to control the emission direction of ultrasonic, infrared detection circuit is used to implement the car tracking function. On the basis of the hardware design is proposed for motor control function, simple intelligent car tracking and obstacl
6、e avoidance function of software design , and in the STM32 integrated development environment under the Keil. Write the corresponding control program, and use McUisp program download software.Keywords:STM32;Infrared detection;Ultrasonic obstacle avoidance;PWM; Motor control- 2 -基于 stm32 的智能小车设计目录1.绪
7、论.-4-1.1 研究概况.-4-1.2 研究思路.-4-2.软硬件设计.-5-2.1 中央处理模块.-5-2.1.1 stm32f103 内部结构.-6-2.1.2 stm32 最小系统电路设计.-7-2.1.3 stm32 软件设计的基本思路.-9-2.1.4 stm32 中断介绍.-10-2.1.5 stm32 定时/计数器介绍.-11-2.1.6 主程序设计流程图.-12-2.2 电机驱动模块.-13-2.2.1 驱动模块结构及其原理.-13-2.2.2 驱动模块电路设计.-14-2.2.3 驱动软件程序设计.-14-2.3 避障模块设计.-18-2.3.1 避障模块器件结构及其原理.
8、-19-2.3.2 HC-SR04 模块硬件电路设计.-21-2.3.3 HC-SR04 模块程序设计.-21-2.4 循迹模块设计.-28-2.4.1 循迹模块结构及其原理.-28-2.4.2 循迹模块电路设计.-30-2.4.3 红外循迹模块程序设计.-30-3.软件调试.-33-3.1程序仿真.-33-3.2 程序下载.-34-4.系统测试.-35-5.总结.-37-致谢.-38- 3 -基于 stm32 的智能小车设计参考文献.- 39 -附录.- 41 -1. 绪论智能小车通过各种感应器获得外部环境信息和内部运动状态,实现在复杂环境背景下的自主运动,从而完成具有特定功能的机器人系统。
9、而随着智能化电器时代的到来,它们在为人们提供的舒适的Th活环境的同时,也提高了制造智能化电器对于人才要求的门槛.智能小车是集成了多种高新技术,它不仅融合了电子、传感器、计算机硬件、软件等许多学科的知识,而且还涉及到当今许多前沿领域的技术,它是一个国家高科技技术水平的重要体现。通过建立起简易智能小车的设计,引导学Th从理论走向实践,培养同学们的动手能力,使同学们在了解智能化电器的工作原理的基础上,还使同学们获得完成整体项目的能力,并掌握了Stm32 开发板的编程原理,为同学们进入ARM 领域提供了基础。另外,本次课程设计,使同学们了解自己的不足之处,从而使同学们有目标的提升自己的能力。1.1 研
10、究概况国外研究概况:上世纪 50 年代初,国外就有智能车辆的研究,从 90 年代开始, 智能车辆的研究就进入了系统化、大规模的研究阶段。尤其突出的是美国卡内基-梅陇大学机器人研究所已经完成了 Navlab 系列的自主车辆的研究,这一研究成果代表了国外智能车辆的主要研究方向。国内研究概况:我国对于智能车辆的研究较晚,始于上世纪 80 年代,而且现在大部分还是使用入门级别的 51 单片机进行设计与研究的,为了弥补与国外研究的差距,开设了全国大学Th电子设计竞赛。1.2 研究思路系统将采集的传感器信号送入 stm32 微控制器中,stm32 微控制器根据采集的信号做出不同的判断,从而控制电机运动方向
11、和运动速度。系统以 stm32 微控制器为核心,通过传感器采集不同的信号做出判断,继而改变电机的运动方向和运动速度。实验系统结构如图 1.1 所示:- 4 -基于 stm32 的智能小车设计图 1。1 实验系统结构图2. 软硬件设计智能小车控制系统具备了障碍物检测、自主避障、自主循迹等功能。相应的控制系统主要由以下四个模块组成:避障模块、循迹模块、电机驱动模块、中央处理模块四个模块组成,系统总体框架如图 2.1 所示:图 2.1 系统框架图我们本节主要任务是了解各个模块的功能,掌握各个模块所使用的器件的使用方法,并能够编写相应的程序代码.掌握各个模块的功能。2.1 中央处理模块在人类身体结构中
12、,大脑可以根据各个器官所传输的信息做出相应的行为动作用以保证人体所必须的Th理原料,而 stm32 处理器之于智能小车就相当于大脑之于人类,它可以从各个模块之间获得数据,并对所传输的数据进行实时处理,来驱使电机模块做出相应的行为动作。由ARM 公司设计的基于ARMv7 架构的Cortex 系列的标准体系结构在 2006 年推出,此结构是用来满足日渐复杂的不同性能要求的软件设计,根据所面向的领域,Cortex 系列可以分为 A、R、M 三个分工明确的系列1。Stm32 处理器的出现为微控制系统、工业控制系统、汽车车身系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能系统提供了基础,使
13、编程的复杂性,集高性能、低功耗、低成本大大简化,并使它们融为于一体2。意法半导体 ST 公司作为一个半导体制造厂商,是 ARM 公司 Cortex-M3 内核开发项目一个主要合作方。2007- 5 -基于 stm32 的智能小车设计年 6 月 11 日由 ST 公司率先推出的基于 CortexM3 内核的 STM32 系列微控处理器研发而出。此中,A 系列是面向复杂的尖端应用程序,用于运行开放式的复杂操作系统;R 是 Real 的首字母缩写,是面向实时系统开发的;M 是 Mirco 的首字母缩写,专门面向低成本的微控制领域开发研究。因此,Cortex-M3 处理器是由ARM 公司设计的首款基于
14、ARMv7-M 体系结构的 32 位标准处理器,它不仅具有低功耗、少门数等优点,而且还具有短中断延迟、低调试成本等众多优点,使它在众多的处理器中脱颖而出。目前为止,STM32 系列处理器暂分为2 个系列。其中,STM32F101 系列是标准型系列,工作频率设定在 36MHZ;STM32F103 系列是增强型系列,工作频率设定在 72MHZ,其带有更多片内 RAM 和更丰富的外设资源。这两个系列的产品在软件和引脚封装方面具有兼容性,并且拥有相同的片内Flash 资源,使软件的开发和升级更加方便。本次试验,我们使用的是 stm32f103 处理器。2.1.1 stm32f103 内部结构STM32
15、F103 系列微处理器是首款基于 ARMv7M 体系结构的 32 位标准 RISC(精简指令集)处理器,具有执行代码效率高,外设资源丰富等众多优点。该系列微处理器工作频率设定在 72MHz,高达 128K 字节的内置 Flash 存储器和 20K 字节的 SRAM,方便程序编写,而且具有丰富的通用 I/O 端口。其内部结构图如图2。2 所示:- 6 -基于 stm32 的智能小车设计图 2。2 内部结构图Stm32 处理器主系统主要由 4 个被动单元和 4 个驱动单元构成。4 个驱动单元是:通用 DMA1,通用 DMA2,内核 DCode 总线和系统总线。4 个被动单元由 APB 桥,APB
16、设备,内部 Flash 闪存,内部 SRAM、FSMC。我们实验所采用的芯片具有64KBSRAM、512KBFLASH、2 个基本定时器,4 个通用定时器,2 个高级定时器,3 个 SPI,2 个 IIC,5 个串口,1 个 USB,1 个 CAN,3 个 12 位的 ADC,1 个 12 位 DAC、1 个 SDIO 接口,1 个 FSMC 接口以及 112 个通用 I/O 口。2.1.2 stm32 最小系统电路设计Stm32 的最小系统电路主要由系统时钟电路、实时时钟电路、JTAG 调试接口电路,复位电路和启动模式选择电路组成。最小系统电路原理图如图 2-13 所示:图 2。3 最小系统
17、电路原理图主要电路原理图的设计及功能如下所示:1. 系统时钟电路系统时钟电路主要作用是提供节拍,就相当于人类的心脏跳动,随着心脏的跳动,血液就会到达全身部位,所以系统时钟的重要性就不言而喻啦。系统时钟的电路设计如图 2.4 所示:- 7 -基于 stm32 的智能小车设计图 2。4 系统时钟电路图在时钟电路中,我们选用 8M 的晶振。2。复位电路复位电路的设计如图 2.5 所示:图 2。5 复位电路图本次试验所采用的开发板为低电平复位。如图所示,当按键悬空时 RST 输入为高电平,当按键按下时,RST 脚输入为低电平,从而电路复位.3.JTAG 电路JTAG 电路原理图如图 2。6 所示:图
18、2。6 JAG 电路原理图JTAG 的主要功能是使目标文件烧到核处理器中。4。启动模式电路启动模式电路原理图如图 2。7 所示:- 8 -基于 stm32 的智能小车设计图 2。7 启动模式电路原理图通过设置BOOT1:0引脚可以选择三种不同启动模式,启动模式如表2-1 所示:表 2-1 启动模式表启动模式选择引脚BOOT1BOOT0启动模式说明X0主闪存存储器主闪存存储器被选为启动区域01系统存储器系统存储器被选为启动区域11内置 SRAM内置 SRAM 被选为启动区域2。1。3 stm32 软件设计的基本思路在对其他模块设计之前,我们必须了解 stm32 的编程规则.任何处理器,包括stm
19、32 处理器,想要处理器完成某项相应的动作,就必须对处理器的寄存器进行操作。比如,我们在单片机C51 中,同样,我们在 stmM32 的开发中过程中,我们同样可以对寄存器直接操作:GPIOxBRR=0x0011。(x 可以是 A,B,C,D,E比如 GPIOA 就是端口A)但是,对于stm32 这种级别的处理器 ,几百个寄存器记起来谈何容易。所以,ST(意法半导体)提出了固件库的概念,利用固件库进行编程。固件库的本质就是函数的集合,固件库将那些寄存器的底层操作都封装起来,提供一整套API 供开发者使用。比如,上面通过控制 BRR 寄存器来控制电平的变化,官方库封装了一个函数:Void GPIO
20、_ResetBits(GPIO_TypeDef GPIOx,uint16_t GPIO_Pin)GPIOxBRR = GPIO_Pin;(x 可以是 A,B,C,D,E比如 GPIO_A就是端口 A)通过使用 GPIO_ResetBits()函数就可以直接对寄存器进行操作啦。- 9 -基于 stm32 的智能小车设计2。1。4 stm32 中断介绍本方案中,我们要使用 stm32 的中断,在程序设计中,我们要开启各个管道的中断,打开各个中断通道,配置中断方式,我们先来讲述下 stm32 单片机的中断机制。结构图如下所示:图 2。32 stm32 外部中断/事件控制器结构图图中的实线箭头,为外部
21、中断信号的传输路径。首先外部信号从编号为 1 的输入线进入。其次这个外部信号通过编号 2 的边沿检测电路,这个边沿检测电路受到“上升沿选择寄存器”、“下降沿选择寄存器”的控制,我们可以控制这两个寄存器来选择中断的触发方式。我们可以在程序中进行设置,比如 EXTI_InitStructure。EXTI_Trigger = EXTI_Trigger_Rising;设置为上升沿触发中断然后该外部信号进入编号为 3 或门,或门另一端是软件中断寄存器,如果,软件中断/事件寄存器的对应位置 1,编号 3 的输出总是为有效信号 1。之后进入“中断挂起请求寄存器”,该寄存器记录了外部信号的电平变化。最后经过编
22、号为 4 的与门进入 NVIC 中断控制器,如果 “中断屏蔽寄存器”的对应位置 0,外部的中断请求信号不能传输到 NVIC 中断控制器,从而实现中断的屏蔽。由于我们采用的是外部信号触发中断,所以我们只需了解外部中断的请求机制,对于事件的中断请求机制,我们在这里不做介绍。我们以 PE1 为例,介绍下外部中断的一般步骤。步骤如下: 开启 I/O 的复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);- 10 -基于 stm32 的智能小车设计 初始化 I/O 为输入GPIO_InitStructur
23、e.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOE, GPIO_InitStructure); 初始化线上中断,设置触发条件GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1); EXTI_InitStructure.EXTI_Line=EXTI_Line1; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure。EXTI_T
24、rigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(EXTI_InitStructure); 配置中断分组 NVIC,并使能中断NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x06; NVIC_InitS
25、tructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(NVIC_InitStructure); 编写中断服务函数void EXTI1_IRQHandler(void)主要代码详见附录 2.2.1。5 stm32 定时/计数器介绍Stm32 系列的单片机一般包含 8 个计数/定时器,TIM1、TIM8 分别为高级控制定时器,TIM2TIM5 为通用定时器,TIM6 以及 TIM7 为基本定时器.对于定时器的详细内容,我们不在这里一一介绍。然后我们介绍一下本实验采用了那些定时器,以及这些定时器所要完成的功能有哪些。本实验所采用的定时器以及功能如下表所示:表
26、22 定时器介绍表定时器名称TIM2定时器配置模式定时器中断模式- 11 -主要功能通过定时器中断,控制超基于 stm32 的智能小车设计声波的扫描周期TIM3PWM 复用输出模式控制小车速度及舵机转向TIM5输入捕获模式采集超声波发射到接受的高电平持续时间 t2.1 。6 主程序设计流程图开始系统初始化前进在本节实验中,循迹模块以及避障模块都是采用中断方式进行工作的,因此其主程序流程图如下图所示:图 1.2 主程序流程图根据程序设计图,主程序设计如下: int main(void)u8TIM5CH1_CAPTURE_STA=0;/输入捕获状态u16 TIM5CH1_CAPTURE_VAL;/
27、输入捕获值delay_init();/延时函数初始化NVIC_Configuration(); /设置 NVIC 中断分组 2:2 位抢占优先级,2 位响应优先级LED_Init();GPIO_Configuration();/ 端 口 初 始 化 EXTIX_Init();/扫描轨迹TIM2_Int_Init(4999,7199);/控制超声波扫描周期TIM3_PWM_Init(1999,719); /控制舵机方向TIM5_Cap_Init(0XFFFF,72-1); /以 1Mhz 的频率计数while(1)- 12 -基于 stm32 的智能小车设计 farward_Low();dela
28、y_ms(10);2。2 电机驱动模块Stm32 对小车的控制,就是对电机的控制,通过控制电机的转向,小车的运动状态就会发Th改变。电机驱动模块的主要器件为 LM293N,我们下面就详细讲解下电机驱动模块.2.2 。1 驱动模块结构及其原理电机驱动模块的实物图如图 2。8 所示:图 2.8 驱动电路实物图电机驱动模块的主要器件是芯片 LM293D,内部原理图如图 2.9 所示:K1K4K3K2图 2.9 电机驱动内部原理图全桥式驱动电路的 4 只开关管都工作在斩波状态,如图 1。2 所示,K1、K2 为一组,K3、K4 为另一组,两组的状态互补,一组导通则另一组必定关断。当K1、K2 导通时,
29、K3、K4 关断,电机两端加正向电压,电机实现正转或反转制动; 当 K3、K4 导通时,K1、K2 关断,电机两端为反向电压,电机实现反转或正转制动。- 13 -基于 stm32 的智能小车设计2。2。2 驱动模块电路设计电机驱动模块的电路原理如图 2.10 所示:图 2。10 驱动模块电路原理图表 22 是各个端口状态与运动方向的关系,其关系如下表所示:表 2-2 端口与运动方向关系表电机 M1IN1IN2电机 M2IN3IN4停止00停止00正转10正转10反转01反转0111112。2。3 驱动软件程序设计车轮电机的动作由 GPIO 口的输出实现,本节主要配置运动方向和运动速度, 对于运
30、动速度的控制,我们必须使用PWM,通过改变PWM 的占空比来调节速度的大小,其主要代码设计如下所示:void TIM3_PWM_Init(u16 arr,u16 psc) 。要想使 stm32 的通用定时器 TIMx 产Th PWM 输出,需要用到的寄存器有:预分频寄存器(TIMx_PSC)、自动重装载寄存器( TIMx_ARR)、捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获 /比较使能寄存器( TIMx_CCER)、捕获 / 比较寄存器(TIMx_CCR14)。我们先介绍这几个寄存器,然后介绍如何使用库函数产Th PWM输出。下面我们就简单介绍下这些寄存器:首先是预分频寄存器(TI
31、Mx_PSC),该寄存器可以用设置对时钟进行分频,然后在提供给计数器作为计数器的时钟。该寄存器的各位功能如图所示:- 14 -基于 stm32 的智能小车设计图 2。11 TIMx_PSC 寄存器各位描述接下来介绍自动重装载寄存器(TIMx_ARR),该寄存器的各位描述如下图所示:图 2。12 TIMx_ARR 寄存器各位描述通过设置这两个寄存器,我们就可以算出 PWM 的输出周期,计算公式为: Tout=((arr+1)(psc+1))/Tclk。其中 Tclk 为系统时钟周期.其次我们介绍捕获/比较模式寄存器( TIMx_CCMR1/2),总共有两个, TIMx_CCMR1 和 TIMx_
32、CCMR2,TIMx_CCMR1 控制通道CH1 和 CH2,TIMx_CCMR2 控制 CH3 和 CH4。因为这 2 个寄存器差不多,我们仅以通道CH1 为例,介绍其中的TIMx_CCMR1 为例,该寄存器的各位描述如下图所示:图 2。13 TIMx_CCMR1/2 寄存器各位描述这里我们只介绍该寄存器的 OCxM 位,我们就以 TIMx_CCMR1 中的 OC1M(控制通道 CH1)为例,该位功能如下图所示:- 15 -基于 stm32 的智能小车设计图 2。14 OC1M 功能描述我们使用的是 PWM 输出模式,所以 OC1M 必须设置为 110/111。OC2M(控制通道 CH2)各
33、位描述与 OC1M 相同,我们这要不在叙述。然后我们介绍捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入/输出通道的开关,对于该寄存器,各位描述如下图所示:图 2。15 TIMx_CCER 寄存器描述该寄存器比较简单,因为我们只介绍通道 1,所以我们只讲 CC1E 位。如果我们想使能输入/捕获 1,我们只需使用CC1E 位。要想使PWM 从 I/O 口输出,此位必须设置为 1.最后介绍捕获/比较寄存器(TIMx_CCR14),总共有 4 个,分别对应 CH14,因为这 4 个寄存器相似,我们仅以 TIMx_CCR1 为例,该寄存器的给位介绍如下图所示:图 2.16 TIMx_
34、CCR1 寄存器各位描述- 16 -基于 stm32 的智能小车设计在输出模式下,该寄存器的值与 CNT 中的值进行比较,根据结果,实现电平的翻转.至此,我们把用到的几个寄存器都介绍完毕,下面我们就介绍如何通过库函数来配置实现 PWM 三路输出. 开启 TIM3 时钟以及复用功能输出。使能GPIO 和端口复用功能时钟。库函数使能 TIM3、GPIO 以及复用功能时钟的方法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA RCC_APB2Periph_
35、AFIO, ENABLE); 初始化 TIM3,设置TIM3 的 PSC 和 ARR。在开启了TIM3 的时钟之后,我们要设置 PSC 和 ARR 寄存器的值来控制 PWM 的输出周期。调用的格式如下:TIM_TimeBaseStructure。TIM_Period=arr;TIM_TimeBaseStructure 。TIM_Prescaler=psc; TIM_TimeBaseStructureTIM_TimeBaseStructure.TIM_ClockDivision=0;。TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3
36、, TIM_TimeBaseStructure); 设置 TIM3_CH1、CH2、CH3 的 PWM 模式,使能 TIM3 的 CH1、CH2、CH3 输出. 在库函数中 PWM 通道设置是通过 TIM_OC1InitTIM_OC4Init 来设置的,这里我们需要 3 路 PWM 输出, 所以我们需要使用函数 TIM_OC1Init、TIM_OC2Init、TIM_OC3Init。库函数的调用格式如下:TIM_OCInitStructure。TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure。TIM_OutputState=TIM_OutputSt
37、ate_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC2Init(TIM3, TIM_OCInitStructure);TIM_OC1Init(TIM3, TIM_OCInitStructure); TIM_OC3Init(TIM3, TIM_OCInitStructure); 使能 TIM3。完成以上配置后,我们要使能定时器TIM3.库函数调用格式如下: TIM_Cmd(TIM3, ENABLE); 通过修改 TIM3_CCR
38、x(x 为 1,2,3)来控制占空比。库函数格式如下: Void TIM_SetComparex(TIM3,uint16_t Compare2);- 17 -基于 stm32 的智能小车设计我们可以知道,通过定时器 3 控制 PWM 波的占空比,从而实现速度方面的控制. 其中 arr 和 psc 可以控制 PWM 波的周期,TIM3_CCRx 可以控制 PWM 波的占空比。我们只需要调用此函数就可以实现不同的速度控制.对于运动方向控制的代码我们就以后退为例 ,由于端口寄存器过于简单,我们不在此介绍端口的寄存器。我们仅介绍如何通过库函数进行端口配置 .对各个I/O 端口配置的过程相似,我们仅以
39、PD8 为例:主要过程如下所示: 使能 I/O 口时钟,调用格式如下所示:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD RCC_APB2Periph_GPIOC, ENABLE); 初始化 I/O 参数,调用格式如下所示:GPIO_InitStructure 。 GPIO_Pin=GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitSt
40、ructure); 操作 I/0 口GPIO_SetBits(GPIOD,GPIO_Pin_8);PD8 置 1GPIO_ResetBits(GPIOD,GPIO_Pin_8);PD8 置 0我们知道了如何对端口进行操作之后就可以随意的控制小车的运动啦,运动方向的程序设计,其基本函数单元如下所示:void Left_Low(void);我们调用这些函数,就可以实现不同运动方向的控制。主要代码详见附录 3.2。3 避障模块设计在人类身体构造系统中,眼睛可以使我们非常方便的采集到外界环境的信息, 然后把信息及时的传输到大脑,并对外界环境信息的变化做出相应的处理。而对智能小车来说,避障模块之于小车就
41、相当于眼睛之于人类。避障模块可以采集外部地形数据,然后把所采集的地形数据传输到中央处理模块,从而实现躲避障碍的功能。避障模块所采用的器件在市场中有许多类型,比如红外检测,光位移检测,超声波检测等。本次试验我们使用的是 HC-SR04 超声波检测,超声波由于具有检测能力强,传播路径宽,因此我们决定使用 HC-SR04 器件。- 18 -基于 stm32 的智能小车设计在使用 HCSR04 模块进行超声波测距的同时,我们可以使用舵机进行辅助. 舵机的主要作用是改变 HC-SR04 模块的照射方向,从而控制超声波的发射方向。在程序编写过程中,如果小车前方遇见障碍时,我们可以直接控制舵机的转向, 而小
42、车的车身可以保持不变,在测量结束后,小车再做相应的动作。2.3 。1 避障模块器件结构及其原理HCSR04 超声波测距模块测量范围在 2cm-400cm 之间,可以实现无接触式测距功能。HCSR04 超声波测距模块由一个超声波发射器、一个超声波接收器和控制电路组成,避障模块的实物结构图如图 2。17 所示:图 2。17 实物正反面结构图如结构图所示 VCC 提供 5v 电源,GND 为接地线,TRIG 为触发信号线,ECHO 为回向信号输出线。基本原理如下:采用 IO 口 TRIG 触发测距,给至少 10us 的高电平信号,在 TRIG 触发沿到来后,超声波发射器会自动发出 8 个 40KHz
43、 的方波, 并且检测是否有信号返回,当超声波接收器接收到超声波时,表明有信号返回, 通过 IO 口 ECHO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。因此测量距离=(高电平持续时间*340m/s)/2。测量时序图如图 2.18 所示:- 19 -基于 stm32 的智能小车设计图 2.18 超声波时序图我们根据时序图,可以编写相应的程序代码.为了防止发射信号对回向信号的影响,我们的测量周期不易过小。并且由于 HCSR04 的感应角度不大于 15, 所以测距时,为了防止发射信号丢失,我们要求被测物体的面积不应小于 0。5 平方米,否则可能导致测量结果不准确。舵机在避障模块的主
44、要作用前面已经提到,本节主要讲解舵机的工作特性。舵机的实物图如图 2。19 所示:图 2。19 舵机实物图舵机的工作工作原理是 stm32 微处理器发出数据给舵机,舵机内部有一个基准电路,它会产Th周期为 20ms,宽度为 1。5ms 的基准信号,它将微处理器传输的直流偏置电压与电位器的电压数据进行比较,获得电压差输出.经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂, 同时由位置检测器送回反馈信号。舵机的转动角度与 stm32 所提供的 PWM 信号相关。标准信号 PWM 周期为 20ms,理论上来讲脉宽为 12ms,实际我们的脉宽为 0。52.5ms,脉宽与所转的角度一一对应。角度与脉宽的对应图如图 2。20 所示:- 20 -基于 stm32 的智能