Autor Tema: PWM/Mosfet/Ruido/Etc.  (Leído 7531 veces)

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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
PWM/Mosfet/Ruido/Etc.
« en: 03 de Agosto de 2006, 19:18:41 »
Hola!

Les cuento que estoy intentando hacer, y que problemas tengo, a ver si me dan alguna idea de para donde tengo que encarar:


Estoy controlando la velocidad de motores de CC, de 12V, entre 1000 y 4500 RPM, mediante pulsos PWM generados por un PIC, y aplicados a un mosfet que es el que controla el motor.
Debido a que los motores tienen pqueñas diferencias entre si, hay un sensor hall que detecta el paso de un iman cada vuelta y entrega ese pulso a travez de CD4093 al PIC.
Todo eso funciona ok. :)

El PIC cuenta el tiempo que hay entre una vuelta y la siguiente, basandose en el pulso del hall, y ajusta el duty cicle (1000 hz, 8 bits) para acelerar o frenar el motor para que llegue a la velocidad deseada.

Hay un problema: no logro mejores resultados que una diferencia de 100 o 200 RPM entre un motor y otro. Si bien es un error mas o menos aceptable, el PIC deberia hacerlo mejor que eso.  :?
No se trata de un tema de soft (creo) ya que si cambio los motores de placa (en este momento tengo 3 placas y tres motores andando) el que giraba mas lento sigue girando mas lento aunque este en otra placa.

Si le pido 1500 RPM, obtengo (por ejemplo) 1420, 1510 y 1560

Si le pido 2500 RPM, obtengo (por ejemplo) 2500, 2550, 2460

Como ven, no siempre el motor mas rapido lo es en todas las velocidades...aunque si los cambio entre si, y vuelvo a pedir 2500 RPM, cada uno gira a las que giraba antes del cambio. Evidentemente, se trata de algun problema del motor.....que deberia ser compensado por el PIC, mediante el duty.

A lo mejor no soy muy claro, pero hace 3 dias que estoy metido con esto y siento que no avanzo nada....por eso me decidi a pedir socorro. :)

Gracias de antemano.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #1 en: 03 de Agosto de 2006, 19:25:19 »
Es normal que te ocurra eso. La respuesta de los motores no es instantanea, si no que presenta una inercia que hace que el motor no cambie instantaneamente de velocidad. Si tu intentas modificar la velocidad del motor de forma instantanea (cambias la velocidad y mides) no le das tiempo al motor a adquirir la velocidad deseada y seguramente seguiras corrigiendo dicha velocidad con lo que te pasaras (por defecto o por exceso), volviendo a repetirse el ciclo. Puedes probar a espaciar la lectura de la velocidad para permitir al motor adquirir la velocidad deseada.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #2 en: 03 de Agosto de 2006, 20:21:51 »
Hola amigo!

Gracias por tu respuesta.

Eso lo tuve en cuenta. De hecho, tarda unos segundos en lograr la velocidad estable, y se puede ver en el osciloscopio como cambia el ancho del pulso para ajustar la velocidad. Si lo freno con la mano, el pulso se ensancha casi hasta el 100%.

Me tomo la libertad de poner aqui el codigo que estoy usando, en Basic. En realidad es muy simple.
V0, V1, V2 y V3 son un nibble que determina la velocidad de 0 a 15. Internamente, el programa (esta comentado) calcula un valor que va de 20 a 100 para compararlo con el tiempo que tardo el motor en dar una vuelta. Dependiendo de esta comparacion, se ajusta el duty cycle, y todo comienza de nuevo.

Me da la sensacion de que todo esta ok....pero si asi fuera, no deberia tener mas error que el de los 8 bits del PWM, que en el rango de 0-255 deberia controlar 0-4500 RPM (las maximas del motor) por lo que no deberia haber mas de 17 o 18 RPM de error...

Aqui va el codigo:

Código: [Seleccionar]
'----------------------------
'Control PWM de motores
'(Placa que va en cada motor)
'Mosfet en la placa, velocidad
'seleccionada via pines: V0...V3
'
'PIC: 16F628A - 4Mhz INTRC, SIN RESET
'
'----- CONFIGURO PUERTOS-----
AllDigital
'Configuro el portA:
TRISA.0 = 1  'Entrada V0
TRISA.1 = 1  'Entrada V1
TRISA.2 = 1  'Entrada V2
TRISA.3 = 1  'Entrada V3
TRISA.4 = 0  'No usado
TRISA.5 = 0  'No usado
TRISA.6 = 0  'No usado
TRISA.7 = 0  'No usado

