关于霍尔编码器遇到的问题及解决

关于霍尔编码器遇到的问题及解决

所用芯片:STC8H8K64U

EC11 编码器读取程序:

GPIO_InitTypeDef	GPIO_InitStructure;			       //结构定义
                                                                      
/* 配置中断的GPIO为浮空输入 */                                       
GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3;     //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_HighZ;			       //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);	           //初始化
u8 WakeUpSource;
u16 En_count = 26;


//========================================================================
// 函数: INT0_ISR_Handler
// 描述: INT0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void INT0_ISR_Handler (void) interrupt INT0_VECTOR		//进中断时已经清除标志
{
	// TODO: 在此处添加用户代码
	P00 = ~P00;
  // 二次读取电平消抖:确认当前引脚确实为低电平,排除抖动毛刺
  if(P32 == 0)
  {
		// A相下降沿触发,读取B相(P3.3)电平判断转向
		if(P33 == 0)
		{
			En_count--;  // 反转
		}
   }
	WakeUpSource = 1;
}

//========================================================================
// 函数: INT1_ISR_Handler
// 描述: INT1中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
void INT1_ISR_Handler (void) interrupt INT1_VECTOR		//进中断时已经清除标志
{
	// TODO: 在此处添加用户代码
	P01 = ~P01;
	// 二次读取电平消抖
  if(P33 == 0)
  {
		// B相下降沿触发,读取A相(P3.2)电平判断转向
		if(P32 == 0)
		{
			En_count++;  // 正转
		}
  }
	WakeUpSource = 2;
}

image-20260813201045788img

根据EC11 编写的程序无法读取霍尔编码器的原因:

  • 只有黑色(霍尔2)带上拉电阻,橙色(霍尔1)完全无上拉,导致霍尔编码器无法输出正交波形
  • 解决办法:把浮空输入改为上拉输入恢复正常

image-20260813203124680

GPIO_InitTypeDef	GPIO_InitStructure;			       //结构定义
                                                                      
/* 配置中断的GPIO为浮空输入 */                                       
GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3;     //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7, 或操作
GPIO_InitStructure.Mode = GPIO_PullUp;			       //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);	           //初始化
posted @ 2026-08-13 20:45  Q&25  阅读(9)  评论(0)    收藏  举报