Autor Tema: Como amplificar una escala de tension  (Leído 4635 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Como amplificar una escala de tension
« en: 08 de Junio de 2015, 22:35:30 »
Hola que tal gente del foro, les cuento que estuve leyendo los post del foro y por internet que se refieren a elevar voltajes, pero no he encontrado esto que quiero hacer yo ,que de hecho, no se si es posible, por eso decido crear el tema para sacarme la duda.
Bueno al grano,basicamente lo que yo necesito es mover un voltimetro analogico de 12v , pero con 5volt, es decir que cuando tenga 5v ,la escala del voltimetro me marque 12v cuando tenga 2,5v la escala me marque 6v y asi progresivamente.
El voltaje lo  estoy sacando por un pic (16f876a) mediante una señal pwm y un filtro pasa bajos y la hago variar de 0 a 5 volt, eso funciona bien,con el voltimetro lo que hago es marcar una posicion y como voltimetros de 5v no pude conseguir lo quiero hacer con uno de 12v. Ahora en un intento por elevar la tension lo que  hice hasta ahora fue ponerle un amplificador
 operacional  lm741 con alimentacion de 12v, en el simulador proteus funciona perfectamente pero en la realidad no y lo que sucede es lo siguiente : 
cuando tengo 2,5v en el pic tengo un poco mas de 6v en el LM y cuando tengo 5v en el pic tengo cera de 12v en el LM, pero cuando tengo 0v en el pic tengo
5v en el LM es como que no respeta una escala y nisiquiera baja de 5 volt no logro tener los 0v en la salida del LM741 .Y la otra cosa que sucede es que cuando le conecto el voltimetro analogicoa la salida de lm741 la tension se cae a 3v ,osea si no es capaz de mover la aguja del voltimetro no me sirve .Asi que las dudas son:
se puede hacer esto?
estoy usando el integrado adecuado?
de que otra manera lo puedo hacer?
Leí por ahí, sobre un convertidor dc dc de 5v a 24v que tambien me serviría, el tema es si me hara el efecto en cuestion ?(subir el voltaje gradualmente)
ojala me puedan ayudar ,les adjunto un esquema para aclarar lo que intento explicar,En este momento solo estoy probando con el operacional ,descarte el circuito del pic hasta poder hacerlo funcionar y asi eliminar posibles problemas. Desde ya muchas gracias.Saludos !!!
 
El tiempo es una ilusión ,solo existe el presente................

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Como amplificar una escala de tension
« Respuesta #1 en: 08 de Junio de 2015, 23:02:18 »


Prueba a convertir los pulsos de 0-5v a 0-12v con un transistor y luego integra con el filtro para sacar el voltaje. Te resultará más fácil que tratar de elevar el voltaje de la señal ya integrada, que además tienes que mantener en una escala proporcional.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #2 en: 09 de Junio de 2015, 08:21:31 »
Muchas gracias por tu respuesta planeta9999 !!!,pero no se como hacer esto que me decis , me podrias explicar un poco ,o hacer algun esquema por favor ?Es que nunca hice eso, gracias
El tiempo es una ilusión ,solo existe el presente................

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2976
Re: Como amplificar una escala de tension
« Respuesta #3 en: 09 de Junio de 2015, 08:40:24 »
Lo que te ya dicho planeta es una buena idea, pero se me ha ocurrido una alternativa que también puedes probar.

Baja la tensión de 5v del pic a 3v (que es multiplo de 12) con un divisor de tensión y esta tensión metela en un amplificador no inversor con una ganancia de 4 de esta manera cuando tengas 3 voltios a la salida tendrás 12 y cuando tengas 1.5voltios de entrada tendrás 6voltios de salida.

Un saludo.
« Última modificación: 09 de Junio de 2015, 08:42:29 por juaperser1 »
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Como amplificar una escala de tension
« Respuesta #4 en: 09 de Junio de 2015, 09:00:50 »
Hola arielmdq, los primeros defectos que veo en tu explicación:

1) Para alimentar el operacional deberás de usar una fuente simétrica o por lo menos partida.
2) La tensión de alimentación del operacional deberá ser por lo menos 2V mayor a los 12 de salida que deseas, o sea un tensión mínima de alimentación de 14V, pero 15 sería la mínima ideal.
3) Deberás de usar un transistor a la salida del amplificador, a manera de driver para conseguir excitar de manera correcta tu voltímetro.

