(标准库)直流无刷电机驱动(3)——霍尔传感器状态获取

该代码段实现了通过读取霍尔传感器HU、HV、HW的状态来确定电机在六步法旋转中的位置。通过GPIO读取状态并配置TIMx的中断极性,实现了手动的双边沿触发,以确保在传感器状态变化时准确捕获电机的位置信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过读取霍尔传感器 HU、HV、HW的状态判断在六步法的哪一步!

u8 hall_get_state(void){

	u8 state=0;//获取六步法的第几步
	/* 读取霍尔传感器 U 的状态 */
	if(GPIO_ReadInputDataBit(HALL_U_GPIO_PORT, HALL_U_PIN)!= RESET)
  {
    state |= 0x01U << 2;
		TIM_OC1PolarityConfig(HALL_TIM,TIM_ICPolarity_Falling);//引脚为1,当引脚变0进入中断(下降沿检测)
  }
	else{
		TIM_OC1PolarityConfig(HALL_TIM,TIM_ICPolarity_Rising); //引脚为0,当引脚变1进入中断(上升沿检测)
	}
	
  /* 读取霍尔传感器 V 的状态 */
  if(GPIO_ReadInputDataBit(HALL_V_GPIO_PORT, HALL_V_PIN)!= RESET)
  {
    state |= 0x01U << 1;
  	TIM_OC2PolarityConfig(HALL_TIM,TIM_ICPolarity_Falling);
  }
	else{
		TIM_OC2PolarityConfig(HALL_TIM,TIM_ICPolarity_Rising);
	}
  
  /* 读取霍尔传感器 W 的状态 */
  if(GPIO_ReadInputDataBit(HALL_W_GPIO_PORT, HALL_W_PIN)!= RESET)
  {
    state |= 0x01U << 0;
  	TIM_OC3PolarityConfig(HALL_TIM,TIM_ICPolarity_Falling);
  }
	else{
		TIM_OC3PolarityConfig(HALL_TIM,TIM_ICPolarity_Rising);
	}
	
	//printf("statel:%d\r\n",state);   
	return state;
}

这里是针对前文说的通用TIMx的通道不能进行双边沿触发,进行手工实现双边沿触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值