Buenos dias !!
Tengo un problema que es la mayor tonteria del mundo, que por empeño o por cabeza cuadrada no consigo ver!!
Estoy haciendo un programa, que maneja un servomotor (HS311).
El servo motor, tiene un sistema de control por PWM. (Pulso de 1.5ms le pone al medio). Esto es decir, le tengo que meter una señal de 3ms de periodo y con el PWM ir modificando el pulso alto. Bien, hasta ahi, todo perfecto.
configuro el CCP como PWM, y configuro tambien el timer2, para que me saque una señal de 3ms de periodo. Eso esta conseguido. de hecho, mi programa funciona perfectamente salvo por la tonteria siguiente:
la entrada, es analogica. Utilizo la entrada RA0 con un potenciometro, para dependiendo de como situe el potenciometro, el servo adquiera una posicion u otra.
El problema, esque el servo recorre todo su recorrido, en un pequeño tramo del potenciometro. Eso en realidad es una chorrada... pero me gustaria, que el recorrido del motor, se ajuste al recorrido completo del potenciometro.
Esta claro que es la configuracion del CAD... pero chicos... soy muy tonto y no soy capaz de configurarlo bien... es mas, poniendo valores dispares y al azar... ni siquiera el resultado cambia (lo he intentado hacer a ojo).
Os dejo el codigo:
#include <16F877.h>
#FUSES XT
#use delay(clock=4000000)
void main() //PROGRAMA PRINCIPAL
{
int lectura =0;
float final;
SET_TRIS_C(11111011); //RC2 salida (por RC2 vamos a sacar el control para el servo)
SETUP_CCP1(CCP_PWM); //CCP1 como PWM
SET_TIMER2(1); //cargo 0xAA en el timer 2
setup_timer_2(T2_DIV_BY_16,46,1);
RA0_ANALOG;
setup_ADC(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(ALL_ANALOG);
delay_us(50);
do
{
lectura = read_adc(); //lee el valor del potenciometro
final = lectura*0.10; //pasa el valor a un rango de 0 a 5
SET_PWM1_DUTY(lectura); //cargo el valor 0-256 al PWM
delay_ms(20);
}while(true);
}
y aver si se adjuntar una imagen del circuito que tengo montado
.
Si me podeis ayudar, perfecto!!! sino, pos aver si apaño algo.
De cualquier forma, aqui tene un codigo el que quiera manejar un servomotor!!
Un saludo amigos!!