Autor Tema: Control PID 0-10V  (Leído 6331 veces)

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

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Control PID 0-10V
« en: 01 de Febrero de 2013, 17:28:26 »
Buenas, estoy haciendo una PCB para controlar señales de 0-10V y monitorizarlas desde el PC y quería compartir la aplicación con todos los foreros que puedan estar interesados. Se aceptan criticas, consultas y lo que surja  :D

Bueno, la idea que tengo en mente es hacer un control PID para controlar la velocidad de flujo de aire mediante un ventilador EC y una sonda de velocidad de aire. Para quien no conozca los ventiladores EC son unos ventiladores de bajo consumo que llevan electrónica integrada para controlar su velocidad mediante una señal 0-10V.

Mi aplicación quedaría algo así:



En mi caso la aplicación será esta, pero la misma tarjeta se puede usar para cualquier control que requiera una señal de 0-10V para el actuador y necesite un sensor de 0-10V o 0-5V para medir algún parámetro. Digo que el sensor es 0-10V o 0-5V por dos razones:

1.- Si la tarjeta esta preparada para leer una señal de 0-10V también podemos conectar un sensor de 0-5, eso si, perdemos resolución de lectura.
2.- La etapa analógica de la PCB se puede modificar de 0-10 a 0-5V cambiando dos resistencias, de esta manera usamos toda la resolución del PIC. En mi caso voy a usar la entrada de 0-5V porque la sonda que usaré entrega este tipo de señal.

Con esta tarjeta podriamos controlar un dimmer para controlar luz, variadores de frecuencia que tengan entrada de 0-10V para el control, balastros DALI para controlar la luz de fluorescentes con señal 0-10V, y seguramente muchas más aplicaciones.

Las características de la placa son las siguientes:

- PIC12F1840
- Cristal interno, en este caso el PIC puedes configurarlo hasta 32Mhz usando el PLL.
- Una entrada 0-10V para sensor.
- Una salida 0-10V para actuador.
- Una conexión al UART del PIC directa.
- Alimentación 24V.

Como veis la conexión del UART es directa, en mi caso voy a usar un cable de FTDI, es un cable que lleva en el conector USB un conversor UART a USB (Virtual Comm)

Cable FTDI  UART-USB

He puesto esta conexión directamente al UART porque en el futuro quiero hacer otros tipos de comunicación como pueden ser RS485, GRPS, etc.

Aquí os presento la PCB:





A veces tengo problemas subiendo imágenes, quizá se deba a mi ignorancia, por si acaso y porque será más cómodo de ver os subo el esquema de la PCB en PDF.

Como habéis podido ver la PCB esta virgen todavía, estoy esperando que me lleguen los componentes. Cuando tenga todos los componentes y los solde subiré más imágenes.

Una cosa en la que me he estrenado es en fabricar PCB de forma "profesional", profesional entre comillas porque lo que quiero decir es que no esta hecha a mano sino que la he pedido a un fabricante. La pedí a una empresa China que se ha portado de manera muy profesional y rápida.

http://www.pcbcart.com

Me han costado 2 PCBAs 107€ (con portes, iva y todos los gastos incluidos). Supongo que para algunos pueda ser caro, pero quería probar la calidad de estos servicios de prototipos rápidos en China y la verdad es que he quedado encantado con la calidad, el servicio y la profesionalidad. Cualquier duda se ponen en contacto contigo para aclararla.

En cuanto al Firmware nunca había tocado este PIC y he empezado a hacer algunas cosas en Proteus para probar mientras espero que lleguen los componentes.

Bueno, de momento esto es todo, ya iré publicando progresos que vayan surgiendo...

Un saludo a todos!  :cheesy:

BitPIC

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Control PID 0-10V
« Respuesta #1 en: 02 de Febrero de 2013, 02:24:16 »
Muy bien, bitpic, deseando ver tus avances por aquí. Se ve bonita la placa, espero que tengas suerte y vaya todo bien.
Yo siempre hago un prototipo antes de fabricar porque rara vez me salen bien a la primera.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #2 en: 02 de Febrero de 2013, 05:00:57 »
Pues menos el PIC lo demas (el circuito de entrada y de salida 0-10V) lo he probado con un Arduino. Este PIC es la primera vez que lo uso.

Veremos a ver si no he metido la pata con alguna pista en el esquema o la PCB ejejejej ... pero bueno, eso ya lo notare cuando lo monte. Crucemos los dedos.
 :D
