找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新人跪求光电码盘测速原理!

[复制链接]
跳转到指定楼层
楼主
ID:101568 发表于 2016-1-2 23:13 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网上写的看不懂啊!小弟qq710563397。希望能有大神相助,小弟感激不尽!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:101568 发表于 2016-1-2 23:14 来自手机 | 只看该作者
希望大神能提供个视频!小弟感激不尽!
回复

使用道具 举报

板凳
ID:79544 发表于 2016-1-3 14:30 | 只看该作者
mzy 发表于 2016-1-2 23:14
希望大神能提供个视频!小弟感激不尽!

你用的是什么码盘,假如是小车的码盘多数用红外对管检测触发信号的个数,有用外部中断的有用计数模式的。
回复

使用道具 举报

地板
ID:101568 发表于 2016-3-13 16:37 | 只看该作者
腾飞的龙 发表于 2016-1-3 14:30
你用的是什么码盘,假如是小车的码盘多数用红外对管检测触发信号的个数,有用外部中断的有用计数模式的。

回大神  我用的就是您说的红外对管的 20格的码盘,自己编了程序 大神如果有时间的话希望帮我小弟看看,附程序:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit in1 =        P1^2; // 高电平1 后退(反转)
sbit in2 =  P1^3; // 高电平1 前进(正转)
sbit in3 =        P1^6; // 高电平1 前进(正转)
sbit in4 =  P1^7; // 高电平1 后退(反转)
sbit en1 =        P1^4;   // 高电平使能
sbit en2 =  P1^5;        // 高电平使能

sbit cs=P2^4;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P2^5;

uchar pwm=0,pwm1=0,loop=0,num=0;
uint mc=0,num1=0;
char zhuan[10];

//小车前进函数
void run(void)
{
         in1=0;                //左电机
         in2=1;
         in3=1;                //右电机
         in4=0;
}

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)
{
        rs=0;
        rw=0;
        en=0;
        P0=com;
        delay(5);
        en=1;
        delay(5);
        en=0;
        delay(5);
}

void write_data(uchar date)
{
        rs=1;
        rw=0;
        en=0;
        P0=date;
        delay(5);
        en=1;
        delay(5);
        en=0;
        delay(5);
}


void init()
{
        TMOD=0x11;
        EA=1;
        ET0=1;
        TR0=1;
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        ET1=1;
        TR1=1;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
}

void lcd_init()
{
        write_com(0x38);
        write_com(0x0f);
        write_com(0x06);
        write_com(0x01);
}



void conut()
{
        if(num1==20)
        {
                num1=0;
                loop=mc;
                mc=0;
                loop=loop/20;
                write_com(0x80);
                write_data(0x30+zhuan[loop]);
        }
}

void main()
{
        init();
        lcd_init();
        run();
        while(1)
        {
          if(cs==0)
                  {
                        mc++;
                }
                conut();
        }
}

void timer0() interrupt 1
{
        TR0=0;
        TH0=(65536-500)/256;
        TL0=(65536-500)%256;
        num++;
        if(num>32)
        num=0;
        if(num<=pwm)
        {
                en1=1;
        }
        else
        {
                en1=0;
        }
        if(num<=pwm1)
        {
                en2=1;
        }
        else
        {
                en2=0;
        }
        TR1=1;
}

void timer1() interrupt 3
{
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        num1++;
}       
回复

使用道具 举报

5#
ID:72781 发表于 2016-3-13 23:10 | 只看该作者
编码器.zip (5.39 MB, 下载次数: 102)

一个编码器原理介绍,我做的PPT,因为PPT可以放动态图。看了应该可以明白原理是啥,程序没看,看的头晕的。能用就是好程序
回复

使用道具 举报

6#
ID:97867 发表于 2016-3-14 08:13 | 只看该作者
简单点说  就是一个红外发送管 和一个接收管  有点类似光耦  当光没被编码遮挡的时候   接收管接受到光  假设这个时候为低电频   那么当光被遮挡的时候为高电频  假设你是20个光栅  那么 转一圈是不是相当与 你检查到了20个脉冲   20个脉冲360°  那么检查到了1个脉冲就是18°   要测速 你只需要 定时  一秒钟 然后计数你收到的脉冲  不就晓得你的转速是多少转每秒了吗  然后在换算下单位 多少转每分
就出来了
回复

使用道具 举报

7#
ID:101568 发表于 2016-3-14 10:25 | 只看该作者
多谢各位,小弟再研究研究! 多谢!
回复

使用道具 举报

8#
ID:104472 发表于 2016-3-14 13:53 | 只看该作者
在网上找点资料看看,主要还是要自己多动手
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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