Diferència entre revisions de la pàgina «Vertebra analògica (avert2 v2.1) - IoT-Vertebrae»

De binefa.com
Salta a la navegació Salta a la cerca
 
(Hi ha 5 revisions intermèdies del mateix usuari que no es mostren)
Línia 2: Línia 2:
 
[[Image:Avert_v2.1_01.png|center|thumb|avert2 v2.1]]
 
[[Image:Avert_v2.1_01.png|center|thumb|avert2 v2.1]]
  
* Comunicació I2C opto-aïllada amb les costelles analògiques. Dos canals I2C per costella.
+
* Comunicació I2C opto-aïllada amb les costelles analògiques. Dos canals I2C opto-aïllats per costella.
  
 
* 16 adreces (0x10 a 0x1F)
 
* 16 adreces (0x10 a 0x1F)
Línia 29: Línia 29:
  
 
= Esquema electrònic =
 
= Esquema electrònic =
[[Image:dvertv21_sch.png|center|thumb|Esquema electrònic dvert2 v2.1]]
+
[[Image:avertv21_sch.png|center|thumb|Esquema electrònic avert2 v2.1]]
 +
 
 +
[https://www.binefa.cat/IoT/IoT-Vertebrae/pdf/sch/avert21.pdf Esquema electrònic en format pdf]
  
[https://www.binefa.cat/IoT/IoT-Vertebrae/pdf/sch/dvert21.pdf Esquema electrònic en format pdf]
 
 
= Microprogramari =
 
= Microprogramari =
 
El microcontrolador de la vèrtebra analògica és un ESP32-S3.
 
El microcontrolador de la vèrtebra analògica és un ESP32-S3.
Línia 40: Línia 41:
 
Adreces (0x10 a 0x1F):
 
Adreces (0x10 a 0x1F):
  
[[Image:DvertAddr00.png|center|thumb|Adreces dvert2 v2.1]]
+
[[Image:AvertAddr00.png|center|thumb|Adreces avert2 v2.1]]
  
 
{| class="wikitable" style="margin:auto"
 
{| class="wikitable" style="margin:auto"
Línia 84: Línia 85:
  
 
Sense cap pont és l'adreça 0x10. Amb els quatre ponts connectats és l'adreça 0x1F.
 
Sense cap pont és l'adreça 0x10. Amb els quatre ponts connectats és l'adreça 0x1F.
== Sortides i entrades per nivell ==
+
== Sortides i entrades analògiques ==
Es poden fer servir els dos costats (A i/o B) per a connectar costelles digitals d'entrada i/o sortida.
+
Es poden fer servir els dos costats (A i/o B) per a connectar costelles analògiques d'entrada i/o sortida.
== Modulació per amplada de pols ==
 
Tan sols pot haver una costella amb les 8 sortides PWM. Al costat A o al B.
 
== Sensors tàctils ==
 
Es pot fer servir una costella protorib. '''Tan sols pot ser connectada al costat B'''.
 
  
Un cop està configurat per maquinari de la protorib per a que es connectin els sensors tàctils, heu de configurar la vèrtebra per a poder llegir els sensors tàctils.
+
La vèrtebra analògica llegeix automàticament si les costelles analògiques són d'entrades o de sortides.
  
>>> iotv.'''dsetup'''("0000","aout","'''bintouch'''")
+
A la versió 2.1 la costella de quatre entrades analògiques pot llegir tensions entre -10V i +10V. La costella de quatre sortides analògiques escriu tensions entre 0V i 10V.
aout, bintouch
 
True
 
>>> iotv.'''dsetup'''("0000","ain","'''bintouch'''")
 
ain, bintouch
 
True
 
>>> iotv.'''dsetup'''("0000","aoutpwm","'''bintouch'''")
 
aoutpwm, bintouch
 
True
 
 
 
Un cop s'ha fet la configuració d'entrades tàctils, la lectura dels seus valors es fa exactament igual que la lectura del registre d'entrades.
 
  
 
= Ús de Python =
 
= Ús de Python =
Des de la Raspberry Pi connectada al cap. I el cap a una vèrtebra digital.
+
Des de la Raspberry Pi connectada al cap. I el cap a una vèrtebra analògica.
  
 
  pi@raspberrypi:~/iot-vertebrae $ '''python'''
 
  pi@raspberrypi:~/iot-vertebrae $ '''python'''
Línia 112: Línia 99:
 
  Type "help", "copyright", "credits" or "license" for more information.
 
  Type "help", "copyright", "credits" or "license" for more information.
 
  >>> '''import iotv'''
 
  >>> '''import iotv'''
  >>> iotv.'''dversion'''("0000")
+
  >>> iotv.'''aversion'''("0000")
  Digital rib version: 1.2
+
  Analog rib version: 1.0
'0000000100000010'
+
  '0000000100000000'
>>> iotv.'''getdsetup'''("0000")
+
  >>> iotv.'''getasetup'''("0000")
A digital output, B digital input
+
  respA: 0x1, respB: 0x2
'00010010'
+
  A rib is ADC, B rib is DAC.
>>> iotv.'''dsetup'''("0000","aout","bin")
 
ain, aout
 
Setup has not been changed
 
False
 
>>> iotv.'''getdsetup'''("0000")
 
A digital output, B digital input
 
'00010010'
 
>>> iotv.dsetup("0000","ain","bout")
 
ain, bout
 
True
 
>>> iotv.getdsetup("0000")
 
A digital input, B digital output
 
'00100001'
 
>>> iotv.dsetup("0000","aout","bin")
 
aout, bin
 
True
 
>>> iotv.getdsetup("0000")
 
A digital output, B digital input
 
'00010010'
 
>>> iotv.'''din'''("0000",'b')
 
'00000000'
 
>>> iotv.din("0000",'b')
 
'00100100'
 
>>> iotv.din("0000",'b')
 
'00000000'
 
>>> iotv.'''dout'''("0000",'a',0x5A)
 
>>> iotv.'''dsetup'''("0000","aoutpwm","bin")
 
aoutpwm, bin
 
True
 
>>> iotv.getdsetup("0000")
 
A PWM output, B digital input
 
'00010100'
 
>>> iotv.'''doutpwm'''('0000','a',255)
 
>>> iotv.doutpwm('0000','a',55)
 
>>> iotv.doutpwm('0000','a',0)
 
>>> iotv.dsetup("0000","aout","bin")
 
aout, bin
 
True
 
>>> iotv.getdsetup("0000")
 
A digital output, B digital input
 
  '00010010'
 
  >>> iotv.'''doutbit'''('0000','a',0,1)
 
>>> iotv.doutbit('0000','a',0,0)
 
>>> iotv.dsetup("0000","aoutpwm","bin")
 
  aoutpwm, bin
 
True
 
>>> iotv.getdsetup("0000")
 
  A PWM output, B digital input
 
'00010100'
 
>>> iotv.'''doutbitpwm'''('0000','a',0,55)
 
>>> iotv.doutbitpwm('0000','a',0,255)
 
>>> iotv.doutbitpwm('0000','a',0,0)
 
>>> iotv.dsetup("0000","aout","bin")
 
aout, bin
 
True
 
>>> iotv.getdsetup("0000")
 
A digital output, B digital input
 
 
  '00010010'
 
  '00010010'
 +
>>> iotv.'''ain'''("0000",'a',1)
 +
19881
 +
>>> iotv.'''ainv'''("0000",'a',1)
 +
i2cAddr: 0x10, addrChannel: 0x1
 +
res: 0x4DAA: 19882
 +
0x4DAA --> 19882 --> 4.94V
 +
19882
 +
>>> iotv.ainv("0000",'a',2)
 +
i2cAddr: 0x10, addrChannel: 0x21
 +
res: 0x4DBE: 19902
 +
0x4DBE --> 19902 --> 4.95V
 +
19902
 +
>>> iotv.'''aout'''("0000",'b',2,4095)
 +
dacCommand: 0x32
 +
It has been sent 0xFFF (10.00 volts) to DAC 2
 +
>>> iotv.ainv("0000",'a',2)
 +
i2cAddr: 0x10, addrChannel: 0x21
 +
res: 0x6781: 26497
 +
0x6781 --> 26497 --> 9.90V
 +
26497
 +
>>> iotv.aout("0000",'b',2,2047)
 +
dacCommand: 0x32
 +
It has been sent 0x7FF (5.00 volts) to DAC 2
 +
>>> iotv.ainv("0000",'a',2)
 +
i2cAddr: 0x10, addrChannel: 0x21
 +
res: 0x4DBB: 19899
 +
0x4DBB --> 19899 --> 4.95V
 +
19899
 
  >>>  
 
  >>>  
 
  pi@raspberrypi:~/iot-vertebrae $
 
  pi@raspberrypi:~/iot-vertebrae $

Revisió de 19:05, 17 ago 2024

Descripció general

avert2 v2.1
  • Comunicació I2C opto-aïllada amb les costelles analògiques. Dos canals I2C opto-aïllats per costella.
  • 16 adreces (0x10 a 0x1F)
  • Comunicació I2C
  • Comunicació CAN. Pont de terminació del bus CAN
  • Connecta costelles analògiques d'entrada i de sortida als costats A i B
  • Detecció automàtica de les costelles analògiques connectades
  • Led blanc que indica la comunicació entre la vèrtebra i el cap
  • Led vermell indicador d'alimentació procedent del cap (D2)
  • Led groc indicador d'alimentació externa de 24 volts (D3)
  • Alimentació externa de 24 volts procedent d'una de les costelles analògiques. L'altra costella analògica també rep aquests 24 volts externs
  • La vertebra genera +12V, -12V i 5V per a les dues costelles a partir dels 24 volts externs. La tensió dual +12V/-12V és per a alimentar els amplificadors operacionals. Els 5V són per alimentar els xips ADC i/o DAC de les costelles
  • És una placa de 4 capes. Una és de massa, una altra de terra i la capa superior i inferior és per a les connexions elèctriques. Amb això es pretén tenir una alta immunitat al soroll extern
  • Connector a antena de 2.4GHz

Esquema electrònic

Esquema electrònic avert2 v2.1

Esquema electrònic en format pdf

Microprogramari

El microcontrolador de la vèrtebra analògica és un ESP32-S3.

Microprogramari de la vèrtebra analògica

Configuracions

Adreces (0x10 a 0x1F):

Adreces avert2 v2.1
Adreces
A3 A2 A1 A0 text Hex
- - - - 0000 0x10
- - - x 0001 0x11
- - x - 0010 0x12
- - x x 0011 0x13
- x - - 0100 0x14
- x - x 0101 0x15
- x x - 0110 0x16
- x x x 0111 0x17
x - - - 1000 0x18
x - - x 1001 0x19
x - x - 1010 0x1A
x - x x 1011 0x1B
x x - - 1100 0x1C
x x - x 1101 0x1D
x x x - 1110 0x1E
x x x x 1111 0x1F

- : sense pont (jumper)

x : amb pont (jumper)

Sense cap pont és l'adreça 0x10. Amb els quatre ponts connectats és l'adreça 0x1F.

Sortides i entrades analògiques

Es poden fer servir els dos costats (A i/o B) per a connectar costelles analògiques d'entrada i/o sortida.

La vèrtebra analògica llegeix automàticament si les costelles analògiques són d'entrades o de sortides.

A la versió 2.1 la costella de quatre entrades analògiques pot llegir tensions entre -10V i +10V. La costella de quatre sortides analògiques escriu tensions entre 0V i 10V.

Ús de Python

Des de la Raspberry Pi connectada al cap. I el cap a una vèrtebra analògica.

pi@raspberrypi:~/iot-vertebrae $ python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import iotv
>>> iotv.aversion("0000")
Analog rib version: 1.0
'0000000100000000'
>>> iotv.getasetup("0000")
respA: 0x1, respB: 0x2
A rib is ADC, B rib is DAC.
'00010010'
>>> iotv.ain("0000",'a',1)
19881
>>> iotv.ainv("0000",'a',1)
i2cAddr: 0x10, addrChannel: 0x1
res: 0x4DAA: 19882
0x4DAA --> 19882 --> 4.94V
19882
>>> iotv.ainv("0000",'a',2)
i2cAddr: 0x10, addrChannel: 0x21
res: 0x4DBE: 19902
0x4DBE --> 19902 --> 4.95V
19902
>>> iotv.aout("0000",'b',2,4095)
dacCommand: 0x32
It has been sent 0xFFF (10.00 volts) to DAC 2
>>> iotv.ainv("0000",'a',2)
i2cAddr: 0x10, addrChannel: 0x21
res: 0x6781: 26497
0x6781 --> 26497 --> 9.90V
26497
>>> iotv.aout("0000",'b',2,2047)
dacCommand: 0x32
It has been sent 0x7FF (5.00 volts) to DAC 2
>>> iotv.ainv("0000",'a',2)
i2cAddr: 0x10, addrChannel: 0x21
res: 0x4DBB: 19899
0x4DBB --> 19899 --> 4.95V
19899
>>> 
pi@raspberrypi:~/iot-vertebrae $