ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:3.26MB ,
资源ID:20872665      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20872665.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(毕业设计基于stm32的智能小车设计Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

毕业设计基于stm32的智能小车设计Word格式.docx

1、另外,本次课程设计,使同学们了解自己的不足之处,从而使同学们有目标的提升自己的能力。1.1研究概况国外研究概况:上世纪50年代初,国外就有智能车辆的研究,从90年代开始,智能车辆的研究就进入了系统化、大规模的研究阶段。尤其突出的是美国卡内基-梅陇大学机器人研究所已经完成了Navlab系列的自主车辆的研究,这一研究成果代表了国外智能车辆的主要研究方向。国内研究概况:我国对于智能车辆的研究较晚,始于上世纪80年代,而且现在大部分还是使用入门级别的51单片机进行设计与研究的,为了弥补与国外研究的差距,开设了全国大学生电子设计竞赛。1.2研究思路系统将采集的传感器信号送入stm32微控制器中,stm3

2、2微控制器根据采集的信号做出不同的判断,从而控制电机运动方向和运动速度。系统以stm32微控制器为核心,通过传感器采集不同的信号做出判断,继而改变电机的运动方向和运动速度。实验系统结构如图1.1所示:图1.1 实验系统结构图2.软硬件设计智能小车控制系统具备了障碍物检测、自主避障、自主循迹等功能。相应的控制系统主要由以下四个模块组成:避障模块、循迹模块、电机驱动模块、中央处理模块四个模块组成,系统总体框架如图2.1所示:图2.1 系统框架图我们本节主要任务是了解各个模块的功能,掌握各个模块所使用的器件的使用方法,并能够编写相应的程序代码。掌握各个模块的功能。2.1中央处理模块在人类身体结构中,

3、大脑可以根据各个器官所传输的信息做出相应的行为动作用以保证人体所必须的生理原料,而stm32处理器之于智能小车就相当于大脑之于人类,它可以从各个模块之间获得数据,并对所传输的数据进行实时处理,来驱使电机模块做出相应的行为动作。由ARM公司设计的基于ARMv7架构的Cortex系列的标准体系结构在2006年推出,此结构是用来满足日渐复杂的不同性能要求的软件设计,根据所面向的领域,Cortex系列可以分为A、R、M三个分工明确的系列1。Stm32处理器的出现为微控制系统、工业控制系统、汽车车身系统和无线网络等对功耗和成本敏感的嵌入式应用领域实现高系统性能系统提供了基础,使编程的复杂性,集高性能、低

4、功耗、低成本大大简化,并使它们融为于一体2。意法半导体ST公司作为一个半导体制造厂商,是ARM公司Cortex-M3内核开发项目一个主要合作方。2007年6月11日由ST公司率先推出的基于Cortex-M3内核的STM32系列微控处理器研发而出。此中,A系列是面向复杂的尖端应用程序,用于运行开放式的复杂操作系统;R是Real的首字母缩写,是面向实时系统开发的;M是Mirco的首字母缩写,专门面向低成本的微控制领域开发研究。因此,Cortex-M3处理器是由ARM公司设计的首款基于ARMv7-M体系结构的32位标准处理器,它不仅具有低功耗、少门数等优点,而且还具有短中断延迟、低调试成本等众多优点

5、,使它在众多的处理器中脱颖而出。目前为止,STM32系列处理器暂分为2个系列。其中,STM32F101系列是标准型系列,工作频率设定在36MHZ;STM32F103系列是增强型系列,工作频率设定在72MHZ,其带有更多片内RAM和更丰富的外设资源。这两个系列的产品在软件和引脚封装方面具有兼容性,并且拥有相同的片内Flash资源,使软件的开发和升级更加方便。本次试验,我们使用的是stm32f103处理器。2.1.1 stm32f103内部结构STM32F103系列微处理器是首款基于ARMv7-M体系结构的32位标准RISC (精简指令集)处理器,具有执行代码效率高,外设资源丰富等众多优点。该系列

6、微处理器工作频率设定在72MHz,高达128K 字节的内置Flash存储器存储器 存储器是用来存储程序和数据的部件,有了存储器,计算机才有记忆功能,才能保证正常工作。它根据控制器指定的位置存进和取出信息。 全文和20K 字节的SRAM,方便程序编写,而且具有丰富的通用I/O 端口。其内部结构图如图2.2所示:图2.2 内部结构图Stm32处理器主系统主要由4个被动单元和4个驱动单元构成。4个驱动单元是:通用DMA1,通用DMA2,内核DCode总线和系统总线。4个被动单元由APB桥,APB设备,内部Flash闪存,内部SRAM、FSMC。我们实验所采用的芯片具有64KBSRAM、512KBFL

7、ASH、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-1-3所示:图2.3 最小系统电路原理图主要电路原理图的设计及功能如下所示: 1.系统时钟电路系统时钟电路主要作用是提供节拍,就相当于人类的心脏跳动,随着心脏的跳动,血液就会到达全身部位,所以系统时钟的重要性就不

8、言而喻啦。系统时钟的电路设计如图2.4所示:图2.4 系统时钟电路图在时钟电路中,我们选用8M的晶振。2.复位电路 复位电路的设计如图2.5所示:图2.5 复位电路图本次试验所采用的开发板为低电平复位。如图所示,当按键悬空时RST输入为高电平,当按键按下时,RST脚输入为低电平,从而电路复位。3.JTAG电路 JTAG电路原理图如图2.6所示:图2.6 JAG电路原理图JTAG的主要功能是使目标文件烧到核处理器中。4.启动模式电路 启动模式电路原理图如图2.7所示:图2.7 启动模式电路原理图通过设置BOOT1:0引脚可以选择三种不同启动模式,启动模式如表2-1所示:表2-1 启动模式表启动模

9、式选择引脚启动模式说明BOOT1BOOT0X主闪存存储器主闪存存储器被选为启动区域1系统存储器系统存储器被选为启动区域内置SRAM内置SRAM被选为启动区域2.1.3 stm32软件设计的基本思路在对其他模块设计之前,我们必须了解stm32的编程规则。任何处理器,包括stm32处理器,想要处理器完成某项相应的动作,就必须对处理器的寄存器进行操作。比如,我们在单片机C51中,同样,我们在stmM32的开发中过程中,我们同样可以对寄存器直接操作:GPIOx-BRR=0x0011。 (x可以是A,B,C,D,E比如GPIOA就是端口A)但是,对于stm32这种级别的处理器,几百个寄存器记起来谈何容易

10、。所以,ST(意法半导体)提出了固件库的概念,利用固件库进行编程。固件库的本质就是函数的集合,固件库将那些寄存器的底层操作都封装起来,提供一整套API供开发者使用。比如,上面通过控制BRR寄存器来控制电平的变化,官方库封装了一个函数:Void GPIO_ResetBits(GPIO_TypeDef * GPIOx,uint16_t GPIO_Pin)GPIOx-BRR = GPIO_Pin; (x可以是A,B,C,D,E比如GPIO_A就是端口A)通过使用GPIO_ResetBits()函数就可以直接对寄存器进行操作啦。2.1.4 stm32中断介绍本方案中,我们要使用stm32的中断,在程序

11、设计中,我们要开启各个管道的中断,打开各个中断通道,配置中断方式,我们先来讲述下stm32单片机的中断机制。结构图如下所示:图2.32 stm32外部中断/事件控制器结构图图中的实线箭头,为外部中断信号的传输路径。首先外部信号从编号为1的输入线进入。其次这个外部信号通过编号2的边沿检测电路,这个边沿检测电路受到“上升沿选择寄存器”、“下降沿选择寄存器”的控制,我们可以控制这两个寄存器来选择中断的触发方式。我们可以在程序中进行设置,比如EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;设置为上升沿触发中断然后该外部信号进入编号为3或门,或

12、门另一端是软件中断寄存器,如果,软件中断/事件寄存器的对应位置1,编号3的输出总是为有效信号1。之后进入“中断挂起请求寄存器”,该寄存器记录了外部信号的电平变化。最后经过编号为4的与门进入NVIC中断控制器,如果 “中断屏蔽寄存器”的对应位置0,外部的中断请求信号不能传输到NVIC中断控制器,从而实现中断的屏蔽。由于我们采用的是外部信号触发中断,所以我们只需了解外部中断的请求机制,对于事件的中断请求机制,我们在这里不做介绍。我们以PE1为例,介绍下外部中断的一般步骤。步骤如下: 开启I/O的复用时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_

13、APB2Periph_AFIO,ENABLE); 初始化I/O为输入GPIO_InitStructure.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_M

