Paso 1: Antecedentes/prototipo
puesto que los servos funcionan (típicamente) entre 1ms y 2ms, sí entiendo que hay variaciones para el período actual para cada servo, pero usted consigue la idea. se creó tal que la 3 salida compairs sólo en un pin específico para 2ms antes de que se mueven al siguiente pin. Este ciclo continúa hasta que no hay más pasadores de servo izquierdos y enemigos a un estado "dummy" y entonces después los 20ms transcurrido los reinicios de sistema del servocontrol. Me bajo soporte que yo no puedo decir que muy derecho pero ohwell, mal colocar algún código de ejemplo que muestra que me refiero.
Tengo 2 diseños publicados, 1 en la placa era la orriginal prueba del concepto antes de que diseñé la Junta
el diseño final requiere un regulador de 5v los servos y regulador 3v para el pic24fj64gb004 y todo lo demás
=======================================================================================
Código de abajo
=======================================================================================
void _T1Interrupt(void) __attributos__ ((interrupción, no_auto_psv)) / / 20ms
{
habilitar a la configuración inicial de una interrupción
clock2ms = 0;
temporizador de inicializar/reiniciar los 2ms
Init2msTimer();
_T2IF = 1;
_T1IF = 0; claro la bandera de interrupción
}
void _T2Interrupt(void) __attributos__ ((interrupción, no_auto_psv)) / / 2ms
{
0-5 representa los 6 servos por alfileres de salida en comparación
cada caso mueve la salida compara a los pines respectivos
permite que el pasador de servo
establece el valor de comparar la salida servo curpos
por defecto representa que todos los conjuntos de 6 servos han sido servicio y a desactivar el temporizador
/ * caso x:
* permitir la comparación de salida para el respectivo pin
* activar pin de servo
* establecer el valor de comparar la salida
* desactivar salida compara el pin anterior
*
*/
Switch(clock2ms)
{
caso 0:
configurar el pin
movimiento OC a la servopp
S1G1PP = OC1_PPS;
S2G1PP = OC2_PPS;
S3G1PP = OC3_PPS;
Configurar el OC
OC1CON1 = 0X0002;
OC2CON1 = 0X0002;
OC3CON1 = 0X0002;
valor de la carga en el OC
OC1R = OneMs;
OC2R = OneMs + OneMs/2;
OC3R = 2 * OneMs;
rotura;
caso 1:
S1G1PP = NO_OC;
S2G1PP = NO_OC;
S3G1PP = NO_OC;
configurar el pin
movimiento OC a la servopp
S1G2PP = OC1_PPS;
S2G2PP = OC2_PPS;
S3G2PP = OC3_PPS;
Configurar el OC
OC1CON1 = 0X0002;
OC2CON1 = 0X0002;
OC3CON1 = 0X0002;
valor de la carga en el OC
OC1R = OneMs;
OC2R = OneMs + OneMs/2;
OC3R = 2 * OneMs;
rotura;
caso 2:
S1G2PP = NO_OC;
S2G2PP = NO_OC;
S3G2PP = NO_OC;
configurar el pin
movimiento OC a la servopp
S1G3PP = OC1_PPS;
S2G3PP = OC2_PPS;
S3G3PP = OC3_PPS;
Configurar el OC
OC1CON1 = 0X0002;
OC2CON1 = 0X0002;
OC3CON1 = 0X0002;
valor de la carga en el OC
OC1R = OneMs;
OC2R = OneMs + OneMs/2;
OC3R = 2 * OneMs;
rotura;
por defecto:
quitar el OC del último grupo de servo para utilizarlo.
S1G3PP = NO_OC;
S2G3PP = NO_OC;
S3G3PP = NO_OC;
Disable2msTimer();
rotura;
}
clock2ms ++;
_T2IF = 0; claro la bandera de interrupción
}