EC11旋转编码器电路和程序

现在手里的项目使用到了旋转编码器,目前只使用了旋转功能,按钮功能没用到,电路图如下:

说一下为什么这么画,原因很简单,旋钮并不需要供电,它做的工作是把原来的高电平拉低,或者不改变高电平状态,这就是为什么旋钮有接地接线柱。所以旋钮的输出引脚需要一直输出高电平就好了,我是用的是Mega8单片机,所以PORTD = 0xC3 DDRD = 0xFF,这样就完成了电平的设置。我按键功能暂时并没有用到。如果直接就把旋钮接到单片机,当使用的时候,用示波器会看到很大的噪声。在网上看到,有使用软件滤波的,我是求助了一个前辈,得到了RC滤波电路,前辈告诉我说,这是很经典的电路。(我是才疏学浅了!!)于是配上0.1uF电容,和10K电阻后,波形非常完美。就算旋转的很快,也没有问题。

以上是硬件部分,接下来是软件部分。软件部分,之前在网上找的例程,抄一下,稍微改改就可以了。今天在找这个程序,发现丢了!都怪自己没有备份,因为知道网上可以找到,所以犯了依赖症,一直找啊找,结果还是徒劳。后来还是自己写的,(难道程序丢了,是因为我剽窃了??罪过罪过)。程序如下:

ISR(INT1_vect)//INT0中断服务程序
{
	cli();
	CodingsWitchPolling2();//(这个名字也是剽窃的,抱歉抱歉)
	sei();
}
nt CodingsWitchPolling1(void)
{
	if (PIND & 0x04)//检测中断引脚电平
	{
		if (PIND & 0x10)//检测另一引脚电平
			USART_Transmit('C');
		else
			USART_Transmit('D');
	}
	else
	{
		if( !(PIND & 0x10))
			USART_Transmit('C');
		else
			USART_Transmit('D');
	}
	return 0;
}


 
  看到这个程序,你又没有感觉很惊讶,其实没那么复杂。现在说一下为什么是这个样子的: 
  

看原理时,都知道,旋转编码器是输出两种波形的,顺时针和逆时针的,如图:

我的硬件电路里面,连接的是PD3(INT0)引脚,另一脚在PD4上面,中断出发方式是任意电平变化都触发,所以就是,触发中断->检测中断引脚电平->检测另外一脚电平->判断是顺时针还是逆时针。OK就这么简单。

EC11旋转编码器电路和程序_第1张图片

你可能感兴趣的:(硬件驱动电路,EC11编码器)