Este es el circuito que debes de usar, y te recomendaría el LM358 como amplificador operacional:

Acá lo puedes ver funcionando con cero volts


Acá a mitad de escala, o sea con 2.5 volts


Y Acá a plena escala, sería con los 5V.


Espero te sea de ayuda, cualquier duda la preguntas.

Un saludo.

Atte. CARLOS.
« Última modificación: 09 de Junio de 2015, 09:03:20 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Como amplificar una escala de tension
« Respuesta #5 en: 09 de Junio de 2015, 09:19:40 »


http://www.todopic.com.ar/foros/index.php?topic=43271.0

For Vcc = 12V, Vin = 3.3 to 5V
R1 = 1Kohm,
R2 = 10Kohm,
R3 = 10Kohm,
R4 = 100Kohm,
Q1 = BC817,
Q2 = BC807





Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #6 en: 09 de Junio de 2015, 13:49:02 »
Que grande gente !!!! unos genios ((:-)) muchas gracias por sus respuestas :) .Justo hoy me estaban diciendo lo de la fuente partida para alimentar el operacional ,como dice chaly29, asi que empece a buscar como hacer una, a partir de una simple, pero sin transformador .Llevo poco buscando pero seguro que tiene que haber alguna dando vueltas por internet. Asi que voy a probar las dos cosas a ver que me sale y despues les cuento.Muchas gracias a todos ,saludos !!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Como amplificar una escala de tension
« Respuesta #7 en: 09 de Junio de 2015, 14:05:07 »
Hola arielmdq, busca por el ICL7660, es un integradito de 8 pines que el con solo usar un condensador, y a partir de una tensión de 5V te genera una de -5V que te servirá con creces para alimentar el ramal negativo del LM358 o cualquier otro operacional.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #8 en: 09 de Junio de 2015, 16:52:41 »
Muchas gracias Carlos!!! ahi  estuve viendo como funciona el icl7660 , ya simule en proteus y funciona ,a ver si mañana lo puedo ir  a comprar y lo pruebo .Despues les cuento como me fue. Mil gracias!!!!
          Saludos!!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #9 en: 10 de Junio de 2015, 19:48:26 »
Hola gente como andan!!!, les queria comentar que arme el circuito que me paso chaly29, agregandole el icl7660 para dar el voltaje negativo al operacional y funciona perfecto ya puedo mover la aguja del voltimetro normalmente .Y recien ahora puedo ver un defecto que tengo en el programa que suponia que podia pasar :lol:pero esperaba que no se notara y si se nota ja ja (La aguja del voltimetro me va muy a los saltos y no tan gradual o natural).Bueno soy muy principiante programando y lo hice muy brutamente ja ja . Me gustaria si lo puedo subir para que lo vean y a parte de reirse  :D me ayuden a mejorarlo ja ja ,o no se si lo tendria que poner en otra parte del foro .Desde ya muchas gracias por la ayuda que me dieron hasta aca que fue buenisima .Gracias Carlos te pasaste con los esquemas  ((:-)).
                                                        Saludos !!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Como amplificar una escala de tension
« Respuesta #10 en: 10 de Junio de 2015, 21:52:19 »
Hola arielmdq, me alegra de que todo haya funcionado FELICIDADES!!! Puedes subirlo acá mismo si lo deseas, así se sabe de que estamos hablando y no tener que explicar todo nuevamente.

Con respecto al movimiento brusco de la aguja, pues tienes dos soluciones posibles:

1) Hacerlo por software. Haciendo que el PWM incremente/decremente con cierta cadencia, o sea que lo haga suavemente como para que el movimiento de la aguja se vea más "natural".

