球杆电气是一类透过掌控电气旋转,同时实现球杆伸缩式的电子元件。
以LA31为例,有2个USBM+
和M-
,当两者间的冷却系统为+24V、0V、-24V时,依次同时实现正转、暂停、探底回升。也可能将是-24V正转,+24V探底回升,以前述为依据。除VCC
和GND
以外,除了2个USB克尔意见反馈USBHALL A
和HALL B
,这是借助克尔负面效应检验电气运行路径和边线的方式。电气正转探底回升时,三个克尔电子元件的触摸次序相同,因而能用以推论电气的旋转路径。 假如2个克尔电子元件间接装到电气上,根本无法确认电气在旋转中的粗略地边线,即4个参宿中的三个,最小数值在90°,较为不新颖。但假如透过电气与球杆间透过曲轴控制了传动装置比率,则能把球杆的边线精确度提升N倍。
LA31电气旋转1圈,克尔太空船旋转3圈,输入12个satate,伸缩式3或4mm,则每三个state伸缩式0.25mm或0.3333mm。 透过历史记录state的变动单次,比如说正转+1,探底回升-1,则能即时掌控球杆电气的球杆顶部边线。
透过上面的如是说,能看出,三个克尔触摸器的输入信号AB组成了三个位宽2bit的数据state,要历史记录state的变动单次,一要检验出state变动,二要推论出正转还是探底回升。
state | state_pre | |
---|---|---|
正转 | 00,01,11,10 | 10,00,11,01 |
探底回升1 | 00,10,11,01 | 01,11,00,10 |
探底回升2 | 10,11,01,00 | 01,11,00,10 |
透过上表能看出,不管探底回升的初始state怎样,以state为索引,对应的state_pre都是一样的,正转也是如此。 这样,我们就得到了三个state_pre_xxx数组,程序也就很容易写出了:
include uint8_tstate_pre=4;//初始化为三个大于3的数即可uint8_tstate=0;uint8_tstate_pre_fwd[4]={2,0,3,1};uint8_tstate_pre_rev[4]={1,3,0,2};intcnt=0;voidmain(){while(1){state=pin_A;state=state<<1+pin_B;if(state!=state_pre){print("
电气发生了旋转
");if(state_pre==state_pre_fwd[state]){cnt++;print("正转
");}if(state_pre==state_pre_rev[state]){cnt--;print("探底回升
");}state_pre=state;}}}
本文使用Zhihu On VSCode创作并发布
联系电话
微信扫一扫