« Última modificación: 03 de Febrero de 2013, 07:27:40 por bitpic »
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #3 en: 03 de Febrero de 2013, 07:26:45 »
Primera parte del código: implementar la comunicación UART (EUSART en el PIC12F1840).

No se si ha sido mi ignorancia, pero no he podido usar la librería usart.h de microchip, por lo que he cogido el datasheet, me he mirado los registros que hacía falta configurar y !Voilaaa¡ ha funcionado correctamente.

Lo primero que he hecho es enviar una carácter mediante el registro TXREG. Una vez conseguido esto he implementado el putch() para luego poder enviar datos mediante el printf().

El código resultante es el siguiente:

Código: [Seleccionar]
#include <xc.h>
#include <stdlib.h>
#include <stdio.h>


// PIC12F1840 Configuration Bit Settings

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = ON      // PLL Enable (4x PLL enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

#define _XTAL_FREQ 32000000
//#define SYS_FREQ (32000000)

//Definicion de Pines I/O
#define DACPin      PORTAbits.RA0
#define ADCPin      PORTAbits.RA1
#define TachoPin    PORTAbits.RA2
#define ResetPin    PORTAbits.RA3
#define TxPin       PORTAbits.RA4
#define RxPin       PORTAbits.RA5

void Config(void);
void putch(char c);

/******************************************************/
/* Programa principal                                 */
/******************************************************/
int main(void) {
    int a=0;
    Config();
    while(1){
        DACPin = !DACPin;
        printf("Hola TodoPic %i\r",a++);
        __delay_ms(1000);
    }

}

/*****************************************************************/
/* Configuracion de los registros del PIC                        */
/*****************************************************************/
void Config(void){

    // Configuración cristal interno a 16MHZ
    OSCCONbits.IRCF0 = 0;
    OSCCONbits.IRCF1 = 1;
    OSCCONbits.IRCF2 = 1;
    OSCCONbits.IRCF3 = 1;
    OSCCONbits.SCS0 = 1;
    OSCCONbits.SCS1 = 1;

    //Caonfiguracion I/O
    ANSELA = 0b00000000;             // Entradas analogicas desactivadas
    TRISAbits.TRISA0 = 0;   // DAC
    TRISAbits.TRISA1 = 1;   // ADC
    TRISAbits.TRISA2 = 1;   // Tacho
    TRISAbits.TRISA3 = 1;   // Reset PIN
    TRISAbits.TRISA4 = 0;   // Tx
    TRISAbits.TRISA5 = 1;   // Rx

    APFCONbits.RXDTSEL = 1;
    APFCONbits.TXCKSEL = 1;

    //Configuración
    BAUDCON = 0b00000000;
    INTCON = 0b00000000;
    PIE1 = 0b00000000;
    PIR1 = 0b00000000;
    RCSTA = 0b10010000;
    TXSTA = 0b00100000;

    SPBRGL = 51; // 9600 baudios a 32MHz
    SPBRGH = 0; // 9600 baudios a 32MHz
}
/********************************************************************/
/*Implementacion de putch para poder enviar mensajes con printf*/
/*putch envia un caracter y prinf envia una cadena de caracteres*/
/********************************************************************/
void putch(char c){
    while (!TXIF);
    TXREG = c;
}

Y el resultado en PROTEUS (todavía no tengo el material de la placa y tengo que simularlo) es el siguiente:

BitPIC

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Control PID 0-10V
« Respuesta #4 en: 03 de Febrero de 2013, 19:46:41 »
Es interesante el proyecto. Sigo los avances.

Yo también inicializo la usart "a mano".

Saludos.

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Control PID 0-10V
« Respuesta #5 en: 05 de Febrero de 2013, 20:43:56 »
Me uno muy curiosos!

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Control PID 0-10V
« Respuesta #6 en: 05 de Febrero de 2013, 21:28:57 »
Me sumo también.
He estado revisando el esquema y me ha gustado mucho la simplicidad de la fuente de 5V, ¿qué integrado es el U1?.
Saludos desde Granada, España.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #7 en: 11 de Febrero de 2013, 16:27:40 »
Es un LM2594.

Link datasheet LM2594

Ya tengo la parte del ADC hecha también, igual que las comunicaciones no he podido usar la librería y la he hecho a mano.

