极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18918|回复: 0

霍尔电机测速实验

[复制链接]
发表于 2018-11-1 19:39:04 | 显示全部楼层 |阅读模式
硬件:Arduino UNO+LCD1602+DIY霍尔电机  
目的:霍尔测速
结果:基本准确

代码如下:

//LCD+采用中断方式测量霍尔电机转速。
#define PinA 2  //霍尔传感器模块Do 脚
//中断0--接霍尔传感器模块  5V--有效信号低电平
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,6);      //构造一个LiquidCrystal的类成员。使用数字IO ,12,11,5,4,3,6
volatile unsigned long time = 0; //中断函数中,会失效
volatile unsigned long time1 = 0; //速度的单位时间
volatile unsigned long count = 0; //计数值  如果变量要在中断中访问,要使用volatile进行申明
long num = 0;
long Speed=0;
int flag=0;
//初始化
void setup()
{
  Serial.begin(9600); //窗口初始化
  lcd.begin(16,2);   //初始化LCD1602
  lcd.print("Welcome to use!");   //液晶显示Welcome to use!
  delay(1000);        //延时1000ms
  lcd.clear();        //液晶清屏
  pinMode(PinA,INPUT); //D2脚为输入
  attachInterrupt(0, blinkA, LOW);  //注册中断0调用函数blinkA
  time = millis(); //时间初值
  time1 = millis(); //时间初值
}
//主体程序
void loop()
{
  if(flag==0){
    time1 = millis();
    flag=1;  
  }  else  {
    if ((millis() - time1)>=1000) {
      Speed=count;
      count=0;
      flag=0;
    }
  }
  while (num != Speed)
  {
  num = Speed;
  lcd.setCursor(0,0);        //设置液晶开始显示的指针位置
  lcd.print("Speed Test!");  
  lcd.setCursor(0,1);        //设置液晶开始显示的指针位置
  lcd.print("Speed= ");  
  lcd.print(Speed/4);        //霍尔电机有四块磁石.
  lcd.print(" r/sec");  
  delay(100);
  }
}

//中断0调用函数
void blinkA()
{
  if ((millis() - time) > 15) //防抖动处理
    count ++;
  time = millis();
}

效果视频:


回复

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 07:22 , Processed in 0.044072 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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