打印

请问STM8的TIM1如何测量0.01Hz的频率和占空比

[复制链接]
9557|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oktony|  楼主 | 2012-2-11 15:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我现在按照RM手册上的PWM输入信号测量的方法已经可以测出信号的周期和占空比,问题是我的信号频率在0.01hz到20khz之间,0.01hz的时候寄存器溢出测量不了,是不是可以设置一个变量a在TIM1里面溢出时++,然后计算的时候用a*65536+TIM1CCR里的值?我试了好像不能用
沙发
mxh0506| | 2012-2-11 16:42 | 只看该作者
这么低的频率除了测量时间长之外, 应该没什么难度, 不一定要用定时器提供的特殊功能吧?

使用特权

评论回复
板凳
香水城| | 2012-2-12 12:27 | 只看该作者
LZ的方案没有问题,可能是具体实现有问题。

使用特权

评论回复
地板
sinadz| | 2012-2-12 17:33 | 只看该作者
测量方法是对的

使用特权

评论回复
5
hsbjb| | 2012-2-12 17:37 | 只看该作者
lZ具体如何实现的,代码贴出来看一下

使用特权

评论回复
6
火箭球迷| | 2012-2-12 20:54 | 只看该作者
方案可行,lZ怎么试的

使用特权

评论回复
7
oktony|  楼主 | 2012-2-13 09:00 | 只看该作者
我想先弄清楚个问题,信号输入上升沿映射到的TIM1_CCR1和下降沿映射到的TIM1_CCR2到底有没有溢出标志位??是不是CC1OF和CC2OF??

使用特权

评论回复
8
香水城| | 2012-2-13 09:56 | 只看该作者
我想先弄清楚个问题,信号输入上升沿映射到的TIM1_CCR1和下降沿映射到的TIM1_CCR2到底有没有溢出标志位??是不是CC1OF和CC2OF??
oktony 发表于 2012-2-13 09:00


不明白你的意思。

CC1OF和CC2OF不是溢出标志,是捕获/比较标志。

使用特权

评论回复
9
oktony|  楼主 | 2012-2-13 10:00 | 只看该作者
0.01hz的话,测量周期的TIM1_CCR1和占空比的TIM1_CCR2寄存器都会溢出,如果它们溢出没有一个产生一个中断的话,我怎么让一个外部变量a和b自加分别表示TIM1_CCR1和TIM1_CCR2溢出的次数,然后再计算a*65536+TIM1_CCR1呢?

使用特权

评论回复
10
oktony|  楼主 | 2012-2-13 14:13 | 只看该作者
没有办法吗?

使用特权

评论回复
11
香水城| | 2012-2-13 14:38 | 只看该作者
0.01hz的话,测量周期的TIM1_CCR1和占空比的TIM1_CCR2寄存器都会溢出,如果它们溢出没有一个产生一个中断的话,我怎么让一个外部变量a和b自加分别表示TIM1_CCR1和TIM1_CCR2溢出的次数,然后再计算a*65536+TIM1_CCR1 ...
oktony 发表于 2012-2-13 10:00


当然有溢出标志,但不是你说的CC1OF或CC2OF。

请在手册中找TIM1_SR1中与UIF相关的说明,同时在手册中TIM1章节里,搜索"overflow":

STM8S_TIM1_SR1_UIF_Flag.GIF (18.01 KB )

STM8S_TIM1_SR1_UIF_Flag.GIF

使用特权

评论回复
12
oktony|  楼主 | 2012-2-13 16:44 | 只看该作者
多谢版主回复!由于TIM1_CCR1和TIM1_CCR2的值实际是由TIM1的计数器TIM1_CNT中取出来,如果我没理解错的话,UIF指的是TIM1_CNT的溢出吧?这样的话,单纯作为频率测量应该是行得通,因为测量周期用的TIM1_CCR1溢出的次数是跟TIM1_CNT溢出的次数相等的,但是测占空比的TIM1_CCR2如果占空比很短没有溢出怎么办?我的理解是TIM1_CCR1和TIM1_CCR2必须要有独立的溢出标志这个方法才行得通,不知道对不对还请指教!

