欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 直流无刷电机驱动与控制5-BLDC和PMSM基础驱动_HALL-STM32定时器参数解释

直流无刷电机驱动与控制5-BLDC和PMSM基础驱动_HALL-STM32定时器参数解释

2025/3/14 21:17:34 来源:https://blog.csdn.net/weixin_66732375/article/details/144751768  浏览:    关键词:直流无刷电机驱动与控制5-BLDC和PMSM基础驱动_HALL-STM32定时器参数解释

原理

  • 两图相同
  • 霍尔三通道信号经过异或门,得到一个TRC信号,每当三相霍尔信号,任意一相发生跳变时,都会在TRC上触发一个脉冲信号。
  • 此TRC脉冲信号会触发计数器的捕获事件,把计数器的计数值捕获到CCR1比较寄存器中,同时把计数器清零。
  • 还会根据设定的CCR2的数值控制TRGO信号。将TRGO信号给高级定时器TIM8。
  • TIM8会根据TRGO信号生成一个COM事件,来实现六步换相的操作。具体看上一节。

直流无刷电机驱动与控制4-stm32定时器-六步换相输出-CSDN博客

例程和实现

1、霍尔传感器的定时器的周期

// 定义定时器预分频,定时器实际时钟频率 84MHz/(HALL_TIMx_PRESCALER+1)
#define HALL_TIM_PRESCALER               83  // 实际时钟频率为 1MHz// 定义定时器周期,当定时器开始计数到 HALL_TIMx_PERIOD 值是更新定时器并生成对应事件和中断
#define HALL_TIM_PERIOD                  0xFFFF //

保证计数器计数到重装载值65535时,已经接收到霍尔传感器的电平跳变。应该设定好周期,才能使得霍尔传感器正常工作,否则计数器的溢出事件可能导致TRGO事件。

2、引脚配置

引脚配置为复用即可,使用权就交给了定时器。一般设置为推挽输出,开漏也无所谓。

void YS_TIM_HALL_Base_MspInit(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};HALL_TIM_GPIO_RCC_CLK_ENABLE();GPIO_InitStruct.Pin       = HALL_TIM_CH1_PIN;GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = HALL_TIM_GPIO_AF;GPIO_InitStruct.Pull      = GPIO_PULLUP;HAL_GPIO_Init(HALL_TIM_CH1_PORT, &GPIO_InitStruct);GPIO_InitStruct.Pin       = HALL_TIM_CH2_PIN;HAL_GPIO_Init(HALL_TIM_CH2_PORT, &GPIO_InitStruct);GPIO_InitStruct.Pin       = HALL_TIM_CH3_PIN;HAL_GPIO_Init(HALL_TIM_CH3_PORT, &GPIO_InitStruct);HAL_NVIC_SetPriority(HALL_TIM_IRQn, 1, 1);HAL_NVIC_EnableIRQ(HALL_TIM_IRQn);
}

3、霍尔传感器定时器初始化

1)结构图一定初始化为0,否则可能会有一个任意的初始值。

TIM_HallSensor_InitTypeDef sHallConfig = {0};
void HALLSensor_TIMx_Init(void)
{TIM_HallSensor_InitTypeDef sHallConfig = {0};/* 通用定时器外设时钟使能 */HALL_TIM_RCC_CLK_ENABLE();/* 初始化板载设备,定时器通道引脚,使能时钟 */YS_TIM_HALL_Base_MspInit();
//  /* 配置定时器基础计数功能 */htimx_hall.Instance           = HALL_TIMx;          // 定时器htimx_hall.Init.Prescaler     = HALL_TIM_PRESCALER; // PSC设置预分频值htimx_hall.Init.CounterMode   = TIM_COUNTERMODE_CENTERALIGNED1;//中心对齐模式htimx_hall.Init.Period        = HALL_TIM_PERIOD;    // 计数周期htimx_hall.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;//可用于死区生成,输入滤波//这里不用// 84/1MHz 84/2MHz 84/4MHzsHallConfig.Commutation_Delay = 0x06; // 延时触发,7us,实际测试需要7ussHallConfig.IC1Filter         = 0x0F; // 输入滤波sHallConfig.IC1Polarity       = TIM_ICPOLARITY_RISING;// 输入捕获极性//不起作用sHallConfig.IC1Prescaler      = TIM_ICPSC_DIV1;       // 输入捕获预分频HAL_TIMEx_HallSensor_Init(&htimx_hall, &sHallConfig);HAL_TIMEx_HallSensor_Start_IT(&htimx_hall);
}

 2)选择 滤波系数和分频大小

如果信号噪声很大,可以逐渐调大TIM_CLOCKDIVISION_DIV1,使用2分频,四分频,滤波参数从0--F依次增大。逐渐寻找一个最合适的值。

3)ClockDivision 和 IC1Filter 解释这两个参数的作用,如何选择?

在STM32微控制器的定时器配置中,ClockDivision 和 IC1Filter 是两个重要的参数,它们分别控制定时器的时钟分割和输入捕获滤波器。下面是对这两个参数的详细解释以及如何选择它们。

ClockDivision

ClockDivision 参数用于设置定时器时钟的分割系数,它影响定时器计数器的时钟频率。可选的值包括:

  • TIM_CLOCKDIVISION_DIV1:时钟不分割,计数器时钟等于定时器时钟。
  • TIM_CLOCKDIVISION_DIV2:时钟分割为二分频,计数器时钟为定时器时钟的一半。
  • TIM_CLOCKDIVISION_DIV4:时钟分割为四分频,计数器时钟为定时器时钟的四分之一。

