PDM serie Protocol


Protocolul de comunicare serial PDM

(Dilbertian Protocol modificat)

Notă numele protocolului
Numele “Dilbertiano” vine de la prima versiune a acestui Protocol, Am numit “IDP inversat Dilbertian Protocol” (2010), în cazul în care au fost reprezentate de zerouri cu o celulă “închide” şi cu o celulă “mare” (“0” slab şi “1” grăsime – ca pe vinietă următoarele vine de la “Dilbert” de Scott Adams – www.Dilbert.com).

Engleză

Italiană
dilbertian_one


Deoarece un Protocol nou ?

Theremino sistemul îşi propune să ofere un simplu sistem de intrare-ieşire pentru PC, ieftine şi uşor de utilizat. Pentru a face mai uşor să utilizaţi numerotarea automată sunt necesare şi recunoaşterea tipurilor lor, pentru a simplifica şi pentru a minimiza costurile de link-uri este necesar pentru a comunica pe un fir numai.

Nu există un protocol similar am avut să-l scrie. Versiunea curentă colectează cele mai bune de multi ani de experimentare si cercetare.

Descărcaţi acest document in PDF format:
Sistem de Theremino - DPM_Protocol_2015_ENG.pdf
Sistem de Theremino - DPM_Protocol_2015_ITA.pdf


Caracteristici

  • Comunicare serială bidirecţională pe un singur fir.
  • Auto-configurare.
  • Detectare automată a dispozitivelor conectate.
  • Numărul de dispozitive, de la 1 în 200.
  • Numărul de octeți de transmis şi primit variază în funcţie de tipul de dispozitiv.
  • Viteza de transmisie de până la 4 Megabiţi/sec pentru a transmite o mulţime de date cu cabluri scurte.
  • Viteza de transmisie de până la 100 Kilobiţi/sec pentru cabluri lungi (până la 10 Km).
  • Randament ridicat de comunicare (la 10 în 20 ori mai mare decât în poate).


Obloane electrice

Transmiterea are loc pe un singur fir, dar ai nevoie de o referinţă masa şi o tensiune de alimentare, a în cazul în care firele sunt în mod normal trei.

Orice dispozitiv care acceptă PDM trebuie să aibă un conector de intrare (la Master) şi o ieşire dispozitive în aval (Sclavi)

Conectorii sunt utilizate în mod normal de 3 Poli, cu spaţiere de 2.54 mm.

Privind comunicarea lanţ ar trebui să aibă un maestru (furnizarea de putere şi de sincronizare) şi un număr de dispozitive conectate în cascadă (numit sclav).

Este tensiunea pe care maestrul oferă pe linie 5 V, cu aceeaşi toleranţa şi cu aceeaşi curentul maxim de 5 Că se retrage din conectorul USB V.

Curentul maxim care poate oferi Master limitează numărul și tipul de dispozitive care pot fi conectate. Acest curent, este în mod normal 250 dar, şi poate fi mărită până la 500 dar. Merge peste acesta ar depăşi capacitatea USB ’ şi ar impune trăsături neobișnuite conectorilor.

Numărul maxim de conecta dispozitive este limitată de următoarele elemente:
– Curentul maxim care “Master” poate oferi.
– Numărul maxim de octeți care linia de poartă în timpul ciclului de orez-transmitere.

Ambele “Master” care “Sclav” sunt conectate la linia cu un rezistor de amortizare, De asemenea, acţionează ca un trece-jos, radio interferenţe şi supratensiune de protecţie. Valoarea din acest rezistor este în mod normal la 33 în 330 ohmi


Format de difuzare

Folosind un format Non-întoarcere-la-Zero (ACASA) standardul.

Formatul implicit = 8, N, 1
– 1 începe pic
– 8 biţi de date
– No-parity
– 1 opri pic


Niveluri de linie de date “Com. Line”

Linia deoparte să nivelul de sus (3.3 V)
Semnalul “1” este notat cu 3.3 V
Semnalul “0” este notat cu 0 Vdilbertian two


Repeta ori şi un debit

