背景

42步进电机,基本的一步是1.8度,加上程序中的细分之后就更精准了,比如用64细分,一步就已经是1.8°/64=0.028125°.

而硬件上用的不锈钢码盘是25齿的,如下图,遮挡为0,不遮挡为1,一圈50个高低电平状态。如果用双光耦的话一圈有100个高低电平,分辨率也就是360°/100=3.6°,这个精度在步进电机来说没啥意义。

但是,如果因为一些外力干扰,步进电机丢步了,光耦就可以在此时发挥作用,将情况反馈给步进电机。

例如:步进电机到达目标位置后,被人为旋转过,此时的位置与程序中标定的位置不一致了。
例如:安装在设备上,步进电机被机械限位,无法继续运行了。

单个光耦的硬件电路

光耦的内部,左边是一个发光二极管,右边一个光敏三极管。
当发光二极管的光照到右边的时候,就会给右边光敏三极管的基极提供电流,从而三极管导通;否则三极管截止。

单个光耦的硬件电路如下,导通为0,不导通为1,左边的电阻用于发光二极管的导通,右边的电阻用于上拉。

1、光被挡上,在仿真中我把发光二极管的回路断开,此时三极管截止,电压表就是接单片机IO的,检测为5V,即为高电平。


2、发光二极管导通时,右边光敏三极管也导通,也就是集电极和发射极就导通了,电压表接的是集电极,电压应该是CE的饱和压降零点几伏,所以为低电平,电压电流如下图所示。

双光耦的电路

就是上面的原理,把两个槽型光耦串起来,接单片机两个IO口。

程序原理

两个IO口,能记下四种状态,如下四张图为顺时针方向旋转时我拍的,一看明了,挡住为1,不挡为0.
两个IO口记为S1、S2,单片机读取到的值依次为:00,01,11,10.

代码

解释都写在注释里了,对着代码看容易理解

//Y轴光耦检测,顺时针S1 S2 —— 00  10  11  01
void Y_OPTO_Check()
{u8 input = 0;         //存储光耦状态的值static u8 opto_last = 0;u8 a,b;if(Y_OPTO_S2)         //S2input|=(1<<0);   if(Y_OPTO_S1)         //S1input|=(1<<1);    //input == 0000 0 0 S1 S2a = input^opto_last;           if(a!=0){          //与上一次状态不同,位置变化,光耦更新b = input^(input>>1);if(a&0x02){             //S1与上次不同,顺时针可能从00到10,11到01,逆时针可能从10到00,01到11          if(b&0x01) Y_opto+=1; //S1与S2不同,定位在顺时针,光耦值+       else       Y_opto-=1; //S1与S2相同,定位在逆时针,光耦值-}else if(a&0x01){       //S2与上次不同,顺时针可能从10到11,01到00,逆时针可能从11到10,00到01if(b&0x01) Y_opto-=1; //S1与S2不同,定位在逆时针,光耦值-        else       Y_opto+=1; //S1与S2相同,定位在顺时针,光耦值+  }          opto_last = input;}
}

双槽型光耦-可测步进电机正反转、计数防丢步相关推荐

  1. 控制步进电机正反转的实际应用程序

    /*这是一个控制步进电机正反转的实际应用程序*/ /*选用的是三相步进电机驱动器,p14口线用做步进电机的脉冲控制*/ /*p13口线用做步进电机的方向控制.p15,p16,p17是光耦开关量输入*/ ...

  2. proe输入数字时成双出现_Proe/Creo步进电机正反转仿真详解

    本教程对步进电机正反转进行仿真,设顺时针为正转,逆时针为反转,步进电机驱动转盘,转盘正转一圈,停止,反转半圈,停止,反转半圈. 1. 新建组件,添加电机57HS22-a,在默认位置装配,如下图: 2. ...

  3. 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速-萌新入门

    ** 按键控制c51单片机驱动unl2003控制步进电机正反转停止及程序调速 ** 分享一个萌新入门小工程 一.原件连接: 第一种直接用51开发板 第二种用最小单元加unl2003驱动 二.开发板电路 ...

  4. C语言步进电机自动加减速,步进电机正反转和加速减速c源程序

    这是一个群里朋友发给我的步进电机实现正转反转和加速减速的单片机c语言源程序,这里给大家共享下,有需要的朋友直接复制到keil里编译就可以了,程序已测试成功. /******************** ...

  5. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 SETP时序 对应程序: 细分说明 程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+DRV8825模块 1. ...

  6. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)

    89c52单片机控制两个步进电机正反转加减速(程序+仿真) 先上图: 源代码: /*********************************************************** ...

  7. K_A07_001 基于 STM32等单片机驱动A4988模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 SETP时序 对应程序: 细分说明 程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+A4988模块 1.2. ...

  8. K_A07_005 基于 STM32等单片机驱动 DRV8833 模块按键控制步进电机正反转

    目录 一.资源说明 二.基本参数 1.参数 2.引脚说明 三.驱动说明 步进电机驱动时序 对应程序: 四.部分代码说明 1.接线说明 1.1.STC89C52RC+DRV8833模块 1.2.STM3 ...

  9. 单片机控制步进电机正反转

    单片机控制步进电机正反转 硬件连接: 程序: #include <reg52.h> #define uint unsigned int #define uchar unsigned cha ...

最新文章

  1. 设计模式之单例设计模式(懒汉式)
  2. 乔布斯1秒变“白痴”,马化腾5秒,张小龙10秒,你呢?
  3. 系统测试相关知识笔记
  4. 12种NumpyPandas高效技巧
  5. Flowable 数据库表结构 ACT_HI_IDENTITYLINK
  6. 在Github中创建项目并与本地关联
  7. PHP直接输出一张图片
  8. Steve Kemp的XSS介绍
  9. 44. Wildcard Matching (String; DP, Back-Track)
  10. UA MATH563 概率论的数学基础 鞅论初步3 条件期望的性质
  11. CSS边框图片border-image属性
  12. centos异常断电重启后,无法进入系统
  13. Ubuntu设置自动登录
  14. 大学计算机课英语心得体会,【大学计算机课程总结12篇】_大学计算机课程总结范文大全_2021年大学计算机课程总结_东城教研...
  15. python生成唯一id,分布式唯一id,雪花算法
  16. HHUOJ 1012 欧洲杯(水题)
  17. Android应用系列:手把手教你做一个小米通讯录(附图附源码)
  18. android 混淆后的机制,Android 代码混淆机制
  19. 强制“ git push”覆盖远程文件
  20. C++ 中的万能开头

热门文章

  1. 计算机发展历史英文ppt,计算机发展史(英语版)11.ppt
  2. 放弃android系列结局得出结论
  3. 贪心算法解决马的遍历(带蹩马腿)
  4. 聊聊自己的高效学习法
  5. vue项目中的内存泄漏
  6. M1芯片Mac安装达芬奇17闪退安装不了,怎么办?达芬奇17直装优化版支持big sur/M1芯片处理器 详细的安装教程+中英文设置方法
  7. 世界美好与你环环相扣_吉他谱_C调简单版
  8. 我拍,我再拍,我拍拍拍
  9. Chinaren校友录
  10. 2023 号码归属地查询API接口PHP源码