'Configuro el portB:
TRISB.0 = 0  'Salida (Placa Siguiente)
TRISB.1 = 0  'No usado
TRISB.2 = 0  'No usado
TRISB.3 = 0  'PWM
TRISB.4 = 0  'No usado
TRISB.5 = 0  'No usado
TRISB.6 = 1  'Entrada (HALL)
TRISB.7 = 0  'Entrada (Placa Anterior)

Dim hall_ant As Bit
Dim veces As Word  'veces que lei el sensor hall
Symbol hall = PORTB.6  'estado del  sensor hall

Symbol v0 = PORTA.0
Symbol v1 = PORTA.1
Symbol v2 = PORTA.2
Symbol v3 = PORTA.3


'---------PROGRAMA PRINCIPAL------------
Dim i As Byte
Dim duty As Byte
Dim tiemporpm1 As Word
Dim velocidad As Byte

PWMon 1, 7

duty = 128  'Fijo % en 50% para arrancar

PWMduty 1, duty

WaitMs 1000 'Espero enpiecen a girar....


loop:
'Primero, veo cual es la velocidad deseada:
velocidad = 0
If v0 = 1 Then velocidad = velocidad + 1
If v1 = 1 Then velocidad = velocidad + 2
If v2 = 1 Then velocidad = velocidad + 4
If v3 = 1 Then velocidad = velocidad + 8

'Si la velocidad no es 0, pongo el motor en regimen
If velocidad <> 0 Then
'Calculo "velocidad"
velocidad = (velocidad + 5) * 4

'Veo el estado del HALL y lo guardo
hall_ant = hall
While hall_ant = hall
Wend

'En este punto, acaba de pasar el iman..
tiemporpm1 = 0
While hall_ant <> hall
tiemporpm1 = tiemporpm1 + 1
WaitUs 250  'espero 1/4 milisegundo
Wend

'En este punto, tiemporpm1 tiene 4 veces la cantidad de ms que tarda el motor en dar una vuelta

'Ajusto el DUTY....
If tiemporpm1 > velocidad Then
duty = duty + 1
If duty > 254 Then duty = 254
Endif

If tiemporpm1 < velocidad Then
duty = duty - 1
If duty < 1 Then duty = 1
Endif

PWMduty 1, duty

WaitMs 1000' espero un segundo, y .....
Endif 
Goto loop 'Repito todo el proceso.
End
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #3 en: 03 de Agosto de 2006, 20:26:48 »
Amplio, por si sirve de algo...
El siguiente es un dibujo de lo que muestra el osciloscopio en la entrada (gate) del mosfet y a su salida....Se ve un ruido que seguramente proviene de las escobillas de los motores o algo asi (creo!!!!!). Supongo que no es la causa del problema, pero....por las dudas aqui esta:

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #4 en: 03 de Agosto de 2006, 22:24:29 »
Hola aitopes, para filtrar levemente las interferencias te recomendaría que colocases 2 condensadorres lo más próximos al motor uno de 100uF 35V y otro de 0.1uF, también un condensata de 0.1uF en paralelo al motor y un diodo en inversa, y segun en mosfet que estes usando un diodo damper, se conecta entre source y drain de manera inversa, con eso ya tendras vastante buen filtrado.

Otro de los problemas que puedes tener es que estes probando los motores en vacío, o sea sin hacer fuerza, por lo tanto necesitan muy poca tensión para llegar a esas RPM, por consiguiente el duty cicle del PWM es muy pequeño y no tienes buena definición, por lo tanto entre un valor y el próximo del PWM tienes una buena variación de RPM, la solución para esto es usar una carga para el motor (a manera de obligarlo hacer fuerza y que el duty se incremente) o usar un PWM de más bits de definición, tu comentas que usas 8 bit y yo realmente lo veo muy pobre, no recomendaría que usases ménos de 10 bit para poseer un control medianamente regular.

Un saludo y espero te sea de ayuda.

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 aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #5 en: 04 de Agosto de 2006, 03:30:38 »
Hola Carlos!

Como me tendra de complicado esto, que ya me desvele y estoy haciendo pruebas (3 AM!!!)...
Citar
para filtrar levemente las interferencias te recomendaría que colocases 2 condensadorres lo más próximos al motor uno de 100uF 35V y otro de 0.1uF, también un condensata de 0.1uF en paralelo al motor y un diodo en inversa, y segun en mosfet que estes usando un diodo damper, se conecta entre source y drain de manera inversa, con eso ya tendras vastante buen filtrado.