Viteza de transmisie
Folosind viteze mici atunci când lungimea, şi astfel capacitatea de cabluri de conectare, sunt ridicate. Cand distantele sunt scurte şi de înaltă viteză pot fi folosite pentru a comunica cu un număr mare de dispozitive (sau de a comunica cu dispozitive care necesită un număr mare de octeţi) Sunt stabilite viteze numit la “1” (1 k biţi/Sec) până la “12” (4 Mega biţi pe secundă)

Numărul maxim de octeți
În funcţie de Rata baud numărul maxim de octeți care pot fi transmişi este listat în tabelul de mai jos.


Ori, distanţe şi numărul de octeţi

Viteza
pic de timp
pic
pentru
al doilea
Octeţi
fiecare
15MS
Octeţi fiecare
30MS
Distanta de Max
Max capacitate
Sclavi
Max
numărul
1
1 MS
1K
1
3
10 Km
1 UF
3
2
500 ne
2K
3
6
5 Km
500 NF
6
3
200 ne
5K
4
8
2 Km
200 NF
15
4
100 ne
10K
15
30
1 Km
100 NF
30
5
50 ne
20K
30
60
500 m
50 NF
60
6
20 ne
50K
40
80
200 m
20 NF
150
7
10 ne
100K
150
300
100 m
10 NF
160
8
5 ne
200K
300
600
50 m
5 NF
80
9
2 ne
500K
400
800
20 m
2 NF
32
10
1 ne
1M
1500
3000
10 m
1 NF
16
11
500 NS
2M
3000
6000
5 m
500 PF
8
12
250_nS
4M
6000
12000
2.5 m
250 PF
4

Toate dispozitivele trebuie să aplice cel puţin viteza “7” Acest lucru este considerat viteza implicit. Dacă doriţi să setaţi o viteză diferită de “7” toate dispozitivele în lanţ trebuie să susţină.

The “distanţa maximă” depinde de caracteristicile de cabluri, valorile din tabel sunt calculate pentru un cablu ecranat RG58 din 50 ohmi cu capacitatea de a 100pF pe metru.

At scăzut numărul de viteze “sclavi” este limitat de numărul maxim de octeți care pot fi transmise în 30 milisecunde. (fiecare sclav utilizează cel puțin un octet şi pretinde o repeta rapid suficient pentru a face miscari fluide)

La viteză mare, numărul de “sclavi” este limitat de capacitatea maximă, fiecare “sclav” Adaugă o capacitate de aproximativ 40..60 PF şi reduce distanţa maximă de aproximativ 50 cm.

Capacitatea a fost calculat pe baza 30pF per “sclav” plus alte 20pF un cablu de conexiune din 20 cm şi alţi 10pF să ia în considerare rezistenţa suplimentare datorate la “bilaterale comuta” (totalul: 60PF)


Lungimea maximă de cablu de comunicare decât alimentare cu curent si rezistenta pe metru

Cablu tip —>
Curent maxim
( curent de vârf )
H1500/H1000/H500/H155/RG11
20 Milli ohmi
sau mai puţin
pe metru
Rg58 /Rg59u/H155 /
cablurile de net
despre
50 Milli ohmi
pe metru
Rg59/RG6 /telefon sucit sârmă /
cablurile de net
despre
100 Milli ohmi
pe metru
10 dar 1 Km 400 m 200 m
20 dar 500 m 200 m 100 m
50 dar 200 m 80 m 40 m
80 dar 125 m 50 m 25 m
100 dar 100 m 40 m 20 m
200 dar 50 m 20 m 10 m
400 dar 25 m 10 m 5 m
500 dar 20 m 8 m 4 m
800 dar 12.5 m 5 m 2.5 m
1 În 10 m 4 m 2 m

La calcularea distanței luăm în considerare că tensiunea scadea la sol, să nu depăşească 200 MV. Căderea de tensiune pe cablu de alimentare, nu cauzează erori de transmisie, Poate fi mult mai mare (The 5 V poate scadea în jos pentru a 3.3 V fără a crea probleme) În caz de cabluri ecranate pe sol este ecranul, care are, de obicei, rezistenţă mai puţin decât a declarat, astfel încât distanța va fi mai mare.


