前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >传感器以及信号处理(一)——编码器

传感器以及信号处理(一)——编码器

作者头像
联远智维
发布2022-01-20 14:16:50
7420
发布2022-01-20 14:16:50
举报
文章被收录于专栏:联远智维联远智维

传感器

通俗来讲,传感技术类似于为机器装上眼睛、耳朵以及鼻子等,使得机器具有感知外界环境变化的能力,进而辅助控制系统做出最优的决策,使之更好与人共融。闲暇时光,拟对传感相关的知识进行归纳总结,主要包括有:1、编码器;2、压力传感器;3、陀螺仪;4、激光雷达;5、温度传感器等;

首先,本部分通过简单的实验,了解编码器的信号输出类型,真正弄明白编码器在实际应用过程中的关键点,为后续多源信息融合提供前期基础,

附录:编码器简单调试

编码器在工业控制和自动化领域中具有广泛的应用,能够把角度、位置等物理量转换成电信号加以输出,本部分对编码器进行调试,并对得到的波形进行初步的分析;编码器实验过程中发现采样频率比较小时候,得到的波形会明显失真;

所用的设备主要包括:1、RIGOL DP831A稳压电源;2、RIGOL DS1022C示波器;3、编码器:增量式光电编码器,脉冲100,输入电压为5V;

稳压电源

编码器外观形貌(编码器位数与线数的区别,例如:编码器为12位,相当于4096线,每圈能够采集4096个数据)

2、编码器旋转方向的判断:A前导于B为顺时针旋转,B前导于A为顺时针旋转;

编码器信号输出:黄色为编码器A项输出信号,蓝色为B项输出信号,测试中编码器为逆时针旋转,从上图可知,每个脉冲的周期约为30ms,考虑到编码器的脉冲为100,因此编码器的转速n=60/TP=60/(30*0.001*100)=20 r/min,与输入转速一致,具有较好的准确性,

3、编码器测试电机转速大小:

方法一:周期法(T法),是测量两个脉冲之间的时间,进而转换成转速 RPM,适合测量低速运转的电机( f 为基准时钟频率,M2 为时钟脉冲数,P 为编码器线数);其中,转速n的单位为r/min;时钟脉冲数M2 越大,误差越小;

方法二:测频法(M法),是测量一定时间内的脉冲数,然后转换成转速 RPM适合测试高速运转的电机。(M1 为测量脉冲数,P 为编码器线数,T 为测量时间),测试脉冲数M1 越大,相对误差越小,因此,实际测试中提高测试时间,减小转速的测试误差。

单片机、旋转方向判据程序:

代码语言:javascript
复制
#include <reg52.h>  
sbit     bA_Key01_IoStatus    = P1^0; 
sbit     bB_Key02_IoStatus    = P1^1; 
/*************************************************************
1us延时子函数
**************************************************************/
void Delay1us(uint32 dly)
{
        uint32 i;
        for(; dly>0; dly--)
                for(i=20; --i;)  ;
}
/*
扫描编码器子函数在编码器引脚A为低电平期间:
编码器引脚B从0到1为正转,编码器引脚B从1到0为反转。
*/
void PWM_key(void)
{
       uint8    Curr_encoder_b;  //定义一个变量来储存当前B信号 
       uint8    Last_encoder_b;  //定义一个变量来储存上次B脚信号  
      if( bA_Key01_IoStatus && bB_Key02_IoStatus)     //编码器无转动退出    
     {           
        return;    
     }  
 //-----------------------------------
         if(!bB_Key02_IoStatus) 
     { 
        Last_encoder_b = bA_Key01_IoStatus;     //记录B信号  
        Delay1us(1000);                                    //延时约 1ms     
        Curr_encoder_b = bA_Key01_IoStatus;     //记录等待期间的B信号(指当前B信号)   
        if( (Last_encoder_b == 0)&&(Curr_encoder_b== 1) ) //B从0到1为正转  
        {          
        }

        else if( (Last_encoder_b == 1)&&(Curr_encoder_b == 0) ) //B从1到0为反转
        {         
        } 
     }  
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 轻量化结构分析与设计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档