Voy a incluir el electrolitico. El resto lo tenia implementado.
Acabo de poner agua en los motores (cada uno maneja una especie de bomba). Mas alla de la mojadura, estoy teniendo una perfecta respuesta. Recien probe en DOS motores, pero eran los mas desparejos, y tengo, para 1300 RPM

- Hz. en la entrada del PIC (viene del 4093 - HALL)  22.3 Hz aprox en cada uno (ya es un muy buen sintoma, giran igual...)

- RPM: 1270 - 1330, variando cada unos pocos segundos, segun se ajusta el duty (el micro compensa en uno y otro sentido, pero la demora que hay en el bucle de 1000 ms le da tiempo al motor de embalarse/frenarse antes de que el micro actue)

- Duty: 78% aprox en uno y 80% en el otro....señal de que un motor es mas duro o lento que el otro, y el duty debe ser ajustado a un valor mayor para que gire a la vel. deseada.


Voy a seguir probando cosas, esto se va al campo, en 7 maquinas con 16 motores cada una, y quiero que quede 10 puntos para no tener que ir despues a corregir nada al campo (frio, viento, heladas, generador 220v.... :().

Los mantengo al tanto.

Saludos.

PD: Si alguien esta leyendo esto y quiere saber algo mas sobre como controlar la velocidad (o como lo he hecho yo al menos), pregunte nomas que encando lo voy a ayudar.

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #6 en: 04 de Agosto de 2006, 04:04:20 »
Bueno bueno bueno.... :?

Un poco mas descansado que ayer, me he puesto a sacar algunas cuentas, me gustaria las miren y me digan si estoy muy errado:

1) Yo mido el tiempo de cada RPM en pasos de 0.250 ms. Esto fue un valor al tanteo, y funciono, pero...veamos:

---- A 2000 RPM, cada RPM tarda 30 ms. Si mi "resolucion" es 0.250 ms, puedo tener un error de 0.83% en la lectura. Eso son unas 16.6 RPM a esa velocidad. Lo tengo que mejorar, pero evidentemente no es el error que tengo (+/- 60 vueltas).

2) El duty lo estoy usando con 8 bits. Esto significa que entre 0 y 255 tengo 0-4500 RPM, lo que me da

         4500/255 = 17.5 RPM de resolucion,

al menos si la relacion duty/velocidad fuera lineal, que no lo es. Con dutys menores al 20% el motor casi no gira, y con el 90% ya esta a maxima velocidad (practicamente), por lo que la zona util es de un

        90-20 = 70%. Luego, 255*70/100 = 178 pasos. 

Entonces,

        4500/178 = 25 RPM de resolucion.


Pueden estos dos errores sumados ser la causa del error de +/- 60 RPM que tengo entre motores? La PEOR medicion que tengo es el mas rapido a 1540 y el mas lento a 1470..... :(
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #7 en: 04 de Agosto de 2006, 05:45:59 »
Bueno, luego de un par de horas lo tengo andando, con errorer menores al 2% en todas las velocidades. 8)

A los que vieron el codigo posteado mas arriba, cambie un par de cosas:

1) Achique el error de medida aumentando la "resolucion" de 0.25 ms a 0.025 ms...

     velocidad = (velocidad + 5) * 4   ----> velocidad = (velocidad + 5) * 40
 
 y  cambie
Código: [Seleccionar]
tiemporpm1 = tiemporpm1 + 1
WaitUs 250  'espero 1/4 milisegundo
                     
por

Código: [Seleccionar]
tiemporpm1 = tiemporpm1 + 1
WaitUs 25  'espero 1/40 milisegundo

Ademas, al final del bucle donde esperaba un tiempo fijo (WaitMs 1000' espero un segundo, y ..... ) lo cambie por

Código: [Seleccionar]
hall_ant = hall
While hall_ant = hall
Wend
que espera una vuelta completa (o que se complete la vuelta) antes de medir otra vez....Tenia la duda de que se relizaran mediciones incompletas a determinadas RPM... :lol:

 :-/La cuestion es que anda, y perfecto.  :-/

Saludos a todos, gracias por estar ahi.





Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #8 en: 04 de Agosto de 2006, 16:40:49 »
Hola Charly!

Citar
te recomendaría que colocases 2 condensadorres lo más próximos al motor uno de 100uF 35V y otro de 0.1uF, también un condensata de 0.1uF en paralelo al motor y un diodo en inversa, y segun en mosfet que estes usando un diodo damper, se conecta entre source y drain de manera inversa, con eso ya tendras vastante buen filtrado.

De todo lo que me recomendas, solo me faltaba el condensador de 100uF/35V. Lo acabo de poner, y el ruido practicamente desaparece...pero el mosfet se calienta mucho, mientras que sin el condensador esta "helado".

Me gusta la idea del filtrado, pero no la del calor... :).

