ARM 笔记(1017)-- STM32部分--13
12 ARM 核心外设-----定时器
定时器在激光老化系统中给激光器温控驱动电路,提供PWM温控信号,
PWM#
PWM就是
Pulse 脉冲(P)
Width 宽度(W)
Modular 调制(M)
在该系统中为什么要用PWM的方式控制温控呢?#
直接给MOS管TTL信号不就可以了么?(两个原因)
原因1:#
首先是硬件决定的 电源是12V的最大提供6A的电流。但是制冷器的内阻只有1.5欧姆左右,直接把电源加载到制冷器上会产生过流保护,如果在电路中串联其他元器件,显然浪费了很多功率,如果用PWM信号控制,电源的等效输出功率就会减少,从而避免过流保护。
原因2:#
其次,激光器温度控制要求是很严格的,为了避免超调现象,采用PID算法比较合理,PWM可以产生PID的效果。
PID#
P---I---D 是比例 微分 积分 三个环节的简称,
比例 P
微分 I
积分 D
通过调节比例积分微分的三个系数,可以在工业控制中避免超调,达到良好的控制效果,我们可以视实际需求应用某些环节去控制。------程序中的核心是先描述出PID的公式(用C语言),先用程序写PID,然后调整PID的三个系数(可以作为形参)
PID算法分类:#
位置 PID
角度 PID
12.1定时器到底是什么?它和滴答时钟的区别是什么?#
定时器的概念最早源于机械行业,靠齿轮咬合实现定时功能,
80年代的机械闹钟,定时器必须要有时间基准,我们叫定时器的计数时钟。
ARM中定时器的资源较多,功能也很强大。
ARM中定时器有以下四种功能:#
定时、
输入捕获(测量定时器电路固定输入通道上输入信号的脉宽、频率)、
输出比较功能:
可以产生PWM波形(依靠比较值寄存器与计数器比较,控制一个周期内电平的占空比--PWM呼吸灯)-
最后一个是死区控制功能:
定时器的计数模式:(三种)#
--先来了解一下定时器是如何工作的
此外定时器的计数模式可以有三种,比滴答时钟复杂。
向上计数、
向下计数、
中心对其、
等方式。
而且定时器是外设,意味着定时器的中断是可控的。
是不是所有的定时器都有这些功能?#
在ARM中定时器分为三类,
基本定时器只有功能A,
通用定时器具备功能A/B/C,
高级定时器具备功能ABCD,
定时器资源分布可以参照参考手册去查找。----TIMER
我们观察后可以把定时器资源整理成如下表格
12.2基本定时器原理#
时间基准:总线时钟分屏 =定时器时钟--再分频----=时间基准#
选内部时钟触发#
这里我们选择方式1,但是我们要确定我们的总线是哪个总线,不是所有的定时器都在同一个总线上,---参考手册
除非总线的分频系数是1(1分频),否则通用定时器的时钟等于时钟的2倍。
45M 定时器的时钟 90 计数时钟:
分频系数90-1=89
装载值:
定时时间的计算:
#
如果是向上计数,或者是向下计数,寄一个数的时间乘以装载值就是定时中断的时间。
想产生任意微秒的时间,怎么填写分频系数以及装载值?#
除非总线的分频系数是1(1分频),否则通用定时器的时钟等于时钟的2倍。
总线时钟:45M 定时器的时钟 90M(总线时钟的2倍) 计数时钟:n(随意数(分频))
对定时器时钟分频
任意微秒的定时,
FRE频率
1/FRE=秒
10^16/fre=
想产生nms()的定时呢? 注意要观察下填写的分频的寄存器是多少位的#
12.3基本定时器编程过程#
中断程序是怎么执行的?#
{
}
中断的编程流程是什么? (手写)
首先编写中断初始化函数
{
打开外设时钟,
结构体传参
调用初始化函数
开启中断
设定中断优先级(分组)
}
接着编写中断入口函数 ---特点以中断向量的名称命名该函数
{
调用中断通用系统的处理函数---IRQ
}
最后编写回调函数----弱函数的重定义--callback
{
中断内要执行的程序
}
找到 HAL_ base_INIT文件
先屏蔽初始化
再重启初始化
Deinit写法
Instance基地址 填定时器
Spec分频 (分频系数)
重载值
Counter计数模式
Load 装载值
(一)
(二)
(三)
把循环的内容放到定时器里面
红灯闪烁的时间是
Cubemax
CubemEx做一下定时器初始化程序
1、软件安装需要先安装java---如何查证电脑中是否有JAVA
2、必须先配置系统时钟
3、注意 必须生成的是一个工程
4、
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步