1-wireproyauto

16
UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO INGENIERÍA ELECTRÓNICA SISTEMAS DE CONTROL INDUSTRIAL RED DE SENSORES CON BUS 1-WIRE FRANCO M. ROSA ALAGÓN 040999-K MARZO -2009

Upload: franco-rosa

Post on 24-Apr-2015

71 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 1-WireProyAuto

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

INGENIERÍA ELECTRÓNICA

SISTEMAS DE CONTROL INDUSTRIAL

RED DE SENSORES CON BUS 1-WIRE

FRANCO M. ROSA ALAGÓN 040999-K

MARZO -2009

Page 2: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

MONITOREO DE TEMPERATURA CON BUS 1-WIRE

RESUMEN DEL PROYECTO:

Objetivo:

- Implementar una red de sensores y acoplarlos en un solo bus.

- Monitorear la temperatura de diversos lugares ahorrando en sistemas de

acondicionamiento de señal, cableado y energía.

- Conocer el protocolo 1-Wire creado por Dallas Instruments y conocer un

poco acerca de los dispositivos disponibles.

Funcionamiento:

- El sistema, es capas de administrar una red de sensores 1-wire, determinar la

cantidad de dispositivos en el bus, obtener datos de los dispositivos y

presentarlos en un entorno grafico, además, este entorno grafico permitirá al

usuario controlar la temperatura de los distintos medios.

- La comunicación PC-Red de sensores se hace a través del modulo UART del

microcontrolador, el programa de administración se desarrollo en Matlab.

MARCO TEÓRICO;

QUE ES LA TECNOLOGÍA 1-WIRE

La base de esta tecnología consiste en un protocolo serial que utiliza una sola línea

además de la referencia a tierra, un maestro 1-Wire inicializa y controla la

comunicación con uno o más dispositivos 1-wire esclavos

Figura 1. Una configuración maestro esclavo 1-wire.

Cada dispositivo 1-wire tiene un único y inalterable código de fabrica de 64 bits, que

sirve de dirección en el Bus 1 wire. Los 8 bits del código de la familia, un grupo de los

64 bits de identificación, identifican el dispositivo y su funcionalidad. Típicamente los

dispositivos 1-wire esclavos operan en el rango de voltaje de 2.8V (min) y 5.25V(max).

Muchos de estos dispositivos carecen de un pin de alimentación; toman la energía del

bus 1-wire (Alimentación Parasita).

Page 3: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

QUE DE ESPECIAL TIENE 1-WIRE

1-Wire es el único sistema digital basado en voltaje que trabaja con dos contactos, datos

y tierra, para comunicación half dúplex bidireccional en contraste con otros sistemas

de comunicación serial como i2c o spi, Los dispositivos 1-Wire son diseñados para su

uso en un entorno de contacto, cualquier desconexión del bus o pérdida de contacto

pone a los esclavos 1-Wire en un estado de reset definido.

Cuando retorna el voltaje, los esclavos despiertan y dan a conocer su presencia. Con

solo un contacto para proteger, La protección ESD de los dispositivos 1-Wire es

extremadamente alta, Con solo dos contactos, los dispositivos 1-Wire son la manera

más económica de colocar la funcionalidad electrónica a objetos no electrónicos, para

identificación, autenticación y envío de datos de calibración o información de

fabricación.

COMO SON ENCAPSULADOS LOS DISPOSITIVOS 1-WIRE

Los dispositivos 1-Wire poseen el paquete normal característico de los transistores,

Algunos de los modelos se muestran a continuación:

Figura 2. Dispositivo de 6x6mm con grandes aéreas de contacto.

Figura 3. El iButton protege al dispositivo 1-Wire de ambientes corrosivos.

Figura 4. El DS2502, 1.6mm x 0.91mm, con contactos rectangulares.

Page 4: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

Figura 5. El UCSP, 1.68mm x 1.68mm, for the DS2431 has spherical contacts located on

a grid with a 0.5mm pitch.

QUE FUNCIONES DE DISPOSITIVOS ESTÁN DISPONIBLES, Y CUALES SON SUS APLICACIONES

TÍPICAS.

Por ahora hay aproximadamente 40 dispositivos 1-wire, incluyendo algunos por

discontinuarse. Los dispositivos incluidos aquí, solo incluyen dispositivos con

producción normal para el futuro, los dispositivos que inician con DS19 siempre son

iButtons. La parte restante de números, en esta selección, por ejemplo los DS24, DS25 y

DS28 están disponibles en paquetes plásticos convencionales.

Los dispositivos 1-wire pueden ser agrupados dentro de varias categorías:

Solo de identificación

Identificación y control

Identificación y temperatura

Identificación y tiempo

Identificación y Memoria RAM

Identificación y Memoria EEPROM

Identificación y Almacenamiento

FUNCIONAMIENTO DEL BUS

