ODrive0.5.5源码分析(2) 时钟和定时器

本文详细分析了STM32F407微控制器的时钟系统,特别是APB1和APB2时钟及其连接的定时器。文章通过实例展示了定时器TIM1、TIM8、TIM14的配置和使用,强调了它们在电机控制中的作用,如FOC中的电流采样。此外,文章还探讨了TIM13作为时基定时器和软中断控制循环的角色,以及TIM13如何与TIM1的更新事件同步。文章最后讨论了控制循环中断的处理流程和时间同步的重要性。

作者:沉尸(5912129@qq.com)

1)时钟分析

我们直接打开文件“Firmware\Board\v3\Odrive.ioc”:

图1-1

从上面可以看出:APB1时钟:42MHz;   APB1相连的定时器时钟:84MHz

APB2时钟:84MHz; APB2相连的定时器时钟:168MHz

下图来自 stm32f407数据手册中“2.2 Device overview Figure 5. STM32F40xxx block diagram

图1-4

总共用到的定时器有TIM1~TIM5,TIM8,TIM13,TIM14

于是可知,本项目中用到的定时器时钟

TIM1TIM8 168MHz

其它                  84MHz

2)TIM14

这个用来作为Hal库的时基定时器。

 

图2-1

看代码:

图2-2

3)TIM1和TIM8

图3-1

main.h中有定义:

#define TIM_1_8_PERIOD_CLOCKS 3500

图3-2

于是可以知道 TIM1和TIM8的频率为:

168MHz/(3500*2) = 24KHz                        // 因为是中间对齐,所以式子中要*2

直接总结如下:

定时器

输入频率

周期

功能

TIM1

168MHz

168M/(3500*2)=24KHz

#1电机(M0)的UVW驱动

TIM2

84MHz

84M/(4096*2)=10.25KHz

CH3(PB.10)和CH4(PB.11)作为pwm输出,duty相反

TIM3

84MHz

用作计数

#1电机之旋编检测,计满到0xfffff

TIM4

84MHz

用作计数

#2电机之旋编检测,计满到0xfffff

TIM5

84MHz

用作计数

定时器的CH3(PA.2)和CH4(PA.3)作为捕获输入口

TIM8

168MHz

24KHz

#2电机(M1)的UVW驱动

TIM13

84MHz

8KHz

启动时和TIM1及TIM8同步;任务耗时测量

TIM14

84MHz

1KHz

作为HAL库的时基

表3-1

FOC控制,很关键一点是采样相电流,在什么时刻采集?这个是软件设计很关键的一点,下面我们来剖析。

先分析:TIM8_UP_TIM13_IRQHandler()

分析之前看TIM8的初始化代码:

图3-3

TIM8控制的pwm波形为中间对齐,这里设置RCR=2,也就是每(2+1)次更新会中断一次。

 

图3-4

这里可以如此理解:RCR=0, 每次上溢下溢均会中断;RCR=1,间隔1个;RCR=2,间隔2个。

搞清楚中断的间隔问题,现在再来看TIM8_UP_TIM13_IRQHandler()的源代码

 

图3-5

就很容易理解了,因为中断肯定是一次上溢一次下溢,上面“图3-5”红方框中代码,就是检测是否漏掉了一次中断的判断。

修改时间戳“timestamp_”为下一次中断时间点:

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值