鬼推磨 发表于 2021-7-9 16:40 你这个时间最好用定时器,不然时间会有误差,而且判断电机有无转动最好用下降沿或者上升沿,可以用外部中断,也可以用普通io口模拟外部中断,你这样测会有很大的误差,非常容易受干扰,希望你自己好好研究一下 |
测转速不就行了,那么简单 通过IO的高低电平来计算转速 对于实际应用,一秒低于0.001圈的,判定为不转动 一直是高电平的判定为不转动 一直是低电平的判定为不转动 |
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显示状态。怎么检测它无变化啊 |
开心就好hhhh 发表于 2021-7-9 14:36 a++到1000 ,改到10000也没用, 我怀疑代码到底有用没有啊 |
鬼推磨 发表于 2021-7-9 13:43 是挺奇怪啊,只要程序运行到这,应该能停啊。 |
首先你这个a++到100 ,这样的循环执行根本达不到两秒,甚至一毫秒都没有,所以你这样判断电机是否转动是不对的,其次你测试的时候不需要按住电机不动,只要将霍尔远离电机即可,然后再去观察电机是否停下 |
开心就好hhhh 发表于 2021-7-9 13:55 key5连接控制继电器模块的输入端,输出低电平,继电器就会吸合。断开电机的电源 |
鬼推磨 发表于 2021-7-9 13:43 key5连接什么? |
开心就好hhhh 发表于 2021-7-9 13:40 判断KEY1端口在2秒内没有电平变化。就足以证明。电机被阻转或者异物卡主了。,实际程序下载到单片机运行。我按住电机不让它动。但程序并没有控制电机停止。 |
鬼推磨 发表于 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;//停止电机信号 } } |
鬼推磨 发表于 2021-7-9 12:48 直接要程序可还行?这论坛不是帮你写程序的,是大家互相探讨问题的 |
1543330241 发表于 2021-7-9 12:40 来个简单的例子。谢谢 |