版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
技术及应用任务七智能小车运动控制系统设计与实现学习内容定时器概述HAL库外设模块的设计方法定时/计数器的基本定时和计数功能及其实现定时器的PWM输出功能定时器的输入捕获功能可控LED流水灯设计引导案例在嵌入式系统应用中,经常会遇到以下情况:周期性执行某任务,如每隔固定时间完成一次AD采集;延时一定时间执行某个任务,如交通灯信号变化;显示实时时间,如万年历;产生不同频率的波形,如MP3播放器;产生不同脉宽的波形,如驱动伺服电机;测量脉冲的个数,如测量转速;测量脉冲的宽度,如测量频率;一种是定时(即对内部脉冲的计数操作),完成与时间相关的任务;另一种是计数(即对外部输入的计数操作),完成脉冲个数、宽度和频率的测量等。定时器定时器是非常重要的组件,用于实现各种与时间相关的功能。定时器任务调度可以用来按照设定的时间间隔执行特定的任务。脉冲宽度调制PWM信号广泛应用于电机控制、LED亮度调节、音频信号发生器等领域性。计时和延时用于计时操作。如测量某个操作的执行时间;还可以用于实现精确的延时操作。计数器用于计算某个事件的频率或者脉冲数量。定时中断可以设置一个特定的时间间隔,在到达预定时间时触发一个中断信号。定时器本项目以“智能小车运动控制系统的设计与实现”为例,学习STM32F4系列微控制器的定时器应用开发。智能小车循迹状态获取的应用开发任务描述要求设计一个应用程序,以实现周期性地获取智能小车循迹的状态。任务要求使用反射式红外光电传感器电路板作为智能小车的循迹模块,实现智能小车的巡线前进功能。测试场地路面有黑白两色,其中黑色路面为跑道,宽30mm,智能小车可循此跑道前进。智能小车所用红外光电管、循迹模组及整车如图3-1所示。如果要求智能小车以一定的速度沿着黑色跑道前进,则微控制器需要以较短的周期频繁地获取循迹板上8路二进制数字信号,进而才能通过及时判断车身状态以调整电机的转向。智能小车的此要求可通过定时器的基本定时功能来实现,因此本任务涉及的知识点如下。任务分析STM32F4系列微控制器定时器的基本功能特性。STM32F4系列微控制器定时器的基本定时功能的编程配置方法。智能小车循迹状态获取的应用开发定时器的典型应用场景;智能小车巡线姿态的及时获取引入定时/计数器相关知识点。技术及应用项目七STM32微控制器的定时器概述基本概念定时器和计数器的区别基本概念定时器是对周期固定的脉冲信号进行计数,如MCU内部的外设时钟(APB)。计数器是对周期不确定的脉冲信号进行计数,如MCU的I/O引脚所引入的外部脉冲信号。结论:定时器和计数器本质上都是计数器;定时器是计数器的一种特例。时钟周期固定或者不固定定时器和计数器的区别滴水实例问:还需滴入多少滴水才能将其装满?答:还需滴入500滴水才能将其装满,第501滴水时容器溢出。计数的概念假如有一个水容器1000滴水刚好装满初始值已经装入500滴水计数初值计数终值滴水实例假如有一个水容器1000滴水刚好装满初始值已经装入500滴水问:如果每秒滴入1滴水,还需多长时间才能将其装满?答:还需500秒时间才能将其装满,第501秒时容器溢出。定时的概念位宽计数值处理定时器(容器容量)的计数范围,16位定时器的最大计数值为65535。定时器初值(容器初始已有水滴数)的设置定时器终值(容器溢出时的水滴数)的设置。定时器(容器)溢出以后的需要完成的操作。关注问题定时器模式的两个概念两个概念在定时器模式下,送入定时器的周期性时钟信号的频率。时钟频率在定时器模式下,计数单元记一次数所花费的时间,它是时钟频率的倒数。计数时间以STM32F407微控制器为例,送入定时器的时钟频率为168M。假设计数单元在1s内计数1680000次,则计数时间为1us。定时时间计算公式定时时间=计数值*计数时间定时时间=计数值/时钟频率小结基本定时器的定时时间的计算:T=计数值×计数周期。T=计数值/时钟频率。项目七定时器的定时/计数功能通用定时器框图1时钟源控制器时基单元234输入捕获输出比较5时钟源内部时钟:来自外设总线APB提供的时钟;CK_INT(定时器时钟TIM_CLK)。定时模式内部时CK_INT外部输入引脚CHx外部触发输入ETR内部触发信号ITRx外部时钟模式1:捕获/比较通道CH1/CH2;外部时钟模式2:外部触发引脚ETR;内部触发输入:使用一个定时器作为另一个定时器的预分频器。时钟源选择时基单元的预分频时钟CK_PSC计数模式计数模式从模式时基单元功能框架时基单元预分频计数器预分频寄存器预分频模块核心计数器计数器寄存器计数模块自动重载寄存器自动重载模块预分频时钟CK_PSC计数时钟CK_CNT工作在定时模式时:内部时钟CK_INT;定时器时钟TIM_CLK。预分频模块对预分频时钟CK_PSC进行分频预分频计数器TIMx_PSC:设置预分频系数PSC预分频寄存器x表示定时器的编号如TIM1或TIM2作用1:扩大定时器的定时范围TIM_CLK为100MHz,16位定时器的最大定时时间为0.65ms,经过预分频以后,可以降低计数时钟CK_CNT的频率;作用2:获取精确的计数时钟TIM_CLK为72MHz,可以通过设置预72分频寄存器,使计数时钟CK_CNT变为1MHz,从而获得精确的计数时钟。预分频模块定时器启动后,预分频计数器的初值为0,预分频时钟CK_PSC每来一个时钟,预分频计数器的值就加1。当计数值等于预分频寄存器所设定的预分频系数PSC时,预分频计数器的值将清零,开始下一轮计数。工作原理时基单元功能框架预分频模块预分频时序图3假设预分频系数PSC=3从0计数到PSC实际计数值为PSC+1。预分频模块CK_CNT=CK_PSC/(PSC+1)分频公式预分频时序图计数时钟预分频时钟预分频系数计数模块对计数时钟CK_CNT进行二次计数核心计数器TIMx_CNT:存放核心计数器运行时的当前计数值。计数器寄存器自动重载模块TIMx_ARR的值作为核心计数器的计数终值递增计数模式自动重载模块由自动重载寄存器TIMx_ARR组成TIMx_ARR的值作为核心计数器的计数初值递减计数模式定时器的三种计数模式计数模式上溢上溢下溢下溢0→ARR-1ARR→10→ARRARR→0计数模式计数模式计数器溢出值计数器重载值递增计数CNT=ARRCNT=0递减计数CNT=0CNT=ARR中心对齐计数CNT=ARR-1CNT=ARRCNT=1CNT=0溢出值CNT与自动重载值ARR的关系列表定时器时序图PSC=1,ARR=36;递增计数,CNT=0。PSC=1对CK_PSC两分频从0计数到ARR,实际计数值为ARR+1;上溢事件更新中断/定时中断定时器的定时时间公式定时时间=计数值*计数时间时钟频率
=
TIM_CLK/(PSC+1)定时时间=计数值/时钟频率计数时钟CK_CNT定时器时钟,等于预分频时钟CK_PSC。计数值=ARR+1自动重载值预分频系数定时器时钟相关寄存器预分频寄存器TIMx_PSC:设置预分频系数,将预分频时钟(CK_PSC)进行1~65536之间的任意值分频,得到计数时钟(CK_CNT);自动重载寄存器TIMx_ARR:为计数器设置计数边界或重载值。比如计数器递增计数时,记到多少发生溢出;递减计数时,从多少开始往下计数计数器寄存器TIMx_CNT:存放核心计数器运行时的当前计数值,便于用户实时掌握核心计数器的当前计数值;PSCCNTARR任务一小车循迹状态获取设计-定时/计数功能的数据类型和接口函数时基单元初始化类型时基单元结构体类型,包括6个成员变量Period的值不能设置为0,否则定时器将不会启动主要用于输入信号的滤波,一般使用默认值:1分频。宏常量定义含义TIM_CLOCKDIVISION_DIV1对定时器时钟TIM_CLK进行1分频TIM_CLOCKDIVISION_DIV2对定时器时钟TIM_CLK进行2分频TIM_CLOCKDIVISION_DIV4对定时器时钟TIM_CLK进行4分频成员变量ClockDivision的取值范围信号滤波成员变量CounterMode的取值范围计数模式宏常量定义含义TIM_COUNTERMODE_UP递增计数模式TIM_COUNTERMODE_DOWN递减计数模式TIM_COUNTERMODE_CENTERALIGNED1中心对齐计数模式1TIM_COUNTERMODE_CENTERALIGNED2中心对齐计数模式2TIM_COUNTERMODE_CENTERALIGNED3中心对齐计数模式3三种中心对齐计数模式的区别主要是输出比较中断标志位的设置方式。成员变量AutoReloadPreload的取值范围预装载功能宏常量定义含义TIM_AUTORELOAD_PRELOAD_DISABLE预装载功能关闭TIM_AUTORELOAD_PRELOAD_ENABLE预装载功能开启用于设置自动重载寄存器TIMx_ARR的预装载功能,即自动重装寄存器的内容是更新事件产生时写入有效,还是立即写入有效;预装载功能在多个定时器同时输出信号时比较有用,可以确保多个定时器的输出信号在同一个时刻变化,实现同步输出;单个定时器输出时,一般不开启预装载功能。时基单元初始化函数:HAL_TIM_Base_Init时基初始化接口函数:HAL_TIM_Base_Init函数原型HAL_StatusTypeDefHAL_TIM_Base_Init(TIM_HandleTypeDef*htim)功能描述按照定时器句柄中指定的参数初始化定时器时基单元入口参数htim:定时器句柄的地址返回值HAL状态值注意事项该函数将调用MCU底层初始化函数HAL_TIM_Base_MspInit完成引脚、时钟和中断的设置;该函数由CubeMX自动生成。轮询模式启动函数:HAL_TIM_Base_Start轮询模式启动接口函数:HAL_TIM_Base_Start函数原型HAL_StatusTypeDefHAL_TIM_Base_Start(TIM_HandleTypeDef*htim)功能描述在轮询方式下启动定时器运行入口参数htim:定时器句柄的地址返回值HAL状态值注意事项该函数在定时器初始化完成之后调用;函数需要由用户调用,用于轮询方式下启动定时器运行。中断模式启动函数:HAL_TIM_Base_Start_IT中断模式启动接口函数:HAL_TIM_Base_Start_IT函数原型HAL_StatusTypeDefHAL_TIM_Base_Start_IT(TIM_HandleTypeDef*htim)功能描述使能定时器的更新中断,并启动定时器运行入口参数htim:定时器句柄的地址返回值HAL状态值注意事项该函数在定时器初始化完成之后调用;函数需要由用户调用,用于使能定时器的更新中断,并启动定时器运行;启动前需要调用宏函数_HAL_TIM_CLEAR_IT来清除更新中断标志。定时器中断通用处理函数HAL_TIM_IRQHandler通用处理函数接口函数:HAL_TIM_IRQHandler函数原型voidHAL_TIM_IRQHandler(TIM_HandleTypeDef*htim);功能描述作为所有定时器中断发生后的通用处理函数入口参数htim:定时器句柄的地址返回值无注意事项函数内部先判断中断类型,并清除对应的中断标志,最后调用回调函数完成中断处理;该函数由CubeMX自动生成。定时器更新中断回调函数HAL_TIM_PeriodElapsedCallback接口函数:HAL_TIM_PeriodElapsedCallback函数原型voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim)功能描述回调函数,用于处理所有定时器的更新中断,用户在该函数内编写实际的任务处理程序。入口参数htim:定时器句柄的地址返回值无注意事项该函数由定时器中断通用处理函数HAL_TIM_IRQHandler调用,完成所有定时器的更新中断的任务处理;函数内部需要根据定时器句柄的实例来判断是哪一个定时器产生的本次更新中断;函数由用户根据具体的处理任务编写。计数值读取函数 HAL_TIM_GET_COUNTER计数值读取#define_HAL_TIM_GET_COUNTER(_HANDLE_)((_HANDLE_)->Instance->CNT)带参数的宏定时器句柄的地址该函数通过直接访问计数器寄存器TIMx_CNT来获取计数器的当前计数值。定时器中断标志清除函数 HAL_TIM_CLEAR_IT中断标志清除#define_HAL_TIM_CLEAR_IT(HANDLE_,_INTERRUPT_)((_HANDLE_)->Instance->SR=~(_INTERRUPT_))带参数的宏定时器句柄的地址定时器中断标志定时器中断标志清除函数 HAL_TIM_CLEAR_IT中断标志清除常用中断标志宏常量定义含义TIM_IT_UPDATE更新中断标志TIM_IT_CC1通道1的捕获/比较中断标TIM_IT_CC2通道2的捕获/比较中断标TIM_IT_CC3通道3的捕获/比较中断标TIM_IT_CC4通道4的捕获/比较中断标定时器中断标志清除函数 HAL_TIM_CLEAR_IT中断标志清除①HAL_TIM_Base_Init()③HAL_TIM_Base_Start_IT()⑤HAL_TIM_PeriodElapsedCallback()②HAL_TIM_Base_Start()④HAL_TIM_IRQHandler()⑥_HAL_TIM_GET_COUNTER()任务一演示:简易电子时钟设计设计电子时钟演示实验任务目标掌握CubeMX软件配置定时器实现基本定时的方法;任务内容设计电子时钟,从00:00:00开始计时,并将计时信息通过Nucleo开发板上的串口UART2发送到PC进行显示。设计思路01定义一个结构体变量,包含时、分、秒三个成员变量。设置定时器产生1s的更新中断,在更新中断回调函数中,修改时、分、秒的值。主程序在while循环中每隔1s调用printf函数将时间信息发送到PC显示;03配置串口1为异步模式,串口1配置参数为:波特率115200,8位数据位,1位停止位,无奇偶校验,相关配置方法可以参考之前的任务。02使用定时器9产生1s的更新中断,设置PSC为16800-1,ARR为10000-1,相关配置方法可以参考基础任务;程序编写用户数据类型定义程序编写用户变量定义程序编写用户初始化代码用户初始化代码输出占两个字符宽度,不足补0程序编写定时器更新中断回调函数添加位置USERCODEBEGIN4USERCODEEND4程序运行结果任务四输入捕获功能的数据类型和接口函数结构体类型,包括4个成员变量输入捕获单元成员变量ICPolarity的取值范围宏常量定义含义TIM_ICPOLARITY_RISING上升沿捕获TIM_ICPOLARITY_FALLING下降沿捕获TIM_ICPOLARITY_BOTHEDGE双边沿捕获捕获边沿成员变量ICSelection的取值范围捕获通道宏常量定义含义TIM_ICSELECTION_DIRECTTI直接输入模式:捕获通道CH1和CH2分别与IC1和IC2连接捕获通道CH3和CH4分别与IC3和IC4连接TIM_ICSELECTION_DIRECTT2间接输入模式:捕获通道CH1和CH2分别与IC2和IC1连接捕获通道CH3和CH4分别与IC4和IC3连接TIM_ICSELECTION_TRC选择从模式管理器的触发信号TRC作为捕获信号成员变量ICPrescaler的取值范围预分频系数宏常量定义含义TIM_ICPSC_DIV1检测到输入信号的每1个有效边沿触发1次捕获TIM_ICPSC_DIV2检测到输入信号的每2个有效边沿触发1次捕获TIM_ICPSC_DIV4检测到输入信号的每4个有效边沿触发1次捕获TIM_ICPSC_DIV8检测到输入信号的每8个有效边沿触发1次捕获接口函数接口函数:HAL_TIM_IC_Start_IT()函数原型uint32_tHAL_TIM_IC_Start_IT()(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述用于在中断方式下启动定时器的输入捕获功能入口参数1*htim:定时器句柄的地址入口参数2Channel:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4返回值HAL状态值注意事项该函数在定时器初始化完成之后调用;函数需要由用户调用,用于使能定时器的捕获中断,并启动定时器运行。接口函数接口函数:HAL_TIM_IC_Stop_IT()函数原型HAL_StatusTypeDefHAL_TIM_IC_Stop_IT()(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述用于停止中断模式下的定时器输入捕获功能入口参数1*htim:定时器句柄的地址入口参数2Channel:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4返回值HAL状态值注意事项该函数需要由用户调用,用于禁止捕获中断,关闭输入捕获通道,停止定时器运行。接口函数接口函数:HAL_TIM_IC_CaptureCallback()函数原型voidHAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef*htim)功能描述用于处理所有定时器的输入捕获中断,用户在该函数内编写实际的任务处理程序。返回值无注意事项该函数由定时器中断通用处理函数HAL_TIM_IRQHandler调用,完成所有定时器输入捕获中断的任务处理;函数内部需要根据定时器句柄的实例来判断是哪一个定时器的哪一个通道产生的本次输入捕获中断;函数由用户根据具体的处理任务编写。接口函数接口函数:HAL_TIM_ReadCapturedValue()函数原型uint32_tHAL_TIM_ReadCapturedValue(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述用于读取捕获/比较寄存器TIMx_CCR的值,即捕获值入口参数1*htim:定时器句柄的地址入口参数2Channel:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4返回值捕获值注意事项函数需要由用户调用,用于读取发生捕获时的捕获值。接口函数接口函数:_HAL_TIM()_SET_CAPTUREPOLARITY()函数原型uint32_tHAL_TIM_ReadCapturedValue(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述用于设置输入信号的捕获边沿入口参数1_HANDLE_:定时器句柄的地址入口参数2_Channel_:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4入口参数3_POLARITY_:捕获边沿,取值范围是TIM_INPUTCHANNELPOLARITY_RISING/FALLING/BOTHEDGE返回值无注意事项该函数是宏函数,进行宏替换,不发生函数调用函数需要由用户调用,用于设置输入信号的有效捕获边沿。输入捕获启动函数HAL_TIM_IC_Start_IT()小结输入捕获停止函数HAL_TIM_IC_Stop_IT()输入捕获中断回调函数HAL_TIM_IC_CaptureCallback()读取捕获比较寄存器TMx_CCR值即捕获值的函数HAL_TIM_ReadCapturedValue()捕获边沿设置函数__HAL_TIM_SET_CAPTUREPOLARITY()任务一智能小车运动控制系统设计与实现智能小车运动控制系统设计与实现任务任务目标掌握CubeMX软件配置定时器实现基本定时的方法;任务内容为了让小车能够正常地在黑色跑道上行驶,需要设置定时器每1ms产生一次中断,在中断服务程序中读取光电对管的状态,然后调整小车姿态,不让小车跑偏。在仿真实验中,用PF9驱动LED灯翻转,同时用示波器观察PF9的波形,若设计正确,PF9的频率应该为500Hz。任务分析ARR
+
𝟏 ∗ PSC +
𝟏𝐓𝐈𝐌_𝐂𝐋𝐊(𝐇𝐳)T
(s)
=定时时间计算公式:注意:PSC和ARR参数的选取,以不超过它们的计数范围为准。TIMx_PSC为16位寄存器,最大预分频系数为65536。TIMx_ARR寄存器的位数由定时器位数决定:16位定时器,ARR的最大值为65535;32位定时器,ARR的最大值为4294967295。本任务使用定时器9,挂接在APB2总线,时钟频率为168MHz;任务要求的定时时间为1ms,由于TIM_CLK为168MHz,可以假设PSC为(168-1),根据公式计算可得ARR的值也为(1000-1)。引脚分配在引脚分配图中选择PF9(LED)为:OutputPushPull(推挽输出)Nopull_upnopull_down
(不上拉、不下拉)Medium(翻转速度中)PF7~PF0(连接8对光电管)为:inputmode(输入模式)Pullup(默认上拉)定时器9的配置勾选预分频系数PSC自动重载值ARR其余参数使用默认配置:计数模式为递增计数;内部时钟不分频;不使能自动重载功能。定时器9的配置中断使能使能定时器9的中断;中断优先级使用默认值。程序编写添加用户初始代码主程序代码程序编写使用句柄的实例来判断发生更新中断的定时器定时器更新中断回调函PF9用于波形观察,测试用读取8只光电对管的状态定时中断流程定时器9递增计数,从0开始记到自动重载值ARR时,产生计数器上溢事件,触发更新中断;在启动文件中根据中断类型号找到对应的中断服务程序TIM1_BRK_TIM9_IRQHandler;在中断服务程序中再调用定时器通用处理函数HAL_TIM_IRQHandler;在函数内部先判断中断类型,并清除对应的中断标志,然后调用更新中断回调函数HAL_TIM_PeriodElapsedCallback完成具体的任务处理。定时器初始化函数由CubeMX自动生成本任务为基本定时功能,只进行了时,基单元的初始化,初始化参数根据用户在CubeMX中的设置决定。运行测试将程序编译链接,生成可执行代码,通过ST-Link仿真器下载到STM32F407ZET6核心板,连接示波器探头到PF9,观察波形为方波,频率为500Hz,符合题目要求,验证结果如图所示。图3-6TIM9产生1ms中断的实验结果后续任务请分别设置10ms、50ms、100ms定时中断,看小车能否正常行驶。请参照之前的任务,在嵌入式虚拟仿真平台绘制好电路,上传你编制的代码,仿真运行,如图3-7所示,能否看到PF9连接的LED灯闪烁。图3-7TIM9产生1ms中断的虚拟仿真平台验证任务二智能小车调速设计-PWM原理脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。广泛应用于电机控制、灯光的亮度调节、功率控制等领域。基本特性概述脉宽调制动画单个PWM周期脉宽调制的实质是修改高电平的持续时间一个完整PWM波形所持续的时间周期(Period)两个参数PWM信号的两个基本参数高电平持续时间(Ton)与周期时间(Period)的比值。占空比(Duty)占空比计算公式:Duty=(Ton/Period)x100%PWM信号的电压调节原理平均电压=峰值x占空比1.65V0.66V2.64V电压调节的原理不同占空比的PWM信号等效于不同的平均电压。定时器通道结构通道结构时基单元CK_PSC预分频寄存器CK_CNT计数器寄存器自动重载寄存器输入捕获单元通道引脚TIMx_CH输入滤波边沿检测预分频器捕获/比较寄存器输入捕获单元输出控制通道引脚TIMx_CH定时器通道结构通道结构时基单元工作于定时模式,预分频时钟CK_PSC等于定时器时钟TIMx_CLK;每个定时器具备1~4个独立的通道,各个通道具有独立的输入捕获单元、捕获/比较寄存器和输出比较单元,但共享同一个时基单元。x表示定时器编号,每个通道有对应的GPIO引脚作为通道的输入/输出引脚。每个通道可以选择作为输入捕获或者输出比较功能,但是只能二选一。CH引脚以STM32F407芯片的定时器为例,其通道引脚所对应的GPIO引脚如表3-29所示。通道号高级定时器通用定时器TIM1TIM8TIM2TIM3TIM4TIM5CH1PA8/PE9PC6PA0/PA5PA6/PB4/PC6PB6/PD12PA0CH1NPA7/PB13/PE8PA5/PA7----CH2PA9/PE11PC7PA1/PB3PA7/PB5/PC7PB7/PD13PA1CH2NPB0/PB14/PE10PB0/PB14----CH3PA10/PE13PC8PA2/PB10PB0/PC8PB8/PD14PA2CH3NPB1/PB15/PE12PB1/PB15----CH4PA11/PE14PC9PA3/PB11PB1/PC9PB9/PD15PA3ETRPA12/PE7PA0PA0/PA5/PA15PD2PE0-BKINPA6/PB12/PE15PA6----表3-29高级定时器和通用定时器(部分)外部通道引脚分布表查询芯片的数据手册Datasheet。功能单元作用输入捕获单元用于捕获外部触发信号,捕获方式为上升沿/下降沿/双边沿捕获。发生捕获事件时,将此刻计数器的值锁存到捕获/比较寄存器中,供用户读取,同时可以产生捕获中断。输出比较单元用于信号输出。定时器通过将预设的比较值与计数器的值做匹配比较,以实现各类输出,如PWM输出、单脉冲输出等。预设的比较值存放在捕获/比较寄存器中。捕获/比较寄存器TIMx_CCR寄存器在输入捕获模式下用于存放发生捕获事件时的当前计数值;在输出比较模式下用于存放预设的比较值。该寄存器具备预装载功能。PWM输出的工作原理初始输出高电平计数器寄存器CNT自动重载寄存器ARR捕获/比较寄存器CCR通道CHx输出波形匹配CCR时输出为低匹配ARR时输出为高控制PWM信号的周期;控制PWM信号的占空比;输出PWM信号。PWM输出的工作原理Period(s)=(ARR+1)x(PSC+1)/TIMx_CLK
参数计算公式:Duty=(CRR/(ARR+1))x100%
应用实例假设预分频时钟CK_PSC为100MHz,产生周期为1ms,占空比为47.5%的PWM信号。Period=1ms,可以设置PSC=99,ARR=999Duty=47.5%,则CRR=475。多通道输出定时器的每个通道都可以输出PWM信号,对于同一个定时器而言,它的多个通道共享同一个自动重载寄存器,因此可以输出占空比不同,但周期相同的PWM信号。通道1的PWM信号周期为1ms,占空比为47.5%通道2的PWM信号周期为1ms,占空比为70%任务二智能小车调速设计-PWM功能的数据类型和接口函数输出比较单元初始化类型输出比较单元结构体类型,包括7个成员变量,与PWM相关的4个。成员变量OCMode的取值范围输出比较模式表3-30成员变量OCMode的定义定义含义TIM_OCMODE_TIMING输出比较冻结模式,匹配时无输出TIM_OCMODE_ACTIVE匹配时设置输出为有效电平TIM_OCMODE_INACTIVE匹配时设置输出为无效电平TIM_OCMODE_TOGGLE匹配时设置输出的电平翻转TIM_OCMODE_PWM1PWM1模式TIM_OCMODE_PWM2PWM2模式TIM_OCMODE_FORCED_ACTIVE不进行匹配,强制输出为有效电平TIM_OCMODE_FORCED_INACTIVE不进行匹配,强制输出为无效电平匹配的含义:TIMx_CNT(当前计数值)等于TIMx_CCR(捕获/比较值)。有效电平极性用于设置输出有效电平的极性,成员变量OCPolarity的取值范围如表3-31所示。定义含义TIM_OCPOLARITY_HIGH输出有效电平为高电平TIM_OCPOLARITY_LOW输出有效电平为低电平表3-31成员变量OCPolarity的定义PWM输出的两种模式PWM模式递增计数时,当TIMx_CNT(当前计数值)<TIMx_CCR(捕获/比较值)时,通道输出为有效电平,否则为无效电平。递减计数模式则刚好相反。PWM模式1递增计数时,当TIMx_CNT(当前计数值)<TIMx_CCR(捕获/比较值)时,通道输出为无效电平,否则为有效电平。递减计数模式则刚好相反。PWM模式2递增计数,高电平有效:PWM1模式下的CCR用于控制高电平持续的时间;PWM2模式下的CCR用于控制低电平持续的时间。总结:互补输出宏常量定义含义TIM_OCFAST_DISABLE不使能快速输出模式TIM_OCFAST_ENABLE使能快速输出模式成员变量OCFastMode的取值范围快速输出使能可以加快触发输入事件对通道输出的影响,默认配置为不使能。定时器PWM输出启动函数:HAL_TIM_PWM_Start()接口函数:HAL_TIM_PWM_Start()函数原型HAL_StatusTypeDefHAL_TIM_PWM_Start(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述在轮询方式下启动PWM信号输出入口参数1htim:定时器句柄的地址入口参数2Channel:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4返回值HAL状态值功能描述在轮询方式下启动PWM信号输出定时器比较/捕获寄存器设置函数:_HAL_TIM_SET_COMPARE()接口函数:_HAL_TIM_SET_COMPARE()函数原型HAL_TIM_SET_COMPARE(_HANDLE_,_CHANNEL_,_COMPARE_)功能描述设置捕获/比较寄存器TIMx_CCR的值。在PWM输出时,用于改变PWM信号的占空比入口参数1_HANDLE_:定时器句柄的地址入口参数2_CHANNEL_:定时器通道号,取值范围是TIM_CHANNEL_1~TIM_CHANNEL_4入口参数3_COMPARE_:写入捕获/比较寄存器TIMx_CCR的值功能描述该函数是宏函数,进行宏替换,不发生函数调用。函数需要由用户调用,用于PWM输出时,改变PWM信号的占空比。小结定时器输出比较单元的初始化类型TIM_OC_InitTypeDef;该结构体的各成员的含义及取值范围;定时器PWM输出启动函数HAL_TIM_PWM_Start();定时器比较/捕获寄存器设置函数__HAL_TIM_SetCompare()。任务二基于状态机的按键检测程序设计利用状态机控制按键挑战任务任务目标掌握状态机设计思想。任务内容利用状态机设计思想编写按键处理程序,按键按下后执行操作:记录按键按下的次数,并通过串口打印输出到PC。在项目4的任务4.4.4按键处理函数中,按键的去抖动采用了软件延时的方法,利用函数HAL_Delay()延时10ms。这种延时去抖动的方法会占用处理器的执行时间,在延时过程中,处理器无法处理其他事务,从而降低了处理器的利用率。因此,在工程应用中往往采用状态机和定时中断相结合的方法来完成按键的检测。存在的问题直接延时的方法会占用处理器的执行时间,降低处理器的利用效率。工程应用中常常采用状态机和定时中断去抖动。状态机设计思想状态机是一个抽象概念,表示把一个过程抽象为若干个状态之间的切换,这些状态之间存在一定的联系。状态机的设计主要包括4个要素:现态是指当前所处的状态;条件当一个条件满足,将会触发一个动作,或者执行一次状态的迁移。动作表示条件满足后执行动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作要素不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。次态表示条件满足后要迁往的新状态。状态定义:根据按键的波形图可以设计三个按键状态按键检测状态:表示按键没有按下的状态;按键确认状态:表示按键已经按下的状态;按键释放状态:表示等待按键释放的状态。按键的状态机设计按键的状态机设计硬件电路按键Key0~Key2按下为低电平,释放为高电平,分别连接到STM32F407ZET6的PE4、PE3和PE2。按键Wk_Up连接到PA0,按下为高电平,释放为低电平。电路图参见图2-14。按键的状态机设计状态转换条件(假设低电平表示按键按下)当处于按键检测状态时,如果数据线为低,则转换到按键确认状态,否则保持当前状态。当处于按键确认状态时,如果数据线为低,则转换到按键释放状态,并设置按键有效标志;如果数据线为高,则表示可能出现了干扰信号,转换到按键检测状态。当处于按键释放状态时,如果数据线为高,则转换到按键检测状态,表示完成了本次按键检测,否则保持当前状态。按键的状态机设计状态转换图假设采用下拉式按键,(如WK_UP键)高电平表示按键按下,低电平表示按键释放。按键检测状态数据线为高按键确认状态数据线为高,按键确认按下,将设置按键有效标志。按键释放状态数据线为低数据线为低数据线为低数据线为高利用SwitchCase多分支语句,通过检测按键引脚的电平来实现按键状态的转换;利用定时器产生10ms的定时中断,在定时中断服务程序中调用按键状态转换函数。每次执行的间隔10ms,可以有效的消除按键抖动,并提高CPU的利用率。按键的状态机编程实现TIM6的配置注意:引脚分配和引脚参数配置可以参考进阶任务(按键控制)中的相关配置。使能中断使能定时器6更新中断4个按键GPIO的配置下拉上拉程序编写定义按键状态数据类型,使用枚举类型实现,包括3个枚举常量,用来表示三种按键状态。程序编写定义变量主程序代码主程序代码主程序代码验证编译程序,下载到STM32F407核心板,打开串口调试助手,核心板上电,任意按下Key0~Key2或Wk_Up按键,均能记录此键的按下次数,按键按下1次,按键计数器值加1。使用状态机设计思想解决多个按键的检测,较好的提高CPU效率。实验结果如图3-36所示。任务二智能小车电机调速实现任务描述本任务要求设计一个可实现智能小车电机调速的应用程序,具体要求如下。电机驱动部分以L298N芯片为例(也可选择其他芯片)。支持同时对两路直流电机进行控制。支持按键控制,使用4个按键,功能描述如下。Key2按键控制电机正转,若电机当前处于停止状态,按下Key2按键则使之正转;若电机当前处于正转或反转状态,按下Key2按键则使之停止。Key0按键控制电机反转,若电机当前处于停止状态,按下Key0按键则使之反转;若电机当前处于正转或反转状态,按下Key0按键则使之停止。Key1按键控制电机减小转速,若当前为正转则使之正向减速,反之亦然。Wk_Up按键控制电机增大转速,若当前为正转则使之正向加速,反之亦然。根据任务描述,我们用定时器TIM4的通道1(PB6)和通道2(PB7)产生PWM波,分别连接到L298N电机驱动板的ENA和ENB。使用PC0、PC1分别连接到IN1和IN2,控制左边的电机正转、反转和制动。使用PC2和PC3分别连接到IN3和IN4,控制右边的电机正转、反转和制动。接线原理接线原理表3-35电机调速模块硬件接线表接口名称STM32F系列微控制器L298N电机驱动板直流电机PWM信号输出控制(TIM4)CH1PB6ENA
CH2PB7ENB
PC0IN1
PC1IN2
PC2IN3
PC3IN4
电机动力线
AOUT1Motor1
AOUT2
BOUT1Motor2
BOUT2配置定时器4定时器定时计算公式:配置定时器4图2配置时基单元图3配置PWM输出通道图1TIM4Mode配置配置TIM4的CH1(PB6)、CH2(PB7)输出PWM信号;设置捕获/比较值CRR为50,表示PWM信号最初的占空比为50%;设置预分频系数PSC为84-1,自动重载值ARR为100-1,表示PWM信号频率为10Khz;GPIO配置4个按键及连接两个电机IN1~IN4GPIO的配置:UART配置默认配置编码实现运行结果观察到的现象是:系统上电,电机初始状态是停转的,按下Key2按键,电机正转,再次按下Key2按键,电机停转。电机正转时,按下Key0按键(反转按键)电机停转。按下Key0按键,电机反转,再次按下Key0按键,电机停转。将程序编译链接,生成的可执行代码下载到核心板,L298N电机驱动板与核心板、电机按表3-35连接。开发板及电机电源上电,打开串口调试软件,设置好串口及通信波特率等参数。运行结果电机反转时,按下Key2按键(正转按键),电机停转。占空比的调节过程是:PWM波的占空比系统默认的初始值为50%,每按下Wk_Up按键1次,PWM波的占空比增大10%,电机转速明显加快,当PWM占空比增大到100%时,再次按下Wk_Up按键,占空比又回到50%。按下Key1按键,PWM波的占空比减小10%,电机转速变慢,当减小到0时,再次按下Key1按键,占空比又回到50%。串口输出的信息如图3-39所示。运行结果用示波器观察PWM波的占空比(PB6/PB7),初始值为50%,每按下1次Wk_Up按键,PWM波的占空比增大10%,不停地按下Wk_Up按键,占空比的变化规律是:50%→60%→70%→80%→90→100%→50%。按下Key1按键,占空比会变小,其变化规律是:50%→40%→30%→20%→10%→0→50%。任务四定时器的输入捕获功能输入捕获功能概述用途用于测量信号的参数,比如周期和频率。工作原理在输入捕获模式下,当捕获单元捕捉到外部信号的有效边沿(上升沿/下降沿/双边沿)时,将计数器的当前值锁存到捕获/比较寄存器TIMx_CCR,供用户读取。用途与原理捕获通道的内部结构TI1FP1和TI1FP2实际是同一个信号,由于输出方向不同,因此用不同的名称区别。捕获信号IC1的选择:①来自捕获通道1的TI1FP1(直接输入方式)②来自捕获通道2的TI2FP1(间接输入方式)③来自从模式管理器的触发信号TRC最终捕获信号捕获过程示意图假设上升沿捕获,递增计数模式。第一次捕获第二次捕获将两次捕获到的值相减,再乘以计数时间可计算出信号周期。Period(s)=Diff/TIMx_CLKx(PSC+1)信号参数计算公式Freq(Hz)=TIMx_CLK/(Diffx(PSC+1))捕获差值定时器时钟预分频系数信号参数计算公式如果CCRx_1<CCRx_2:捕获差值=CCRx_2-CCRx_1如果CCRx_1>CCRx_2:捕获差值=(ARR+1-CCRx_1)+CCRx_2当待测信号不大于定时器的一个完整计数周期(从0到ARR)时。假设两次连续的捕获值分别为CCRx_1和CCRx_2,则捕获差值可以按照如下方法计算:注意:如果待测信号大于定时器的一个完整计数周期,则需要结合定时器的更新中断次数来计算捕获差值。任务四基础任务:超声波测量距离超声波测距模块的应用开发任务描述任务目标超声波雷达价格低廉,检测距离短,是泊车功能的重要传感器。小车倒车时,利用超声波模块测量到后方有障碍,能及时刹车。测量距离:2~400cm。任务内容本任务要求使用HC-SR04模块,配合STM32F407MCU设计一个可实现智能测距的应用程序,具体要求:测距精度0.3cm,盲区为2cm,测距范围为2~400cm。测量数据通过串口发送到PC端。任务实施之前必须准备好表3-48所列的设备/资源表3-48设备/资源清单序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1
2HC-SR04超声波测距模块1
3USB转串口线1
任务实施硬件连接,如表3-49所示:表3-49HC-SR04与STM3F407核心板连接序号HC-SR04STM32F407ZET6核心板1VCC5V电源2TrigGPIOA.33EchoGPIOA.2(TIM2_CH3)4GND电源地硬件连接实施步骤创建项目。引脚分配。配置定时器外设。添加代码包。修改程序。编译、下载验证。具体实施步骤如下。设置CubeMX环境启动CubeMX软件;依次选择“NewProject”→“StartMyprojectfromMCU”;在PartNumberSearch搜索框中输入“STM32F407ZE”;选中搜索结果“STM32F407ZETx”;点选右上角的StartProject选项;进入开发板初始化对话框。实施步骤创建项目,并将其设置为相应的IDE生成代码首先,在主窗口中选择“ProjectManager”项目管理器选项,打开“Project”标签,打开ProjectSetting项目设置窗口。在相应的文本框中输入项目名称,选择项目保存路径。将Toolchain/IDE选项设置为“MDK-ARMV5”。时钟源配置:HSE配置为“Crystal/CeramicResonator”,时钟树配置选“HSE”、内核时钟为168MHz。具体配置可参阅前述相关介绍。实施步骤引脚及片内外设定时器、串口配Trig端接PA3,应设置为推挽式输出,配置结果如图3-57所示图3-57实施步骤引脚及片内外设定时器、串口配Echo端接PA.2,应配置为TIM2_CH3,即定时器2的通道3,用于获取输入捕获超声波模块的回应信号的宽度,具体配置如图3-58、图3-59所示。图3-58图3-59实施步骤引脚及片内外设定时器、串口配使用定时器TIM3,配置成一个60ms的定时器,用于以一定的频率触发超声波,并使能中断,具体配置参见图3-60。图3-60图3-61串口1用于打印超声波模块与障碍物的距离,故需要配置串口1,默认配置即可,如图3-61所示。实施步骤生成基础工程切换到“CodeGenerator”选项卡,进行勾选。最后单击右上角的“G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国智能送餐机器人餐饮行业渗透率与投资回报周期
- 2026中国现代农业科技推广现状与产业化发展研究报告
- 2026中国物流产业政策演变与地方政府扶持研究报告
- 2027届吉林省长春市南关区物理九年级第一学期期末质量检测模拟试题含解析
- 2026中国纸制品印刷行业市场供需分析及投资评估规划分析研究报告
- 轮胎厂质量检验办法
- 2026食品加工无菌车间行业市场供需现状竞争评估投资规划分析研究报告
- 2026中国智能交通管理设备行业市场供需分析及投资评估规划分析研究报告
- 2026欧洲智能家居行业市场现状供需分析及投资评估规划分析研究报告
- 2026欧洲计算机软硬件市场发展要求及行业投资预评估分析报告
- 2026-2030旋转蒸发仪行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2026年广州市南沙区黄阁镇人民政府编外工作人员招聘笔试参考题库及答案解析(完整版)
- 【中小学】【开学收心】主题班会:开学吧!八仙小队
- 2026年海南中考(语文)考试真题及参考答案
- 【初一】【秋季上】七年级开学家长会:从小学到初中陪孩子完成一次重要换挡 校园风【课件】
- 2026 年小学秋季新生开学“讲究卫生健康成长”
- 2026年秋季学期人教版小学数学五年级上册教学计划附教学进度表
- 新版西师版六年级上册数学全册教案(完整版)教学设计含教学反思
- 输电线路架线工程监理实施细则
- 四川省泸州市2025-2026学年高一下学期期末考试历史试卷
- 不发火地面施工工艺及施工方法
评论
0/150
提交评论