--毕业设计3--陈亚文(3)

2019-04-10 10:38

基于stm32的智能小车设计

图2.32 stm32外部中断/事件控制器结构图

图中的实线箭头,为外部中断信号的传输路径。 首先外部信号从编号为1的输入线进入。

其次这个外部信号通过编号2的边沿检测电路,这个边沿检测电路受到“上升沿选择寄存器”、“下降沿选择寄存器”的控制,我们可以控制这两个寄存器来选择中断的触发方式。我们可以在程序中进行设置,比如

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;设置为上升沿触发中断 然后该外部信号进入编号为3或门,或门另一端是软件中断寄存器,如果,软件中断/事件寄存器的对应位置1,编号3的输出总是为有效信号1。之后进入“中断挂起请求寄存器”,该寄存器记录了外部信号的电平变化。

最后经过编号为4的与门进入NVIC中断控制器,如果 “中断屏蔽寄存器”的对应位置0,外部的中断请求信号不能传输到NVIC中断控制器,从而实现中断的屏蔽。由于我们采用的是外部信号触发中断,所以我们只需了解外部中断的请求机制,对于事件的中断请求机制,我们在这里不做介绍。 我们以PE1为例,介绍下外部中断的一般步骤。步骤如下: ? 开启I/O的复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);

? 初始化I/O为输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOE, &GPIO_InitStructure);

- 10 -

基于stm32的智能小车设计

? 初始化线上中断,设置触发条件

GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1); EXTI_InitStructure.EXTI_Line=EXTI_Line1;

EXTI_InitStructure.EXTI_Mode = 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_InitStructure.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分别为高级控制定时器,TIM2~TIM5为通用定时器,TIM6以及TIM7为基本定时器。对于定时器的详细内容,我们不在这里一一介绍。

然后我们介绍一下本实验采用了那些定时器,以及这些定时器所要完成的功能有哪些。本实验所采用的定时器以及功能如下表所示:

表2-2定时器介绍表

定时器名称 TIM2

定时器配置模式 定时器中断模式

主要功能

通过定时器中断,控制超

声波的扫描周期

TIM3

PWM复用输出模式

控制小车速度及舵机转

TIM5

输入捕获模式

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

- 11 -

基于stm32的智能小车设计

2.1.6 主程序设计流程图

在本节实验中,循迹模块以及避障模块都是采用中断方式进行工作的,因此其主程序流程图如下图所示:

开始系统初始化前进 图1.2 主程序流程图

根据程序设计图,主程序设计如下: int main(void) {

u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态 u16 TIM5CH1_CAPTURE_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.2 电机驱动模块

Stm32对小车的控制,就是对电机的控制,通过控制电机的转向,小车的运动状态就会发生改变。电机驱动模块的主要器件为LM293N,我们下面就详细讲解下电机驱动模块。

- 12 -

基于stm32的智能小车设计

2.2.1 驱动模块结构及其原理

电机驱动模块的实物图如图2.8所示:

图2.8 驱动电路实物图

电机驱动模块的主要器件是芯片LM293D,内部原理图如图2.9所示:

K1

K4

K3

K2

图2.9 电机驱动内部原理图

全桥式驱动电路的4只开关管都工作在斩波状态,如图1.2所示,K1、K2为一组,K3、K4 为另一组,两组的状态互补,一组导通则另一组必定关断。当K1、K2导通时,K3、K4关断,电机两端加正向电压,电机实现正转或反转制动;当K3、K4导通时,K1、K2关断,电机两端为反向电压,电机实现反转或正转制动。

2.2.2 驱动模块电路设计

电机驱动模块的电路原理如图2.10所示:

- 13 -

S4

基于stm32的智能小车设计

图2.10 驱动模块电路原理图

表2-2是各个端口状态与运动方向的关系,其关系如下表所示:

表2-2 端口与运动方向关系表

电机M1 停止 正转 反转 -

IN1 0 1 0 1

IN2 0 0 1 1

电机M2 停止 正转 反转 -

IN3 0 1 0 1

IN4 0 0 1 1

2.2.3驱动软件程序设计

车轮电机的动作由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),该寄存器可以用设置对时钟进行分频,然后在提供给计数器作为计数器的时钟。该寄存器的各位功能如图所示:

- 14 -


--毕业设计3--陈亚文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:加入WTO与中国农业国内支持政策改革

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

马上注册会员

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