2) O hacerlo por hardware. Variando los valores de R1 o C1 del esquema que yo te e pasado, conseguirás un filtro "pasa bajos" de mayor o menor frecuencia de corte. Que significa esto en la practica? Pues si aumentas el valor de R1 o de C1 o ambos, la aguja se pondrá más "lenta" y por más brusco que sea el cambio del PWM la aguja lo seguirá más lentamente, Experimentando un poco con los valores de los mismos de seguro conseguirás la cadencia de movimiento que te parezca correcta.

Comenta los resultados y si es posible la aplicación que le estas dando al circuito creado.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #11 en: 11 de Junio de 2015, 14:31:45 »
Gracias Carlos por tu respuesta , voy a probar lo que me decis de corregirlo por hardware,pero de todos modos me gustaria mostrarles el programa
 por que no supe como resolver esto que les voy a comentar.Este trabajo lo habia hecho con un programa parecido ,solo que mostraba en una pantalla lcd ,
y al querer adaptarlo para colocar un instrumento analogico me salto la falla que les comentaba de que la aguja va a los saltos.El circuito lo que hace
 es medir la posicion de un timon de un barco ,lo que yo quise hacer es que la calibracion del instrumento, o del lcd en aquel caso, fuera lo mas sencilla posible,
entonces como lo hacia:ya que el timon no gira la cantidad de grados que el potenciometro ,con el que mido su posicion,necesitaba hacer una especie de tabla en la
que pudiera grabar los limites tanto hacia un lado como el otro , asi tambien el centro,a partir de ahi hacer unas cuentas y establecer mi escala .Es decir que yo pudiera
manipular estos 3 parametro a gusto, para  despues mostrarlas con el movimiento correspondiente de la aguja.Una de las cosas que no supe como resolver, es como hacer para que se incremente o decremente el pwm de cero a 1023 si mi entrada analogica no va de cero a 1023 ,entonces decidi hacer esta especie de tabla que va comparando valores (la cual supongo es una manera muy bruta de hacerlo) ja ja....... pero se me sigue ocurriendo que si le agrego mas variables puedo corregir este efecto que me hace la aguja.Bueno espero haber sido claro ,aunque no me fue facil explicarlo ja ja. Si se les ocurre alguna idea ,les estare muy agradecido a continuacion les adjunto el programa .Desde ya muchas gracias .Saludos!!!
 