使用特权

评论回复
13
香水城| | 2012-2-13 17:04 | 只看该作者
在发生信号的上升沿时,TIM1_CNT的内容被拷贝到TIM1_CCR1中,发生信号的下降沿时,TIM1_CNT的内容被拷贝到TIM1_CCR2中;因此根本没有TIM1_CCR1溢出或TIM1_CCR2溢出的概念,如果一定要说溢出的话,那也是TIM1_CNT的内容被拷贝到TIM1_CCR1后,再下一个上升沿到来之前,你没有及时读取而导致上次的TIM1_CCR1内容被覆盖,但一般这个概念叫做over capture,或重复捕获。

使用特权

评论回复
14
oktony|  楼主 | 2012-2-13 17:08 | 只看该作者
那我的理解没错,用这种方法测占空比就行不通了是吧??
看来只能用改变分频系数多档位测量的办法了

使用特权

评论回复
15
香水城| | 2012-2-13 18:27 | 只看该作者
那我的理解没错,用这种方法测占空比就行不通了是吧??
看来只能用改变分频系数多档位测量的办法了
oktony 发表于 2012-2-13 17:08


你的意思是我在3楼的回答是瞎说的?

用这种方法测占空比当然行得通!! 原来说了这么长时间,LZ还是没有理解这个方法的原理。

使用特权

评论回复
16
oktony|  楼主 | 2012-2-14 08:19 | 只看该作者
我没有说版主瞎说的意思,只是我还没理解清楚,你只是说我的方法可行,而我的理解是希望TIM1_CCR1和TIM1_CCR2有溢出标志位,但实际又没有,所以我不知怎么处理了,麻烦请指教

使用特权

评论回复
17
香水城| | 2012-2-14 10:37 | 只看该作者
我没有说版主瞎说的意思,只是我还没理解清楚,你只是说我的方法可行,而我的理解是希望TIM1_CCR1和TIM1_CCR2有溢出标志位,但实际又没有,所以我不知怎么处理了,麻烦请指教 ...
oktony 发表于 2012-2-14 08:19


我在13楼已经给你解释了TIM1_CCR1和TIM1_CCR2的意义,根本没有所谓TIM1_CCR1和TIM1_CCR2的溢出标志位。

原来你根本就没有看,说了也是白说。

使用特权

评论回复
18
oktony|  楼主 | 2012-2-14 11:15 | 只看该作者
我看了也明白了没有所谓TIM1_CCR1和TIM1_CCR2的溢出标志位啊!!!所以才请教版主你的具体方法,我的态度也够虚心了吧?版主从头到尾就是说了两点:1我的方法可行。2没有那两个溢出标志位。也不愿意说说你的具体方法,我看要测量这个范围内的频率和占空比除了更改TIM1的分频系数的方法和别的方法外,根本就不能在TIM1里直接读取a*65536+TIM1CCR测周期和读取b*65536+TIM2CCR测占空比。跟https://bbs.21ic.com/icview-202902-1-1.html这个帖子其实是相近的问题,里面5楼回答的用两个定时器的方法还比较有参考价值

使用特权

评论回复
19
香水城| | 2012-2-14 11:22 | 只看该作者
11楼说的UIF就是你要的溢出标志。你需要做的就是在每次出现溢出中断(标志)时,对你的计数变量a递增,在产生CC1OF和CC2OF时分别读取TIM1_CCR1和TIM1_CCR2,最后得到周期和占空比:
  周期: a*65536+TIM1_CCR1
  占空比:a*65536+TIM1_CCR2

使用特权

评论回复
20
香水城| | 2012-2-14 11:25 | 只看该作者
本帖最后由 香水城 于 2012-2-14 14:04 编辑

当然,用改变分频系数多档位测量,也是一种变通的办法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

46

帖子

1

粉丝