14、ode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = 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_InitStr

15、ucture.NVIC_IRQChannelSubPriority = 0x06; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); 编写中断服务函数void EXTI1_IRQHandler(void)主要代码详见附录2.2.1.5 stm32定时/计数器介绍Stm32系列的单片机一般包含8个计数/定时器,TIM1、TIM8分别为高级控制定时器,TIM2TIM5为通用定时器,TIM6以及TIM7为基本定时器。对于定时器的详细内容,我们不在这里一一介绍。然后我们介绍一下本实验采用了那些

16、定时器,以及这些定时器所要完成的功能有哪些。本实验所采用的定时器以及功能如下表所示:表2-2定时器介绍表定时器名称定时器配置模式主要功能TIM2定时器中断模式通过定时器中断,控制超声波的扫描周期TIM3PWM复用输出模式控制小车速度及舵机转向TIM5输入捕获模式采集超声波发射到接受的高电平持续时间t2.1.6 主程序设计流程图在本节实验中,循迹模块以及避障模块都是采用中断方式进行工作的,因此其主程序流程图如下图所示:图1.2 主程序流程图根据程序设计图,主程序设计如下: int main(void) u8 TIM5CH1_CAPTURE_STA=0; /输入捕获状态 u16 TIM5CH1_C

17、APTURE_VAL; /输入捕获值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) farward_Low();delay_ms(10);2

