Motor DC a Servo

Que tal a todos.
Miren me piden controlar la posicion angular de un motor DC de 0 a 360 grados y quiero meter un potenciometro Multivuelta de 10k y 10 vueltas, el problema es que si lo alimento a 5 volts para que sea mi entrada al PIC solo cuento con una resitencia de 1k y por tanto cuento con menos voltaje para el convertidor ADC del PIC. Pensaba alimentar al Pot con mas voltaje de modo que en una vuelta cuente con 5 volt, pero por si alguna razon se pasa del limite de 1k podria dañar la entrada del PIC NO?.
Como podria hacer para que aunque conecte el POT con 5 volts en una vuelta de 1k me mande de 0 a 5 volts supongo que con alguna configuracion de amplificador con OPAM talvez pero la verdad no soy muy bueno en electronica analogica.
Den antemano agradesco su ayuda. Si estoy equivocado en mis supociciones les agradeceria me corriguieran. ...
 
No te hace falta mandar 0/5V, programas el PIC para que tome decisiones en base a la tensión que le llegue.
 
Miren me piden controlar la posicion angular de un motor DC de 0 a 360 grados y quiero meter un potenciometro Multivuelta de 10k y 10 vueltas, el problema es que si lo alimento a 5 volts para que sea mi entrada al PIC solo cuento con una resitencia de 1k y por tanto cuento con menos voltaje para el convertidor ADC del PIC. Pensaba alimentar al Pot con mas voltaje de modo que en una vuelta cuente con 5 volt, pero por si alguna razon se pasa del limite de 1k podria dañar la entrada del PIC NO?.
Como podria hacer para que aunque conecte el POT con 5 volts en una vuelta de 1k me mande de 0 a 5 volts supongo que con alguna configuracion de amplificador con OPAM talvez pero la verdad no soy muy bueno en electronica analogica.
Den antemano agradesco su ayuda. Si estoy equivocado en mis supociciones les agradeceria me corriguieran. ...

hacer de un motor un servo no es tan sencillo como poner un potenciometro, se necesita un control, normalmente es un PID que puede ser por software.

con respecto a tu pregunta, la mayoria de los PICs en sus entradas analogicas tienen proteccion, asi que menciona de que pic estas hablando o dale sin miedo XD.
 
Ok entiendo que debo hacer el controlador PID de hecho ya lo estoy implementando, lo que pasa es que pensaba que si mandaba mas tension de la establecida para la conversion ADC podria dañar el PIC, y queria implementar el un tipo de amplificador para hacerle llegar a la entrada analogica de 0 a 5 volts.

Debo de mover el motor de grado en grado, por lo que si divido 5 volts / 360 grados nececito 13.88 mV por cada grado. El ADC del PIC 18F4550 es de 10 bits por lo que si alimento al POT con 5 volts tendria 0.5 volts por vuelta y el ADC me entregaria 0.488mV.
Y por eso preguntaba sobre un amplificador porque no se si este voltaje lo alcance a detectar el PIC.
 
No se entiende o no entendi XD...

tu rango es de 0 a 5V en 360º, y vas a medir los 360º, si tu amplificas se te sale del rango o no puedes medir los 360º.

tienes que basarte a la resolucion del ADC (10bits) o conseguir uno de mayor resolucion o hacel el PID con operacionales.

el pic no se daña si aplicas mas voltaje mientras este dentro de los parametros de corriente que lo puedes ver en la ficha tecnica del PIC, en alguna parte que diga algo como Clamp current limit o algo asi, segun recuerdo son como 20mA pero no estoy seguro.

por lo que mencionas que vas a utilizar un pote de 1K (creo) no tienes ningun problema.
 
Lo primero es colocar un reductor de RPM (caja reductora), para que por cada "X" vueltas de tu motor DC se mueva 1 grado la la salida de la caja reductora, primero fíjate en la parte mecánica y luego en el controlelectrónico para le exactitud.
 
Ok gracias a todos por sus respuestas, pero buscando en internet me decidi mejor a usar un motor con un encoder incremental y de hecho ya estoy controlando la posicion de mi motor, con un pulsador le voy aumentando el setpoint cada 3 pulsos y al parecer la posicion va bien.
Ahora el problema es la lectura de multiples bytes con el PIC que le enviare desde LabVIEWy buscando aquí en el foro encontré una respuesta interesante. Pero hay algo que no logro entender no sé si me pudieran ayudar.

El mensaje y código es:

Yo utilizaria algo así,
la idea es que la interrupcion este recibiendo el dato por el serial
y lo vaya acumulando en una cadena hasta que reciba un 0x0d
o enter y en ese momento lo copia a la variabla Data y reinicia variables.

const unsigned char BUFFERSIZE = 20;
unsigned char ContBUFFER_Rx0 = 0;
unsigned char BUFFER_Rx0[BUFFERSIZE];
unsigned char Data[BUFFERSIZE];

#pragma INTERRUPT rx0_int
void rx0_int(void)
{
unsigned char dato_rx;
dato_rx = (unsigned char) (U0RB & 0xf1ff);
BUFFER_Rx0[ContBUFFER_Rx0] = dato_rx;
if(dato_rx==0x0d || ContBUFFER_Rx0==BUFFERSIZE_RX0)
{
BUFFER_Rx0[ContBUFFER_Rx0] = 0;
strcpy(Data,BUFFER_Rx0);
strcpy(BUFFER_Rx0,"");
ContBUFFER_Rx0 = 0;
}
else ContBUFFER_Rx0++;
}

Lo que no entiendo es esta linea: dato_rx = (unsigned char) (U0RB & 0xf1ff);

Además una vez que se hayan guardado los datos en el Buffer como haria para separarlos, por ejemplo si yo lei "147258145854758" y quiero separarlo como cadenas "147", "258",etc para que la primera sea un dato que me realiza una función, la segunda otra distinta, etc. Es decir la cadena contendrá los setpoints que me indicaran la cantidad de pulsos que debe de moverse el motor y los setpoints los comparo con los pulsos que adquiere el PIC desde el encoder y calculo el error con un PID para activar el control de giro.

Espero pudiesen ayudarme, se lo agradecería mucho.
 
Atrás
Arriba