■ 简介


在很多研究中,需要对传感器、被测对象进行移动。比如在 室外声音信标可行性分析 对于声音信源移动,使用了单轨滑动杆移动扬声器。

现在手边有一个蜗杆单轨,使用了Rui Xin 57BYG250B 步进电机进行驱动蜗杆,带动滑台做一维直线运动。关于 57BYG250B步进电机+SR4驱动器 可以参见相关的博文和技术资料。

▲ 丝杠单轴平台

在滑轨上还有两个 SN04-N感应无触点行程开关 。为了能够使用实验室中的统一步进电机的接口来驱动,需要制作一个统一的接口,来进行转换。

▲ 驱动步进电机

相关的步进驱动平台包括:

  • 单轴步进驱动模块SH-20403
  • DRV8825步进电机驱动控制模块以及双轴平台
  • 基于ESP8266WiFi步进电机控制
  • SH-20403AXIS12双轴蓝牙移动框架
  • 基于ESP8266 WiFi控制的步进升降机械平台

01统一接口定义


驱动器输出使用DB9-FEMAIL接口;负载接头使用DB9-MAIL接头。

在DB9中定义了步进电机两项接线(MA+,MA-,MB+,MB-)以及两端极限位置传感器。

▲ 统一接口功能定义

上面的定义参考了 基于ESP8266WiFi步进电机控制 中的改造信息。

02接口板设计


由于SN04-N感应无触点行程开关需要电源(DC 5V ~ 24V)工作,在转接板上需要增加外部输入电压。

1.电路设计

▲ 接口的SCH

▲ 快速制版后的实验PCB

03测试


1.基本功能

使用基于ESP8266WiFi步进电机控制 的驱动器来驱动滑轨移动。

  • rccw(n):远离步进电机
  • rcccw(n):接近步进电机

利用单轴步进驱动模块SH-20403也可以驱动滑轨运动。并且左右限位正常。

  • lscm8mb(n) :接近步进电机
  • lscm8mf(n) :远离步进电机

lscm8f(100000) : 运动25秒左右。

测量距离:起始:0.416米。ypds lscm8f(100000)之后,距离为:0.663米。因此,使用lscm8驱动是步长常数为:Lstep=0.663−0.416105=2.47×10−6mL_{step} = {{0.663 - 0.416} \over {10^5 }} = 2.47 \times 10^{ - 6} mLstep​=1050.663−0.416​=2.47×10−6m

根据后面测量滑轨的总行程Lmax=0.891米,因此,使用lscm驱动最大的步进数量为:
Nmax⁡=Lmax⁡Lstep=0.8912.47×10−6=360729N_{\max } = {{L_{\max } } \over {L_{step} }} = {{0.891} \over {2.47 \times 10^{ - 6} }} = 360729Nmax​=Lstep​Lmax​​=2.47×10−60.891​=360729

运行时间约:90秒。

2.性能

(1) 运动时间

使用基于ESP8266WiFi步进电机控制驱动滑轨运动,设置驱动步进电机细分为1,也就是运动速度最快。

运行时间:大约三十秒。

(2) 运行距离

使用激光测距测量固定在滑轨上的反光板的距离。

  • 最靠近步进电机时距离: 0.162米
  • 行进1000步之后,距离为:0.662米
  • 行进至最远端:1.053米

运行参数:
(1) Lstep=L/N=50微米: L:行进距离,N:运动步长。
Lstep=0.510000=0.05mmL_{step} = {{0.5} \over {10000}} = 0.05mmLstep​=100000.5​=0.05mm
(2) 行进总长度: Lmax=1.053-0.162=0.891米
(3) 行进步数最大值:
Nmax⁡=Lmax⁡Lstep=0.8910.05×10−3=17820N_{\max } = {{L_{\max } } \over {L_{step} }} = {{0.891} \over {0.05 \times 10^{ - 3} }} = 17820Nmax​=Lstep​Lmax​​=0.05×10−30.891​=17820

※ 结论


