旋转编码器编程原理实例.docx
《旋转编码器编程原理实例.docx》由会员分享,可在线阅读,更多相关《旋转编码器编程原理实例.docx(30页珍藏版)》请在冰豆网上搜索。
旋转编码器编程原理实例
如何使用旋转编码器、编码开关,旋转编码开关、编码器的原理
在电子产品设计中,经常会用到旋转编码开关,也就是所说的旋转编码器、数码电位器、RotaryEncoder。
它具有左转,右转功能,有的旋转编码开关还有按下功能。
为了使刚接触这种开关的朋友了解旋转开关的编程,我来介绍下它的原理和使用方法:
以我厂生产的EC11型编码开关为例:
如图1:
三只脚:
123脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋转时,在1、3脚就有脉冲信号输出了。
两只脚:
为按压开关,按下时导通,回复时断开。
在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,如图2。
由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输出1为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转。
所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
旋转编码开关(RotaryEncoderswitch)
我前面介绍的2篇文章:
“自己动手做收音机(LC72131)”和“电脑USB接口LCD液晶显示板(LCDSmartie)”都使用了这种旋转编码开关(RotaryEncoderswitch),一个使用3脚的,后面一个使用5脚的,大家可能对这种玩意都不是很了解,但涉及到有调整的地方,这个玩意使用真是很爽,我弄了2个,研究了一下,供大家参考~
5脚的ALPS:
<--ALPSIncrementalEncoder(EC11series)
具有左转,右转,按下三个功能。
4、5脚是中间按下去的开关接线 123脚一般是中间2脚接地,1、3脚上拉电阻后,当左转、右转旋纽时,在1、3脚就有脉冲信号输出了。
这是标准资料:
在单片机编程时,左转和右转的判别是难点,用示波器观察这种开关左转和右转时两个输出脚的信号有个相位差,见下图:
由此可见,如果输出1为高电平时,输出2出现一个高电平,这时开关就是向顺时针旋转;当输出1为高电平,输出2出现一个低电平,这时就一定是逆时针方向旋转.
所以,在单片机编程时只需要判断当输出1为高电平时,输出2当时的状态就可以判断出是左旋转或是右旋转了。
还有另外一种3脚的,除了不带按钮开关外,和上面是一样的使用。
----------------------我是分隔线----------------------
编码器总结(类似音响上的音量调节旋钮)
1.要求旋转速度快,调节就快,速度慢,,调节就慢
2.机械的编码器要24脉冲/每转,勉强可以分辨3到4种速度(每隔100ms计算一次速度),,机械的缺点是有毛刺,,寿命短,,通常在1万转左右,,不过bounce的号称20万转
3.希望编码器每转的脉冲愈多愈好,霍尔的编码器和光电的编码器脉冲都很多,,但是价格都很高,,唉
4.cui的编码器最好了,啥都有,按钮功能也有,,配套的旋钮也有,,完美,,可是国内没有卖的
----------------------我是分隔线----------------------
旋转编码器检测转动方向的电路
----------------------我是分隔线----------------------
旋转编码器的抗抖动计数电路
摘要:
旋转编码器应用于角度定位或测量时,由于旋转轴的晃动可能引起编码器输出波形的,从而引发误计数现象。
介绍了一个抗抖动计数电路,滤除了旋转编码器因抖动而造成的误计数。
关键词:
旋转编码器抗抖动电路数字电路
旋转编码器应用于角度定位或测量时,通常有A、B、Z三相输出。
旋转编码器的输出波形见图1。
A相和B相输出占空比为50%的方波。
编码器每转一周,A相和B相输出固定数目的脉冲(如100个脉冲)。
当编码器正向旋转时,A相比B相超前四分之一个周期;当编码器反向旋转时,B相比A相超前四分之一个周期。
A相和B相输出方波的相位差为90°。
编码器每转一周,Z相输出一个脉冲。
由于编码器每转一周,A相和B相输出固定数目的脉冲,则A相或B相每输出一个脉冲,表示编码器旋转了一个固定的角度。
当Z相输出一个脉冲时,表示编码器旋转了一周。
因此旋转编码器可以测量角位移及位移方向。
问题出在伺服系统停止工作时,若无锁定,则旋转轴受外力(如风力影响)可能自由晃动,因而引起编码器输出波形抖动,如图2所示,从而引起误计数。
在这种情况下,就不能对波形进行正确计数。
虽然可以通过软件设置标志状态,用记录历史状态的变化来滤除误计数,但是程序耗费颇大。
因此,本人设计了一个抗抖动计数电路。
它能够自动消除抖动造成的误计数。
1抗抖动计数电路原理图
图3是抗抖动计数电路原理图。
此电路滤除了旋转编码器输出波形的抖动现象。
该电路分为四个部分:
译码电路U4A;互锁电路U5A、U5B;正旋计数链J1、J3、J5和反旋计数链J2、J4、J6。
U4A为二四译码器,U5A、U5B为与门,J1~J6为D触发器。
正旋计数链负责对编码器正向旋转的计数,反旋计数链负责对编码器反向旋转的计数。
2抗抖动计数电路工作分析
图4为二四译码器输出的波形。
译码器产生d、a、b、c四种不同的状态。
在图3中当B=0、A=0时,译码器Q0输出为d状态,d状态为高电平。
当B=0、A=1时,译码器Q1输入为a状态,a状态为高电平。
当B=1、A=1时,译码器Q2输出为b状态,b状态为高电平。
B状态不影响计数和方向确定,在图3电路中没有使用。
当B=1、A=0时,译码器Q3输出为c状态,c状态为高电平。
当旋转编码器正向旋转时,译码器输出的状态顺序为d、a、b、c、d、a、b、c……。
如图4所示。
当B=0、A=0时,进入d状态,与门U5A的Pin2=a=0(Pin是管脚的意思),于是U5A的输出Pin3=0。
D触发器J1的R=d=1、S=0,因此J1被清0.与门U5B的Pin5=c=0,于是U5B的输出Pin4=0。
D触发器J2的R=d=1、S=0,因此J2也被清0。
这时J1、J2的Q端都为1,与门U5的Pin1=Pin6=1,U5A和U5B都处于等待开门状态。
当进入状态a时,Q1=a=1,U5A的Pin2=a=1。
由于c=0,所以J2的Q端仍为1,U5A的Pin1=1,U5A的输出Pin3=1.J1的R=d=0、S=1,因此J1被置1。
J1的Q=1,Q=0。
J1的Q=1,正旋标志送到了J3的D端。
时J1的Q端关闭了U5B。
在下一个d出现之前,所有的c脉冲都不会改变J2的状态。
这就说,J1、J3、J5组成的正旋计数链被打开,J2、J4、J6组成的反旋计数链被阻断。
U5A、U5B、J1、J2完成互锁的功能。
在进入状态a时,J3的R=a=1、S=0,J3被清0,J5的R=a=1、S=0,J5被清0.在进入状态c前,J3的R=a=0、S=0、D=1,J3处于待触发状态。
J3的CLK=c,当c脉冲上升沿过后,D=1被打入J3的Q端,正旋标志送到了J5的D端。
在进入状态d前,J5的R=a=0、S=0,J5处于待触发状态。
J5的CLK=d,当d脉冲上升沿过后,D=1被打入J5的Q端,正旋标志送到了正旋计数输出端。
正旋计数输出端由低电平变为高电平。
到此为止,完成了一次正旋计数。
当由状态d进入状态a时,J5的R=a=1、S=0,J5被清0,正旋计数输出端由高电平变为低电平。
由此可知,当旋转编码器正向旋转时,对应A相B相的每一个完整周期,正旋计数输出端都会产生相应的一个脉冲。
A的出现抢到了正旋计数权。
只有在d重新出现后,脉冲c才可能有机会抢到反旋计数权。
从而保证了一旦进入正旋计数状态,不全完成这一过程,就进入不了反旋计数状态。
运行时有可能从状态a返回状态d,结果这只不过释放正旋计数权。
因这时正旋标志还只在J3输入端上,a出现时已把J3清0。
D状态只会把0送给J5的Q端,因此不会产生误计数。
当旋转编码器反向旋转时,译码器输出的状态顺序为d、c、b、a、d、c、b、a……。
这种情况的分析方法与正向旋转的分析方法相同,这里不再叙述。
这就好比接力赛。
在一个只允许上一个人的封闭的环形跑道上依次均匀设d、a、b、c、四个站,立四个裁判员。
d点为起止点、出入口,持棒运动员沿环形跑道一站站往下跑。
D裁判长的职责是:
运行员往a去(顺行),告示:
“有人,正向”;往c去(逆行),告示:
“有人,反相”。
其他裁判员的职责是给到达本站的运动员发签证(计数标志),往回跑,撤销签证。
d裁判长的计分规则是:
凭其他裁判的签证齐全加牌示,正,加一分,反,减一分,然后撤销签证。
签证不齐到d,则不计分,撤销签证。
运行员在跑道内来回跑或坐时,d裁判视而不见。
例如在图2中,当从状态d进入状态a时,正旋标志送到J3的D端。
此后的a、b、a、b、a、b都不起作用,只是把J3和J5反复清0.当从状态c进入状态d时,正旋标志到正旋计数输出端,同时J1和J2被清零。
在从状态d进入状态c后,反旋标志送到J4的D端。
同时,D=0被打入J3的Q端,这时J5的D端为零。
在从状态c回到状态d后,反旋计数权被释放。
但是,由于J5的D端为零,虽然这里再次出现状态d,该d脉冲不会发生计数,这就是抗抖动。
图5为抗抖动计数电路的输出波形。
此电路计数频率可达10MHz。
A相和B相输入前应予整形,必要时还要进行电隔离。
本人把此电路用于对在线云台角度的定位与测量。
天线云台有两个旋转角度,俯仰角从0~90度,方位角从0~354度。
旋转编码器用的是OMROM公司的E6A2。
此编码器每转一周,A相或B相输出一百个脉冲。
由此可得,抗抖动计数电路每输出一个脉冲,编码器旋转的角度是3.6度。
如果加上变速齿轮将会提高角度测量精度。
把抗抖动电路的正旋计数输出和反旋计数输出接到单片机的中断管理上,其下降沿时给单片机发中断。
单片机把处理的角度信息送到显示屏上显示出来,从而完成了对天线云台角度的定位与测量。
这套天线角度显示系统在实际使用中运行一直很稳定,没有出现过误计数现象。
----------------------我是分隔线----------------------
1mmSizeMetalShaftEncoderEC11Series(IncrementalEncoder)
Detail
Partnumber
EC11E09204A4
Structure
Vertical
Actuatorconfiguration
Flat
Actuatorlength
20mm
Torque
10±7mN·m
Numberofdetent
18
Numberofpulse
9
Operatingdirection
Vertical
Push-onswitch
Without
Operatinglife
15,000cycles
Minimumorderunit(pcs.)
1,200
Operatingtemperaturerange
-30℃to+85℃
Maximumoperatingcurrent(Resistiveload)
10mA
Electricalperformance
Ratings
10mA5VDC
Outputsignal
OutputofAandBsignals,proportionatetophasedifference
Insulationresistance
100MΩmin.250VDC
Voltageproof
300VACfor1minute
Mechanicalperformance
Push-pullstrength
100N
Resistancetosolderingheat
Manualsoldering
350℃max.3smax.
Durability
Operatinglife
15,000cycles
Environmentalperformance
Cold
-40±3℃for240h
Dryheat
85±3℃for240h
Dampheat
60±2℃,90to95%RHfor240h
Photo
Dimensions
MountingHoleDimensions
Viewedfrommountingside.
OutputWave
SlidingNoise
AtR=5kΩChattering:
3msmax.Bounce:
2msmax.
ProductVarieties
Single-shaftType
1)KnourledType
Unit:
mm
Style(Shaftdiameter:
φ6)
2)FlatType
Unit:
mm
Style(Shaftdiameter:
φ6)
3)SlottedType
Unit:
mm
Style(Shaftdiameter:
φ6)
Notesarecommontothisseries/models.
∙Thissitecatalogshowsonlyoutlinespecifications.Whenusingtheproducts,pleaseobtainformalspecificationsforsupply.
∙Pleaseplacepurchaseordersperminimumorderunit(integer).
∙Productsotherthanthoselistedintheabovechartarealsoavailable.Pleasecontactusfordetails.
∙Thisproductscanbeusedinvehicles.
Althoughtheseproductsaredesignedtoperformoverawideoperatingtemperaturerange,pleaseensurethatyoureceiveandreadtheformaldeliveryspecificationsbeforeuse.
InquiriesaboutProducts
Formoreinformationpleasecontact:
ProductsInformationCenter.
1-7,Yukigaya-otsukamachi,Ota-ku,Tokyo,145-8501,Japan
Phone:
+81(3)5499-8154
Series288Encoder16mmRotaryEncoder
Lowcost,robustdesignMiniature16mmstyle
Bushingmounted
PCterminals,withshaftparallel
orperpendiculartoPCboard
2bit,4bitGrayand4bit
Hexidecimalcodes
availableContinuousrotation
Availablewith16detents
Optionalmomentaryswitch
ElectricalandMechanicalSpecifications
PowerRating
100milliwatts
VoltageRating
Operatingmaximum50VAC
OperatingTemperature
Standard:
-25°Cto+100°C
ContactResistance
5,000ohmsstaticclosedcircuitmaximum
1megohmminimumopencircuit
DetentPoints
16detentsavailable
ContactCTSforspecialrequirements
MomentarySwitchRating
16VDC,20mA
SwitchLife
15,000actuations
SwitchContactResistance
Initialcycle-100milliohmsMAX
Afterlifecycle-200milliohmsMAX
SwitchOperationForce
350±150gforce(12.3oz±5.3oz)
SwitchBounce
5millisecondsMAX
SwitchTravelLength
0.5mm/.020"
PullandThrustonShaft
Withstandapushingforceandpullingforceof8kgstaticloadappliedtoaxialdirectionfor10±1secondwithoutphysicaldamageorelectricaldegradation
----------------------我是分隔线----------------------
按键旋转编码器(涡轮)程序
51:
voidpolling_volume_sw(void)
{
BYTEbSWValue=0;
staticBYTEiLastData=0;
staticBYTEiSWTempData=0;
#ifdefined(SUPPORT_USE_SW_SCANF_CODER)||defined(SUPPORT_USE_SW_SCANF_LEVEL)
polling_check_vfdsw();
return;
#elifdefined(VOLUME_SW_USE_IO)
GPIO_M_SET(13,1); //GAMEDI
GPIO_M_SET(14,1); //GAMEDO
GPIO_E_SET(13,0);
GPIO_E_SET(14,0);
bSWValue=((GPIO_I_GET(14)<<1)|(GPIO_I_GET(13)));
#endif
if(bSWValue!
=iSWTempData)
iSWTempData=bSWValue;
else
{
switch(bSWValue)
{
case0:
if(iLastData==2)
iLastData++;
break;
case1:
if(iLastData==1)
iLastData++;
elseif(iLastData==3)
{
call_ir_func(IRC_VOLUME_UP);
iLastData=0;
}
break;
case2:
if(iLastData==1)
iLastData++;
elseif(iLastData==3)
{
call_ir_func(IRC_VOLUME_DN);
iLastData=0;
}
break;
case3:
iLastData=1;
break;
default:
break;
}