¿Cambiar la frecuencia PWM en arduino afecta la comunicación SPI e I2C y ayuda a controlar el motor de CC?

Estoy usando un protector de motor basado en L293D para controlar dos motores de CC de Arduino Mega 2560. Uso 5 y 6 pines PWM para configurar la velocidad de cada motor. Tengo dos preguntas:

  1. ¿El aumento de la frecuencia de PWM (de 500 Hz predeterminados a 31 KHz como máximo) hará que los motores sean más sensibles? Con la frecuencia predeterminada (aparte del ruido), los motores funcionan por encima del nivel de 130-140 PWM. Por debajo de 130 no giran, solo emiten el sonido "PITIDO". También hay poca diferencia entre el nivel 130 y 255. ¿El aumento de la frecuencia de pulso los hará más sensibles, por lo que podría ejecutarlos a un nivel de 32 (velocidad máxima de 1/8)?

  2. Si es así: ¿cambiar el divisor en timer0 (como se describe aquí http://arduino.cc/playground/Code/PwmFrequency y aquí http://www.mythic-beasts.com/~markt/ATmega-timers.html ) afectar la interfaz SPI e I2C? ¿Afectará (y cómo) a la función pulseIn? (Sé que afectará la función de retraso, pero supongo que tendré que volver a escalar el argumento de la función).

Respuestas (1)

1) 31 KHz es una frecuencia PWM mucho más razonable que 500 Hz. Los motores actuarán como un filtro de paso bajo y generalmente le darán el equivalente de CC de su PWM pero con un PWM de muy baja frecuencia que se vuelve arriesgado, como ha visto. En general, debe aumentar la frecuencia del PWM por encima del ancho de banda del motor; de lo contrario, verá una onda cuadrada en lugar de un voltaje de CC. 31 KHz está justo en el rango de la mayoría de los controladores de motor que he visto. Por lo general, lo desea alto pero no demasiado alto (el ruido de alta frecuencia puede acoplarse a otras partes del circuito, etc.). Parece que estás en un buen rango con 31 KHz.

2) No debería afectar esas tasas de bits. Los periféricos deben tener sus propios divisores y escaladores y deben ser controlados por el reloj principal y no por un temporizador periférico. Sin embargo, no puedo hablar con la función pulseIn.