ALIMENTACIÓN PARASITA

La mayoría de dispositivos 1-wire sin alimentados parásitamente, en otras palabras,

roban su alimentación del bus 1-wire. Un buen ejemplo es el sensor de temperatura 1-

wire, con solo 1 cable y tierra, el dispositivo es alimentado, recibe comandos y

transmite la temperatura. Pero de donde viene la energía, por que el sensor de

temperatura se comunica, aquí entra el concepto maestro esclavo.

MAESTROS Y ESCLAVOS

Cada red 1-wire debe tener uno y solo un maestro, el maestro es responsable de todos

los aspectos de la red 1-wire. Provee de energía a los dispositivos, inicializa la

comunicación , recibe las confirmaciones, y sirve de interfaz entre la computadora o

procesador. Algunas veces el maestro también es el procesador y es conectado

directamente al bus, en otras aplicaciones, el procesador es un dispositivo secundario

que se comunica con un dispositivo como el DS9097 adaptador de puesto serial, que

controla la red, como se muestra en al figura.

Page 5: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

Cada dispositivo 1-wire es considerado un esclavo. Los esclavos no pueden inicializar

una comunicación o hablar directamente con otro esclavo. Todas las comunicaciones

viajan directamente al maestro. Puedes tener muchos esclavos en un bus, el número

total de esclavos es limitado por muchos factores. Para dar una idea de la capacidad de

los dispositivos 1-wire, en un bus pequeño se pueden disponer de más de 100

dispositivos, Sin embargo mantener un numero de mayor de 20 no es recomendable,

Una vez que se exceden los 20 dispositivos, la carga y otros factores comienzan a

degradar la fiabilidad de la red.

Page 6: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

NIVELES DE TENSIÓN Y SLOTS DE TIEMPO.

Los buses 1-Wire pueden operar desde 3 a 5.5V.

En su estado normal, es bus esta oculto (sin comunicación) y se mantiene en 5V. Esto

proporciona la energía para todos los elementos en el bus. Durante la comunicación, la

información es transmitida en el bus a través de una serie de pulsos negativos de ida. Si

un pulso esta por debajo de 0.8V, lo que es considerado como lógica negativa, SI la

tención es superior a los 2.2 volts se considera que esta en lógica positiva.

Los dispositivos se mantienen energizados durante la comunicación por que dentro de

cada dispositivo, hay un diodo y capacitor configurado como se muestra a continuación

Debido a la limitada carga que se puede almacenar, no es posible mantener

comunicación continúa por más de 1ms. Porque el dispositivo perdería toda su energía.

COMUNICACIÓN Y DIRECCIONAMIENTO DEL DISPOSITIVO

Como se aprendió, el maestro inicia toda la comunicación.

La secuencia esta dividida en tres secciones. Reset e inicialización, comandos ROM y

Comandos de función. Los comandos ROM son aquellos que están presentes en

memorias de solo lectura y comandos de función pueden variar entre dispositivos, a

continuación se puede apreciar la secuencia completa de la comunicación 1-Wire.

Page 7: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

El bus 1 – Wire es un bus cableado AND. El maestro dispone de una resistencia pull-up,

el maestro y el esclavo solo pueden mandar a cero el bus, por lo tanto, si uno o más

dispositivos envían el bus a bajo, el maestro no puede comunicarse. Todo lo que ve es

un estado lógico bajo.

Debido a que el maestro del bus controla la comunicación, este manda o recibe datos

del bus, la información del bus es enviada en slots de tiempo. Existen dos tipos de slots

de tiempo, “Slot de Lectura” y “Slot de Escritura”.

Para enviar información a algún dispositivo, el maestro puede escribir 1 o 0, cada slot

de tiempo es de 60uS de ancho. Habrá escribir un Slot de escritura 1 el maestro pone el

bus a un nivel bajo durante 10uS, y luego retorna a su nivel alto. Para generar un slot

de escritura 0, el maestro pone el bus a nivel bajo durante 60uS. Y luego regresa a su

nivel inicial.

Para leer datos de un dispositivo, el maestro mantiene el bus bajo durante un mínimo

de 1 uS y menos de 15uS y luego lo restablece. El esclavo actualmente seleccionando

responde dejando el bus en estado alto para lógica 1 o mantiene el bus en nivel bajo

durante 45uS para una lógica 0. El tiempo total de lectura es de 60 uS.

Page 8: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

A continuación, algunos diagramas de tiempo.

TERMOMETRO DIGITAL DS18B20

CARACTERÍSTICAS:

Interfaz 1-wire, requiere solo un pin de comunicación

Cada dispositivo tiene un único código serial de 64 bits

No requiere componentes externos

Puede ser energizado por la línea de datos

Mide temperaturas en el rango de -55 a 125ºC

Precisión de +- 0.5ºC entre -10 y 89ºC

