Mientras llegan los drivers he hecho algunas pruebas, y tengo el siguiente problema... y es que si aumento el duty del PWM me aumenta la amplitud de la onda, no me amplia el ciclo, y no sé porque, llegando de 0V a aprox 2V (cosa que tampoco entiendo cuando deberian de ser 5V)
El código que tengo es el siguiente:
AllDigital
Define CLOCK_FREQUENCY = 4
Symbol signal_rc = PORTC.4 'RECEPCION DE LA SEÑAL
Symbol signal_error = PORTC.7 'LED INDICADOR SEÑAL DE R/F ERRONEA
Symbol adelante = PORTC.5 'DIRECCION HACIA DELANTE
Symbol atras = PORTC.6 'DIRECCION HACIA ATRAS
TRISB = 0 'SALIDA
TRISC.4 = 1 'ENTRADA
TRISC.7 = 0 'SALIDA
TRISC.5 = 0 'SALIDA
TRISC.6 = 0 'ENTRADA
Const minimo = 90
Const centro = 150
Const maximo = 210
Dim servo_in As Byte
Dim pwm_duty As Byte
Dim pwm_duty_ant As Byte
Dim valor As Byte
While servo_in <> centro
signal_error = 1
PORTB = servo_in
ServoIn signal_rc, servo_in
Wend
'VARIABLES A CERO
signal_error = 0
adelante = 0
atras = 0
PWMon 1, 2
PWMduty 1, 0
PWMon 2, 2
PWMduty 2, 0
'COMIENZA EL PROGRAMA GENERAL
loop:
ServoIn signal_rc, servo_in
WaitMs 1
PORTB = servo_in
If servo_in < minimo Then
'ES DEMASIADO BAJA
Call pararmotor()
Else
If servo_in > minimo And servo_in < centro Then
'ESTA ENTRE EL MINIMO Y EL CENTRO (RETROCESO)
adelante = 0
atras = 1
valor = centro - servo_in
pwm_duty = (255 * valor) / (centro - minimo)
If pwm_duty <> pwm_duty_ant Then PWMduty 2, pwm_duty
pwm_duty_ant = pwm_duty
Else
If servo_in = centro Then
'ESTA EN EL CENTRO
Call pararmotor()
Else
If servo_in > centro And servo_in < maximo Then
'ESTA ENTRE EL CENTRO Y EL MAXIMO (AVANCE)
atras = 0
adelante = 1
valor = servo_in - centro
pwm_duty = (255 * valor) / (maximo - centro)
If pwm_duty <> pwm_duty_ant Then PWMduty 1, pwm_duty
pwm_duty_ant = pwm_duty
Else
'ES DEMASIADO ALTA
Call pararmotor()
Endif
Endif
Endif
Endif
WaitMs 20
Goto loop
End
Proc pararmotor()
If adelante <> 0 Or atras <> 0 Then
adelante = 0
atras = 0
PWMduty 1, 0
PWMduty 2, 0
Endif
Return
Se puede apreciar que parto de 2 canales PWM que activo al mismo tiempo, pero con un duty de 0, cuando la palanca del mando de rc avanza, aumenta el duty del canal 1, y cuando retrocede, aumenta el del canal 2, dejando el duty del canal contrario a 0.
No sé porque ocurre este problema, imagino que la salida del canal PWM deberia ser constante a 5V y variar solo el ancho de pulso.
Un saludo