一、实现定时器
1.定时器的介绍
1.1定时器的概念及作用
定时器的主要作用是产生一个时基,通俗的讲就是从某一时刻开始,经过一段指定的时间,触发一个中断或超时回调事件,可以在中断或者超时回调函数中处理数据。
定时器在嵌入式系统中是个基础服务,比如RTOS就要依赖SysTick提供时钟节拍去实现线程延时、线程时间片轮询调度等,定时器可以分软件定时器和硬件定时器,我们还经常听到SysTick,RTC实时时钟等,定时器在生活中的应用也很常见,比如闹钟。
1.2定时器的分类
(1)硬件定时器
顾名思义,芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件 定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式,简言之,硬件定时器需要硬件资源支持产生稳定的时间基准。
2)软件定时器
软件定时器的功能与硬件定时器类似,但是实现方式不同,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务,一般使用SysTick作为基础时钟。
软件定时器是通过线程实现的而非中断实现,可能会被其它高优先级的线程打断,因此软件定时器只能用于对精度要求不高的场合,一般是毫秒级。
(3)系统滴答定时器(SysTick)
SysTick需要硬件支持,可以理解为一种简单的硬件定时器,SysTick定时器一般用于延时或作为RTOS中的系统时钟(心跳),实时系统中最小的时间单位就是SysTick定时器的中断周期,也就是1个tick。
(4)实时时钟(RTC)
RTC需要硬件支持,是一个独立的BCD定时器/计数器,主要作用是提供日历功能,不同的MCU,RTC特性可能也略有差异。以下是参数特性:
2.新建项目
2.1新建项目并选择自己的芯片
2.2配置SYS
2.3配置RCC
2.4配置GPIO,配置LED(PA5,设置为GPIO_OutPut)
2.5设置定时器TIM2
2.6配置NVIC
2.7配置生成keil5工程文件,设置完成后大开keil
3.代码
3.1打开main.c,在main.c里面加入代码
配置定时器:
HAL_TIM_Base_Start_IT(&htim2);
中断函数:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t time_cnt =0;
static uint32_t time_cnt1 =0;
if(htim->Instance == TIM2)
{
if(++time_cnt>=20)
{
time_cnt=0;
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
}
}
}
4.烧录编译
5.结果
11
二、LED呼吸灯
1.PWM的介绍
1.1概述
PWM是一种对模拟信号电平进行
数字编码的方法。通过高
分辨率计数器的使用,方波的占空比被调制用来对一个具体
模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。
1.2优点
PWM的一个优点是从处理器到被控系统
信号都是数字形式的,再进行数模转换。可将噪声影响降到最低(可以跟电脑一样)。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。
对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。
1.3主要产生方法
(1)SPWM法
SPWM(Sinusoidal PWM)法是一种比较成熟的,使用较广泛的PWM法。
前面提到的采样控制理论中的一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。SPWM法就是以该结论为理论基础,用脉冲宽度按正弦规律变化而和正弦波等效的PWM波形即SPWM波形控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。该方法的实现有以下几种方案。
(2)等面积法
该方案实际上就是SPWM法原理的直接阐释,用同样数量的等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的。由于此方法是以SPWM控制的基本原理为出发点,可以准确地计算出各开关器件的通断时刻,其所得的的波形很接近正弦波,但其存在计算繁琐,数据占用内存大,不能实时控制的缺点。
(3)硬件调制法
硬件调制法是为解决等面积法计算繁琐的缺点而提出的,其原理就是把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形。通常采用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形.其实现方法简单,可以用模拟电路构成三角波载波和正弦调制波发生电路,用比较器来确定它们的交点,在交点时刻对开关器件的通断进行控制,就可以生成SPWM波。但是,这种模拟电路结构复杂,难以实现精确的控制。
(4)软件生成法
由于微机技术的发展使得用软件生成SPWM波形变得比较容易,因此,软件生成法也就应运而生.软件生成法其实就是用软件来实现调制的方法,其有两种基本算法,即自然采样法和规则采样法。
1.4PWM基本原理
(1)什么是PWM:PWM简称脉冲宽度调制,即在一个周期内存在不同极性的电平状态。
(2)PWM频率:是指一秒钟内从高电平时间在到低电平时间,再从低电平跳到高电平的瞬间次数,也就是一秒钟内有多少个PWM的周期。f = T / 1(HZ)。
(3)PWM周期:是指一秒钟内从高电平时间在到低电平时间,T = f / 1(s)。
(4) PWM占空比:是指一个周期内高电平时间和总时间的比值。
2.新建项目
2.1新建
2.2选择STM32F103C8T6芯片
2.3配置SYS
2.4配置RCC
2.5配置定时器
TIM3
TIM4
2.6配置led相应引脚
2.7配置生成keil5工程文件
3.代码
3.1在main.c中修改以下代码:
添加
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);
修改while循环
while (1)
{
HAL_Delay(50);
num=num+10;
if(num>500)
{
num=0;
}
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,num);
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_2,num);
/* USER CODE BEGIN 3 */
}
3.2设置相关参数
4.线路连接
3v3-3v3
GND-GND
A9-RXD
A10-TXD
PA6-LED
5.烧录编译
6.结果
PWM
7.波形
三、总结
通过此次作业,我对定时器与呼吸机有了一些了解,同时能够更熟练的使用HAL库本次作业与之前作业有所不同,通过Timer定时器方式实现,相比于前面的这次控制更加精准,更加方便。