integrado que transforme señal de voltage en PWM

buenas saludos a los foreros estoy trabajando en el diseño de un brazo robot de tres grados de libertad y para el control de los motores tengo pensado hacerlo por pwm entonces la pregunta es si existe un CI que me transforme una señal de voltage que venga del PID en PWM en dond el perido de trabajo sea directamente proporcional al voltage que esta llegando del PID es decir si llegan oV es 0% y si llegan 5V es el 100%
un video del brazo
 

Adjuntos

  • 11111.jpg
    11111.jpg
    14.8 KB · Visitas: 13
Lo que necesitas es un oscilador controlado por voltaje (o tensión) o VCO. Hay varios circuitos que puedes utilizar, incluso el 555 te puede servir. Revisa este tema para que te des una idea: https://www.forosdeelectronica.com/f11/crear-oscilador-controlado-voltaje-usando-ci-555-a-23168/

El PWM no es variacion de frecuencia, es variacion de la duracion del ancho del pulso manteniendo constante el periodo y por ende la frecuencia, seria sencillo un generador frecuencia con señal de rampa ingresa a un AO en configuracion comparador y la señal de voltaje ingresa por la otra entrada del AO, la salida sera una señal de frecuencia fija pero ciclo util variable= PWM, chauuuuuuuu
 
me imagino que quieres utilizar el cad del pic para que convierta
la señal del pid en un n° y que este sea el duty cycle pero mi pregunta es cual pic tiene CAD y por lo menos 3 canales de PWM pa lograr controlar los tres motores
 
Si son 3 es mas sencillo aun , un generador de rampa o triangular y 3 comparadores , 3 entradas de tension de control desde el PID y tres salidas PWM, chauuuuuuuuu
 
bueno, una manera de hacerlo es como te dice fdsergio, aunque si quieres hacerlo con micro, pero hasta donde conozco el pic16f877 tiene solo dos modulos pwm, asi que el tercero tendrias que hacerlo por software (lo cual no es muy dificil).. saludos
 
bueno, yo utilizo el timer1 asi:
Código:
#INT_TIMER1
void timer_1(void)
{
pulso++;
if(pulso == 1)
   {
   output_low(pin_b1); // puerto que quieras ej =B1
   set_timer1(y);  // la variable y debe ser tipo long (int16)
   }
if(pulso > 1)
   {
   output_high(pin_b1);
   set_timer1(z);   // la variable z debe ser tipo long (int16)
   pulso = 0;
   }
}
 
}

voy a buscar un ejemplo para que sea mas claro...
 
Atrás
Arriba