对于使用同一平台进行多个项目的开发而言,STM32更是一种非常好的选择。因为在STM32全系列产品中,既有适合仅需少量的存储空间和引脚,也有满足需要更多的存储空间和引脚;既有适于高性能应用的,又有满足低功耗要求的;既有适合低成本简单应用,也有满足高端复杂应用的。全系列兼容,使得项目之间的代码重用和代码移植变得非常方便。 1.1.2 STM32处理器的内部结构及特点
STM32F103系列微处理器是首款基于ARMv7-M体系结构的32位标准RISC (精简指令集)处理器,提供很高的代码效率,在通常8位和16位系统的存储空间上发挥了ARM 内核的高性能。该系列微处理器工作频率为72MHz,内置高达128K 字节的Flash存储器和20K 字节的SRAM,具有丰富的通用I/O 端口。其内部结构图如图1.1所示。
图1.1 STM32F10x内部结构图[4]
STM32F103系列微处理器主要资源和特点如下[5]:
1. 多达51个快速I /O 端口,所有I/O口均可以映像到16个外部中断, 几乎所有端口都允许5V 信号输入。每个端口都可以由软件配置成输出(推挽或开
3
漏)、输入(带或不带上拉或下拉)或其它的外设功能口。
2. 2个12位模数转换器,多达16个外部输入通道,转换速率可达1MHz,转换范围为0~ 36V;具有双采样和保持功能;内部嵌入温度传感器。
3. 灵活的7路通用DMA 可以管理存储器到存储器、设备到存储器和存储器到设备的数据传输,无须CPU 任何干预。通过DMA可以使数据快速地移动,这就节省了 CPU 的资源来进行其他操作。DMA 控制器支持环形缓冲区的管理,避免了控制器传输到达缓冲区结尾时所产生的中断。它支持的外设包括:定时器、ADC、SPI、I2C和USART 等。
4. 调试模式:支持标准的20脚JTAG 仿真调试以及针对Cortex- M3内核的串行单线调试(SWD)功能。通常默认的调试接口是JTAG 接口。
5. 含有丰富的通信接口:三个USART异步串行通信接口、两个I2C 接口、两个SPI接口、一个CAN 接口和一个USB接口,为实现数据通信提供了保证。
6. 内部包含8个定时器。在本设计中电机调速通过定时器的PWM功能实现。这将在下一节做进一步介绍。 1.1.3 TIMx定时器介绍
STM32F10x系列处理器内部有8个定时器,其中TIM1和TIM8为高级控制定时器,TIM2、TIM3、TIM4和TIM5为4个独立的通用定时器,TIM6和TIM7为基本定时器。这8个定时器各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。其中基本定时器可以为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟,实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。通用定时器TIMx,它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。通过对定时器预分频器和RCC时钟控制器预分频器的编程,可将脉冲长度和波形周期在几个微秒到几个毫秒间进行调整。每个定时器都是完全独立的,没有互相共享任何资源,它们也可以一起同步操作。
STM32F103主控芯片的8个定时器中,高级控制定时器TIM1和TIM8及4个通用定时器均可生成PWM波。高级控制定时器与通用定时器相比较,它们有非常多的相似之处,虽然前者功能要强大些,但鉴于后者已能够满足设计要求,因此选用通用定时器作为PWM生成模块。下面简要介绍通用定时器的特性及功能。
4
通用定时器TIMx (TIM2、TIM3、TIM4和TIM5)主要特性如下[6]: 1. 16位向上、向下、向上/向下自动装载计数器。
2. 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值。
3. 4个独立通道:输入捕获、输出比较、PWM生成(边缘或中间对齐模式)、单脉冲模式输出。
4. 使用外部信号控制定时器和定时器互连的同步电路。
5. 如下事件发生时产生中断/DMA:更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发);触发事件(计数器启动、停止、初始化或者由内部/外部触发计数);输入捕获;输出比较。
6. 支持针对定位的增量(正交)编码器和霍尔传感器电路。 7. 触发输入作为外部时钟或者按周期的电流管理。 对通用定时器TIMx功能简要描述如下[7]:
时基单元可编程通用定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数器可以向上计数 、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。时基单元包含计数器寄存器(TIMx_CNT)、预分频器寄存器 (TIMx_PSC)和自动装载寄存器 (TIMx_ARR),它们都可以由软件读写,在计数器运行时仍可以读写。预分频寄存器用于设定计数器的时钟频率;自动装载寄存器的内容是预先装载的,其内容被永久的保存在影子寄存器,或每次更新事件UEA发生时传送到影子寄存器;当计数器达到溢出条件且当TIMx_CR1寄存器中的UDIS位为0时,产生更新事件。更新事件也可由软件产生。
定时器工作模式有计数器模式、输入捕获模式、PWM输入模式、强制输出模式、PWM模式等,根据设计要求,定时器应配置成PWM模式生成不同占空比的PWM波。以下对PWM模式做简要介绍。
脉冲宽度调制(PWM)模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入‘110’(PWM模式1)或‘111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。使用PWM模式,必须通过设置TIMx_CCMRx寄存器的OCxPE位使能相应的预装载寄存器,最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计
5
数或中心对称模式中)使能自动重装载的预装载寄存器。因为仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。OCx的输出使能通过(TIMx_CCER和TIMx_BDTR寄存器中)CCxE、CCxNE、MOE、OSSI和OSSR位的组合控制。在PWM模式(模式1或模式2)下,TIMx_CNT和TIMx_CCRx始终在进行比较,依据计数器的计数方向以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx。 根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号[8]。
PWM输出信号的占空比由TIMx_CRRx寄存器确定的。其公式为“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通过向CRR中填入适当的数来输出自己所需的频率和占空比的方波信号,进而实现本设计中调速功能。
1.2 小车及其驱动器介绍
1.2.1 小车结构及功能简介
所谓小车控制实际上就是电机控制,本论文所设计的小车分为电机系统、显示系统、控制系统、避障和循迹系统五大结构。
电机系统使用两个电机(A和B),设定正转、反转和停止三种状态,分别控制左轮和右轮,通过两个电机的转动状态切换控制小车的行驶方向,例如前进、后退、左转、右转,实现小车的基本运动功能;通过对电机转速的调节控制小车的运动速度。根据实际情况,假设两个电机相对安装,则表1-1是电机转动状态与小车运动方向的关系表。
表1-1 电机转动状态与小车运动方向关系表
运动状态 前进 后退 右转 左转 电机A(右轮) 正转 反转 停止 正转 6
电机B(左轮) 反转 正转 正转 停止
小车的显示系统,即小车装有液晶显示器(128×64),初始化由编程设定,小车运动过程中实时显示小车的运动参数,并可在以后予以扩展,根据实际运用的需要显示更多内容。
小车的控制系统为按键开关式的键盘,设定小车启动/停止、自由行走模式/循迹模式、加速/减速六种状态,最初都赋以高电平,当按键被按下时,即触发低电平,使小车按相应状态运动。
小车避障系统,即在自由行走模式下通过触角传感器对障碍物检测,使小车实现自动避障功能。
小车循迹系统,即在循迹模式下通过红外探测器对黑迹不断进行检测,自动识别路线,使小车按指定的路线行驶。 1.2.2 电机驱动电路简介
电机驱动电路采用L298芯片控制,其内部原理图如图1.2。L298是恒压恒流双H桥集成电机芯片,可同时控制两个电机,且输出电流可达到2A。直流电机驱动电路使用最广泛的就是H型全桥式电路,这种驱动电路可以很方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转制动。
S1 S4
S3 S2
图1.2 L298内部原理图
全桥式驱动电路的4只开关管都工作在斩波状态,如图1.2所示,S1、S2为一组,S3、S4 为另一组,两组的状态互补,一组导通则另一组必须关断。当S1、S2导通时,S3、S4关断,电机两端加正向电压,可以实现电机的正转或反转制动;当S3、S4导通时,S1、S2关断,电机两端为反向电压,电机反转或正转制动。
7