Código: CSS
  1. #include <16f876a.h>
  2. #device adc =10
  3. #use delay (clock=8M)
  4. #fuses HS,NOWDT,NOPROTECT,NOLVP
  5. #include <internal_eeprom.c>
  6. #use fast_io(B)
  7. #use fast_io(c)
  8. #use fast_io(a)
  9.  
  10. int16 calculoBandaEr(int16 cero,int16 toper);// funcion
  11. int16 a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;
  12.  
  13. int16 calculoBandaBr(int16 cero, int16 topbr);//funcion
  14. int16 n=0,z=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;
  15.  
  16. int16 cursor=0,toper=0,topbr=0,cero=0,ciclo_util;
  17. int16 resultadoEr =0,resultadoBr =0;
  18.  
  19.  
  20. void main()
  21. {
  22. set_tris_c(0b00000000);
  23. output_c(0b00000000);
  24. set_tris_b(0b11111111);
  25. output_b(0b00000000);
  26. //****************ADC**************************/
  27.   setup_adc_ports(AN0_AN1_AN3);//* entradas analogicas*//
  28.   setup_adc (ADC_CLOCK_INTERNAL);
  29.   setup_COUNTERS(RTCC_internal.rtcc_div_8);
  30. //********************************************************/
  31. // *************PWM*************************************/
  32.  
  33.   setup_ccp1(CCP_PWM);
  34.    setup_timer_2(T2_DIV_BY_16,255, 1);
  35.    set_pwm1_duty(ciclo_util);
  36.    
  37.  
  38.  
  39.    
  40.    WHILE (1) {
  41.    
  42.       set_pwm1_duty(ciclo_util);
  43.       set_adc_channel (0);
  44.       delay_us (20);
  45.       cursor = read_adc ();
  46.      
  47.  
  48.  
  49.      if (input(pin_b4)==0)//configuracion
  50.    {
  51.       output_high (PIN_c0);//enciendo un led
  52.      
  53.      if (input(pin_b1)==1)//  configuro limite derecho
  54.    {
  55.  
  56.     if (input(pin_b0)==1)//boton que graba en la eeprom
  57.    {
  58.    write_int16_eeprom(0x120,(int16) cursor);// escribe en la memoria
  59.    delay_ms(15);
  60.    toper=read_int16_eeprom(0x120);
  61.  
  62.    }
  63.  
  64.    }
  65.  
  66.      if (input(pin_b2)==1)// configuro limite izquierdo
  67.    {    
  68.                        
  69.     if (input(pin_b0)==1)//boton que graba en la eeprom
  70.    {
  71.    write_int16_eeprom(0x122,(int16) cursor);// escribe en la memoria
  72.    delay_ms(15);
  73.    topbr=read_int16_eeprom(0x122);
  74.  
  75.    }
  76.  
  77.    }
  78.  //****************CERO************************/
  79.     if (input(pin_b3)==1)// cero
  80.     {
  81.     if (input(pin_b0)==1)//boton que graba en la eeprom
  82.    {
  83.  
  84.    write_int16_eeprom(0x126,(int16) cursor);// escribe en la memoria
  85.    delay_ms(15);
  86.    cero= read_int16_eeprom(0x126);
  87.    delay_ms(15);
  88.    
  89.    }
  90.  
  91.    }
  92.     }
  93.  
  94.    
  95. //****************************************/
  96.    if (input(pin_b4)==1)//switch en posicion listo para usar
  97.   {
  98.    output_low (PIN_c0);//apago led de configuracion
  99.    cero= read_int16_eeprom(0x126);
  100.    delay_ms(15);
  101. //******************************************************************/
  102.    topbr=read_int16_eeprom(0x122);
  103.    delay_ms(15);
  104.  
  105.    resultadoBr = calculoBandaBr(topbr,cero);//( topbr -cero ) /14;
  106.  
  107.    n = resultadoBr + cero;
  108.    z =cero+(resultadoBr*2);
  109.    o =cero+(resultadoBr*3);
  110.    p =cero+(resultadoBr*4);
  111.    q =cero+(resultadoBr*5);
  112.    r =cero+(resultadoBr*6);
  113.    s =cero+(resultadoBr*7);
  114.    t =cero+(resultadoBr*8);
  115.    u =cero+(resultadoBr*9);
  116.    v =cero+(resultadoBr*10);
  117.    w =cero+(resultadoBr*11);
  118.    x =cero+(resultadoBr*12);
  119.    y =cero+(resultadoBr*13);
  120.    
  121. //******************************************************************/  
  122.    toper=read_int16_eeprom(0x120);
  123.    delay_ms(15);
  124.  
  125.    resultadoEr = calculoBandaEr (cero, toper);
  126.    a=   resultadoEr + toper;
  127.    b =( resultadoEr * 2)+toper;
  128.    c =( resultadoEr * 3)+toper;
  129.    d =( resultadoEr * 4)+toper;
  130.    e =( resultadoEr * 5)+toper;
  131.    f =( resultadoEr * 6)+toper;
  132.    g =( resultadoEr * 7)+toper;
  133.    h =( resultadoEr * 8)+toper;
  134.    i =( resultadoEr * 9)+toper;
  135.    j =( resultadoEr * 10)+toper;
  136.    k =( resultadoEr * 11)+toper;
  137.    l =( resultadoEr * 12)+toper;
  138.    m =( resultadoEr * 13)+toper;
  139.  
  140.  
  141.         IF (cursor >0 && cursor<= toper)
  142.       {
  143.         output_low(PIN_c6);
  144.         output_high (PIN_c5);
  145.         ciclo_util=8;
  146.       }
  147.         IF (cursor > toper && cursor <=a)
  148.       {  
  149.         output_low (PIN_c5);
  150.         output_low(PIN_c6);
  151.         ciclo_util=44;
  152.       }
  153.  
  154.       IF (cursor >a && cursor <b)
  155.       {
  156.         ciclo_util=80;
  157.       }
  158.    
  159.       IF (cursor >b &&cursor<c)
  160.       {
  161.         ciclo_util=116;
  162.       }
  163.  
  164.       IF (cursor >c && cursor<d)
  165.       {
  166.          ciclo_util=152;
  167.       }
  168.  
  169.       IF (cursor >d && cursor<e)
  170.       {
  171.          ciclo_util=188;
  172.       }
  173.  
  174.       IF (cursor >e && cursor<f)
  175.       {
  176.         ciclo_util=224;  
  177.       }
  178.       IF (cursor>f&&cursor<g)
  179.       {
  180.          ciclo_util=260;
  181.       }
  182.        IF (cursor>g&&cursor<h)
  183.       {
  184.          ciclo_util=296;
  185.       }
  186.        IF (cursor>h&&cursor<i)
  187.       {
  188.          ciclo_util=332;
  189.       }
  190.        IF (cursor>i&&cursor<j)
  191.       {
  192.          ciclo_util=368;
  193.       }
  194.        IF (cursor>j&&cursor<k)
  195.       {
  196.          ciclo_util=404;
  197.       }
  198.        IF (cursor>k&&cursor<l)
  199.       {
  200.          ciclo_util=440;
  201.       }
  202.        IF (cursor>l&&cursor<m)
  203.       {
  204.          ciclo_util=476;
  205.       }
  206. //************************************/
  207.       IF (cursor >m&&cursor<cero)
  208.       {
  209.          ciclo_util=512;               //posicion  
  210.       }
  211. //************************************ //de la
  212.       IF (cursor >cero &&cursor<n)      
  213.       {                                // aguja
  214.          ciclo_util=512;                              
  215.       }                                //en el centro
  216. //************************************/
  217.       if (cursor>n&&cursor<z)
  218.        {
  219.           ciclo_util=548;
  220.        }
  221.  
  222.       if (cursor>z&&cursor<o)
  223.    {
  224.          ciclo_util=584;
  225.  
  226.    }
  227.       if (cursor>o&&cursor<p)
  228.    {
  229.        ciclo_util=620;
  230.    }
  231.       if (cursor>p&&cursor<q)
  232.    {
  233.        ciclo_util=656;
  234.  
  235.    }
  236.       if (cursor>q&&cursor<r)
  237.    {
  238.        ciclo_util=692;
  239.    }
  240.  
  241.       if (cursor>r&&cursor<s)
  242.    {
  243.       ciclo_util=728;
  244.  
  245.    }
  246.       IF (cursor>s&&cursor<t)
  247.       {
  248.          ciclo_util=764;
  249.       }
  250.       IF (cursor>t&&cursor<u)
  251.       {
  252.          ciclo_util=800;
  253.       }
  254.       IF (cursor>u&&cursor<v)
  255.       {
  256.          ciclo_util=836;
  257.       }
  258.        IF (cursor>v&&cursor<w)
  259.       {
  260.          ciclo_util=872;
  261.       }
  262.        IF (cursor>w&&cursor<x)
  263.       {
  264.          ciclo_util=908;
  265.       }
  266.        IF (cursor>x&&cursor<y)
  267.       {
  268.          ciclo_util=944;
  269.       }
  270.       if (cursor>y&&cursor<topbr)
  271.    {
  272.       output_low (PIN_c5);
  273.       output_low(PIN_c6);  
  274.       ciclo_util=980;
  275.    }
  276.  
  277.       if (cursor>topbr&&cursor<=1024)
  278.    {
  279.       output_high(PIN_c6);//led************************/
  280.       output_low (PIN_c5);
  281.       ciclo_util=1023;
  282.  
  283. }
  284.    }
  285. }  
  286.  
  287. }
  288.  
  289.  
  290. //funciones*********************************************/
  291.  
  292. int16 calculoBandaEr(int16 cero, int16 toper)
  293. {
  294.    toper=read_int16_eeprom(0x120);
  295.    delay_ms(15);  
  296.    RETURN (cero - toper) / 14;
  297. }
  298.  
  299. int16 calculoBandaBr(int16 topbr,int16 cero )
  300. {
  301.    topbr=read_int16_eeprom(0x122);
  302.    delay_ms(15);
  303.    RETURN ( topbr -cero ) / 14;
  304. }