本文描述了对于蜗杆滑轨的驱动制作统一接口的方式。并通过两款驱动进行了测试。获得可滑轨运动总长度,两款驱动器的步长常数,运动速度等参数。为今后应用提供数据基础。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LSCM8.PY                     -- by Dr. ZhuoQing 2020-01-14
#
# Note:
#============================================================from head import *
import serial#------------------------------------------------------------
cmdportdef = 'COM2'
cmdport = serial.Serial(cmdportdef, baudrate=115200, timeout=0.1)
cmdport.setDTR(False)
#cmdport.setRTS(False)printf("Open %s for LSCM8."%cmdportdef)#------------------------------------------------------------
COMMAND_FRAME_HEAD      = 0x56
COMMAND_FRAME_TAIL      = 0x65COMMAND_STATUS_WAIT      = 0x0
COMMAND_STATUS_COMMAND          = 0x1
COMMAND_STATUS_LENGTH           = 0x2
COMMAND_STATUS_DATA     = 0x3
COMMAND_STATUS_CHECK            = 0x4
COMMAND_STATUS_TAIL     = 0x5#------------------------------------------------------------
COMMAND_HELLO_ECHO      = 0x20
COMMAND_BEEP_ON         = 0x21
COMMAND_BEEP_OFF        = 0x22
COMMAND_DIR_ON          = 0x23
COMMAND_DIR_OFF         = 0x24
COMMAND_REL_ON          = 0x25
COMMAND_REL_OFF         = 0x26
COMMAND_PUL_SET         = 0x27
COMMAND_PUL_STOP        = 0x28
COMMAND_GOTO_HEAD       = 0x29
COMMAND_GOTO_TAIL       = 0x2A
COMMAND_GET_STATE       = 0x2B
COMMAND_GET_PULSEOUT            = 0x2C
COMMAND_CLEAR_PULSEOUT          = 0x2D#------------------------------------------------------------
def lscm8cmd(cmd, cmddata):checksum = cmd + len(cmddata)for cd in cmddata:checksum = checksum + cdchecksum = (checksum & 0xff) ^ 0xffcmdstr = b'' + byte(COMMAND_FRAME_HEAD) + byte(cmd) + byte(len(cmddata)) +\cmddata + byte(checksum) + byte(COMMAND_FRAME_TAIL)#    printf(cmdstr)cmdport.write(cmdstr)def lscm8hello():lscm8cmd(COMMAND_HELLO_ECHO, b'')def lscm8beepon():lscm8cmd(COMMAND_BEEP_ON, b'')def lscm8beepoff():lscm8cmd(COMMAND_BEEP_OFF, b'')#------------------------------------------------------------
def lscm8relon(bits):cmd = bits.to_bytes(1, byteorder='big')lscm8cmd(COMMAND_REL_ON, cmd)#------------------------------------------------------------
# bits:0:relay0, 1:relay1
def lscm8reloff(bits):cmd = bits.to_bytes(1, byteorder='big')lscm8cmd(COMMAND_REL_OFF, cmd)def lscm8diron(bits):cmd = bits.to_bytes(1, byteorder='big')lscm8cmd(COMMAND_DIR_ON, cmd)def lscm8diroff(bits):cmd = bits.to_bytes(1, byteorder='big')lscm8cmd(COMMAND_DIR_OFF, cmd)#------------------------------------------------------------
def lscm8setpulse(bits, pulse):cmd = bits.to_bytes(1, byteorder='big') +\pulse.to_bytes(4, byteorder='big')lscm8cmd(COMMAND_PUL_SET, cmd)def lscm8stoppulse():lscm8cmd(COMMAND_PUL_STOP, b'')def lscm8gotohead():lscm8cmd(COMMAND_GOTO_HEAD, b'')def lscm8gototail():lscm8cmd(COMMAND_GOTO_TAIL, b'')def lscm8clearpulseout():lscm8cmd(COMMAND_CLEAR_PULSEOUT, b'')def lscm8mf(steps):lscm8diron(3)lscm8reloff(3)lscm8setpulse(3, steps)def lscm8mb(steps):lscm8diroff(3)lscm8reloff(3)lscm8setpulse(3, steps)#------------------------------------------------------------
if __name__ == "__main__":
#    time.sleep(.5)#    lscm8diron(3)
#    lscm8reloff(3)
#    lscm8gotohead()
#   lscm8gototail()
#    lscm8setpulse(3, 1000)
#    lscm8diron(3)lscm8mf(100000)#    lscm8mf(1900000)tspbeep(1500, 100)printf('End of the command')#------------------------------------------------------------
#        END OF FILE : LSCM8.PY
#============================================================

■ 相关文献链接:

  • 室外声音信标可行性分析
  • 57BYG250B
  • 57BYG250B步进电机+SR4驱动器
  • 滑丝杠上的无触点感应行程开关 SN04-N
  • 单轴步进驱动模块SH-20403
  • DRV8825步进电机驱动控制模块以及双轴平台
  • 基于ESP8266WiFi步进电机控制
  • SH-20403AXIS12双轴蓝牙移动框架
  • 基于ESP8266 WiFi控制的步进升降机械平台

