差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | 后一修订版 两侧同时换到之后的修订记录 | ||
旋转编码器模块 [2017/06/06 10:34] anran [硬件说明] |
旋转编码器模块 [2017/06/06 11:01] anran [硬件说明] |
||
---|---|---|---|
行 7: | 行 7: | ||
------- | ------- | ||
旋转编码器是用来测量转速的装置,因其人性化的操作被用于越来越多的电子设备中,旋转编码器有多种分类: | 旋转编码器是用来测量转速的装置,因其人性化的操作被用于越来越多的电子设备中,旋转编码器有多种分类: | ||
- | \\ | + | |
- | 以编码器工作原理可分为:光电式、磁电式和触点电刷式。 | + | * 以编码器工作原理可分为:光电式、磁电式和触点电刷式。 |
- | \\ | + | * 以码盘刻孔方式不同分为:增量式和绝对式两类。 |
- | 以码盘刻孔方式不同分为:增量式和绝对式两类。 | + | |
- | \\ | + | |
关于以上各类编码器的区别,大家自行查阅资料,这里就不多做介绍了。 | 关于以上各类编码器的区别,大家自行查阅资料,这里就不多做介绍了。 | ||
\\ | \\ | ||
我们[[STEP-BaseBoard]]底板上集成的EC11的旋转编码器就属于增量式触电电刷编码器,其工作原理如下: | 我们[[STEP-BaseBoard]]底板上集成的EC11的旋转编码器就属于增量式触电电刷编码器,其工作原理如下: | ||
\\ | \\ | ||
- | {{:增量式触电点刷编码器.jpg?300 |}} | + | {{ :增量式触电点刷编码器.jpg?400 |}} |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
- | \\ | + | |
\\ | \\ | ||
+ | 如上图所示,当顺时针旋转时A信号提前B信号90度相位,当逆时针旋转时B信号提前A信号90度相位,FPGA接收到旋转编码器的A、B信号时,可以根据A、B的状态组合判定编码器的旋转方向。 | ||
\\ | \\ | ||
+ | 程序设计中我们可以对A、B信号检测,检测A信号的边沿及B信号的状态, | ||
+ | * 当A信号上升沿时B信号为低电平,或当A信号下降沿时B信号为高电平,证明当前编码器为顺时针转动 | ||
+ | * 当A信号上升沿时B信号为高电平,或当A信号下降沿时B信号为低电平,证明当前编码器为逆时针转动 | ||
- | + | 本设计实际电路连接如下: | |
- | + | ||
- | + | ||
- | + | ||
- | 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,使用行线和列线分别连接到按键开关的两端,这样我们就可以通过4根行线和4根列线(共8个I/O口)连接16个按键,而且按键数量越多优势越明显。 | + | |
- | + | ||
- | FPGA驱动矩阵按键模块,首先我们来了解矩阵按键的硬件连接: | + | |
- | \\ | + | |
- | {{ :矩阵按键.jpg?800 |}} | + | |
- | \\ | + | |
- | 上图为4x4矩阵按键的硬件电路图,可以看到4根行线(ROW1、ROW2、ROW3、ROW4)和4根列线(COL1、COL2、COL3、COL4),同时列线通过上拉电阻连接到VCC电压(3.3V),对于矩阵按键来讲: | + | |
- | - 4根行线是输入的,是由FPGA控制拉高或拉低, | + | |
- | - 4根列线数输出的,是由4根行线的输入及按键的状态决定,输出给FPGA | + | |
- | 当某一时刻,FPGA控制4根行线分别为ROW1=0、ROW2=1、ROW3=1、ROW4=1时, | + | |
- | * 对于K1、K2、K3、K4按键:按下时对应4根列线输出COL1=0、COL2=0、COL3=0、COL4=0,不按时对应4根列线输出COL1=1、COL2=1、COL3=1、COL4=1, | + | |
- | * 对于K5~~~K16之间的按键:无论按下与否,对应4根列线输出COL1=1、COL2=1、COL3=1、COL4=1, | + | |
- | 通过上面的描述:在这一时刻只有K1、K2、K3、K4按键被按下,才会导致4根列线输出COL1=0、COL2=0、COL3=0、COL4=0,否则COL1=1、COL2=1、COL3=1、COL4=1,反之当FPGA检测到列线(COL1、COL2、COL3、COL4)中有低电平信号时,对应的K1、K2、K3、K4按键应该是被按下了。 | + | |
- | + | ||
- | 按照扫描的方式,一共分为4个时刻,分别对应4根行线中的一根拉低,4个时刻依次循环,这样就完成了矩阵按键的全部扫描检测,我们在程序中以这4个时刻对应状态机的4个状态。 | + | |
- | 至于循环的周期,根据我们基础教程里可知,按键抖动的不稳定时间在10ms以内,所以对同一个按键采样的周期大于10ms,这同样取20ms时间。20ms时间对应4个状态,每5分钟进行一次状态转换。 | + | |
- | \\ | + | |
- | {{ :矩阵按键程序框图.jpg?800 |}} | + | |
\\ | \\ | ||
- | {{ :矩阵按键扫描法原理.jpg |}} | + | {{ :旋转编码器硬件连接.jpg?800 |}} |
\\ | \\ | ||
====Verilog代码==== | ====Verilog代码==== |