搜索
bottom↓
回复: 13

请问为什么这个霍尔传感器安装方法用来测量直流电机的转速不可靠(有图)?

[复制链接]

出0入0汤圆

发表于 2011-8-12 15:59:56 | 显示全部楼层 |阅读模式
我想用3144霍尔传感器测量一个直流电机的转速,安装方式如图,3144离磁钢的距离不到1mm,磁钢基本对准3144的感应点, 不知道为什么这种安装方法在转速高的时候(6000转/分)经常不准, 就是单位时间的脉冲数变化很大,为什么会这样的?另外如果想测量小直流电机的转速用什么方式方便一些?


(原文件名:Snap1.gif)

出0入0汤圆

发表于 2011-8-12 16:19:05 | 显示全部楼层
有没有看看传感器的输出波形?

出0入0汤圆

 楼主| 发表于 2011-8-12 19:40:53 | 显示全部楼层
我用示波器看了一下波形, 形状非常好,示波器读出的频率基本都是92.59Hz。
我是用stm32定时器的pwm输入捕捉3144霍尔传感器的输出的,电路很简单就是3144的输出接一个上拉然后接到定时器的输入,但是我看到输入脉冲计数的增加明显不均匀,每半秒增加的脉冲数从20几到100多跳来跳去,如果比较稳定的时候就会30到50间跳动,
示波器能比较稳定的读出传感器输出的频率,这样看来好像是stm32输入捕捉的问题,但问题在那里呢?

出0入0汤圆

 楼主| 发表于 2011-8-12 19:45:50 | 显示全部楼层
关于定时器相关的代码不多,就是定时器设置,和中断处理

void TIM_Configuration(void)
{
    TIM_ICInitTypeDef  TIM_ICInitStructure;
        //TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        //TIM_OCInitTypeDef  TIM_OCInitStructure;

        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM_ICInitStructure.TIM_ICFilter = 0x0;
        TIM_ICInit(TIM2, &TIM_ICInitStructure);
       
        TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);  
        TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);        /* Select the TIM2 Input Trigger: TI2FP2 */  
        TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset); /* Select the slave Mode: Reset Mode */
        TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); /* Enable the Master/Slave Mode */
       
        TIM_Cmd(TIM2, ENABLE); /* TIM enable counter */  
        TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE); /* Enable the CC2 Interrupt Request */

        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM_ICInitStructure.TIM_ICFilter = 0x0;
        TIM_ICInit(TIM3, &TIM_ICInitStructure);
       
        TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);  
        TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);        /* Select the TIM2 Input Trigger: TI2FP2 */  
        TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); /* Select the slave Mode: Reset Mode */
        TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); /* Enable the Master/Slave Mode */
       
        TIM_Cmd(TIM3, ENABLE); /* TIM enable counter */  
        TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE); /* Enable the CC2 Interrupt Request */       
       
}

下面是中断处理

void TIM2_IRQ(void)
{
        PlusCounter ++;
        TIM_ClearITPendingBit(TIM2, TIM_IT_CC2); /* Clear TIM2 Capture compare interrupt pending bit */       
}

出0入0汤圆

发表于 2011-8-12 19:52:02 | 显示全部楼层
原来你用的是中断的方式。
一般像这种脉冲捕捉都是直接用外设的硬件捕捉脉冲,用中断的方式不是很好,特别是脉冲频率很高的时候,CPU光进中断了

而且,不清楚你是怎么看到脉冲增加的,如果是用调试接口,那是显示不及的。因为100hz,说明每一个脉冲10ms,而调试接口数据传输速度通常没有那么快

出0入0汤圆

发表于 2011-8-12 20:08:18 | 显示全部楼层
你用两个霍尔90度排就能完全消除可能的抖动

出0入0汤圆

 楼主| 发表于 2011-8-12 21:23:08 | 显示全部楼层
我是间隔多长时间在屏幕上刷新一下PlusCounter的值,或者PlusCounter达到某个值的时候显示达到该值所需的时间,由Systick产生间隔50ms的定时来刷新时间值。
现在初步估计是程序的问题,因为在示波器读取到的频率是120Hz的时候,根据读取一段时间内脉冲数来算的话大概在200Hz左右,奇怪的是为什么计数会多了,究竟是什么问题呢?

出0入0汤圆

 楼主| 发表于 2011-8-12 21:28:08 | 显示全部楼层
会不会是有一些干扰导致计算器多计数呢?

出0入0汤圆

 楼主| 发表于 2011-8-12 21:45:19 | 显示全部楼层
问题初步找到了, 是干扰的问题, 那个电机我用另外的电源驱动的时候,相同的脉冲数所需的时间基本相同。

出0入0汤圆

发表于 2011-8-12 22:39:52 | 显示全部楼层
汗,看来 pulse 写成 plus 的不光俺一个。。

出0入0汤圆

 楼主| 发表于 2011-8-12 23:11:09 | 显示全部楼层
回复【9楼】huayuliang  花生
汗,看来 pulse 写成 plus 的不光俺一个。。
-----------------------------------------------------------------------

哈哈, 真是喔, 以后改正。

出0入0汤圆

发表于 2011-8-12 23:47:21 | 显示全部楼层
还有更简单的方法没?正在做这个测试电路。

出0入0汤圆

发表于 2014-7-8 23:30:46 | 显示全部楼层
zf12862177 发表于 2011-8-12 19:52
原来你用的是中断的方式。
一般像这种脉冲捕捉都是直接用外设的硬件捕捉脉冲,用中断的方式不是很好,特别 ...

麻烦问一下用外设硬件捕捉脉冲具体怎么操作,我也是用的中断口,一秒钟要中断上百次,一点都不精确

出0入0汤圆

发表于 2014-7-9 13:42:34 | 显示全部楼层
manyman 发表于 2014-7-8 23:30
麻烦问一下用外设硬件捕捉脉冲具体怎么操作,我也是用的中断口,一秒钟要中断上百次,一点都不精确 ...

用单片机的计数器啊,来一个外部脉冲就计数一次。假设你100ms读一次计数器值,本次读了10个,就是说在100ms,来了10个。这个叫M法测速

还有种T法,就是利用PWM的输入捕捉,计数器自由运行,来一个脉冲,就把当前计数器的值捕捉到,并放到内存,和上次的值做差,就知道这次脉冲用了多少时间。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 12:59

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

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