Capacitate de cablu

Valorile de “lungimea maximă” indicate în tabelul de mai sus sunt valabile doar pentru conectarea cablului cu o capacitate de aprox. 100 PF pe metru. Următorul tabel Arată corecţiile se aplică pentru cele mai frecvent utilizate de cabluri.

Cablu
Externe
diametru
( mm )
Impedanţă
( ohmi )
Capacitate
(PF/mt.)
Rezistenţă
(milliohm
/ metru)
Corector de lungime Max
H1500
15
50
80
4
x 1.25
H1000
10.3
50
80
11
x 1.25
Rg213
10.3
50
100
H500
9.8
50
82
15
x 1.22
H155
5.8
50
82
32
x 1.22
Rg8
10
52
90
Rg11 (TV)
10.3
75
60
21
x 1.7
RG59 (TV)
6.15
75
67
159
x 1.5
RG6_(TV sâmbătă)
6.8
75
51
100
x 2.0
RG56/în _(TV)
6.9
75
53
x 2.0
RG59/U _(TV)
4.5
75
53
45
x 2.0
Rg58
5.2
50
100
53
Rg142
4.95
50
96
Rg174
2.8
50
100
Rg178
1.85
50
95
Rg179
2.55
75
64
x 1.5
RG187
2.7
75
65
x 1.5
Rg188
2.7
50
95
RG196
1.9
50
93
RG316
2.5
50
95
Cablu de net
min 50
Max 130
min 60
Max 200
x 2.0
x 0.7
Cablu PC Audio
min 120
Max 300
min 500
Max 3000
x 0.8
x 0.5
Microphonic
cablu
min 60
Max 300
x 1.7
x 0.3
Sârmă de telefon sucit
50
100
x 2.0

Există, de asemenea, cabluri de capacitate mică (puţin utilizate şi greu de găsit):

  • Rg62 – 93 ohmi – 44 PF/mt
  • RG71 – 93 ohmi – 44 PF/mt
  • Rg210 – 93 ohmi – 44 PF/mt
  • RG63 – 125 ohmi – 33PF/mt
  • RG114 – 185 ohmi – 27PF/mt

Măsoară capacitatea unui cablu necunoscut:

  • Pregăti jupuire cablu ecranat perfectă şi păstrând izolate componenta centrală.
  • Se măsoară între scut centrală şi exterior cu un metru sau capacitate meter.
  • Pentru a îmbunătăţi precizia de măsurare, utilizează cinci sau zece metri de cablu.
  • Împărţi valoarea măsurată prin numărul de metri de cablu Picofarads.


Tipuri de dispozitive

Dispozitivele sunt etichetate cu un număr de 0 în 199 identificarea ei "tip".
În etapa de recunoaştere şi fiecare dispozitiv de numerotare se identifică cu acest "Tip".

În prezent, sunt definite următoarele dispozitive:

Tipul dispozitivului
Viteza
min
Viteza max
În afară de ace
Putere
nume
0
Speciale “personalizat” tip
1
1
12
1
12 dar
Senzor capacitiv
Bună calitate
2
1
12
10
InOut Servo
3
1
12
12
InOut Generic
4
1
12
12
InOut
5
6
Ace de maestru virtual
(prima versiune)
8
10
Ace de maestru virtual – V2
9 12 Ace de maestru virtual – V4
255 Necunoscut

Numărul maxim de dispozitive
Numărul maxim de conecta dispozitive este limitată de:
– numărul maxim de octeți care pot fi transmise în funcţie de viteza selectată.
– Curentul maxim care poate oferi "master" (în mod normal 500 dar)
– numărul maxim de dispozitive acceptate de Protocolul este 200 (la 0 în 199)


Tipuri de ac

Pinii sunt etichetate cu un număr de 0 în 255 identificarea ei "PinType".

Tipuri de Pin de ieşire

