xhb10 发表于 2015-9-9 21:33:57

光电传感器+电机正反转测试程序

看网上大家都在求光电传感器计数的例子,小子不才,这里献丑了,图片发不起,只能发附件了








光电传感器+电机测试程序,计数满300,电机改变方向2015/9/9测试通过

int inAPin = 7;   //定义7脚为传感器输入脚
int aPreStatus;   //状态保持变量
int counta = 0;   //计数器变量

void setup() {
pinMode(7, INPUT);       //设定7脚为输入形态
pinMode(8, OUTPUT);   //设定8脚为输出形态
pinMode(9, OUTPUT);   //设定9脚为输出形态
digitalWrite(8, LOW);   //设定8脚初始输出状态为低电平
digitalWrite(9, LOW);   //设定9脚初始输出状态为低电平

aPreStatus = digitalRead(inAPin);
Serial.begin(9600);

}
void loop() {
if (digitalRead(inAPin) == 0) //传感器计数
{
    if (aPreStatus == 1)
    {
      counta++;
      Serial.println(counta);
    }
    aPreStatus = 0;
}
else
    aPreStatus = 1;

digitalWrite(9, HIGH);   //电机驱动PWM脉冲,更改数字200可改变电机转速
delayMicroseconds(200);
digitalWrite(9, LOW);
delayMicroseconds(200);

if (counta == 300) //如果计数器=300,8脚改变当前状态,如果高则变为低,如果低则变为高,然后计数器清零,并延时半秒
{
if (digitalRead(8) == LOW)
{
    digitalWrite(8, HIGH);
}
else
{
    digitalWrite(8, LOW);
}
counta = 0;
delay(500);
}
}

xhb10 发表于 2015-9-9 22:06:21

我这里采用的是200计数的光栅片,采用普通U形传感器,用LM393整形输出计数脉冲,考虑两者的精度,电机速度越低计数误差越大,要求速度的建议采用150以下的光栅

164335413 发表于 2015-9-10 09:19:02

实际应用的话可以加上中断系统,这样可以保证计数精度500线照样跑。

xhb10 发表于 2015-9-11 08:19:56

楼上的老师,顶礼膜拜,愿闻其详,谢谢

ignore 发表于 2016-12-13 10:21:03

这是通过控制8脚的高低电平来实现正反转,LZ试过通过相位实现正反转?

xwp 发表于 2017-8-2 16:44:38

光电传感器和小车搭配能实现什么功能呢?能请楼主介绍一下吗?:):):)

xhb10 发表于 2017-10-7 22:32:11

xwp 发表于 2017-8-2 16:44
光电传感器和小车搭配能实现什么功能呢?能请楼主介绍一下吗?

实现步进电机精确定位,就像打印机的走纸电机不但使用了精密的步进电机还同时使用了十分密集的光栅计数,所以日本人的喷墨打印机打印精度能够达到2400dpi,甚至更高。我这里只是想学习一下光栅定位的工作原理,真正的应用至少得stm32这样的cpu芯片能基本搞定,arduino本来就是为玩具和diy而开发的。
页: [1]
查看完整版本: 光电传感器+电机正反转测试程序