Estudio de Soluciones
2) Solución: Líneas sumadas están marcadas abajo. Vamos a asumir que los servos están
conectados a P5 y P7. En el ciclo
activarse a 4 y 6 por el primer par de pulsos, luego cambiar a 5 y 7 por el segundo grupo de
pulsos. También un
pulsos puedan terminar antes de moverse al siguiente par de pulsos
A este punto el código todavía tiene 15.6 ms en el ciclo
servos y hacer un objeto servo control? Vea forums.parallax.com → Propeller Chip →
Propeller Education Kit Labs → PE Kit Servo Control para un ejemplo.
{{
TestDualPWM (Project 2).spin
Usando dos módulos contadores demuestra como enviar una señal dual PWM. El tiempo
de ciclo es el mismo para ambas señales pero los tiempos alto son independientes
uno del otro.
Modificado para controlar cuatro servos.
}}
CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
PUB TestPwm | tc, tHa, tHb, t, us
us := clkfreq/1_000_000
ctra[30..26] := ctrb[30..26] := %00100
sencilla
ctra[5..0] := 4
ctrb[5..0] := 6
frqa := frqb := 1
reloj
dira[4] := dira[6] := 1
dira[5] := dira[7] := 1
tC := 20_000 * us
tHa := 700 * us
tHb := 2200 * us
t := cnt
repeat tHa from (700 * us) to (2200 * us) ' <- Cambia señal PWM Repeat
' Primer par de pulsos
ctra[5..0] := 4
contadores
ctrb[5..0] := 6
phsa := -tHa
phsb := -tHb
waitcnt(2200 * us + cnt)
' Segundo par de pulsos
ctra[5..0] := 5
contadores
ctrb[5..0] := 7
phsa := -tHa
phsb := -tHb
waitcnt(2200 * us + cnt)
Pagina 218 · Kit Educativo de Prácticas Propeller: Fundamentos
repeat
tiene que agregarse después de cada par de pulsos para que los
waitcnt
los campos PIN de
ctra
, porque no agregar otros
repeat
' Reloj sistema→ 80 MHz
' <- Suma us
' <- Suma
' Contadores A y B → NCO terminación
' Activa pins para control
' Suma 1 a phs con cada ciclo de
' Activa pisn E/S a salida
' <- Cambia Set up tiempo de ciclo
' <- Cambia Set up tiempos alto
' <- Cambio
' Marca tiempo actual.
' Activa pins para controlar
' Define e inicia el Pulso A
' Define e inicia el pulso B
' Espera por pulsos para terminar
' Activa pins para controlar
' Define e inicia el pulso A
' Define e inicia el pulso B
' Espera por pulsos para terminar
y
tendrán que
ctrb