18、.2 电机驱动模块Stm32对小车的控制,就是对电机的控制,通过控制电机的转向,小车的运动状态就会发生改变。电机驱动模块的主要器件为LM293N,我们下面就详细讲解下电机驱动模块。2.2.1 驱动模块结构及其原理电机驱动模块的实物图如图2.8所示:图2.8 驱动电路实物图电机驱动模块的主要器件是芯片LM293D,内部原理图如图2.9所示:S4图2.9 电机驱动内部原理图全桥式驱动电路的4只开关管都工作在斩波状态,如图1.2所示,K1、K2为一组,K3、K4 为另一组,两组的状态互补,一组导通则另一组必定关断。当K1、K2导通时,K3、K4关断,电机两端加正向电压,电机实现正转或反转制动;当K3

19、、K4导通时,K1、K2关断,电机两端为反向电压,电机实现反转或正转制动。2.2.2 驱动模块电路设计电机驱动模块的电路原理如图2.10所示:图2.10 驱动模块电路原理图表2-2是各个端口状态与运动方向的关系,其关系如下表所示:表2-2 端口与运动方向关系表电机M1IN1IN2电机M2IN3IN4停止正转反转2.2.3驱动软件程序设计车轮电机的动作由GPIO口的输出实现,本节主要配置运动方向和运动速度,对于运动速度的控制,我们必须使用PWM,通过改变PWM的占空比来调节速度的大小,其主要代码设计如下所示:void TIM3_PWM_Init(u16 arr,u16 psc) .要想使stm3

20、2的通用定时器TIMx产生PWM输出,需要用到的寄存器有:预分频寄存器(TIMx_PSC)、自动重装载寄存器(TIMx_ARR)、捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR14)。我们先介绍这几个寄存器,然后介绍如何使用库函数产生PWM输出。下面我们就简单介绍下这些寄存器:首先是预分频寄存器(TIMx_PSC),该寄存器可以用设置对时钟进行分频,然后在提供给计数器作为计数器的时钟。该寄存器的各位功能如图所示:图2.11 TIMx_PSC寄存器各位描述接下来介绍自动重装载寄存器(TIMx_ARR),该寄存器的各

21、位描述如下图所示:图2.12 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为例,该寄存器的各位描述如下图所示:图2.13 TIMx_CCMR1/2寄存器各位描述这里我们只介绍该寄存器的OC

22、xM位,我们就以TIMx_CCMR1中的OC1M(控制通道CH1)为例,该位功能如下图所示:图2.14 OC1M功能描述我们使用的是PWM输出模式,所以OC1M必须设置为110/111。OC2M(控制通道CH2)各位描述与OC1M相同,我们这要不在叙述。然后我们介绍捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入/输出通道的开关,对于该寄存器,各位描述如下图所示:图2.15 TIMx_CCER寄存器描述该寄存器比较简单,因为我们只介绍通道1,所以我们只讲CC1E位。如果我们想使能输入/捕获1,我们只需使用CC1E位。要想使PWM从I/O口输出,此位必须设置为1。最后介绍捕获/

23、比较寄存器(TIMx_CCR14),总共有4个,分别对应CH14,因为这4个寄存器相似,我们仅以TIMx_CCR1为例,该寄存器的给位介绍如下图所示:图2.16 TIMx_CCR1寄存器各位描述在输出模式下,该寄存器的值与CNT中的值进行比较,根据结果,实现电平的翻转。至此,我们把用到的几个寄存器都介绍完毕,下面我们就介绍如何通过库函数来配置实现PWM三路输出。 开启TIM3时钟以及复用功能输出。使能GPIO和端口复用功能时钟。库函数使能TIM3、GPIO以及复用功能时钟的方法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_A

24、PB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 初始化TIM3,设置TIM3的PSC和ARR。在开启了TIM3的时钟之后,我们要设置PSC和ARR寄存器的值来控制PWM的输出周期。调用的格式如下: TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 设置TIM3_CH1、CH2、CH3的PWM模式,使能TIM3的CH1、CH2、CH3输出。在库函数中PWM通道设置是通过TIM_OC1InitTIM_OC4Ini

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1