Resolución Configurable.

Las aplicaciones incluyen control termostático, sistemas industriales, termómetros y

cualquier sistema sensible a la temperatura.

DESCRIPCIÓN:

Este termómetro digital provee el valor de la temperatura el grados Celsius con una

precisión de 9 o 12 bit configurable por el usuario, función de alarma con puntos de

disparo programables en memoria no volátil, Puede ser alimentado parásitamente, lo

que elimina una fuente de alimentación independiente.

Page 9: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

CONFIGURACIÓN DE PINES:

CONJUNTO DE COMANDOS

Page 10: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

DESARROLLO DEL PROYECTO:

SIMULACION EN PROTEUS – ISIS

CÓDIGO DEL MICROCONTROLADOR: #include <16F628A.h>

#FUSES NOWDT //No Watch Dog Timer

#FUSES INTRC_IO //Internal RC Osc, no CLKOUT

#FUSES PUT //Power Up Timer

#FUSES NOMCLR //Master Clear pin used for I/O

#FUSES BROWNOUT //Reset when brownout detected

#FUSES NOLVP //No low voltage programming used for I/O

#FUSES NOCPD //No EE protection

#FUSES NOPROTECT //Code not protected from reading

#use delay(clock=4000000,RESTART_WDT)

#define DQ PIN_B0 // Pin de BUS

#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

#include "onewire.c"

void init(void);

int16 time = 101;

int1 flagCom,RST = 0;

char Comando = 'A';

int8 i, tmp, numDev = 0;

int16 sensData, celsius, fract;

int8 scratch[9];

unsigned char sign;

// Otras Variables "onewire.c" file

#int_rda

void Comandos(void)

{

Comando = getchar();

flagCom = 1;

}

void Lectura(void)

{

output_bit(pin_b3,1);

if ((!ow_reset())) // Si hay un dispositivo presente

{

time = 0;

write_byte(0xCC); // Evitar Comando ROM

write_byte(0x44); // Comando para el conversor de Temperatura

output_float(DQ);

delay_ms(750); //Tiempo maximo de conversion

ow_reset();

// Leer todos los dispositivos del bus

for (numRoms=1; numRoms <= numDev; numRoms++)

{

if (Send_MatchRom())

{

write_byte(0xBE); // Leer comando

for(i=0; i<2; i++)

Page 11: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

{

scratch[i]= read_byte();

}

// Dato crudo (16bit)

sensData = make16(scratch[1], scratch[0]);

// Verificar si es negativo

if (bit_test(sensData, 15))

{

sign = '-';

sensData = ~sensData + 1;

} else

sign = '+';

fract = 0;

tmp = sensData&0xF; // Obtener parte fraccionaria

celsius = sensData >> 4 ; // Calcular el numero entero

if (tmp == 0xFF)

celsius = celsius + 1; // Calcular la parte fraccionaria

else

for (i=0; i<tmp; i++)

fract = fract + 0625;

printf("T%u:%c%03lu.%04lu,", numRoms, sign, celsius, fract);

}

}

printf ("\n"); //

}

output_bit(pin_b3,0);

}

void Buscar(void)

{

// Buscar Dispositivos en el bus

numDev = FindDevices();

for(i=1; i<=numDev; i++)

{

printf("\n\rSensor%u:", i);

for (tmp=0; tmp<=8; tmp++)

printf("%X", FoundROM[i][tmp]);

printf("\n");

}

printf("\n\r");

}

// Funcion Principal

void main(void)

{

init();

output_float(DQ); // Entrada del Bus resistencia con 4.7k

Buscar();

while(TRUE)

{

if (flagCom)

{

switch (Comando)

{

case 'l': Lectura();break;

case 'b': Buscar();break;

case 'h': printf("\n\r\n\r### Sistemas de Control Industrial ###");

printf("\n\r### Red de Sensores Protoco 1-Wire ###");

printf("\n\r### Franco M. Rosa Alagon - 2011 ###\n\r\n\r");break;

case '1': output_toggle(pin_b4);break;

case '2': output_toggle(pin_b5);break;

case '3': output_toggle(pin_b6);break;

Page 12: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

case '4': output_toggle(pin_b7);break;

default: break;

}

flagCom = 0;

}

}

} // main

void init()

{

enable_interrupts(INT_RDA);

enable_interrupts(GLOBAL);

output_bit(pin_b3,1);

}

INTERFAZ GRAFICA MATLAB

Page 13: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

CODIGO DE ADQUISICION: function varargout = LlapallaTermometro(varargin)

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @LlapallaTermometro_OpeningFcn, ...

'gui_OutputFcn', @LlapallaTermometro_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before LlapallaTermometro is made visible.

function LlapallaTermometro_OpeningFcn(hObject, eventdata, handles, varargin)

n = 20;

