使用Beagelebone读取编码Z相信号

使⽤Beagelebone读取编码Z相信号
编码器Z相信号,⼜称零位信号,编码器轴每旋转⼀圈,A相和B相都发出相同的脉冲个数,但是A相和B相之间 存在⼀个90°(电⽓⾓的⼀周期为360°)的电⽓⾓相位差,可以根据这个相位 差来判断编码器旋转的⽅向是正转还是反转,正转时,A相超前B相90°先进⾏ 相位输出,反转时,B相超前A相90°先进⾏相位输出。编码器 每旋转⼀圈,Z相只在⼀个固定的位置发⼀个脉冲,所以可以作为复位相或零位 相来使⽤。
重型工程洗轮机当需要使⽤编码器Z相信号做精度控制时,如需要在特定位置停⽌,仅仅使⽤限位开关,精度是⽐较差的,这时候就需要限位开关配合Z相零点来精确控制了。
1.⾸先在机械安装的时候把 Z 相信号的 零点位置(编码器 每旋转⼀圈,Z相只在⼀个固定的位置发⼀个脉冲,该位置就是零点位置)对准了。
2.然后你把限位开关安装到零点位置,当检测到限位开关从OFF->ON 跳变时,私服电机需要减速慢⾏(⾮常慢的状态),直到再次检测到限位开关从ON->OFF 跳变的过程中,⼀直循环判断是否接收到编码器Z相脉冲信号 ,⼀旦检测到Z 相信号,则⽴即停机。
也就是说:慢速到⼀个近点⾏程开关。⾏程开关在on的过程包含了⼀个Z相的脉冲。这个条件只能由安装保证。⾏程开关的on过程开放允许⼀个输⼊中断。当Z脉冲发⽣的时候,连接⼀个输⼊中断,使得电机⽴即停⽌。
另外,⽤Z相脉冲原点,并⾮是在Z相脉冲出现时将机器⽴即停下来并且以此为参考点,⽽是在Z相脉冲到来时将计数器清零。如果机器停下来的时候冲过头,⾸先零位的精度是不会收到影响的,因为在零位脉冲到来时将A,B相position清零并开始重新计数,过冲的距离可以通过A,B相的position获取到。
突变体
东方人体以下程序没有使⽤光电开关,仅仅使⽤了编码器的Z相信号,当系统启动的时候,⾸先让电机以⽐较快的速度运动,当检测到Z相脉冲的时候,⽴刻停⽌电机,这时候由于电机惯性过冲,在让电机以⾮常慢的速度反相运动并检测Z相脉冲,⼀旦检测到上升沿,再次⽴刻停机即可。
#include<iostream>
#include"GPIO.h"
#include"sys/poll.h"
#include"PWM.h"
using namespace exploringBB;
using namespace std;
int main()
{
if(getuid()!=0)
{
cout << "必须使⽤root来执⾏程序" << endl;
return -1;
}
GPIO inGPIO_Z(49);
inGPIO_Z.setDirection(INPUT);    //设置GPIO为输⼊
inGPIO_Z.setEdgeType(RISING);    //设置检测上升沿
cout << "即将启动电机,寻零点" << endl;
/
*
PWM pwm("pwm_test_P9_16.13");
pwm.setPeriod(500000);
pwm.setDutyCycle(75.0f);      // 设置周期循环的百分⽐
pwm.setPolarity(PWM::ACTIVE_LOW);  //正转
pwm.run();
*/
cout << "电机以较快的速度运动寻零点" << endl;
inGPIO_Z.waitForEdge();        // 轮询检测上升沿
/*
PWM pwm("pwm_test_P9_16.13");
pwm.setPeriod(500000);
pwm.setDutyCycle(100.0f);      // 电机停机
pwm.setPolarity(PWM::ACTIVE_LOW);
智能操作票pwm.run();
*/
cout << "电机以⾮常慢的速度反向运动,寻Z相零点精确位置" << endl;    /*ktv点歌台
PWM pwm("pwm_test_P9_16.13");
pwm.setPeriod(500000);
pwm.setDutyCycle(90.0f);      // 电机慢速
pwm.setPolarity(PWM::ACTIVE_HIGH);  //反转
pwm.run();
*/
inGPIO_Z.waitForEdge();        // 继续检测上升沿,判断是否到达零点    /*
PWM pwm("pwm_test_P9_16.13");
pwm.setPeriod(500000);
pwm.setDutyCycle(100.0f);      // 电机停⽌
温泉浴片pwm.setPolarity(PWM::ACTIVE_HIGH);
pwm.run();
*/
cout << "到零点了 " << endl;
cout << "电机停⽌" << endl;
return 0;
}
配合光电开关的话,将光电开关接上板⼦即可,接线如下:
棕⾊:电源正极(+24V,或+5V);
蓝⾊:电源负极(0V或GND);
⿊⾊:开关信号输出(接PLC或其它设备的输⼊端);
⽩⾊(有的是灰⾊或其它的浅⾊),这个的接法多种多样,
最好是参照说明书接线,归纳起来⼤概有如下三种类型:
1 ⽩⾊为公共端,开关动作时(感应到有物体)需要输出低电平时⽩⾊与蓝⾊短接,需要输出⾼电平时⽩⾊与棕⾊短接.(此种⽤法较多).
2 ⽩⾊为反相输出端,即⿊⾊是常开(NO)输出的话,⽩⾊为常闭输出(NC),
此时只需接其中之⼀,另⼀线悬空..(此种⽤法较少).
3 ⽩⾊为反相控制端,⽩⾊为⾼电平时⿊⾊为常开(NO)输出,
⽩⾊为低电平时⿊⾊为常闭输出(NC)...(此种⽤法很少).

本文发布于:2024-09-20 22:20:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/317397.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:零点   脉冲   开关   检测   编码器   电机   需要   位置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议