Voy a hacer alguna prueba con otros valores, la macana que casi todo lo que tengo a mano es xxxuF/16V, y es insuficiente.  :(

Te cuento como me fue. Saludos.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #9 en: 04 de Agosto de 2006, 18:51:38 »
Hola aitopes, el mosfet se te calienta porque lo deberas estar poniendo en paralelo al motor, y segun recuerdo dije que lo pusieras entre el positivo del motor y masa (pero del circuito no del motor) y lo más proximo al motor, de esta forma estarias filtrando la alimentación.

Un saludo y comenta los resultados para ver que sucede.

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 aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #10 en: 04 de Agosto de 2006, 19:36:53 »
Ufffff.....si voy a interpretar asi todo lo que leo, voy MUERTO! ja ja ja!

El motor esta entre +12V y el MOSFET, que le envia pulsos..... Por eso el condensador me quedaba en paralelo al motor.
Si pusiera el motor entre 0V y el MOSFET, funcionaria igual...pero a mayor duty, menor velocidad.

Mañana sigo. Hoy arranque a las 3 AM, y ya estoy destruido. Encima, me acaban de invitar para cenar y salir...Estoy entre no ir (y pelearme con la bruja) o desmayarme en algun cafe dentro de 3 o 4 horas.... :? Es sacrificada la vida del electronico....ja ja ja!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #11 en: 04 de Agosto de 2006, 23:18:03 »
Hola aitopes, ya me gustaría ver como haces para que con el mismo mosfet conectar el motor tanto a positivo y negativo y este funcione  :D  :D, lo veo muy dificil. Realmente espero que con tu "bruja" te vaya mejor que con los mosfet, si no, sí que estas muerto :mrgreen:.

Un saludo.

Atte. CARLOS.
« Última modificación: 04 de Agosto de 2006, 23:20:18 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 GustavoT

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 102
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #12 en: 05 de Agosto de 2006, 12:42:50 »
Lamento discernir con charly pero es mal consejo el de colocar capacitores como filtro, primero no sabemos que configuración esta usando, pero mas halla de la configuración no se deben colocar capacitores como filtro y era de esperar que se caliente los mosfet

Explico: Cuando se genera una onda cuadrada, esta tiene todos los armónicos posibles desde el primero que seria la frecuencia de pwm hasta el infinito(o casi)
por lo que al colocar un capacitor, se genera un camino de baja impedancia para las frecuencias mas altas y la corriente en estas frecuencias es se va a las nubes, por lo que se calientan los mosfet, me sorprende que no se hayan quemado, todo esto se explica con furier y superposición.

Yo con los ojos cerrados pondría una bobina en serie con el motor, es muy probable que estos se calienten demasiado por que la frecuencia de pwm que estas usando es baja, yo tube mejores resultados con 5 a 10khz,

Viendo la grafica que de tensión en los motores, para mi es un problema de saturación de la armadura del motor, la corriente se eleva y el mosfet sale de la zona de saturación, seria bueno que colocaras el esquema completo, por que habría que ver como estas manejando el gate del mosfet

Por el momento te diría que pongas esa bobina, aumentes la frecuencia y trates de trabajar con pwm de 10 bits y no de 8, vas a tener mejor resolución

Como bobina podes poner el secundario de un trafo, chico de unos 15w ... lo que tendrías que tener en cuenta que la corriente nominal del secundario sea digamos del doble de la corriente media que mides en los motores, por un tema de saturación del hierro. Esto como para hacer una prueba y que veas si mejora el tema del ruido

Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.   Albert Einstein

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #13 en: 05 de Agosto de 2006, 12:58:15 »
Hola Charly!
Si, si es el mismo voy a ver humo....
Para hacerlo deberia usar uno "complementario e intercambiar drain y source, supongo. Por ahi con un dibujito me explico mejor. De todos modos, no lo pienso cambiar, asi anda bien.
Al final, salimos nomas....llegue a casa a las 5 AM,recien me acabo de levantar.  :ni)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: PWM/Mosfet/Ruido/Etc.
« Respuesta #14 en: 05 de Agosto de 2006, 13:04:20 »
Hola Gustavo!

Ayer aumente la frecuencia del PWM y la resolucion. La frecuencia como para probar, y la resolucion para achicar el error en las RPM, con buenos resultados.

Te adjunto el esquema de la placa. Gracias por los consejos. :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert


 

anything