找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4376|回复: 15
打印 上一主题 下一主题
收起左侧

单片机如何实现两个霍尔判断电机正反转程序?

  [复制链接]
跳转到指定楼层
楼主
如图,两个霍尔传感器并排放置,想利用两个霍尔中断下降沿触发来判断正反转,这样就有四种状态分别是00  01 11 10 ,利用四个状态的顺序理论上可以判断正反转。
求大佬教学,四种状态的判别程序是应该在中断里面写吗?当第一个霍尔中断触发后,在第一个霍尔的中断程序中延时等待下一个状态,但是这样第二个传感器的中断是不是就没法触发了?
或者各大佬有没有的其他思路给讲解一下,求教单片机程序的方案

fa0b732fbf9afc1ec617ab54f509116.jpg (180 KB, 下载次数: 159)

两个霍尔传感器并排放置

两个霍尔传感器并排放置

42c9e3c304c539ae401138c9c3e4ec0.jpg (75.52 KB, 下载次数: 158)

42c9e3c304c539ae401138c9c3e4ec0.jpg

51hei图片_20220703190225.png (14.45 KB, 下载次数: 164)

51hei图片_20220703190225.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-7-4 06:08 | 只看该作者
一个霍尔翻转时间是一圈时间,两个霍尔翻转时间差小和大表示正转反转。
回复

使用道具 举报

板凳
ID:832450 发表于 2022-7-4 06:34 | 只看该作者
Hephaestus 发表于 2022-7-4 06:08
一个霍尔翻转时间是一圈时间,两个霍尔翻转时间差小和大表示正转反转。

主要是我的磁铁不是匀速转动,所以时间差对我来说有点困难
回复

使用道具 举报

地板
ID:25310 发表于 2022-7-4 08:16 | 只看该作者
本帖最后由 pcbboy 于 2022-7-4 10:14 编辑

某个中断触发后标志位先=1,触发时间在前面的是一个方向,触发时间在后面的是一另个方向,
回复

使用道具 举报

5#
ID:891041 发表于 2022-7-4 09:45 | 只看该作者
你可以用一个定时中断。 这个定时的时长保证, 每次中断时间内, 霍尔不可能发生两次变化。也就是最高转速下 霍尔也不可能在一个定时周期内发生两次变化。  这样读前后的两个霍尔电平 判断顺序就可以知道正反转了。
回复

使用道具 举报

6#
ID:827243 发表于 2022-7-4 09:54 | 只看该作者
本帖最后由 daemondong 于 2022-7-4 09:57 编辑

直接上代码,希望你能看明白。
  1. void main(void) {
  2.     char stat[4],step;
  3.     stat[0]=0;   //初始状态为全零
  4.     step=0;
  5.     while (1) {
  6.         if (step>=2) {
  7.             if (stat[1]==0x01 && stat[2]==0x11) {} //正转
  8.             else if (stat[1]==0x10 && stat[2]==0x11) {} //反转
  9.             else {} //霍尔器件安装错误

  10.             step=0;
  11.         }
  12.     }
  13. }

  14. void exint0() interrupt 0 {
  15.     _nop_();
  16.     step++;
复制代码
回复

使用道具 举报

7#
ID:887371 发表于 2022-7-4 10:21 | 只看该作者
你这个就是编码器,可以参考ec11的代码。
  1. volatile unsigned char  K_cnt;//值增加表示正转,值减少表示反转
  2. void exint0() interrupt 0//K1=P3^2
  3. {
  4.   if(K2) K_cnt++;
  5.   else K_cnt--;
  6. }
  7. void exint1() interrupt 2//K2=P3^3
  8. {
  9.   if(!K1) K_cnt++;
  10.   else K_cnt--;
  11. }
复制代码


http://www.51hei.com/bbs/dpj-221719-1.html
EC11增量型脉冲数字电位器单片机驱动程序

回复

使用道具 举报

8#
ID:827243 发表于 2022-7-4 10:37 | 只看该作者
daemondong 发表于 2022-7-4 09:54
直接上代码,希望你能看明白。

代码少了一段
  1. void exint0() interrupt 0 {
  2.     _nop_();
  3.     step++;
  4.     stat[step]=stat[step-1];
  5.     stat[step] |= 0x01;
  6. }

  7. void exint1() interrupt 2 {
  8.     _nop_();
  9.     step++;
  10.     stat[step]=stat[step-1];
  11.     stat[step] |= 0x10;
  12. }
复制代码
回复

使用道具 举报

9#
ID:965189 发表于 2022-7-4 10:37 | 只看该作者
保证任何方向两个霍尔先后触发的情况下,可参考EC11编码器的识别方法。
回复

使用道具 举报

10#
ID:883242 发表于 2022-7-4 11:26 | 只看该作者
如果磁铁大小合适,让两个霍尔形成正交编码器,那么以任意一个霍尔作为基准,就叫A吧,当A翻转的时候检查B的状态,如果是高就是正转,如果B为低则为反转,and vice versa.
回复

使用道具 举报

11#
ID:491577 发表于 2022-7-4 11:44 | 只看该作者
很简单,以11为标准,当检测到11时开始计时,看看哪个霍尔先变0,电机的方向就是从先变0霍尔到后变0霍尔。
回复

使用道具 举报

12#
ID:394424 发表于 2022-7-4 17:57 | 只看该作者
学到了  确实和编码器的电平读取有点像
回复

使用道具 举报

13#
ID:195496 发表于 2022-7-6 09:49 | 只看该作者
两个霍尔装在一起,一个磁铁来触发,形成正交方式信号,很容易判断方向
回复

使用道具 举报

14#
ID:737063 发表于 2024-1-27 11:20 | 只看该作者
理论上出现 11 01 00 10 11是可以的 实际中可以出现 11 10 00 10 11或11 01 11 10 11就不行
回复

使用道具 举报

15#
ID:1075077 发表于 2024-2-20 09:51 | 只看该作者
大佬,就是两个霍尔采集电机的正反转方向的问题,我用外部中断采集状态发现会掉状态,我想请教下你是如何实现的
回复

使用道具 举报

16#
ID:1109793 发表于 2024-2-20 12:41 | 只看该作者
伊小于 发表于 2024-2-20 09:51
大佬,就是两个霍尔采集电机的正反转方向的问题,我用外部中断采集状态发现会掉状态,我想请教下你是如何实 ...

http://www.51hei.com/bbs/dpj-36467-1.html
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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