Salida de GPIO Optoaislada


10 posts
by dvazquez » Sat Sep 01, 2012 3:03 am
Estimados

Les comparto como protejo el GPIO de mi Raspberry PI. Mis conocimientos de electrónica son extremadamente básicos, pero, poco a poco estoy aprendiendo. La idea es simple, usar un Optoacoplador para aislar el GPIO, inicialmente pensaba usa 4N24 (http://www.micropac.com/pdf/products/4N22.pdf), el problema es que el 4N24 puede consumir 10 mA, cada Pin del GPIO puede entregar hasta 16 mA, pero el total de todos los pines no deben superar los 50 mA. Por lo cual si queremos usar los 17 pins, ninguno tendría que consumir más de 3 mA.

Una alternativa es el H11L1, como se sugiere en este mismo foro (en la versión en ingles). El H11L1 puede consumir desde 10 mA a 0.3 mA (http://www.datasheetcatalog.org/datashe ... 11L1-M.pdf)

Las pruebas con 9 GPIO pins prendiendo y apagando simultáneamente con python funcionaron correctamente. Les adjunto una foto, un esquema y el codigo de test.

raspberry-opto-osolated-outh.png
Plano
raspberry-opto-osolated-outh.png (17.91 KiB) Viewed 3860 times

raspberry-opto-osolated-outh_proto-small.jpg
Foto
raspberry-opto-osolated-outh_proto-small.jpg (38.35 KiB) Viewed 3860 times


Code: Select all
import RPi.GPIO as GPIO
import time

# Set up header pin 11 as an input
print "Setup Pin 11"
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(26, GPIO.OUT)

var=1
print "Start loop"
while var==1 :
        print "Set Output False"
        GPIO.output(7, False)
        GPIO.output(11, False)
        GPIO.output(13, False)
        GPIO.output(15, False)
        GPIO.output(19, False)
        GPIO.output(21, False)
        GPIO.output(23, False)
        GPIO.output(12, False)
        GPIO.output(16, False)
        GPIO.output(18, False)
        GPIO.output(22, False)
        GPIO.output(24, False)
        GPIO.output(26, False)
        time.sleep(1)
        print "Set Output True"
        GPIO.output(7, True)
        GPIO.output(11, True)
        GPIO.output(13, True)
        GPIO.output(15, True)
        GPIO.output(19, True)
        GPIO.output(21, True)
        GPIO.output(23, True)
        GPIO.output(12, True)
        GPIO.output(16, True)
        GPIO.output(18, True)
        GPIO.output(22, True)
        GPIO.output(24, True)
        GPIO.output(26, True)
        time.sleep(1)


Cualquier mejora, consulta o consejo es bienvenido.
Posts: 2
Joined: Sat Sep 01, 2012 2:08 am
by patolin » Mon Sep 03, 2012 4:38 am
La opcion es buena. Además de la ganancia de corriente ganas aislamiento eléctrico que resulta utili al comandar cargas como deles o motores
Patricio Reinoso - www.patolin.com
User avatar
Posts: 120
Joined: Mon Jan 09, 2012 3:25 pm
Location: Cuenca, Ecuador
by radioelf » Mon Sep 03, 2012 1:26 pm
Yo estoy a la espera de recibir el raspberryPi, pero realice una placa para adaptar las señales I/O, como es lógico no lo e podido testear,os pongo el esquema por si os sirve o veis algún error
Image
Posts: 49
Joined: Mon Sep 03, 2012 1:14 pm
Location: España
by dvazquez » Tue Sep 04, 2012 1:08 am
radioelf, estoy intentando entender tu diseño, pero como indique, no tengo muchos conocimientos en electrónica.

Puede ser que el diseño este pensado para una Serial Interface?
Que pines del db25 se conectan a que pines de la raspberry?
Podrías indicarme que integrado es el J1? (para mirar la datasheet)

Desde ya, gracias por compartir :)
Posts: 2
Joined: Sat Sep 01, 2012 2:08 am
by radioelf » Tue Sep 04, 2012 4:04 am
Hola, el J1 es el conector del Raspberry, las señales de entradas o salidas que se adaptan de 3v3 <-> 5V con el IC2 MAX3002 y son:
0 ->GPIO17 ->RPI conector pin11 de J1 a DB25 pin1
1 ->GPIO18 ->RPI conector pin12 de J1 a DB25 pin2
2 ->GPIO21 ->RPI conector pin13 de J1 a DB25 pin3
3 ->GPIO22 ->RPI conector pin15 de J1 a DB25 pin4
4 ->GPIO23 ->RPI conector pin16 de J1 a DB25 pin5
5 ->GPIO24 ->RPI conector pin18 de J1 a DB25 pin6
6 ->GPIO25 ->RPI conector pin22 de J1 a DB25 pin7
7 ->GPIO4 ->RPI conector pin7 de J1 a DB25 pin8
también se adaptan las señales RS232 (serie) con el IC1 MAX3222:
TX ->GPIO14 ->RPI conector pin8 de J1 a DB25 pin12
RX ->GPIO15 ->RPI conector pin10 de J1 a DB25 pin11
y también las de I2C de 3v3 <-> 5V con los mosfets bss138:
SDA ->GPIO0 ->RPI conector pin3 de J1 a DB25 pin10
SCL ->GPIO1 ->RPI conector pin5 de J1 a DB25 pin9
el bus SPI NO se adapta los niveles de tensión y se usa a 3v3:
CE0 ->GPIO8 ->RPI conector 24 de J1 a DB25 pin15
CE1 ->GPIO7 ->RPI conector 26 de J1 a DB25 pin16
SCLK ->GPIO11 ->RPI conector 23 de J1 a DB25 pin17
MISO ->GPIO9 ->RPI conector 21 de J1 a DB25 pin18
MISI ->GPIO10 ->RPI conector 19 de J1 a DB25 pin19
los pines de tensiones son:
5V->RPI conector 2 de J1 a DB25 pin19, 20 y 21
3V3->RPI conector 1 de J1 a DB25 pin25
GND->RPI conector 24 de J1 a DB25 pin22, 23 y 24
la placa también es la encargada de alimentar el RPI a través del conector X1 (5V 1A).
Como comenté no la puedo testear la placa con el RPI hasta que me llegue (4 o 5 semanas), en el momento que realice las pruebas y si todo es correcto colgaré toda la información y las fuentes del esquema y PCB.
Posts: 49
Joined: Mon Sep 03, 2012 1:14 pm
Location: España
by radioelf » Sun Nov 04, 2012 11:58 am
Hola, en mi blogspot podéis descargar un fichero con el CAD y PCB en Eagle de la placa.
http://radioelf.blogspot.com.es/
Posts: 49
Joined: Mon Sep 03, 2012 1:14 pm
Location: España
by ulysess » Mon Nov 05, 2012 12:49 pm
Gracias. Una duda: ¿Sirve esta modificación para crear una placa y manejar un joystick con 2 botones?
Mis apuntes de...Raspberry Pi: http://misapuntesde.com
Google Docs RPi: http://goo.gl/Iwhbq
Posts: 217
Joined: Thu Aug 02, 2012 6:35 am
Location: Spain
by dlopezsk » Fri Dec 21, 2012 10:45 am
Buenas,

Soy nuevo y no tengo mucha idea del tema de los GPIO's pero me es necesario saber como puedo implementar en C la lectura/escritura de los pines GPIO a un valor concreto sea 0 ó 1 .

Entiendo que he de utilizar las siguientes funciones de la libreria sys/io.h

inl() --> lectura
outl() --> escritura

Por ejemplo, lo que me esta sucendiendo y no llego a entender es lo siguiente que si quiero setear la parte de los outputs GPO's y le indico que el "pin" y el valor que ha de tener este me seteo otro que es diferente al que yo le he dicho.

estoy haciendo lo siguiente

outl((inl(boardBase+0x4E)&0x00000080)>>7,io);

Las variables boardBase equivale 0x800, donde parte la lectura de los GPIO del equipo en cuestión, io el valor que quiero que tenga.

Alguna idea?? estoy algo desamparado y no encuentro info de como lo podria hacer, gracias por la ayuda sin este foro estaría perdido
Posts: 1
Joined: Fri Dec 21, 2012 10:36 am
by nodu » Tue Dec 25, 2012 11:55 am
Hola a todos, soy nuevo en Raspberry y tengo experiencia en proyectos de electrónica.
Este post me ha parecido interesante ya que el primer paso para la conexion de un sistema a nuestras tarjetas es por los puertos I/O.
En mente tengo un proyecto de monitorizacion del pulso cardiaco en display LCD o en touch-screen .
Tengo mucha preguntas sobre las herramientas de desarrollo. Tengo entendido que el software Phyton es la herramienta más valorada.
¿Hay algun manual que explique paso a paso el proceso de creación de un proyecto, compilado y ejecución en la Raspberry?
¿Tiene este software soporte con librerías para el manejo de los periféricos como UART, SPI, HDMI etc.?
¿Se puede crear GUIs con botones, gráficas etc, con Phyton? o hay alguna otra herramienta mejor valorada?
Gracias
Posts: 1
Joined: Tue Dec 25, 2012 10:07 am
by 0rez91 » Sun Sep 29, 2013 11:18 am
Hola, estoy realizando un proyecto con mi RPi, y estoy utilizando el h11l1 para aislar las entradas y salidas, pero no consigo que funcione, por ejemplo:
Quiero saber cuando mi PC esta encendido, para ello conecto a la señal del led de encendido al optoacoplador al pin 1 y 2. Luego conecto el pin 4 y 6 a la salida 3.3v de la RPi y una resistencia del pin 5 del optoacoplador hasta el pin que configuro de entrada en la RPi, pero siempre me reconoce como input = 1, este alimentado el pin 1 y 2 del optoacoplador o no, que estoy haciendo mal??

Image
Posts: 1
Joined: Sun Sep 29, 2013 11:00 am