Upload
franco-rosa
View
71
Download
3
Embed Size (px)
Citation preview
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
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).
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.
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.
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.
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.
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.
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.
Sistemas de Control Industrial Red de sensores 1-Wire
Ingeniería Electrónica
CONFIGURACIÓN DE PINES:
CONJUNTO DE COMANDOS
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++)
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;
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
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.
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);
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'))
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