关于霍尔编码器遇到的问题及解决
关于霍尔编码器遇到的问题及解决
所用芯片: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;
}


根据EC11 编写的程序无法读取霍尔编码器的原因:
- 只有黑色(霍尔2)带上拉电阻,橙色(霍尔1)完全无上拉,导致霍尔编码器无法输出正交波形
- 解决办法:把浮空输入改为上拉输入恢复正常

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); //初始化
浙公网安备 33010602011771号