« Última modificación: 11 de Junio de 2015, 14:35:22 por arielmdq »
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: Como amplificar una escala de tension
« Respuesta #12 en: 13 de Junio de 2015, 18:33:16 »
Hola  !!! les queria contar que efectivamente como dijo Carlos cambie los valores de R1 y C1 y ya la aguja se mueve gradualmente .Gracias Carlos !!!! sos un grande!!!!  ((:-))
El tiempo es una ilusión ,solo existe el presente................

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Como amplificar una escala de tension
« Respuesta #13 en: 13 de Junio de 2015, 19:30:04 »
Hola arielmdq, felicidades por el excito, me alegra escuchar los buenos resultados. El mérito es todo tuyo, porque en realidad yo no hice nada  :D  :D

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Como amplificar una escala de tension
« Respuesta #14 en: 13 de Junio de 2015, 20:03:51 »
Hola arielmdq, no había leído lo de tu problema el programar, ehora lo hice y se me ocurren algunas ideas para que mejores el mismo, pero como no programo en C te lo explico con fórmulas y tu lo llevas a la practica.

Primero que nada, para tomar la posición y como usas un potenciómetro, pues debes de asegurarte que el mismo sea lineal y no logarítmico, los logarítmicos son usado en audio y su escala o resistencia no es proporcional en todo su recorrido, pero los lineales sí, o por lo menos lo intentan. Aparte de esto, debes de tratar que los puntos extremos del timón no estén cercanos a los extremos del potenciómetro, ya que los potes, en posiciones cercanas a los extremos pierden enormemente cualquier linealidad o proporción.