蜗杆单轨滑轨的驱动的统一接口相关推荐

  1. 多渠道整合开始NGBOSS第一步——TmaxSoft谈运营商统一接口平台建设和管理

    多渠道整合开始NGBOSS第一步--张东 NGBOSS是中国移动提出的新一代业务运营支撑网的总称,它包含总部和省公司两级的系统,并包括现有的BOSS.客服.渠道管理.经营分析.BOSS网管系统.DSM ...

  2. Iterator:访问数据集合的统一接口

    导语 遍历器Iterator是ES6为访问数据集合提供的统一接口.任何内部部署了遍历器接口的数据集合,对于用户来说,都可以使用相同方式获取到相应的数据结构.如果使用的是最新版Chrome浏览器,那么你 ...

  3. 《RESTful Web Services》第一章 使用统一接口

    序言 HTTP是一种应用层协议.SOAP和一些Ajax Web框架都将HTTP作为一种传输信息的协议,难以充分利用HTTP层的基础设施. 1.2 如何保持交互的可见性 可见性是HTTP的一个核心特征. ...

  4. ur机械臂 控制器_OnRobot末端执行器和统一接口已通过UR +计划认证

    近日,OnRobot 宣布其One System Solution末端执行器和统一接口现已通过UR +计划认证,UR +计划对夹具等配件进行测试和认证,以便与Universal Robots A / ...

  5. 利用派生类实现统一接口解决三种基础排序问题

    编程题: 1.算法:派生类解决三个排序(冒泡,插入,选择) 2.一个基类:整形数组,数据随机产生(不能重复) 3.调用的时候给出统一的sort接口 三个派生类解决不同算法 每一个结果要输出到文件里 每 ...

  6. 设计模式系列:搞懂组合模式,单对象与组合对象对外统一接口

    组合模式的定义:又叫作整体-部分(Part-Whole)模式,通过将单个对象(叶节点)和组合对象用相同的接口表示,使客户端对单个对象和组合对象的访问具有一致性.它是一种将对象组合成树状的层次结构的模式 ...

  7. 学习笔记(一)-古月ROS机器视觉开发入门 -ROS摄像头驱动及数据接口

    ROS摄像头驱动及数据接口 二维摄像头 我们平常用的最多的就是二维摄像头,大部分笔记本上都会自带一个2d的摄像头,这种摄像头的接口一般是USB接口,市面上看到的罗技摄像头.RGB摄像头等,它们的底层协 ...

  8. Pix2Seq:谷歌大脑提出 CV 任务统一接口!

    文 | 青豆 最近一个大趋势就是将各类任务统一在一个大一统框架下.大规模预训练语言模型已成功打通各类文本任务,使得不同的NLP任务上,都可以用这种统一的sequence生成框架作为基础模型,只需要通过 ...

  9. 27. OP-TEE驱动篇----libteec接口在驱动中的实现

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

最新文章

  1. Docker Context基本原理
  2. 集团年终总结的几点体会
  3. kettle内存溢出
  4. Integer.valueOf(String) 方法之惑
  5. parameter与define 区别
  6. bubble气泡特效
  7. LL-verilog-HDLBitSim/circuit10解答和过程详解
  8. “睡服”面试官系列第十七篇之Reflect(建议收藏学习)
  9. 同步监视器之同步代码块、同步方法
  10. 动易Ajax登陆调用
  11. 海康SDK-javademo实现报错问题解决
  12. Ubuntu搜狗输入法, 输入中文时只显示拼音,不显示中文选择框
  13. 微信公众号支付开发全过程
  14. VS2017 CUDA编程学习10:纹理内存
  15. Powershell 创建NetWork Location(盘符快捷方式)
  16. WAP1.x协议栈浅析
  17. 如何用计算机制作pop海报,ai怎么制作pop海报字体?ai简单快速制作pop字体教程
  18. defined 用法
  19. 笔记本如何解除锁定计算机,笔记本键盘锁定解锁方法教程
  20. 前端PDF文件转图片方法(你值得收藏)

热门文章

  1. 金立M2017续航出色不仅是因为电池大,还有超强快充
  2. 决策树算法实现(train+test,matlab) 转
  3. Spiral Matrix
  4. javaweb学习总结(四十)——编写自己的JDBC框架
  5. quidway secpath 下的安全配置
  6. 联想重启乐檬?5G时代手机双品牌战略带来变局
  7. 14. 变更管理(Change Management)
  8. Android 优秀UI控件 ---- FlowingDrawer
  9. android中完全退出当前应用程序的四种方法
  10. Linux系统开机过程详细分析