打印

PWM如何输出1-3000HZ,步进为1HZ任意可调频率。

[复制链接]
10584|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hackthree|  楼主 | 2011-11-26 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只是想把测到的频率值再作为脉冲频率输出去。
测到的信号范围1-3000HZ,分辨率为1HZ。
PWM如何输出1-3000HZ,步进为1HZ可调频率。
要求实时可调。
最好不要用中断。
TIM3->ARR=Period;
TIM3->CCR1=((Period+1)/2);
像这样操作寄存器的话,不能得到步进为1HZ的输出频率。
有什么方法?
沙发
airwill| | 2011-11-27 08:52 | 只看该作者
如果精度要求高的话,困难
这么低的频率, 用中断又何妨, 何况这个中断服务的开销很小

使用特权

评论回复
板凳
hackthree|  楼主 | 2011-11-28 07:18 | 只看该作者
2# airwill

那有什么办法让STM32输出1-3000HZ,步进为1HZ任意可调频率?还要实时更新的。。

使用特权

评论回复
地板
airwill| | 2011-11-28 12:52 | 只看该作者
要得到 1-3000HZ 的中断, 精度1,2 个总线周期的是没有问题的, 就是计数器+软件高位扩展就可以了.
不知道这个占空比有要求吗? 不管什么样的占空比, 总是有办法实现的

使用特权

评论回复
5
hackthree|  楼主 | 2011-11-28 13:17 | 只看该作者
4# airwill

占空比没要求,只是想把FFT测到的频率输出去而已。
FFT的分辨率是1HZ的。所以要求输出是1hz分辨率可调的。

使用特权

评论回复
6
香水城| | 2011-11-28 13:57 | 只看该作者
LZ可以看看这个帖子的讨论,应该会有启发:https://bbs.21ic.com/viewthread.php?tid=286516

使用特权

评论回复
7
hackthree|  楼主 | 2011-11-30 10:36 | 只看该作者
6# 香水城

额,貌似没有啥启发,这样做貌似把简单问题复杂化了。。
现在用的定时器,
做了个小频率和大频率的判断。
通过不停的修改预分频值确定周期时间,然后中断中取反实现的。。
if(test_i<=70)//如果小于70HZ,则预分频为72M/600=120000HZ
  {
   TIM_PrescalerConfig(TIM3, 599,TIM_PSCReloadMode_Update);
   T_Period=(120000/test_i)/2;
  }
  else//否则预分频为72M/9=8M
  {
   TIM_PrescalerConfig(TIM3, 8,TIM_PSCReloadMode_Update);
   T_Period=(8000000/test_i)/2;//(64000/test_i)-1;
  }
  TIM_SetAutoreload(TIM3,T_Period);
功能可以实现,但是不稳定,比如上电复位后会没有反应,非要手动复位下。
好像也没见谁这样做过。。而且这样程序一直在不停的修改预分频值也不好。
而且用到中断的话,做低功耗会遇到中断就醒,低功耗也做不来。。:L

使用特权

评论回复
8
hackthree|  楼主 | 2011-11-30 10:37 | 只看该作者
4# airwill

可以再详细点么?

使用特权

评论回复
9
luofeng2g| | 2014-10-10 17:31 | 只看该作者
hackthree 发表于 2011-11-30 10:37
4# airwill  

可以再详细点么?

lz这个最后怎么实现的?

使用特权

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

本版积分规则

1

主题

220

帖子

1

粉丝