Ieşire Pin
Tip
nume
Master pentru a Slave
octeţi
Sclav la Master
octeţi
0
NEFOLOSITE
0
0
1
DIG_OUT
1
0
2
PWM_8
1
0
3
PWM_16
2
0
4
SERVO_8
1
0
5
SERVO_16
2
0
6 PAS CU PAS 4 0
7 PWM_FAST 5 0

Tipurile de intrare AC

Introducere Pin
Tip
nume
Master pentru a Slave
octeţi
Sclav la Master
octeţi
129
DIG_IN
0
1
130
DIG_IN_PU
0
1
131
ADC_8
0
1
132
ADC_16
0
2
133
CAP_8
0
1
134
CAP_16
0
2
135
RES_8
0
1
136
RES_16
0
2
140
CONTOR
0
2
141
COUNTER_PU
0
2
142
FAST_COUNTER
0
2
143
FAST_COUNTER_PU
0
2
144
PERIOADA
0
4
145
PERIOD_PU
0
4
146
SLOW_PERIOD
0
4
147
SLOW_PERIOD_PU
0
4
150
USOUND_SENSOR
0
2
160
CAP_SENSOR
0
3
165
STEPPER_DIR
0
4
180
ENCODER_A
0
2
181
ENCODER_A_PU
0
2
182
ENCODER_B
0
0
183
ENCODER_B_PU
0
0
175
ADC_24
0
1
176
ADC_24_DIN
0
0
177
ADC_24_DOUT
0
0


Comunicările între Master şi sclavi (linie serială)

Primul octet Tip de transmisie Transmisie Primirea
255 (*4) Speciale extins
(pentru viitoare extindere)
1 octet (prelungire)
>>>>> a se vedea tabelul verbelor extinsă <<<<<
254 (*1) RecogStart
Recunoaşterea precoce
şi numerotare
1 octet (numărul de octeți de date = 0)
1 octet (CRC de Cmd / 0)
253 (*2) Urmând
Introduceţi numărul de ordine și cererea tip
1 octet (numărul de octeți de date = 1)
1 octet (la 0 în 199)
1 octet (CRC de Cmd/Nbytes/tip)
1 octet ( tip )
1 octet ( CRC )
251 (*3) FastDataExchange
Schimbul de date rapid.
1 octet (numărul de octeți de date = 0)
1 octet (CRC Cmd/0)
la 0 în 60 octeţi de date
La 0 în 63 octeţi de date
249 (*4) SetupSlavePins
Introduceţi setările pentru
un cod pin “sclav”
1 octet (Indicele de sclav)
1 octet (numărul de octeți de date)
NN octeţi (PinTypes: 1 octeţi pe AC)
1 octet (CRC de Cmd/SlaveId/etc...)
1 octet (Indicele de sclav)
1 octet (CRC pe octeţi
anterioare)
248 (*4) SetMasterName
Introduceţi numele “Maestru”
NN octeţi (caractere ale numelui pe care denunta zero)
247 (*4) GetMasterName
Numele de lectură “Maestru”
NN octeţi (caractere de
numele reziliat zero)
246 (*4) SendValuesToSlave
Trimiterea “n” octeţi
un sclav “m”
(Max 56 octet)
1 octet (Indicele de sclav)
1 octet (numărul de octeți)
octet 1 . . . octet n
1 octet (CRC
Cmd/SlaveId/nBytes/n)
1 octet (Indicele de sclav)
1 octet (CRC pe octeţi
anterioare)
245 (*4) GetValuesFromSlave
Cerere pentru “n” octeţi pentru sclavi “m”
(Max 56 octet)
1 octet (Indicele de sclav)
1 octet (numărul de octeți)
1 octet (CRC de Cmd/SlaveId/nBytes)
byte1 . . octet n
1 octet (Indicele de sclav)
1 octet (CRC pe
n + 1 anterioară octet)
244 (*4) SendBytesToSlave
Trimiterea “n” octeţi pentru sclavi “m”
(Max 56 octet)
1 octet (Indicele de sclav)
1 octet (numărul de octeți)
octet 1 . . . octet n
1 octet (CRC
Cmd/SlaveId/nBytes/n)
1 octet ( Indicele de sclav )
1 octet ( CRC ) pe octeţi
anterioare
243 (*4) GetBytesFromSlave
Cerere pentru “n” octeţi pentru sclavi “m”
(Max 56 octet)
1 octet (Indicele de sclav)
1 octet (numărul de octeți)
1 octet (CRC de Cmd/SlaveId/nBytes)
octet 1 . . . octet n
1 octet (Indicele de sclav)
1 octet ( CRC ) despre
n + 1 anterioară octet
199 (*5) SetSpeed 1 octet (Comm. Viteza)
1 octet (CRC pe Cmd/comm viteza)
0 Nici o acţiune

