外设驱动(编码开关)
来源:互联网 发布:d5600和d7100 知乎 编辑:程序博客网 时间:2024/05/02 09:15
<img src="file:///c:/users/user18/appdata/roaming/360se6/User Data/temp/3097494864862.jpg" alt="" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" />
(1)1、3脚要外接上拉电阻,一般10K就足矣;
(2)2脚一般接地就行;
(3)4、5脚是下按键的开关接线(按下时,4脚为低电平);
废话不说先上两张测试图:
下图是编码开关正转的情况 (红线跟着蓝线变)
下图是编码开关反转的情况 (蓝线跟着红线变)
我们假设 A为蓝线 B为红线
这样就清楚啦 其实编码开关的编码原理也不难,看A,B信号那个跟着那个变就可以判断转的方向。
但是如何检测了?
(正转为列:)
根据测试可以知道 在编码开关刚刚转时蓝线出现跳变沿 当转动一格完成 红线也出现跳变沿。红线和蓝线跳变的时间差取决于你转动的速度,转的越快,时间差越短。
对于速度比较快的单片机而言 (检测周期小于2MS 假设人转动最大的速度是1/MS)我们可以当BMA为低电平时,BMB的跳变沿是怎样的——上升沿表示正转,下降沿表示反转。反之当BMA为高电平时,BMB的跳变沿是怎样的——下升沿表示正转,上降沿表示反转。
bimdirR = 0;bimdirL = 0;if(bm1 == 1){if(bimold == 0) //状态改变{bimold = 1;if(BM2 == 1){Set1 bimdirR}else{Set1 bimdirL}}}else{if(bimold == 1){ //状态改变bimold = 0;if(BM2 == 1){Set1 bimdirL}else{Set1 bimdirR}}}
那快速的怎么办了,编码开关 ,编码二字如何而来了。其实我们仔细观察就会发现:
当正转时 AB的关系如下
单反转时 AB的关系为:
table[16] = {
<span style="white-space:pre"></span>no_move,phase_dec,phase_inc,phase_bad,
<span style="white-space:pre"></span>phase_inc,no_move,phase_bad,phase_dec,
<span style="white-space:pre"></span>phase_dec,phase_bad,no_move,phase_inc,
<span style="white-space:pre"></span>phase_bad,phase_inc,phase_dec,no_move
};
uchar whell_scan(void){static uchar PhaseCount = 0; static uchar PhaseShift= 0; //记录值if(PINA) PhaseShift |=0X01;IF(PINB) PhaseShift |=0X02;PhaseShift &=0X0F;if(table[PhaseShift ] == phase_inc) PhaseCount ++; if(table[PhaseShift ] == phase_dec) PhaseCount --; }
0 0
- 外设驱动(编码开关)
- 编码开关驱动
- SPI总线和外设驱动(一)
- IIC总线和外设驱动(一)
- spi 外设驱动(spi_driver)
- STM32外设驱动---LED
- STM32外设驱动篇——AT24C02(I2C接口)
- 【stm32库应用】SD驱动移植(基于SDIO外设)
- 树莓派旋转编码开关(python程序)
- ZedBoard学习手记(二) 开发自定义AXI总线外设IP核——以LED和开关为例
- Linux主机驱动与外设驱动分离思想(转自CSDN)
- 旋转编码开关用法
- 【应用】使用STM32单片机定时器的Encoder模式驱动数字旋转编码开关
- CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)
- S3C2440A串口驱动-----WINCE6.0下通过串口和外设进行数据通信(一)
- S3C2440A串口驱动-----WINCE6.0下通过串口和外设进行数据通信(二)
- ZedBoard学习手记(五)为自定义外设编写Linux驱动
- Linux内核与驱动开发学习总结:内核访问外设IO.map_desc和ioremap(七)
- eclipse 内存不够用报错Internal Error
- poj 2001
- 多线程环境下对变量的读写操作的原子性问题(一道百度笔试题引发的思考)
- STL学习小结
- X240安装虚拟机无法读取USB设备,返回error code 9的解决方案
- 外设驱动(编码开关)
- Xcode快捷键大全
- DeleteCriticalSection和InitializeCriticalSection函数理解
- Linux epoll详解
- GBK unicode等
- 字符串规整
- 虚拟机安装CentOS6.3两个问题
- drm oma
- CentOS 6.5 配置yum安装Nginx