旋转编码开关 实例
- 格式:pdf
- 大小:97.91 KB
- 文档页数:6
ec11stm32例程EC11STM32是一种旋转编码器,常用于嵌入式系统中,可以用来获取旋转方向和计算旋转角度。
在STM32开发板上使用EC11STM32,需要进行相应的配置和编程。
本文将介绍EC11STM32的原理、使用方法以及编程实例。
EC11STM32工作原理:EC11STM32包含一个旋转编码器和一个按钮开关。
旋转编码器由两个光电传感器、一个LED和一个编码盘组成。
编码盘上有很多小刻度,每当旋转编码器旋转一格,编码盘上的刻度就会遮挡或透过光电传感器,从而产生一个脉冲信号。
根据脉冲信号的变化,我们可以判断旋转的方向和计算旋转的角度。
EC11STM32的使用方法:在STM32开发板上使用EC11STM32,首先需要将EC11STM32连接到正确的GPIO引脚上。
然后,我们可以通过读取GPIO引脚的状态来获取旋转和按下按钮的信息。
对于旋转编码器,我们可以使用两个引脚来获取旋转方向和计数。
对于按钮开关,我们可以使用一个引脚来获取按下和释放的状态。
编程实例:下面是一个使用EC11STM32的简单编程实例,用于获取旋转方向和计算旋转角度:```c#include "stm32f10x.h"#define CLK_GPIO GPIOA#define DT_GPIO GPIOB#define BTN_GPIO GPIOC#define CLK_PIN GPIO_Pin_0#define DT_PIN GPIO_Pin_1#define BTN_PIN GPIO_Pin_13int main(void){GPIO_InitTypeDef GPIO_InitStructure;//初始化时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);//配置CLK引脚为输入GPIO_InitStructure.GPIO_Pin = CLK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(CLK_GPIO, &GPIO_InitStructure);//配置DT引脚为输入GPIO_InitStructure.GPIO_Pin = DT_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DT_GPIO, &GPIO_InitStructure);//配置BTN引脚为输入GPIO_InitStructure.GPIO_Pin = BTN_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(BTN_GPIO, &GPIO_InitStructure);int count = 0;int last_state = 0;int curr_state = 0;while (1){//读取CLK和DT引脚的状态last_state = curr_state;curr_state = GPIO_ReadInputDataBit(CLK_GPIO, CLK_PIN) << 1 | GPIO_ReadInputDataBit(DT_GPIO, DT_PIN);if (last_state != curr_state){//根据旋转方向增加或减少计数if ((last_state == 0b00 && curr_state == 0b01) || (last_state == 0b11 && curr_state == 0b10))count++;else if ((last_state == 0b01 && curr_state == 0b00) || (last_state == 0b10 && curr_state == 0b11))count--;//打印计数值printf("Count: %d\n", count);}//检测按钮是否按下if (GPIO_ReadInputDataBit(BTN_GPIO, BTN_PIN) == 0){//按钮按下时执行的操作printf("Button pressed\n");}}}```通过上述代码,我们可以实现读取EC11STM32的旋转和按钮信息,并进行相应的操作。
EC11旋转编码器开关编码器型号EC110201C2B-HA1应用领域汽车空调、汽车音响,汽车导航、调音台、多媒体音响\功放,家用电器等特点体积小,密封性好,可靠性高,有多种不同的规格供选择主要功能调频、调节音量、调节温度、功能切换等主要格规参数外形尺寸:∮11mm额定电压:DC5V;定位数:16/20/30/32个;脉冲数:8/15/16/20;工作温度:-40°C to85°C;旋转寿命:30000次以上;EC11规格参数一、MECHANICAL CHARACTERISTIC机械特性1、Detent Torque定位点力矩:20-200gf.cm2、Number and position of detent定位点数及位置:16/20/30/32点定位3、Shaft wobble轴摆动:0.2mm MAX4、Shaft play in rotational wobble轴的回转方向摆动:2°MAX二、ELECTRICAL CHARACTERISTIC电气特性1、Resolution分解能力:8/16/15/20个脉冲/360°2、Phase difference相位差:≥3ms3、Rated voltage额定电压:DC5V4、Insulation Resistance绝缘电阻:10MΩ1Minute at DC250V5、Dielectric Voltage耐电压:1Minute at AC50V三、ENDURANCE CHARACTERISTIC耐久特性1、Rotational life回转寿命:30,000cycles MinNote:In this catalog,if some parame ters lr drawings are different from the"Approval sheet",it's subject to the"Approval sheet".注明:如说明书与承认书规格参数、图面有异,均以承认书为准。
ec11编码开关编程范例EC11编码开关是一种常用的旋转编码器,可以用于控制器、电子设备等的编程操作。
下面是一个简单的编程范例,以Python语言为例:python.import RPi.GPIO as GPIO.import time.# 设置GPIO引脚。
CLK = 17。
DT = 18。
SW = 27。
# 初始化GPIO模式。
GPIO.setmode(GPIO.BCM)。
GPIO.setup(CLK, GPIO.IN, pull_up_down=GPIO.PUD_UP)。
GPIO.setup(DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)。
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)。
# 定义回调函数。
def rotate_callback(channel):global counter.if GPIO.input(DT):counter += 1。
else:counter -= 1。
def switch_callback(channel):print("Switch pressed!")。
# 注册回调函数。
GPIO.add_event_detect(CLK, GPIO.RISING, callback=rotate_callback, bouncetime=200)。
GPIO.add_event_detect(SW, GPIO.FALLING, callback=switch_callback, bouncetime=200)。
# 主循环。
counter = 0。
try:while True:print("Counter:", counter)。
time.sleep(0.1)。
except KeyboardInterrupt:GPIO.cleanup()。
上述范例中,我们使用RPi.GPIO库来控制树莓派的GPIO引脚。
旋转编码器编程原理实例旋转编码器是一种常见的传感器设备,可以用于测量物体的旋转角度和方向。
它通常由光电转换器和代码盘组成,通过检测光电转换器接收到的光线来确定旋转方向和步数。
旋转编码器广泛应用于工控领域、机器人控制、汽车导航系统等。
1.硬件连接:首先,需要将旋转编码器与控制器板连接起来。
通常旋转编码器具有三个引脚:电源正极、电源负极和输出信号。
将正极连接到控制器板的电源输出引脚,负极连接到控制器板的地引脚,输出信号连接到控制器板的一些IO口。
2.编程环境设置:在编程环境中,需要导入旋转编码器的驱动库。
常见的编程语言如C、C++、Python等都有相应的驱动库可供选择。
导入驱动库后,可以使用库中提供的函数来操作旋转编码器。
3.初始化旋转编码器:在开始使用旋转编码器之前,需要初始化其参数。
这些参数包括旋转方向(顺时针或逆时针)、初始位置、步长等。
可以使用驱动库中提供的函数来设置这些参数。
4.监听旋转编码器信号:5.处理旋转编码器信号:在监听到旋转编码器的信号变化后,需要编写相应的处理函数来处理这些变化。
处理函数可以根据信号的变化来判断旋转方向和步数。
通常,顺时针旋转会使输出信号由低到高变化,逆时针旋转则相反。
6.更新位置数据:根据旋转编码器的信号变化和步数,可以更新物体的位置数据。
将每次旋转的步数加到当前位置上,就可以实时获取物体的旋转角度和方向。
通过以上步骤,就可以实现旋转编码器的编程原理。
下面是一个使用Python编写的旋转编码器示例程序:```pythonimport RPi.GPIO as GPIO#定义旋转编码器的IO口A_PIN=17B_PIN=18#初始化GPIOGPIO.setmode(GPIO.BCM)GPIO.setup(A_PIN, GPIO.IN)GPIO.setup(B_PIN, GPIO.IN)#记录旋转方向和步数direction = 0count = 0#定义旋转编码器的信号回调函数def encoder_callback(channel):global direction, countA = GPIO.input(A_PIN)B = GPIO.input(B_PIN)if A == B:direction = 1 # 顺时针旋转count += 1else:direction = -1 # 逆时针旋转count -= 1#监听旋转编码器的信号变化GPIO.add_event_detect(A_PIN, GPIO.BOTH, callback=encoder_callback)GPIO.add_event_detect(B_PIN, GPIO.BOTH, callback=encoder_callback)#主程序if __name__ == "__main__":try:while True:print("Direction:", direction)print("Count:", count)except KeyboardInterrupt:pass#清理GPIO资源GPIO.cleanup```以上程序示例了如何使用树莓派的GPIO接口来读取旋转编码器的信号,并实时获取旋转方向和步数。
旋转编码开关(Rotary Encoder switch)这种旋转编码开关(Rotary Encoder switch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~5脚的ALPS:具有左转,右转,按下三个功能。
4、5脚是中间按下去的开关接线 1 2 3脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。
着这是标准资料:在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转; 当输出1 为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
还有另外一种3脚的,除了不带按钮开关外,和上面是一样的使用。
参考:#include "reg51.h"#define uint unsigned intsbit CodingsWitch_A=P1_1;sbit CodingsWitch_B=P1_2;uint CodingsWitchPolling()//{static Uchar Aold,Bold; //定义了两个变量用来储蓄上一次调用此方法是编码开关两引脚的电平static Uchar st; //定义了一个变量用来储蓄以前是否出现了两个引脚都为高电平的状态uint tmp = 0;if(CodingsWitch_A&&CodingsWitch_B)st = 1; //if(st) //如果st为1执行下面的步骤 {if(CodingsWitch_A==0&&CodingsWitch_B==0) //如果当前编码开关的两个引脚都为底电平执行下面的步骤{if(Bold) //为高说明编码开关在向加大的方向转{st = 0;tmp++; //}if(Aold) //为高说明编码开关在向减小的方向转{st = 0;tmp--; //设返回值}}}Aold = CodingsWitch_A; //Bold = CodingsWitch_B; //储return tmp; //}//编码器计数程序void encoder_cnt(void){uchar temp;temp = PIND; //取端口D管脚信号couch_clr = (temp & 0x08); //取编码器清零信号if(couch_clr != false) //有编码器清零信号{couch_num = 0; //水平床码清零}else{if(encoder_cnt_en == false) //编码器计数模块没有启动{pr_couch_ba = temp &0x03; //取编码器A、B相电平信号}else{couch_ba = temp & 0x03; //取编码器A、B相电平信号if(pr_couch_ba == 0x00){if(co uch_ba == 0x01){couch_num++; //水平床码加1}elseif(couch_ba == 0x10){couch_num--; //水平床码减1}}else if(pr_couch_ba ==0x01){if(co uch_ba == 0x11){couch_num++; //水平床码加1}elseif(couch_ba == 0x00){ couch_num--; //水平床码减1}}else if(pr_couch_ba == 0x10){if(co uch_ba == 0x00){couch_num++; //水平床码加1}else if(couch_ba == 0x11){couch_num--; //水平床码减1}}else if(pr_couch_ba == 0x11){if(co uch_ba == 0x10){couch_num++; //水平床码加1}else if(couch_ba == 0x01){couch_num--; //水平床码减1}}}pr_couch_ba = couch_ba;}}编码器及其计数模块原理飘扬的旋转编码器的检测程序(MCS51)//旋转编码器检测程序,A/B信号分别接在了INT0和INT1上//程序作者:BG4UVR//2005年1月15用KEIL编译、硬件测试通过//注意:编码器的信号,程序未做消抖处理。
如何使用旋转编码器、编码开关,旋转编码开关、编码器的原理在电子产品设计中,经常会用到旋转编码开关,也就是所说的旋转编码器、数码电位器、Rotary Encoder 。
它具有左转,右转功能,有的旋转编码开关还有按下功能。
为了使刚接触这种开关的朋友了解旋转开关的编程,我来介绍下它的原理和使用方法:以我厂生产的EC11型编码开关为例:如图1:三只脚:1 2 3脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋转时,在1、3脚就有脉冲信号输出了。
两只脚:为按压开关,按下时导通,回复时断开。
在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,如图2。
由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输出1 为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转。
所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
旋转编码开关(Rotary Encoder switch)我前面介绍的2篇文章:“自己动手做收音机(LC72131)”和“电脑USB接口LCD液晶显示板(LCD Smartie)”都使用了这种旋转编码开关(Rotary Encoder switch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~5脚的ALPS:<-- ALPS Incremental Encoder (EC11 series)具有左转,右转,按下三个功能。
4、5脚是中间按下去的开关接线 1 2 3脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。
这是标准资料:在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转; 当输出1 为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
.最近做了一个关于旋转编码器的项目,在网上查阅了很多资料,然后又是进行了诸多的实验,分享给大家。
1 旋转编码器原理(借用一下别的文档里的图片)5脚的旋转编码开关具有左转,右转,按下三个功能。
2脚接地,1,3脚接上拉电阻。
4脚,5脚是按下功能的两个脚,可以根据需求自己接线。
检查方向时,通常采用两种做法.的上升沿或下跳沿,在中断程序中,检测此时另外获取(1)中断法:A或B相为高电平一相的电平。
例如上图中,A相上跳沿,相为低电平则为顺时针转动;BB 二者为逆时针方向转动。
不相同时,则能判,BAB)电平法:同时检测A相和相的电平,当出现2 (B相的电平,则能判断出转动的方向。
定发生了转动,根据前一时刻A相和硬件电路2本设计在PIC16单片机上进行开发,采用中断法。
旋转编码开关输出上拉,之后采用RC 滤波器对信号进行先一步滤波,此处的RC滤波器的元器件大小可以适当调整。
中断源采用的是捕捉模块(CCP2)的捕捉中断(外部中断用于别处)。
3 C代码中断响应函数:void interrupt ISR(void){if(CCP2IF){CCP2IF=0;Change();}// 程序中CCP2设置成捕捉下跳沿void Change(){...unsigned int t2=2000;if(RC3)// 高电平{while((!RC1)&&(t2--))//等待RC1的低电平持续完{Delay();}的电平,以确认转动发生if(!RC3)//判断此时RC3{// 增或减操作}else{while((!RC1)&&(t2--))//等待RC1的低电平持续完{Delay();}RC3if(RC3)//判断此时的电平,以确认转动发生{// 增或减操作}}}注意事项:4滤波电路,延迟时间等均需要根据具体的旋转开关进行调整。
一般的单片机程序中,并不建议在中断中添加延迟函数,但应视具体情况而定。
8421旋转编码开关接线方法摘要:一、8421旋转编码开关简介二、8421旋转编码开关接线方法1.电源接线2.信号输出接线3.编码器与微控制器的连接三、接线注意事项四、总结正文:一、8421旋转编码开关简介8421旋转编码开关是一种常用的电子元器件,广泛应用于各种电子设备中,如机器人、自动化设备、智能家居等。
它具有四个输出端,可以输出0-15的状态信号,用于表示旋转的角度或位置。
本文将详细介绍8421旋转编码开关的接线方法。
二、8421旋转编码开关接线方法1.电源接线首先,为8421旋转编码开关提供适当的电源。
根据开关电源电压要求,将电源线连接到开关的VCC和GND引脚。
一般情况下,VCC接电源正极,GND接电源负极。
2.信号输出接线8421旋转编码开关有四个输出信号,分别为A、B、C、D。
根据实际需求,将这四个信号输出接到相应的接收端。
例如,可以将A、B、C接到微控制器的输入端,用于检测旋转开关的状态变化。
3.编码器与微控制器的连接将旋转编码器的输出信号接到微控制器的相应输入端。
同时,根据微控制器的工作电压和电源电压,为微控制器提供适当的电源。
需要注意的是,编码器与微控制器之间的连接线应尽量缩短,以降低信号干扰。
三、接线注意事项1.接线时,请使用足够线径的导线,以保证电流畅通。
2.避免将电源线与信号线紧挨着,以降低电磁干扰。
3.接线时要确保牢固,避免松动导致接触不良。
4.接线完成后,进行实际测试,确保旋转编码开关正常工作。
四、总结掌握8421旋转编码开关的接线方法,对于使用这种开关的电子设备来说至关重要。
正确的接线不仅可以保证设备正常运行,还能提高设备的使用寿命。
廉价⿏标滚轮传感器(旋转式编码开关)拆解及⼯作原理分析拆机乐园我不知道这种元件的准确名字,wantcity 朋友告诉我,这种元件叫编码开关。
在此⾮常感谢wantcity 朋友!我查了⼀下编码开关的种类很多,以前主板上常见的⼀排开关⽤作跳线调节频率的,也叫编码开关。
⿏标上⽤的这种叫旋转式编码开关。
这种元件⽬前主要⽤在廉价的⿏标滚轮上,作为滚动的传感器。
我的另外⼀篇⽂章《关于⿏标滚轮设计的⼀些拆解和总结》/read.php?tid=106230中提到过,这种传感器是出于降低成本来使⽤的。
较好的⿏标滚轮是光栅结构,即:⼀个发光⼆极管、⼀个接受管,之间是滚轮的光栅,滚轮滚动时光栅不断阻挡和透过光线,使接受管获得脉冲信号,从⽽实现感知滚轮滚动的效果。
同时还需要⼀些机械结构来实现滚轮的⽀撑和滚动时有段落的⼿感。
⽽这种廉价的替代品结构则简单的多,⼀个元件就实现了感知滚动、⽀撑滚轮和滚动时的段落感。
⾸先看⼀下整体观。
前⾯:背⾯:去掉封盖:可以看到⼀个⾦属的簧⽚在下⾯的转盘上滑动来实现段落⼿感。
去掉簧⽚:转盘上的齿。
因为是⾦属和塑料的摩擦,理论上这种结构的寿命不会很长。
取下转盘,看转盘背⾯的结构:三个⾦属簧⽚触点。
这三个触点是相互导通的。
转盘下的底座。
可见圆形的三分之⼀是⼀块⼉整体的⾦属⽚,剩下的三分之⼆是间断的⾦属⽚。
转盘滑动时,转盘背⾯的簧⽚在底座的⾦属⽚上间断的导通和断开,形成脉冲信号,来实现感知⿏标滚轮滚动的效果。
受到wantcity 朋友的指点,我⼜仔细观察了⼀下底座上⾦属⽚的结构:三分之⼀是⼀整块⼉⾦属⽚对应⼀个管脚0,三分之⼀是断续齿状⾦属⽚对应⼀个管脚a,另三分之⼀断续齿状⾦属⽚对应另⼀个管脚b。
转盘旋转时,会保证转盘上的⼀个触点在连续⾦属⽚上,⼀个触点连接在管脚a或者b的⾦属齿上,第三个触点在齿的空挡部位。
也就是保证在旋转的每⼀格都会接通a和0或者b和0。
每旋转过⼀格,就会产⽣导通a到b或者b到a切换。
EC11旋转开关编码器编码器型号EC110901K2B-HA1应用领域汽车空调、汽车音响,汽车导航、调音台、多媒体音响\功放,家用电器等特点体积小,密封性好,可靠性高,有多种不同的规格供选择主要功能调频、调节音量、调节温度、功能切换等主要格规参数外形尺寸:∮11mm额定电压:DC5V;定位数:16/20/30/32个;脉冲数:8/15/16/20;工作温度:-40°C to85°C;旋转寿命:30000次以上;EC11规格参数一、MECHANICAL CHARACTERISTIC机械特性1、Detent Torque定位点力矩:20-200gf.cm2、Number and position of detent定位点数及位置:16/20/30/32点定位3、Shaft wobble轴摆动:0.2mm MAX4、Shaft play in rotational wobble轴的回转方向摆动:2°MAX二、ELECTRICAL CHARACTERISTIC电气特性1、Resolution分解能力:8/16/15/20个脉冲/360°2、Phase difference相位差:≥3ms3、Rated voltage额定电压:DC5V4、Insulation Resistance绝缘电阻:10MΩ1Minute at DC250V5、Dielectric Voltage耐电压:1Minute at AC50V三、ENDURANCE CHARACTERISTIC耐久特性1、Rotational life回转寿命:30,000cycles MinNote:In this catalog,if some parame ters lr drawings are different from the"Approval sheet",it's subject to the"Approval sheet".注明:如说明书与承认书规格参数、图面有异,均以承认书为准。
旋转编码器编程原理实例光电旋转编码器的原理及应用方法时间:2012-03-13 21:33:37 来源:作者:WinCE下光电编码器的驱动程序设计近年来,嵌入式技术发展迅速,嵌入式系统在各行各业得到了广泛的应用。
然而,由于嵌入式计算机的专用性,系统的硬件、软件结构千差万别,其输入设备也不再像通用计算机那样单一。
嵌入式计算机的输入没备一般有鼠标、键盘、触摸屏、按钮、旋钮等,而光电编码器(俗称“单键飞梭”)作为一种输入设备,由于其具有输入灵活,简单可靠等特点,因此特别适合应用在嵌入式仪器和手持式设备上,整个系统可以只用一个键作为输入。
触摸屏由于其方便灵活、节省空间、界面直观等特点也备受青睐,但存在寿命短,长时间使用容易产生误差等缺点。
如果用光电编码器辅助触摸屏作为输入设备,必将大大增强系统的可靠性,使得人机接口更加人性化。
但由于光电编码器并不是WinCE的标准输入设备,因此其驱动程序在嵌入式操作系统Windows CE Platform Builder中并未给出。
本文以三星公司S3C2410(ARM9芯片)为CPU的嵌入式系统开发板为平台,详细阐述了嵌入式操作系统WinCE 下光电编码器驱动程序的设计方法,以供同行参考。
1 光电编码器的工作原理光电编码器(OptICal Encoder)俗称“单键飞梭”,其外观好像一个电位器,因其外部有一个可以左右旋转同时又可按下的旋钮,很多设备(如显示器、示波器等)用它作为人机交互接口。
下面以美国Greyhill公司生产的光电编码器为例,介绍其工作原理及使用方法。
光电编码器的内部电路如图1所示,其内部有1个发光二极管和2个光敏三极管。
当左右旋转旋钮时,中间的遮光板会随旋钮一起转动,光敏三极管就会被遮光板有次序地遮挡,A、B相就会输出图2所示的波形;当按下旋钮时,2、3两脚接通,其用法同一般按键。
当顺时针旋转时,光电编码器的A相相位会比B相超前半个周期;反之,A相会比B 相滞后半个周期。
一、编码器(编码开关)原理及使用方法
旋转编码器、数码电位器、Rotary Encoder。
它具有左转,右转功能,有的旋转编码开关还有按下功能。
使用方法:EC11型编码开关为例:
三只脚:123脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋转时,在1、3脚就有脉冲信号输出了。
两只脚:按压开关,按下时导通,回复时断开。
二、在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时
两个输出脚的信号有个相位差.由此可见,如果输出1为高电平时,输出2出现一
个高电平,这时开关就是向顺时针旋转;当输出1为高电平,输出2出现一个低
电平,这时就一定是逆时针方向旋转。
所以,在单片机编程时只需要判断当输
出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
通过编码开关(旋转编码器)控制数码管的加减一我爱单片机赞助商链接//直上调试好的程序看看能否换个M币哈哈!//通过编码开关(旋转编码器)控制数码管的加减一#include<AT89X52.H>#define uchar unsigned char#define uint unsigned int#define cycle 1 //定义动作周期,编码器旋转多少格有效#define NULL 0 //定义编码器不动作时的还回值#define E_RIGHT 0x0e //定义右旋转还回值#define E_LEFT 0x0f //定义左旋转还回值/*=====数码管位及按键定义=====*/sbit dula=P2^6; //数码管段选,锁存器控制信号sbit wela=P2^7; //数码管位选,锁存器控制信号sbit PINA = P1^0; //定义IOsbit PINB = P1^1;uchar WheelNow,WheelOld,RightCount,LeftCount;/*=====0-9=====A-G=====*/uchar a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管显示编码unsignedsled_bit_table[]={0x5f,0x6f,0x77,0x7b,0x7d,0x7e,0xff};/*定义点亮的数码管与数组的关系*//*=====四个数码管显示数据存放处=====*/uchar one,two,three,four;uint wc=0;/*=====函数定义=====*/ void delay(uint x);void display(void);//void key();void led_analyze(uint i);/*====延时函数=====*/ void delay(uint x){uint i;for(i=0;i<x;i++);}/*====显示函数=====*/ void display(void){//送段码dula=0;P0 =a[one];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[0]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[two];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[1]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[three];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[2]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示dula=0;P0=a[four];dula=1;dula=0;//数码管位选wela=0;P0=sled_bit_table[3]; //开显示wela=1;wela=0;delay(200); //调用键盘扫描wela=0;P0=sled_bit_table[6];wela=1;wela=0; //关显示}/*====分解显示数据=====*/void led_analyze(uint i){i=i%10000;four=i/1000; // 千位three=(i/100)%10; // 百位two=(i%100)/10; // 十位one=(i%100)%10; // 个位}//===================================== ============uchar WheelRight(){LeftCount=0;RightCount++;if (RightCount>=cycle){RightCount=0;return(E_RIGHT);}elsereturn(NULL);}//===================================== ================uchar WheelLeft(){RightCount=0;LeftCount++;if (LeftCount>=cycle){LeftCount=0;return(E_LEFT);}elsereturn(NULL);}//===================================== ============================uchar EncoderProcess(){uchar keytmp;PINA = 1;PINB = 1;WheelNow=WheelNow<<1;if (PINA==1) WheelNow=WheelNow+1; // 读 PINAWheelNow=WheelNow<<1;if (PINB==1) WheelNow=WheelNow+1; // 读 PINBWheelNow=WheelNow & 0x03; // 将 WheelNow 的 2 - 7 位清零,保留 0 - 1 两个位的状态.if (WheelNow==0x00) return(NULL); //当 PINA 和 PINB 都为低电平时退出,低电平区不做处理keytmp=WheelNow;keytmp ^=WheelOld; // 判断新读的数据同旧数据if (keytmp==0) return(NULL); // 新读的数据同旧数据一样时退出.if (WheelOld==0x01 && WheelNow==0x02){ // 是左旋转否WheelOld=WheelNow;return(WheelLeft()); //左旋转}elseif (WheelOld==0x02 && WheelNow==0x01){ // 是右旋转否WheelOld=WheelNow;return(WheelRight()); //右旋转}WheelOld=WheelNow; // 保存当前值return(NULL); // 当 PINA 和 PINB 都为高电平时表示编码器没有动作,退出}//===================================== ===================================== void inc(){wc++;if(wc>9999) wc=0;//如果WG大于9999则将它清零led_analyze(wc);} // 在此处设置断点看 num 加的变化//===================================== ===============================void dec(){wc--;if(wc>9999) wc=9999;led_analyze(wc);} // 在此处设置断点看 num 减的变化//===================================== ====================================== void main(){while (1){switch(EncoderProcess()){case E_RIGHT: inc(); break;case E_LEFT: dec(); break;}display();}}。
8421旋转编码开关的工作原理宝子们!今天咱们来唠唠这个超有趣的8421旋转编码开关呀。
你看这个8421旋转编码开关呢,就像是一个小小的魔法旋钮。
它的内部结构呀,就藏着好多小秘密呢。
这开关有好几个引脚,就像小脚丫一样伸出来,每个引脚都有它独特的使命哦。
咱先说说这个8421是啥意思吧。
这可不是什么神秘代码,其实它是一种编码方式啦。
就好比是给每个状态都取了个特别的名字。
想象一下,这就像给一群小动物按照一定的规则编号一样。
当我们开始转动这个旋转编码开关的时候呀,里面就像有个小齿轮在悄悄运作。
这个小齿轮每转一格,就会改变开关内部的电路连接情况呢。
比如说,它可能会让某两个引脚之间接通或者断开。
这就像是在搭积木,每转动一下,积木的组合方式就变了。
它的工作原理有点像一个超级聪明的小管家。
这个小管家知道不同的旋转方向代表着不同的指令。
如果我们顺时针转动,它就会按照8421的编码规则,给电路发送一种信号,就像是小管家在说:“电路朋友们,现在我们要这样变化啦。
”如果是逆时针转动呢,小管家又会发出另外一种信号,电路就得按照新的指示来工作啦。
你知道吗?这个旋转编码开关在好多地方都发挥着大作用呢。
在一些小电器上,像那种复古风格的收音机,我们转动这个开关就能调节频道。
就好像这个开关在和收音机里的其他零件说:“伙伴们,我们要去找下一个好听的电台啦。
”它每转动一下,收音机就能收到不同频率的广播,是不是很神奇呢?再说说在一些简单的电子小玩具上吧。
比如说那种可以变换灯光颜色或者闪烁模式的小灯球。
8421旋转编码开关在这儿就像是个色彩大师的魔法棒。
我们一转,它就告诉小灯球:“宝贝,现在我们要换成蓝色的光闪烁啦。
”或者“现在让灯光快速闪烁起来吧。
”这个开关还有个很贴心的地方呢。
它能够很精准地控制电路的变化。
不会像有些开关那样,要么全开,要么全关,很粗暴。
它就像是一个优雅的舞者,每一步都能精准地落在点上。
每一次转动,它带来的电路变化都是按照8421这个巧妙的编码来的,不多不少,刚刚好。
PLC与编码器的应用2006-09-18 来源:浏览:1027[推荐朋友] [打印本稿] [字体:大小]现工控行业中,编码器应用越来越广泛,故此讲述一下旋转编码器一般应用,欢迎大家踊跃提意见,如有疑问也欢迎大家与我联系。
旋转编码器一般介绍其主要有两种,一种是增量型,另一种是绝对型。
增量型特征是旋转期间会输出对应旋转角度脉冲,停止是不会输出。
它是利用计数来测量旋转方式;价格比较便宜。
绝对型特征是是否旋转,可以将对应旋转角度进行平行输出类型,不需要计数器可确认旋转位置;它还有不受机械晃动或震动以及开关等电器干扰功能,价格贵。
选择使用时,可参考以下几点。
包括成本、分辨率、外形尺寸、轴负荷及机械寿命、输出频率、环境、轴旋转力矩、输出回路等等。
应用举例它一般应用对机器动作控制。
我那一个实例详细说明一下。
我刚刚改造一台机器,机器运行过程中先要对工件进行处理,然后加工。
它以前是用光电开关做,机器电路就比较复杂,成本增加,维护调校麻烦。
我就对机器电路进行改造,主用一个编码器来代替以前光电开关。
此套系统由OMRONPLC与编码器组成。
下面是PLC 程序。
I/O 及数据检测是否有工件开关:00007 变频器零速输出:00008处理工序1:开(DM100)关(DM101) 10100处理工序2:开(DM102)关(DM103) 10101处理工序3:开(DM104)关(DM105) 10102加工工序1:开(DM106)关(DM107) 10103加工工序2:开(DM108)关(DM109) 10104加工工序3:开(DM110)关(DM111) 10105PLC程序Name="Initialize"[STATEMENTLIST]LD 253.13 //OnOUT TR0OUT 252.00 //Encoder software resetTIM 000 #0100 //System initialize delayAND 253.15 //PLC First scan onINI 000 002 DM0000 //Control Encoder modeLD TR0AND TIM000PRV 000 000 DM0000 //Encoder PV readDIV DM0000 #0004 DM0002 //1440 Change 360BCMP DM0002 DM0100 HR01 //Block compare for operationName="Shift"[STATEMENTLIST]LD 000.07 //Part onLD HR01.08 //Shift degreeLD 253.14 //OffSFT HR60 HR62 // the rightmost word of the shift register Name="Treat 1"[STATEMENTLIST]LD TIM000AND HR60.08 //Shift to action 1 operate positionAND NOT 00008 //Inverter zero speed outputAND HR01.00 //Degree of action 1OUT 101.00 //Output Treat 1Name=" Treat 2"[STATEMENTLIST]LD TIM000AND HR60.10 //Shift to action 2 operate positionAND NOT 00008AND HR01.01 //Degree of action 2OUT 101.01 //Output Treat 2Name=" Treat 3"[STATEMENTLIST]LD TIM000AND HR60.15 //Shift to action 3 operate positionAND NOT 00008AND HR01.02 //Degree of action 3OUT 101.02 //Output Treat 3Name="Process 1"[STATEMENTLIST]LD TIM000AND HR62.03 //Shift to Print 1 operate positionAND NOT 00008AND HR01.03 //Degree of print 1OUT 101.03 //Output Process 1Name=" Process 2"[STATEMENTLIST]LD TIM000AND HR62.05 //Shift to Print 2 operate positionAND NOT 00008AND HR01.04 //Degree of print 2OUT 101.04 //Output Process 2Name=" Process 3"[STATEMENTLIST]LD TIM000AND HR62.08 //Shift to Print 3 operate position AND NOT 00008AND HR01.04 //Degree of print 3OUT 101.04 //Output Process 3我也转一个来,这是台达的,这个接线这是程序及说明。