Hasta ahora he dado con dos problemas:
 1.- XC8: Me he encontrado un problema con el printf() y las variables de tipo float, no se porque si hago un printf("valor = %f",variable float); el compilador me da un error, en cambio con cualquier otro tipo de variable me funciona bien. Tendré que poner los decimales con alguna rutina que separe el valor en dos variables integer. ¿Alguien sabe a que puede deberse este problema con los float?

 2.- He metido la pata con la parte DAC. No he conectado la salida DAC al pin CCP1 por lo que no podré usar el PWM del PIC. Supongo que modificaré la placa a mano para poder usarlo. Este PIC tiene DAC pero es de poca resolución 4 bits, mientras que el PWM es de 10 bits, por lo que me decantaré por este ultimo.

Nunca he usado un PWM sin librería y por lo que estuve mirando en el datasheet no es tan sencillo como otros perifericos, interviene el Timer2 y hay que configurar varias cosas. Ya me peleare con el a ver que saco.

En cuanto a componentes me faltan por llegar las bobinas, en cuanto lleguen las sueldo y subo fotos. Eso si, tened en cuenta que uso un soldador que no es que sea muy fino que digamos, casi es de fontanero  :oops: así que si veis soldaduras mejorables estoy de acuerdo con vosotros ajajajaj....

Espero que lleguen los componentes que faltan esta semana así para el fin de semana ya tendré fotos.
 :mrgreen:
« Última modificación: 11 de Febrero de 2013, 16:41:56 por bitpic »
BitPIC

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Control PID 0-10V
« Respuesta #8 en: 11 de Febrero de 2013, 16:37:49 »
hola bitpic tienen muy buena pinta las placas tu las diseñaste o solo mandaste el esquema alos chinos?

aa y buen proyecto lo estare biendo  8) 8)

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #9 en: 11 de Febrero de 2013, 16:54:32 »
En mi caso lo he diseñado todo, no se si existe la posibilidad de que ellos te lo diseñen, en cualquier caso si te lo pudiesen diseñar ellos sería mucho más caro.

En mi caso use el programa Eagle. La versión student es libre y te permite crear PCB de doble cara de un tamaño de 100x100mm si no me equivoco.

Me alegro de que os guste, a ver si llega a buen puerto el proyecto.

Un saludo.
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #10 en: 17 de Marzo de 2013, 09:31:17 »
Bueno, perdonad por la lentitud de los avances pero es que ando algo liado.

Hoy me he puesto a probarlo y tengo problemas con la parte de alimentación.





U1 es un LM2594 5.0

La entrada es de 24Vdc pero en la salida en lugar de 5V tengo 0.189V........ que mal!  :(

He estado mirando de desconectar componentes para ver si alguno de ellos estaba mal y lo máximo que he conseguido son 0.6V quitando el diodo D2, pero no creo que tenga relación.

Solo me queda dos opciones:

- Una es que el LM2594 este mal y tenga que cambiarlo. Lo que pasa es que no tengo más, tendré que buscar uno para probarlo.

- La otra opción es que tenga relación con el diseño de la PCB. Mirando el datasheet he encontrado que aconsejan una distribución de componentes y un ruteado de pistas. No se hasta que punto puede influir el ruteado y la distribución de componentes en que salgan 5V en la salida o no....



¿Alguien tiene una idea de que me puede suceder? ¿Alguien a usado ese IC en alguna aplicación?

Cuando lo encontré me pareció muy sencillo, pero se me esta complicando.
BitPIC

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Control PID 0-10V
« Respuesta #11 en: 17 de Marzo de 2013, 16:14:57 »
El rutado de los componentes, si está conectado como el esquema, no debe ser caso para que te dé la salida de 5V.
La recomendacion de la situacion y rutado de los componetes que se da, de la parte de alimentacion es para intentar minimizar en lo posible todos los problemas de inmunidad electromagnetica, ruidos, emision,..... etc.

Dada la simplicidad el circuito me creo que sea mas un problema de mal funcionamiento de algun componente. Por el valor de la salida es como si el diodo de la salida estuviese funcionando al reves y lo que realmente mides es su caida de tension de 0,6V.
Todos los días se aprende algo nuevo.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Control PID 0-10V
« Respuesta #12 en: 17 de Marzo de 2013, 16:56:48 »
Pues he probado quitando todos los componentes de la parte de la salida pero sin exito. He comprobado y en la entrada le llegan los 24V, He invertido el Diodo pero tampoco.

Ya solo me queda pensar que o era defectuoso el IC o me lo he cargado por alguna razón.

A ver si estos días encuentro uno y lo cambio, si no tendré que pedir más.
BitPIC

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Control PID 0-10V
« Respuesta #13 en: 27 de Marzo de 2013, 20:32:55 »
Muy bueno tu proyecto, estare atento a tus avances.