基于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
|