找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么检测电机是转动还是停止状态?

[复制链接]
跳转到指定楼层
楼主

给你一个检测开关  霍尔传感器,
转动到传感器位置输出的是低电平。




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:539024 发表于 2021-7-9 12:40 | 只看该作者
用单片机检测下降沿就行,转动的话肯定是下降沿的,要是测转速的话就是用定时器,检测单位时间内下降沿个数

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:475031 发表于 2021-7-9 12:48 | 只看该作者
1543330241 发表于 2021-7-9 12:40
用单片机检测下降沿就行,转动的话肯定是下降沿的,要是测转速的话就是用定时器,检测单位时间内下降沿个数

来个简单的例子。谢谢
回复

使用道具 举报

地板
ID:934353 发表于 2021-7-9 13:14 | 只看该作者
鬼推磨 发表于 2021-7-9 12:48
来个简单的例子。谢谢

直接要程序可还行?这论坛不是帮你写程序的,是大家互相探讨问题的
回复

使用道具 举报

5#
ID:475031 发表于 2021-7-9 13:29 | 只看该作者
开心就好hhhh 发表于 2021-7-9 13:14
直接要程序可还行?这论坛不是帮你写程序的,是大家互相探讨问题的

        看看折断代码。没有反应。


void main()
{
while(KEY1)//高电平
{
a++;
if(a>100)//这里的100不一定是2s,要调试获得准确值,
break;
}
while(!KEY1)//低电平
{
b++ ;
if(b>100)
break;
}
if((a>100)||(b>100))//表明一段时间内电平都没有变化
{
// 处理代码
        KEY5=0;//停止电机信号
}       
                       
        }                       
回复

使用道具 举报

6#
ID:934353 发表于 2021-7-9 13:40 | 只看该作者
鬼推磨 发表于 2021-7-9 13:29
看看折断代码。没有反应。

你想要有什么反应呢?电机停止?你这样判断电机是否停止是绝对不对的
回复

使用道具 举报

7#
ID:475031 发表于 2021-7-9 13:43 | 只看该作者
开心就好hhhh 发表于 2021-7-9 13:40
你想要有什么反应呢?电机停止?你这样判断电机是否停止是绝对不对的

判断KEY1端口在2秒内没有电平变化。就足以证明。电机被阻转或者异物卡主了。,实际程序下载到单片机运行。我按住电机不让它动。但程序并没有控制电机停止。
回复

使用道具 举报

8#
ID:934353 发表于 2021-7-9 13:55 | 只看该作者
鬼推磨 发表于 2021-7-9 13:43
判断KEY1端口在2秒内没有电平变化。就足以证明。电机被阻转或者异物卡主了。,实际程序下载到单片机运行 ...

key5连接什么?
回复

使用道具 举报

9#
ID:475031 发表于 2021-7-9 14:15 | 只看该作者

key5连接控制继电器模块的输入端,输出低电平,继电器就会吸合。断开电机的电源
回复

使用道具 举报

10#
ID:934353 发表于 2021-7-9 14:36 | 只看该作者
首先你这个a++到100 ,这样的循环执行根本达不到两秒,甚至一毫秒都没有,所以你这样判断电机是否转动是不对的,其次你测试的时候不需要按住电机不动,只要将霍尔远离电机即可,然后再去观察电机是否停下
回复

使用道具 举报

11#
ID:844772 发表于 2021-7-9 14:37 | 只看该作者
鬼推磨 发表于 2021-7-9 13:43
判断KEY1端口在2秒内没有电平变化。就足以证明。电机被阻转或者异物卡主了。,实际程序下载到单片机运行 ...

是挺奇怪啊,只要程序运行到这,应该能停啊。
回复

使用道具 举报

12#
ID:475031 发表于 2021-7-9 14:47 | 只看该作者
开心就好hhhh 发表于 2021-7-9 14:36
首先你这个a++到100 ,这样的循环执行根本达不到两秒,甚至一毫秒都没有,所以你这样判断电机是否转动是不 ...

a++到1000 ,改到10000也没用, 我怀疑代码到底有用没有啊
回复

使用道具 举报

13#
ID:475031 发表于 2021-7-9 15:22 | 只看该作者

sbit   KEY1 = P2^0;//判断端口
sbit   KEY2 = P2^1;//LED灯
sbit   KEY5 = P2^2;//停止电机

void main()
{
    while(1)
   {
       if (KEY1==0)
           {
             //KEY1是低电平
           KEY2=0//LED亮
           }
           else if (KEY1==1)
           {
             //KEY1是高电平
             KEY2=1//LED灭
           }
   }
}

此段代码只是检测IO口高低变化状态LED显示状态。怎么检测它无变化啊
回复

使用道具 举报

14#
ID:401564 发表于 2021-7-9 16:24 | 只看该作者
测转速不就行了,那么简单
通过IO的高低电平来计算转速
对于实际应用,一秒低于0.001圈的,判定为不转动
一直是高电平的判定为不转动
一直是低电平的判定为不转动
回复

使用道具 举报

15#
ID:475031 发表于 2021-7-9 16:40 | 只看该作者
  1. sbit IN=P2^0;
  2. sbit OUT=P2^1;
  3. uint time ;
  4. void main()
  5. {
  6. OUT=0;//继电器不动作
  7. time=0;
  8. while(1)
  9. {
  10. while(IN==1)//高电平
  11. {
  12. delayms(10);
  13. time++;
  14. if(time>1800) OUT=1;//超过3S,动作
  15. }
  16. time=0;
  17. while(IN==0)//低电平
  18. { delayms(10);
  19. time++;
  20. if(time>1800) OUT=1;//超过3S,动作
  21. }
  22. time=0;
  23. }
  24. }
复制代码
把你代码替换到我代码中,可以运行。就是这个time>300时间太短,我改为1800以上,能满足我说的功能要求。谢谢大师解决了我的问题,,



回复

使用道具 举报

16#
ID:934353 发表于 2021-7-9 17:48 | 只看该作者
鬼推磨 发表于 2021-7-9 16:40
把你代码替换到我代码中,可以运行。就是这个time>300时间太短,我改为1800以上,能满足我说的功能要求。谢 ...

你这个时间最好用定时器,不然时间会有误差,而且判断电机有无转动最好用下降沿或者上升沿,可以用外部中断,也可以用普通io口模拟外部中断,你这样测会有很大的误差,非常容易受干扰,希望你自己好好研究一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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