t = zeros(1,n);

T1 = zeros(1,n);

T2 = zeros(1,n);

handles.n = n;

handles.t = t;

handles.T1 = T1;

handles.T2 = T2;

handles.output = hObject;

guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.

function varargout = LlapallaTermometro_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

% --- Executes on button press in radiobutton1.

function radiobutton1_Callback(hObject, eventdata, handles)

function edit1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in radiobutton2.

function radiobutton2_Callback(hObject, eventdata, handles)

function edit2_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in checkbox1.

Page 14: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

function checkbox1_Callback(hObject, eventdata, handles)

% --- Executes on button press in radiobutton3.

% --- Executes during object creation, after setting all properties.

function edit3_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in togglebutton1.

function togglebutton1_Callback(hObject, eventdata, handles)

Start = imread('Start.jpg');

Stop = imread('Stop.jpg');

t = handles.t;

T1 = handles.T1;

T2 = handles.T2;

n = handles.n;

button_state = get(hObject,'Value');

if button_state == get(hObject,'Max')

flag = 1;

elseif button_state == get(hObject,'Min')

flag = 0;

end

if flag

set(hObject,'CData',Stop);

else

set(hObject,'CData',Start);

end

tic

while(1)

button_state = get(hObject,'Value');

if button_state == get(hObject,'Max')

flag = 1;

elseif button_state == get(hObject,'Min')

flag = 0;

end

if flag ==0;

break;

end

T1(1:n-1) = T1(2:n);

T2(1:n-1) = T2(2:n);

t(1:n-1) = t(2:n);

T1(n) = rand(1);

T2(n) = rand(1);

t(n) = toc;

plot(t,T1,t,T2);

title('Simulacion de Adquisicion')

ylabel('Magnitud V')

xlabel('Tiempo en Seg')

set(handles.text1,'String',num2str(T1(n),'%02.1f'));

set(handles.text2,'String',num2str(T2(n),'%02.1f'));

pause(0.5);

end

handles.n = n;

handles.t = t;

handles.T1 = T1;

handles.T2 = T2;

handles.output = hObject;

guidata(hObject, handles);

Page 15: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

function edit4_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function edit4_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in radiobutton4.

function radiobutton4_Callback(hObject, eventdata, handles)

function edit5_Callback(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on button press in checkbox2.

function checkbox2_Callback(hObject, eventdata, handles)

% --- Executes on button press in radiobutton5.

function radiobutton5_Callback(hObject, eventdata, handles)

function edit6_Callback(hObject, eventdata, handles)

% hObject handle to edit6 (see GCBO)

function edit6_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

function edit7_Callback(hObject, eventdata, handles)

% str2double(get(hObject,'String')) returns contents of edit7 as a double

% --- Executes during object creation, after setting all properties.

function edit7_CreateFcn(hObject, eventdata, handles)

% Hint: edit controls usually have a white background on Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

% --- Executes on slider movement.

function slider1_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function slider1_CreateFcn(hObject, eventdata, handles)

% Hint: slider controls usually have a light gray background.

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

% --- Executes on slider movement.

function slider2_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function slider2_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

Page 16: 1-WireProyAuto

Sistemas de Control Industrial Red de sensores 1-Wire

Ingeniería Electrónica

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

% --- Executes on slider movement.

function slider3_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties.

function slider3_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor',[.9 .9 .9]);

end

% --- Executes during object creation, after setting all properties.

function togglebutton1_CreateFcn(hObject, eventdata, handles)

I = imread('Start.jpg');

set(hObject,'CData',I);

% --- Executes during object creation, after setting all properties.

function axes1_CreateFcn(hObject, eventdata, handles)

I = imread('Noche.jpg');

imshow(I);

% --- Executes on selection change in popupmenu1.

function popupmenu1_Callback(hObject, eventdata, handles)

str = get(hObject, 'String');

val = get(hObject,'Value');

Puerto = str{val};

handles.Puerto = Puerto;

% Guardar los cambios en la estructura.

guidata(hObject,handles)

% --- Executes during object creation, after setting all properties.

function popupmenu1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

Puertos = instrhwinfo('serial');

Ptot = Puertos.AvailableSerialPorts;

set(hObject,'String',Ptot)

BIBLIOGRAFÍA

Weather Toys : Building and Hacking Your Own 1-wire Weather Station;

Maureen Forys; Wiley Publushing.

DS18B20 DataSheet - 2008 Maxim Integrated Products

FUENTES WEB

http://en.wikipedia.org/wiki/1-Wire

http://es.wikipedia.org/wiki/1-Wire

http://www.maxim-ic.com/design_guides/en/1_WIRE_PRODUCTS_4.pdf

http://www.maxim-ic.com/products/1-wire/flash/overview/index.cfm

http://www.ccsinfo.com/forum/viewtopic.php?t=41878