带有STM32霍尔传感器的无刷直流电机的速度测量

2019-07-14 17:52发布

3相BLDC,带有3个霍尔传感器,120度,2极对下图显示了这种情况: 1.png 我在微处理器的XOR模式下设置了一个定时器。PSC为[19 - 1],计数器周期为[10000 - 1],而定时器时钟为80MHz。我的电机最高转速为3000RPM。计时器设置为XOR模式,每次转换都会生成一个事件。根据STM32F407参考手册,在这种模式下,每次转换都会将CCR寄存器复位为0.这意味着如果我将该寄存器加6次,我应该得到一个完整的“电气旋转”或半个“物理旋转”,因为电机是2极对。我的问题: 我刚刚随机选择了计时器PSC和计数器周期的数字......这些数字将如何影响我的测量?例如,这些数字可以覆盖1到3000 RPM的速度吗?我在XOR ISR中有以下代码......这段代码有意义吗?
  1. <font size="4">static uint32_t speed = 0;
  2. static uint32_t time = 0;
  3. static int isMeasuring = 0;

  4. void XOR_ISR() {   
  5.      uint8_t state = readHallStateFromGPIO();
  6.     if(state == 0b101 && isMeasuring == 0) {
  7.         time = 0;
  8.         isMeasuring = 1;
  9.         time += TIM4->CCR1;
  10.     } else if(isMeasuring == 1 && state != 0b101) {
  11.         time += TIM4->CCR1;
  12.     } else if(isMeasuring == 1 && state == 0b101) {
  13.         time += TIM4->CCR1;
  14.         speed = time;
  15.         isMeasuring = 0;
  16.     }</font>
复制代码
这里,速度(假设我的代码是正确的,应该为整个霍尔传感器的时间段加上定时器值)。然后我将通过将频率转换为时间并将其转换为RPM,并因为极对而乘以2。它是否正确?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。