Tengo dificultades para entender y encontrar una solución para encontrar la velocidad de un motor BLDC. Aquí están las especificaciones:
- BLDC trifásico con sensores Hall 3x en 120 grados, 2 pares de polos
La imagen de abajo muestra la situación:
HeconfiguradountemporizadorenmodoXORenelmicro.ElPSCes[19-1]yelPeriododelcontadores[10000-1]mientrasqueelrelojdeltemporizadores80MHz.
Mimotortienelavelocidadmáximade3000RPM.
EltemporizadorseconfiguraenmodoXORyconcadatransicióngeneraunevento.DeacuerdoconelmanualdereferenciaSTM32F407,enestemodo,cadatransiciónrestableceelregistroCCRa0.Significaquesisumoesteregistro6veces,deberíaobteneruna"Rotación eléctrica" completa o la mitad "rotación física. "ya que el motor es 2 pares de polos.
Mis preguntas:
A) Acabo de seleccionar esos números para el temporizador PSC y el período de contador de forma aleatoria ... ¿cómo afectarán estos números a mi medición? p.ej. ¿Con esos números puedo cubrir velocidades de 1 a 3000 RPM?
B)
Tengo el siguiente código dentro del XOR ISR ... ¿este código tiene sentido?
static uint32_t speed = 0;
static uint32_t time = 0;
static int isMeasuring = 0;
void XOR_ISR() {
uint8_t state = readHallStateFromGPIO();
if(state == 0b101 && isMeasuring == 0) {
time = 0;
isMeasuring = 1;
time += TIM4->CCR1;
} else if(isMeasuring == 1 && state != 0b101) {
time += TIM4->CCR1;
} else if(isMeasuring == 1 && state == 0b101) {
time += TIM4->CCR1;
speed = time;
isMeasuring = 0;
}
Aquí, la velocidad (supongamos que mi código es correcto, debería sumar los valores del temporizador durante todo un período del sensor Hall). Luego lo convertiré a RPM al convertir la frecuencia a tiempo y multiplicar por 2 debido a los pares de polos.
¿Esto es correcto?