(*1) Comenzile de servicii.
(*2) Comanda este utilizat doar de master şi sclavii recunoscută în timpul recunoașterii.
(*3) Rapid de comunicare – master schimbă valorile de toate sclavi folosind doar un singur schimb de USB
(*4) Comenzi de comunicare singur sclav
(*5) Comenzi speciale

SendValuesToSlave Trimite valorile la pinul de ieșire de un sclav (Formele fizice pe maestrul sau virtuale sclavi)

GetValuesFromSlave citeşte valorile din Pin de intrare de un sclav (Formele fizice pe maestrul sau virtuale sclavi)

SendBytesToSlave trimiteţi octeţi generice (exemplu de configurare), spre un sclav (Formele fizice pe maestrul sau virtuale sclavi)

GetBytesFromSlave Legea generic bytes (de exemplu de stat), la un sclav (Formele fizice pe maestrul sau virtuale sclavi)

Toate comenzile au coduri de la 200 în 255, pentru a preveni, în caz de erori, ID-uri şi tipuri de sclav (la 0 în 199) ar putea fi interpretat ca o comandă. (Setspeed nu contează pentru că niciodată nu este trimis în jos de linia de serie, dar numai de ’ HAL, la Master, prin USB)


Comunicare între computerul gazdă şi Master (USB)

Comandi da “Gazdă” verso “Master”

Nume de comandă ID-UL
USB_TxData[0]
PARAMETRII
USB_TxData[1 la n]
RecogStart CommandID, Nbytes
FastDataExchange CommandID, La 0 pentru a 60 octeţi de date
SetupSlavePins CommandID, SlaveId, Nbytes
SetMasterName CommandID, MasterName (zero reziliat)
GetMasterName CommandID,
SendValuesToSlave CommandID, SlaveId, Nbytes, Byte1….ByteN
GetValuesFromSlave CommandID, SlaveId, Nbytes
SendBytesToSlave CommandID, SlaveId, Nbytes, Byte1….ByteN
GetBytesFromSlave CommandID, SlaveId, Nbytes
SetSpeed CommandID, CommSpeed

Risposte da “Master” verso “Gazdă”

Nume de comandă RĂSPUNS
USB_RxData[0]
ÎNTOARCE VALORI
USB_RxData[1 la n]
RecogStart 0 = OK Nslaves, Sclav tip 1 … Sclav tip N
FastDataExchange 0 = OK La 0 pentru a 63 octeţi de date
SetupSlavePins 0 = OK
SetMasterName 0 = OK
GetMasterName 0 = OK Numele de Master (zero reziliat)
SendValuesToSlave 0 = OK
GetValuesFromSlave 0 = OK Octeţi 1 … Octet N
SendBytesToSlave 0 = OK
GetBytesFromSlave 0 = OK Octeţi 1 … Octet N
SetSpeed 0 = OK

Poziția zero de tampon USB indică dacă comanda a fost executat la “Master” cu succes.


Calcul al CRC

Toate CRC utilizate sunt calculate peste un anumit număr de octeţi consecutiv iar rezultatul CRC este un octet. CRC calcul utilizând un algoritm bazat pe "longitudinale redundanţă a verifica".

Verificare de redundanţă longitudinale

Dim CRC as Byte  CRC = 0  For each byte b      CRC = CRC Xor b  Next

