OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9628|回复: 11

基于霍尔传感器的电机测速

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-4-12
在线时间
3 小时
发表于 2016-4-12 14:14:24 | 显示全部楼层 |阅读模式
1金钱
1.将霍尔传感器模块安装在直流无刷电机的侧面,小磁铁吸附于电机的侧壁。

2.stm32最小系统板实时读取霍尔传感器输出的脉冲信号。

3.获取相临脉冲信号的时间间隔,或一段时间内脉冲数量,以此计算出直流无刷电机的转速,单位为rpm或rad/s。

4.将转速值实时显示在四位LED数码管上。



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-4-12
在线时间
3 小时
 楼主| 发表于 2016-4-12 14:17:23 | 显示全部楼层
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-4-12 20:10:37 | 显示全部楼层
本帖最后由 likunxue 于 2016-4-12 20:13 编辑

用定时器的输入捕获模式 来实现
也可以用中断来实现, 方法很多的
可以参考以下代码, 只是部份, PB7接输入口
/*******************************************************************************************
函数名: 定时器4配置输入捕获模式
调  用: TIM4_IRD_StartWork_int(void)
参  数: 无
返回值: 无   
*******************************************************************************************/
void TIM4_StartWork_int(void)
     {      
     RCC->APB1ENR |= 1<<2;                //使能定时器4时钟     
     RCC->APB2ENR |= 1<<3;                //使能外设PORTB时钟      
     GPIOB->CRL &= 0x0fffffff;            //PB7输入      
     GPIOB->CRL |= 0x40000000;            //TIM4_CH2 ->PB7      
     GPIOB->ODR |= 1<<7;                  //置上拉         
     TIM4->ARR = 59999;                   //设定计数器自动装载值(100us)
     TIM4->PSC = 36;                      //时钟分频系数36,计数频率为1MHZ  
     BIT_ADM(TIM4->CR1,7) = 1;            //定时器ARPE充许      
     BIT_ADM(TIM4->CCMR1,15) = 0;         //IC2F = 0100; N=6 配置输入捕获2滤波   
     BIT_ADM(TIM4->CCMR1,14) = 1;
     BIT_ADM(TIM4->CCMR1,13) = 0;   
     BIT_ADM(TIM4->CCMR1,12) = 0;
     BIT_ADM(TIM4->CCMR1,11) = 0;         //IC2PSC = 00;不分频
     BIT_ADM(TIM4->CCMR1,10) = 0;     
     BIT_ADM(TIM4->CCMR1, 9) = 0;         //CC2S = 10;选择输入端口IC2映谢到 TI1上
     BIT_ADM(TIM4->CCMR1, 8) = 1;
     BIT_ADM(TIM4->CCER,  4) = 1;         //OC2 输入捕获使能
     BIT_ADM(TIM4->CCER,  5) = 0;         //高电平有效P =0;         
     BIT_ADM(TIM4->DIER,  2) = 1;         //充许捕获2中断     
     BIT_ADM(TIM4->DIER,  0) = 1;         //定时器更新中断使能   
     MY_NVIC_Init(4,0,TIM4_IRQn,4);       //抢占3,子优先级0,组4  
     BIT_ADM(TIM4->CR1,0) = 1;            //使能定时器4         
     }

/*******************************************************************************************
函 数 名: 定时器4中断服务程序        
功能说明: 计算当前电机的工作速度
形    参: width 脉冲宽度,单位 1us
返 回 值: 无  
          速度计算方法说明如下
          采样频率 1MHZ(1us) F,  编码器线数 100线, M, 定时器的计数次数 S
          频率(F) =  转数(N) * 线数(M)/60;   
          转数(N) =  频率(F) * 60/线数(M);
          F = 1000000/S;
          N = (1000000/S*60)/100;
          MoB.STATUS; 速度检测被捕获标记        
          D7  = 1 加速,0 减速
          D4  = 1 上升沿捕获标志位
          D0~ D4 采样次数
********************************************************************************************/
void TIM4_IRQHandler(void)
     {            
     if(BIT_ADM(TIM4->SR,0) == 1)        //溢出中断            
       {
       BIT_ADM(TIM4->SR,0) = 0;          //清除溢出断标志   
       MoB.STATUS = 0;                   //清零脉宽记录寄存器
       MoB.ShuChuMaiKuan = 0;
       MoB.Leve = 0;                         //速度指针清零               
       }
     if(BIT_ADM(TIM4->SR,2) == 1)        //CC2IE中断                           
       {  
       BIT_ADM(TIM4->SR,2) = 0;          //清除CC2IE溢出中断      
       if(ENCODE_A == 1)                 //上升沿捕获
         {
         BIT_ADM(TIM4->CCER,5) = 1;      //CC2P=1设置为下降沿捕获                  
         TIM4->CNT = 0;                         //清空定时器值
         MoB.STATUS |= 0x10;             //标记上升沿已经被捕获         
         }
       else{
           u16 MaiKuan = TIM4->CCR2;         //读取CCR2也可以清CC1IF标志位
           BIT_ADM(TIM4->CCER, 5) = 0;   //CC2P=0 设置为上升沿捕获     
           if(MoB.STATUS & 0x10) SuDuHuanChuLi(MaiKuan); //速度处理               
           }               
       }            
     TIM4->SR = 0;  
     }   
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-4-12
在线时间
3 小时
 楼主| 发表于 2016-4-12 21:25:16 | 显示全部楼层
likunxue 发表于 2016-4-12 20:10
用定时器的输入捕获模式 来实现
也可以用中断来实现, 方法很多的
可以参考以下代码, 只是部份, PB7接 ...

这个涉及不到数码管呢
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-4-12 23:17:07 | 显示全部楼层
张小弟 发表于 2016-4-12 21:25
这个涉及不到数码管呢

这只是输入捕获检测,
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-4-12
在线时间
3 小时
 楼主| 发表于 2016-4-13 12:45:47 | 显示全部楼层
likunxue 发表于 2016-4-12 23:17
这只是输入捕获检测,

请问这个仿真怎么看?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-4-12
在线时间
3 小时
 楼主| 发表于 2016-4-13 12:47:07 | 显示全部楼层
likunxue 发表于 2016-4-12 23:17
这只是输入捕获检测,

我们身边没有示波器什么,身边只有通过霍尔传感器与小磁铁
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-4-14 04:21:17 | 显示全部楼层
张小弟 发表于 2016-4-13 12:45
请问这个仿真怎么看?

这个仿真我真还搞不定, 因为这个外部输入信号,是真实的硬件行为, 不是软件模式
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2020-3-20
在线时间
8 小时
发表于 2020-3-20 17:11:57 | 显示全部楼层
看一下!
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-4-9
在线时间
0 小时
发表于 2020-4-9 21:16:44 | 显示全部楼层
可以用软件参数一个方波,连接到原来霍尔输出端来试一试。
回复

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-6-23
在线时间
8 小时
发表于 2020-11-24 10:26:32 | 显示全部楼层
zcw0707 发表于 2020-4-9 21:16
可以用软件参数一个方波,连接到原来霍尔输出端来试一试。

你是说把霍尔输出管端,作为输入?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2020-5-24
在线时间
5 小时
发表于 2021-2-7 22:13:15 | 显示全部楼层
学习学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-14 02:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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