Montas todo y tomas las tensiones de referencia para extremo derecho, extremo izquierdo y punto central, tal como lo haz realizado.

Con estas tensiones ya podrás calcular que valores digitales tendrán cada posición, por ejemplo:

Extremo derecho   = 1 Vcc
Extremo Izquierdo = 4 Vcc
Punto central         = 2.5 Vcc

Calculemos los valores digitales :

Valor digital = Tensión análoga / (5 / 1023)      Esto suponiendo que uses como referencia del conversor A/D la tensión de alimentación del micro y el micro se alimente con 5Vcc

Extremo derecho   = 1 / (5 / 1023) = 205
Extremo izquierdo  = 4 / (5 / 1023) = 818
Punto central         = 2.5 / (5/1023) = 511

Calculemos el factor de multiplicación que luego usaremos como constante:

818 - 205 = 613

1023 / 613 = 1.6688 Esta es la constante.

Ya con la constante anterior, el resto lo podemos calcular con el micro:

Verificamos si el valor del A/D es mayor o menor de 511 que es el valor de la posición central.


                      Vc          Vad   Vc                            Const                             Vc
1) Si VALOR > 511 ---> 818 - 511 = 307 ---> 307 x 1.6688 = 512 ---> 512 + 511 = 1023 este valor al PWM


                      Vc          Vc    Vad                           Const                   Vc
2) Si VALOR < 511 ---> 511 - 205 = 306 ---> 306 x 1.6688 = 511 ---> 511 - 511 = 0 este valor al PWM

Donde:
Vc      = Valor de la posición central
Vad    = Valor leído del conversor A/D
Const = Valor de la constante calculada anteriormente

Un número al azahar, ejemplo 612

612 es mayor que 511, usaremos la primer secuencia de cálculos

612 - 511 =  101 ---> 101 x 1.6688 = 169 ---> 169 + 511 = 680 este valor al PWM

Espero haber sido claro, cualquier duda la preguntas.

Un saludo.

Atte. CARLOS.
« Última modificación: 13 de Junio de 2015, 20:28:59 por Chaly29 »
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.


 

anything