Pentru a evita "coliziuni" între secvenţe de lumesc ( De exemplu, 0000 = 1111 sau 123 = 321 ) şi simplu secvenţe care produc valabil CRC ( De exemplu, 0000 cu CRC = 0 ) metoda de mai sus este modificat cu o permutare.

Calcularea CRC rezultatul este extrem de simplu si eficient.

Calcul al CRC utilizate în prezentul Protocol

Dim CRC as Byte  CRC = 0  For each byte b      CRC = CRC Xor b      CRC = CRC + 1  Next 


Setarea rata baud

Dacă decideţi să utilizaţi o rata de baud decât implicit, apoi "Maestrul" ar trebui să comunice tuturor dispozitivelor din lanţ nou viteza.

Acest cadru ar trebui să fie posibil chiar înainte de a face o buclă dispozitiv recunoaştere şi trebuie să fie, de asemenea, posibil cu linii de transmisie foarte lungi. Prin urmare, există o comandă specială, care acum este indicat.

1 – Căpitanul susţine şi linia de mare pentru 50 MS
2 – Toti sclavii cu siguranta sunt plasate în aşteptarea unui caracter
3 – Master generează o pauză (scăzut nivel de linie 12 pic la viteză minimă
4 – Master emite un caracter 55 (01010101) Rata baud dorit
5 – Toate sclavi deduce Rata baud la acest bytes (Auto-baud)
6 – Comandantul Trimite un octet care specifică "Viteza" (la 1 în 12)
7 – Comandantul Trimite un octet de CRC calculat pe doi octeţi (cmd/viteza)
8 – Dacă sclav este o greşeală nu modifică viteza

dilbertian eig

Verifica Rata baud

Dacă setaţi o viteză prea mare pentru linia de transmisie utilizate unele dispozitive în lanţ nu poate fi capabil la spre cină setarea viteza şi erori pot sa apara cand transmite datele.

În cazul în care erorile de transmisie sunt zero sau mai puţin decât 0.1% apoi setul de viteza este valabila.


Recunoaşterea şi numerotare

1 – Maestrul ieşiri la sclav întreaga secvenţă de "Viteza" setare pentru a se asigura că toate comunica la aceeaşi viteză.
2 – Maestrul nu transmite comenzi la 50 milisecunde.
3 – În acest moment toate sclavi ar trebui să fi de aşteptare pentru o comandă.
4 – Master emite un cod "254″ (RecogStart).
5 – Toti sclavii au pus la slab-trage-up (100-400 UA) pe intrare-ieşire şi deschide conexiunea ieşire dispozitive în aval. Ei nu mai răspunde la comenzi orice cu excepţia "253″ (Urmând).
6 – Master emite un cod "253″ (tip cerere) şi apoi un octet cu numărul 0″, primul dispozitiv în lanţ întâlneşte un octet cu tipul său, Elimină pull-up, conecta la sclav în aval şi nu răspunde la orice comanda.
7 – Master emite un cod "253″ (tip cerere) şi apoi un octet cu numărul 1″, al doilea dispozitiv în lanţ întâlneşte un octet cu tipul său, Elimină pull-up, conecta la sclav în aval şi nu răspunde la orice comanda.
8 – Master emite un cod "253″ (tip cerere) şi apoi un octet cu numărul "2″,

…. The “253” (tip cerere) repetă până la 200 ori
Atunci când nu mai raspunde la o durată mai mare 10 putin la un curent de debit, înseamnă că lanţul este de peste. Pentru a evita acest calcul, Aveţi posibilitatea să utilizaţi un interval de 12 MS care funcţionează întotdeauna, chiar şi la viteza mai mic.

9 – Master emite spre sclavi toate setarea secvenţă "Viteza", Arată că toate sclavi în modul de comunicare normale.
10 – Coordonatorul informează gazdă (PC-UL) Via USB Slave recunoscut numărul și tipul de fiecare.

Roberto_Cena & Livio_Cicala (2010 – 2016)

Comentariile sunt închise.