OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 2199|回复: 15

旋转开关的使用

[复制链接]

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
发表于 2018-1-25 19:55:56 | 显示全部楼层 |阅读模式
正点原子公众号
本帖最后由 东方三毒 于 2018-1-25 20:08 编辑


最近一个项目要用到旋转开关,因为我也是第一次接触这个东西,所以就在网上查了一下它的原理。发现网上相关的资料很多都没说清楚,我也搞了几个小时才弄明白,在此分享一下旋转开关的原理。为了使程序结果更加直观,我打算用两位的数码管来显示数值A,当旋转开关正转的时候A加,当旋转开关反转的时候A减。


旋转开关

旋转开关
回复

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 19:57:20 | 显示全部楼层
本帖最后由 东方三毒 于 2018-1-25 20:34 编辑

在此说明一下旋转开关的原理,当A端口下降沿时,如果B端口的电平为高则是反转,为低则为正转。
单片机用的是STC15W408AS,P1口接数码管的a~h,P2^7口接数码管第一位公共端,P2^6口接数码管第二位公共端。网上很多资料都没标明哪里是A端,哪里是B端,所以我将旋转开关三脚那边的上下两个脚分别接单片机的两个外部中断I/O口。这样就算接错了,只要修改一下程序就可以了。A端口接P3^3,B端口接P3^2。同时A,B两个端口要接上拉电阻,除此之外A,B两个端口也要接电容滤波。还有另外两边的两个脚跟轻触开关的原理是一样的。
6AE679EAD023C58378ED17195D274BDF.jpg
XE)8DO5@21%Z~J%[7W{K9AX.png
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 20:02:10 | 显示全部楼层
本帖最后由 东方三毒 于 2018-1-25 20:31 编辑

#include        "STC15.h"
#define uchar unsigned char   //0--255
#define uint unsigned int     //0--65535
#define ulong unsigned long

uchar a1 = 98;

sbit  led1 = P2^7;
sbit  led2 = P2^6;

code uchar num_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73};//共阴数码管段码表

/*----------------------------
软件延时
----------------------------*/
void Delay(uchar n)
{
    uint x;

    while (n--)
    {
        x = 1000;
        while (x--);
    }
}


//-----------------------------------------
//中断服务程序
void exint1() interrupt 2       //INT1中断入口
{
    if(P32 == 1)
    {
        a1--;                                   //反转
    }
    if(P32 == 0)
    {
        a1++;                                   //正转
    }
}


void main()
{
    P1M1 = 0x00;
    P1M0 = 0xFF;

    INT1 = 1;
    IT1 = 1;                    //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
    EX1 = 1;                    //使能INT1中断
    EA = 1;


    while (1)
    {        
            P1 = num_code[a1/10];
            led1 = 0;
            Delay(2);
            led1 = 1;

            P1 = num_code[(a1/1)%10];
            led2 = 0;
            Delay(2);
            led2 = 1;
    }
}
回复 支持 反对

使用道具 举报

  离线 

5

主题

427

帖子

0

精华

高级会员

Rank: 4

积分
778
金钱
778
注册时间
2017-12-15
在线时间
90 小时
发表于 2018-1-25 20:33:44 | 显示全部楼层
这相当于是两个开关按不同的次序被接通。
附新绘的图片一张。 编码器.png
把A配置为一个外部中断,读B的状态,即可知道是正转还是反转。
数据的增加通过外部中断服务函数实现即可。
回复 支持 反对

使用道具 举报

  离线 

5

主题

427

帖子

0

精华

高级会员

Rank: 4

积分
778
金钱
778
注册时间
2017-12-15
在线时间
90 小时
发表于 2018-1-25 20:34:42 | 显示全部楼层
正点原子公众号
emmmmmm我还以为你是在问。。然后发现你是在分享。。。
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 20:37:12 | 显示全部楼层
a496298685 发表于 2018-1-25 20:33
这相当于是两个开关按不同的次序被接通。
附新绘的图片一张。
把A配置为一个外部中断,读B的状态,即可知 ...

你这张图比较好懂,网上那些真的不好看懂,对于新手来说。
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 20:39:13 | 显示全部楼层
a496298685 发表于 2018-1-25 20:34
emmmmmm我还以为你是在问。。然后发现你是在分享。。。

emmmmmm我自学能力还是不错的
回复 支持 反对

使用道具 举报

  离线 

5

主题

427

帖子

0

精华

高级会员

Rank: 4

积分
778
金钱
778
注册时间
2017-12-15
在线时间
90 小时
发表于 2018-1-25 20:40:51 | 显示全部楼层
东方三毒 发表于 2018-1-25 20:37
你这张图比较好懂,网上那些真的不好看懂,对于新手来说。

当初我了解到这个东西之后,听名字“旋转编码器”感觉很高大上,结果就是一个轴里面装两个不同区域导通金属圈,然后刻几个凹槽产生顿挫感。然后就能每一个step产生两个方波。
其实,
也就是那么回事啦。
回复 支持 反对

使用道具 举报

  离线 

5

主题

427

帖子

0

精华

高级会员

Rank: 4

积分
778
金钱
778
注册时间
2017-12-15
在线时间
90 小时
发表于 2018-1-25 20:41:19 | 显示全部楼层
东方三毒 发表于 2018-1-25 20:39
emmmmmm我自学能力还是不错的

给你点赞赞
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 20:43:09 | 显示全部楼层
a496298685 发表于 2018-1-25 20:40
当初我了解到这个东西之后,听名字“旋转编码器”感觉很高大上,结果就是一个轴里面装两个不同区域导通金 ...

我第一次看到这个东西也觉得挺高级的,正转反转。。。
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 20:43:48 | 显示全部楼层
本帖最后由 东方三毒 于 2018-1-25 20:56 编辑

回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-1-25 21:15:03 | 显示全部楼层

原理图附上
%V[B0E7@GGD(_VSDV37LEA4.png
回复 支持 反对

使用道具 举报

  离线 

9

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
296
金钱
296
注册时间
2017-8-1
在线时间
61 小时
发表于 2018-2-26 13:49:38 | 显示全部楼层
兄dei,这叫编码开关,不叫旋转开关。原理还是很简单的,看一下其时序就明白了!
程序使用它只需要开两个外部中断,然后判断其边沿变化即可。而且使用它最好在外部中断里面加上消抖处理,不然会存在抖动现象!
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-3-17 13:56:36 | 显示全部楼层
风清扬丶 发表于 2018-2-26 13:49
兄dei,这叫编码开关,不叫旋转开关。原理还是很简单的,看一下其时序就明白了!
程序使用它只需要开两个 ...

看原理图,有电容
回复 支持 反对

使用道具 举报

  离线 

9

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
296
金钱
296
注册时间
2017-8-1
在线时间
61 小时
发表于 2018-3-18 11:04:39 | 显示全部楼层

这里的电容是起到了什么作用啊?
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

  离线 

2

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-11-6
在线时间
13 小时
 楼主| 发表于 2018-3-21 09:12:20 | 显示全部楼层
风清扬丶 发表于 2018-3-18 11:04
这里的电容是起到了什么作用啊?

利用电容两端的电压不能突变的特性,将其并联在机械触点两端,消除接触抖动产生的毛刺电压。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-5-24 04:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */