LPC11C14用定时器输出可变频率有问题

2019-03-25 20:12发布

本帖最后由 zzgezi 于 2016-3-28 08:51 编辑

大家好,请教大家一个问题。最近用LPC11C14做一个项目,有一部分功能是AD采集02.5V电压,转换为2001000Hz频率输出。频率输出我用32位定时器0,在定时器中断里反转I/O口实现。

AD使用AD中断采样10次,求平均值后,根据电压与频率的对应关系,修改定时器的MR0寄存器,实现改变频率周期。
下图为TIM32B0初始化函数。
1.png
TIM32B0定时器中断,作用反转I/O口。
4.png

AD采样中断,每采集10次求平均值后,修改TIM32B0的MR0寄存器,实现改变频率的作用。
注:可能有网友说不能在中断里处理,其实,频率输出异常和这个没有关系,我处理完之后再重新启动AD采样的。
3.png


现在的现场是,如果我输入的0-2.5V电压值不变,则频率输出稳定,但是电压值一发生变动,则不再输出频率,要么是高电平要么是低电平,且,在电压又稳定的情况下,频率过一段时间又出来了。
在DEBUG模式下,发现,频率输出异常时,TIM32B0的TC值跑飞了,远大于MR0寄存器的值,导致不会进定时器中断。
5.png 6.png

请问大家,这是什么情况,我哪里设置的不对吗?我也用了TIM32B0的PWM输出频率,现象差不多一样。

AD采样_频率输出.rar (178.25 KB, 下载次数: 12) 2016-3-28 08:46 上传 点击文件名下载附件

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
EETUX
1楼-- · 2019-03-26 03:51
_NXP LPC1000_
在DEBUG模式下,发现,频率输出异常时,TIM32B0的TC值跑飞了,远大于MR0寄存器的值,导致不会进定时器中断。

是不是修改MR0时,一改下去MR0<TC(改小MR0,这应该很有可能),然后就。。。
zzgezi
2楼-- · 2019-03-26 06:52
 精彩回答 2  元偷偷看……
zzgezi
3楼-- · 2019-03-26 10:38
EETUX 发表于 2016-3-28 08:53
是不是修改MR0时,一改下去MR0

有可能是,我在修改MR0之前将TC值写0,则不会出现上述情况,但是占空比会改变,不是50%了。请问,你是如何处理这种问题的呢?
EETUX
4楼-- · 2019-03-26 16:07
本帖最后由 EETUX 于 2016-3-28 09:08 编辑
zzgezi 发表于 2016-3-28 08:58
有可能是,我在修改MR0之前将TC值写0,则不会出现上述情况,但是占空比会改变,不是50%了。请问,你是如 ...

可以先试试定时器跑完一个完整周期再修改。MR0不会太小。
zzgezi
5楼-- · 2019-03-26 21:34
EETUX 发表于 2016-3-28 09:07
可以先试试定时器跑完一个完整周期再修改。MR0不会太小。

你的意思是,在定时器中断里修改MR0,进定时器中断,TC肯定复位了,在修改MR0保证,MR0不会小于TC。这个可以试试。太感谢了,给了我很大的启发。

一周热门 更多>