avr单片机测频

来源:百度知道 编辑:UC知道 时间:2024/06/14 23:23:51
想用avr(ATMEGA32)单片机做多周期等精度测频,被测频率信号在10K~200KHZ之间,同时cpu可以发出频率在387到12600HZ的pwm,现在的顾虑是被测的频率信号直接送入cpu的TC2,已知频率送入TC0,PWM利用TC1产生.利用定时器的中断完成计数最大值的扩充。请问这种方法好吗?是否太占用cpu资源,致使cpu不能做其他的事情,还是接一片8254好,8254的一路用于产生pwm,另两路用于测频。

注意:Atmega32的TC2没有外部输入端T2!

对于这种情况,建议你选择Atmeg64/128单片机,这单片机的TC1、TC2和TC3有外部输入,TC0使用异步方式,加32.768KHz晶振来配置成产生1S秒中断,用于测量时间的基准时间。

AVR单片机产生PWM是不需要CPU干预的,只是在初始化时设置几个寄存器。当然有种情况,那就是不断改变PWM的周期或占空比时,就需要在PWM比较匹配中断时改变寄存器的值。但是AVR运行速度快,所以修改寄存器也需要不了多少时间。

综合上面的描述,可以说你的方法是正确的,但是选取的单片机不适合,建议用更高级点的。

楼上说的不准确。尽管mega32可以跑16M,那仅仅是CPU的时钟,而楼主的时钟是需要加到计数器输入端的,速度远低于16M。另外还有测频原理也不对。

你需要将标准频率用外部逻辑电路分频为一个低速方波作为门控信号,控制需要测频的信号进入定时器,并需要这个门控信号产生中断,帮助单片机知道一段计数时间完成,需要计算频率。另外,由于mega32仅仅有一个16位计数器,你只能选择这个16位计数器用于测频,而不能选择其它计数器,否则精度只能做到8位。如果仅仅做测频和简单PWM输出,确实不占用CPU资源,若有很多中间处理,例如复杂PID等就不好说了。另外不要再使用8254这样的老式元件。

PWM不占用CPU资源,只需要设置。
没做过频率计,不过推测你的思路是不是这样:
TC0做标准时间信号,TC2做计数器,调节TC0的信号个数来测未知信号的高频和低频。
你的被测信号频率不高,mega32可以跑16M,CPU应该很空闲,只是用来处理2个计数中断而已。

楼下,“楼主的时钟是需要加到计数器输入端的”?TC2是计数器,不是定时器,也就是楼主所说的“利用定时器的中断完成计数最大值的扩充”,就算是定时器mega32还有个一分频,时钟频率当然可以达到16M,又不是51系列。
另外TC0是需要做一些处理来精确定时,定时时间到之后关闭TC2计数。
还有你所说的精度问题,8位可以“利用定时器的中断完成计数最大值的扩充”,精度你想要多少位就有多少位。