搜索
bottom↓
回复: 5

请教马老师:按照你教材上的捕获模式获取频率,关于量程切换方面遇到实际的问题(高频率信

[复制链接]

出0入0汤圆

发表于 2011-4-25 17:13:42 | 显示全部楼层 |阅读模式
1、你在教材中说
          当频率 < 4khz ,测量量程N=1(也就是说连续捕获2个脉冲上升沿,认为一次测量)
          当频率 > 4khz 同时 频率 < 128khz , 测量量程N=64(也就是说连续捕获65个脉冲上升沿,认为一次测量)

   问题如下:

         (A)、   当前频率=100khz时,量程N=64.  如果当频率=100KHZ时刚刚进入第2次捕获时,突然频率信号降至0.1HZ
     由于还需要再进入63次捕获中断,才能认为一次测量完成,而现在由于频率信号为0.1HZ(10秒钟才会产生一次上升沿)
导致63*10秒=630秒内,测量结果无法刷新(因为在63*10秒内,不会置icp_ok=1标志了)。 如何合理的解决上述实际问题呢?

         (B)、 当前频率=100khz时,量程N=64.  如果当频率=100KHZ时刚刚进入第2次捕获时,突然频率信号消失,此后
测量结果永远不会再刷新了(因为永远不会置icp_ok=1标志了),  如何合理的解决上述实际问题呢?

出0入0汤圆

 楼主| 发表于 2011-4-25 17:24:25 | 显示全部楼层
不知道我的方法是否可行?

       根据当前频率计算一个合理的“时间*3”,如果在“时间*3”内,还没有产生icp_ok标志,就认为频率信号出现上述现象(突然消失或陡降到很低的频率0.1HZ)此时,清除捕获中断和溢出中断、置icp_v2=0,置icp_v1=0,置icp_2=0,强制测量值fv=0.

      然后重新将N设置=1,重新启动捕获中断和溢出中断。

出0入0汤圆

 楼主| 发表于 2011-5-28 09:06:19 | 显示全部楼层
我顶。

出0入0汤圆

发表于 2011-5-30 17:02:53 | 显示全部楼层
回复【2楼】ba_wang_mao
-----------------------------------------------------------------------

楼主弄出来了没,,,我也正在看马老师的书想做一个频率计

但书上的程序有的地方没看懂,请指点

我觉得下面的程序有问题,怎么都是icp_2呢,应该第一个为icp_1,不知我这样理解是否正确,
还有就是那个while(1)中的测频算法有点看不懂,,,请指点。。我的qq:383953468

if (icp_ok == 1)    // 完成一次测量
            {
                if (icp_v2 >= icp_v1)          // 计算N个上升沿的时钟脉冲个数,
                    icp_2 = icp_v2 - icp_v1;   
                else
                    icp_2 = 65536 - icp_v1 + icp_v2;


void main(void)
{
    unsigned int icp_1,icp_2;
    long fv;
   
        DDRA=0xFF;          // LED段码输出
        PORTC=0xFF;
        DDRC=0x3F;          // LED位控输出
        PORTD=0x40;         // PD6(icp)输入方式,上拉有效

    // T/C2 初始化
    TCCR2=0x0C;         // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
    OCR2=0xf9;//7c;          // OCR2 = 0xf9(249),(249+1)/62.5=4ms
        // T/C1初始化
    TCCR1B = 0x41;      // T/C1正常计数方式,上升沿触发输入捕捉,4M/1计数时钟
        TIMSK = 0xA4;                // 允许T/C2比较匹配中断,允许T/C1输入捕捉、溢出中断

    icp_n = 0;
    max_icp =1;
          #asm("sei")                        // 开放全局中断

        while (1)
        {
            if (icp_ok == 1)    // 完成一次测量
            {
                if (icp_v2 >= icp_v1)          // 计算N个上升沿的时钟脉冲个数,
                    icp_2 = icp_v2 - icp_v1;   
                else
                    icp_2 = 65536 - icp_v1 + icp_v2;
                
                if (!(icp_v2 >= icp_v1 && full_ok)) // 有溢出,数据无效   
            {           
                if (icp_2 == icp_1)         // 两次个数相等,测量有效
                    {
                    fv = 4000000 * (long)max_icp / icp_2;     // 换算成频率值
                    f_2_d = 1;              // 允许新频率送显示
               
                    if (fv > 4000)
                        max_icp = 64;       // 如果频率大于4Khz,N=64
                    else
                        max_icp = 1;        // N=1
                 }

出0入0汤圆

发表于 2011-5-30 22:07:27 | 显示全部楼层
后面还有啊,你应该全面的看。

接下去的第4行 “icp_1 = icp2”是什么意思?请仔细理解。

出0入0汤圆

发表于 2011-5-31 12:05:18 | 显示全部楼层
回复【4楼】machao
-----------------------------------------------------------------------

谢谢马老师指点,,我再仔细读一遍吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 13:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表