打印

用EasyUSB模块做一个实用的频率计

[复制链接]
1911|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
schoolboy|  楼主 | 2008-5-6 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    设计初衷
    在单片机软硬件开发中,常常需要测量出电机转速、某个规则信号的频率等,买一个频率计又不划算,于是打算自己做一个,够用就行。
一开始打算用单片机,考虑到焊板、编程、烧录等等工作量,还不如就地取材,使用手头上的EasyUSB模块,只要在PC上编程的工作完成,频率计就算完成了。

    设计原理如下:
    硬件上,EasyUSB所用芯片CH341引脚读取速度可达0.25us,即理论上我们设计出来的频率计最高可以测试2M的频率源。这对于一般的单片机开发而言,应该足够用了。
在软件设计上,只要用软件实现,某一小段时间,外部中断信号触发的次数。

具体设计:
EasyUSB预留的接口如下:
 
其中Key3也是中断引脚,上升沿触发,CH341芯片内部内置了上拉电阻。我们就将用这个引脚,来测量外部信号的频率。
软件上,也很简单,在原来EasyUSB免费开发包的基础上,修改增加两处代码即可:一,在原来的中断函数中,增加触发信号计数代码
LRESULT CEasyUSBDlg::OnEasyUSB_ExtInt()
{
    m_INT_Cnt++;//每来一次,则增加计数一次
    return 0;
}
二,在规定的一小段时间内,统计出每秒钟触发信号来临的次数,即为该信号的实际频率。
先设定Timer的时间长度,SetTimer(EVT_CHECKFREQ,1000,NULL);即1秒钟,定时器函数出现一次。
然后在定时器函数中,统计并显示出该信号的频率。
void CEasyUSBDlg::OnTimer(UINT nIDEvent) 
{
    if(nIDEvent==EVT_CHECKFREQ)
    {
        m_nFreq=m_INT_Cnt;                
        UpdateData(false);
    
        m_INT_Cnt=0;
    }
    
    CDialog::OnTimer(nIDEvent);
}

这样,一个简单实用的频率计就这样十分钟内就做好了。运行界面如下:
 
对于电机等旋转体速度的测量,使用一个小磁铁贴在旋转体上,再用一颗霍尔芯片连到该频率计的信号测量脚上。
EasyUSB详情在http://www.schoolboy.com.cn/list.asp?ProdId=0001

相关帖子

沙发
schoolboy|  楼主 | 2008-5-6 21:35 | 只看该作者

看不见图呀

看不见图,可去http://group.**/759/9984.aspx

使用特权

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

本版积分规则

23

主题

25

帖子

0

粉丝