打印

动手做一个测速计、频率计(含VC源代码)

[复制链接]
2269|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
schoolboy|  楼主 | 2008-5-22 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


基于EasyUSB模块做一个实用的马达测速计(频率计)

    设计初衷

    在单片机软硬件开发中,常常需要测量出电机转速、或某个规则信号的频率等,买一个频率计又不划算,于是打算自己做一个,够用就行。

一开始打算用单片机,考虑到焊板、编程、烧录等等工作量,还不如就地取材,使用手头上的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);

}

 

这样,一个简单实用的频率计就这样十分钟内就做好了。运行界面如下:



VC源代码下载
VC源代码下载http://www.schoolboy.com.cn/articles/Read.asp?ID=1248

 


对于电机等旋转体速度的测量,使用一个小磁铁贴在旋转体上,再用一颗霍尔芯片连到该频率计的信号测量脚上。

 

EasyUSB详情在http://www.schoolboy.com.cn/list.asp?ProdId=0001

相关帖子

沙发
ayb_ice| | 2008-5-22 14:03 | 只看该作者

CH431是。。。

使用特权

评论回复
板凳
老狼| | 2008-5-22 14:18 | 只看该作者

南京沁恒

使用特权

评论回复
地板
gyt| | 2008-5-22 14:43 | 只看该作者

谢谢发表!

使用特权

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

本版积分规则

23

主题

25

帖子

0

粉丝