选择时钟分割系数时,需要考虑以下因素:

  • 定时器时钟源:如果定时器时钟源频率较高,可能需要通过分割来降低计数器时钟频率,以便适应特定的应用需求。
  • 定时器精度:分割时钟会降低计数器的频率,从而影响定时器的分辨率和精度。选择适当的分割系数以平衡精度和性能。
  • 外部信号同步:在某些应用中,可能需要定时器的时钟与外部信号同步,这时可能需要调整时钟分割系数。

例如,如果你的定时器时钟源是84MHz,而你需要一个1MHz的计数频率,可以通过预分频器和时钟分割来实现:

  • 使用预分频器将84MHz分割到84MHz/(84+1)=1MHz。
  • 设置 ClockDivision 为 TIM_CLOCKDIVISION_DIV1,使计数器时钟等于1MHz。
IC1Filter

IC1Filter 参数用于设置输入捕获1的数字滤波器长度。数字滤波器用于减少输入信号的噪声和毛刺,提高捕获的准确性。滤波器长度的值范围可以从0到15,对应的滤波器采样点数为 (2 * 滤波器长度 + 1)。

例如:

  • IC1Filter = 0x0F:滤波器长度为15,采样点数为 (2*15 + 1) = 31。

选择滤波器长度时,需要考虑以下因素:

  • 噪声水平:在噪声环境较高的情况下,增加滤波器长度可以更好地滤除噪声。
  • 响应时间:滤波器长度增加会增加捕获的延迟,因为需要更多的采样点来确定输入信号的稳定状态。
  • 信号频率:对于高频信号,需要较短的滤波器长度以避免响应延迟;对于低频信号,可以使用较长的滤波器长度。

例如,如果你的输入信号频率较低,且环境噪声较高,可以选择较长的滤波器长度(如15)来提高捕获的准确性。如果信号频率较高,可能需要选择较短的滤波器长度(如3或7)以减少延迟。

总结
  • ClockDivision:设置定时器时钟的分割系数,影响计数器的时钟频率。根据定时器时钟源和应用需求选择合适的分割系数。
  • IC1Filter:设置输入捕获滤波器长度,用于滤除输入信号的噪声和毛刺。根据噪声水平和信号频率选择适当的滤波器长度。

在配置定时器时,需要综合考虑这些参数以满足特定应用的需求。

4)输入捕获分频系数选择?

这个参数只能选择为1,每次输入信号跳变,都要进行捕获。如果设置为TIM_ICPSC_DIV2,则需要捕获到两个跳变信号,导致六步信号输出有误,或者延时。

 sHallConfig.IC1Prescaler      = TIM_ICPSC_DIV1;       // 输入捕获预分频

5)使能中断-开启换相操作,sHallConfig.Commutation_Delay = 0x06; 这个设置有什么用?

  HAL_TIMEx_HallSensor_Init(&htimx_hall, &sHallConfig);HAL_TIMEx_HallSensor_Start_IT(&htimx_hall);

对于F407来说,换相操作,大概7us。

sHallConfig.Commutation_Delay 是在配置 BLDC 电机控制时常用的一个参数,特别是在使用霍尔传感器进行换相控制的场景中。这个参数通常用于设置换相延迟时间,以优化电机的性能和控制精度。

简要解释

  • 换相延迟:在 BLDC 电机控制中,换相是指根据电机的位置传感器(如霍尔传感器)的信号,切换不同的相绕组,以保持电机的旋转。换相延迟是指在接收到传感器信号后,延迟一定的时间再进行换相操作。

  • 作用

    1. 平滑电流转换:通过引入延迟,可以使电流从一个相平滑地转移到另一个相,减少电流突变,从而减少电磁干扰(EMI)和电流峰值。
    2. 提高效率:适当的延迟可以提高电机的效率,因为电流更有效地传递到电机。
    3. 减小转矩脉动:延迟可以减少换相时的转矩波动,使电机运行更加平稳。

具体设置

  • 值的选择0x06 是十六进制表示,等于十进制的 6。这个值具体代表的时间延迟取决于系统的时钟频率和定时器配置。通常,这个值是根据电机的特性、传感器的响应时间和控制系统的采样率来确定的。

示例

假设定时器的时钟频率为 1 MHz,定时器的预分频器设置为 0,每个计数周期为 1 μs。如果 Commutation_Delay 设置为 6,那么换相延迟时间为 6 μs。

调试和优化

  • 初始设置:初学者可以参考电机datasheet或相关应用笔记中的推荐值。
  • 调整策略:通过实验调整这个值,观察电机的转速、扭矩和噪音等参数,找到最佳的换相延迟时间。

注意事项

  • 过短的延迟:可能导致电流突变,增加EMI,甚至引起电机震动。
  • 过长的延迟:可能降低电机效率,增加能量损失,并可能引起换相不及时,导致电机性能下降。

总结

sHallConfig.Commutation_Delay 的设置对于BLDC电机的控制至关重要,它影响着电机的运行平稳性、效率和可靠性。通过合理设置这个参数,可以显著提高电机的性能。

6)读取霍尔传感器引脚的状态

由于霍尔传感器只能捕获到有信号,但是不知道哪个信号,因此需要用这个函数读取,三个引脚的状体。

/*** 函数功能:读取霍尔引脚状态* 输入参数:无* 返 回 值:霍尔引脚状态* 说明:直接读取引脚的状态,数据字节的低三位分别为UVW(HALL)的电平状态*/
int32_t HALL_GetPhase()
{int32_t tmp = 0;tmp |= HAL_GP

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词