工程机器人及机器人学相关文档和matlab文件

This commit is contained in:
宋家齐 2024-07-04 01:13:17 +08:00
commit 4da69e496d
15 changed files with 361 additions and 0 deletions

889
CAN总线规范.pdf Normal file
View File

@ -0,0 +1,889 @@
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
 5FDIOJDBM CAN-bus ႋႨ࠯ඌ
 /PUF
TN01010101 V2.00 Date:2013/08/25 ‫۽‬ӱ࠯ඌг࠺
োљ ଽಸ
ܱ࡯Ս གྷӆሹཌ CAN-bus
ᅋေ
ѯหੱ ๙࿟ए৖
ຉ௪ࢲ‫ ܒ‬๙࿟‫׈‬ভ
ᇔ؊‫׈‬ቅ ৵ࢤఖ
Ч໓ࡥࢺࡹഡ၂۱ൌ࠽֥ CAN-bus ຩ઎ൈđؓ๙࿟‫׈‬
ভaሹཌ৵ࢤఖ֥࿊ᄴა࠹ෘđၛࠣ၂ུЌᅰ๙࿟ॖौaิ
ۚॆۄಠି৯֥ࣜဒծീb
©2020 Guangzhou ZHIYUAN Electronics Co., Ltd.
ྩ‫ר‬৥ൎ ರ௹ CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
2004-08-06
ϱЧ 2009-11-24 ‫۽‬ӱႋႨг࠺
V0.90 2009-12-08
V1.00 2013-08-25 ჰၹ
V1.01 Էࡹ໓֖
V2.00 ྩ‫۬ڿ‬ൔ
ྩ‫ڿ‬๭ோ
ᄹࡆ҃ཌܿᄵ
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
ଢ੣
1. ൡႨٓຶ...................................................................................................................1
2. ‫׈‬ভ࿊ᄴ...................................................................................................................2
2.1 ቋ֮ေ౰ ................................................................................................................... 2
2.2 ‫׈‬ভ࿊ᄴ֥ေ෍ ....................................................................................................... 2
2.3 ‫׈‬ভ࿊ᄴ֥ࠞཋᆴ ................................................................................................... 2
2.3.1 ‫׈‬ভࢲ‫ܒ‬...........................................................................................................2
2.3.2 ‫׈‬ভႵི‫׈‬ቅ...................................................................................................3
2.3.3 DB9 ৵ࢤఖ֥Ⴕི‫׈‬ቅ ..................................................................................3
2.3.4 ‫׈‬ভൡႨো྘ൕ২...........................................................................................3
2.4 ౼थႿ‫׈‬ভӉ؇֥ѯหੱ ....................................................................................... 5
2.4.1 CiA ๷ࡩ໊֥‫ק‬ൈ ...........................................................................................5
2.4.2 ҐႨЧ໓ CAN ࢤ१ൈቋն֥֝ཌӉ؇........................................................6
2.5 ҃ཌӉ؇aࢫׄඔਈaཌভཌࣥᆭࡗ֥ܱ༢ .......................................................7
3. Ҭቖ֥࿊ᄴ...............................................................................................................8
3.1 ஥ཌ‫ބ‬৵ࢤ ............................................................................................................... 8
3.2 DB9 ৵ࢤٚൔ֥ҬቖაҬ๨ ..................................................................................9
3.3 OPEN5 ৵ࢤఖ .......................................................................................................11
4. ҃ཌܿٓაᇔ؊‫׈‬ቅ࿊ᄴ.....................................................................................14
4.1 ᆰཌ྘ຉ௪ࢲ‫ ܒ‬..................................................................................................... 14
4.1.1 opൔ৵ࢤ.........................................................................................14
4.1.2 o5p྘ٳᆦൔ৵ࢤ.........................................................................................14
4.1.3 ൐Ⴈ CAN ຩూᇏ࠿ఖ֥৵ࢤ.......................................................................15
4.1.4 ൐Ⴈ CAN ܻ༸ሇߐఖ֥৵ࢤ.......................................................................16
4.2 ྒ྘ຉ௪ࢲ‫ ܒ‬......................................................................................................... 16
4.2.1 o֩Ӊpྒ྘৵ࢤ.........................................................................................16
4.2.2 ൐Ⴈ CAN ࠢཌఖ֥৵ࢤ ..............................................................................17
5. ҕॉሧਘ.................................................................................................................19
6. ૧ᄳലૼ.................................................................................................................20
1
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
1. ൡႨٓຶ
Ч໓֖ඪૼࡹഡ၂۱ൌ࠽֥ CAN-bus ຩ઎ൈđؓ๙࿟׈ভaሹཌ৵ࢤఖ֥࿊ᄴა࠹ෘđ
ၛࠣ၂ུЌᅰ๙࿟ॖौaิۚॆۄಠି৯֥ࣜဒծീb
1
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
2. ‫׈‬ভ࿊ᄴ
2.1 ቋ֮ေ౰
๙ӈđCAN-bus ሹཌҐႨҵ‫ݼྐٳ‬Ԯൻٚൔđၛච࢛ཌቔູ໾৘ҪđླေႵ 2 ۴ཌቔ
ູҵݼྐٳཌčCAN_HaCAN_LĎbೂݔ൐Ⴈ௠зච࢛ཌđ௠зҪႋФ৵ࢤ֞ CAN_Shield
ࠇຓ॔b
2.2 ‫׈‬ভ࿊ᄴ֥ေ෍
ཌӉ
ݔຓ҆ۄбࢠ೐đCAN-bus ሹཌᇏ֥؋ཌčӉ؇ġ0.3mđ২ೂᄝ T ྘৵ࢤఖ)ॖၛ
ҐႨы௜׈ভb๙ӈđႨջ௠зҪ֥ච࢛ཌቔູҵݼྐٳԮൻཌ߶۷ॖौbջ௠зҪ֥ච࢛
ཌ๙ӈФႨቔӉ؇նႿ 0.3m ֥׈ভb
ѯหੱ
ႮႿ౼थႿԮൻཌ֥ྐݼ࿼ӾൈࡗđCAN-bus ሹཌ֥๙࿟ए৖ॖି߶ෛሢѯหੱࡨཬ
طᄹࡆb
ຓࢸ‫ۄ‬ಠ
сྶॉ੮ຓࢸۄಠđ২ೂႮః෰׈ڵᄛႄఏ֥׈ՈۄಠbႭఃᇿၩႵնࠏ׈ੱۿᄎྛ
ࠇః෱ᄝഡСषܱൈಸၞႄఏ׈܂ཌਫ਼ഈ׈࿢э߄֥ӆކbೂݔمхԛགྷোරႿ
CAN-bus ሹཌა׈࿢э߄఼ਛ֥׈܂ཌਫ਼ѩྛሼཌ֥ঃđCAN ሹཌॖၛҐႨջච௠зҪ
֥ච࢛ཌb
หᆘቅॆ
෮ҐႨ֥Ԯൻཌ֥หᆘቅॆჿູ 120ȤbႮႿ CAN-bus ሹཌࢤ๨֥൐ႨđCAN-bus ሹཌ
֥หᆘቅॆॖିؿളэ߄bၹՎđ҂ି࠹ܙۚݖ෮൐Ⴈ׈ভ֥หᆘቅॆb
Ⴕི‫׈‬ቅ
෮൐Ⴈ׈ভ֥׈сྶቀཬܔđၛх૧ཌਫ਼࿢ࢆݖնđ႕ཙ໊Ⴟሹཌଌ؊֥ࢤ൬ఖࡱb
ູਔಒࢤק൬؊֥ཌਫ਼࿢ࢆđх૧ྐّݼഝđᄝሹཌਆ؊ླေ৵ࢤᇔ؊׈ቅb
2.3 ‫׈‬ভ࿊ᄴ֥ࠞཋᆴ
2.3.1 ‫׈‬ভࢲ‫ܒ‬
ູਔх૧൳֞ຓࢸ‫ۄ‬ಠ֥႕ཙđԮൻඔऌ֥‫׈‬ভ๙ӈ൐ႨջႵ௠зҪ֥ච࢛ཌđѩ౏
௠зҪေࢤ֞ҕॉֹb
༯૫֥๭ 2.1a๭ 2.2 ‫ٳ‬љਙԛਔջֆ/ච௠зҪ֥ CAN ׈ভ௩༅ა৵ࢤཌൕٓb
Wire str ucture Signal assig nment of wire and connection of earthing and terminator
Shield ed wire with CAN wire with connec tors
tran sposed wires
DSUB9 connector CAN_GND DSUB9 connector
CAN_ H (female or male) (at wire shield) (female or male)
CAN_ L pin designation pin designation
CAN_L
CAN_ GND 1 n.c. n.c. 1
CAN_H
2 2
3 3
4 n.c. n.c. 4
5 n.c. n.c. 5
6 n.c. n.c. 6
7 7
8 n.c. n.c. 8
9 n.c. n.c. 9
connec tor case n.c. n.c. connec tor case earth (PE)
n.c. = not connected
๭ 2.1 ֆ௠зҪ֥ CAN ‫׈‬ভ௩༅ა৵ࢤ
2
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
Wire str ucture Signal assi gnment of wire and connection of earthing and terminator
Do uble Shield ed wire wi th CAN wire with connectors
tran sp osed wires
DSUB9 connector Shie ld DSUB9 connector
CAN_ H (at outer wire shield)
CAN_ L (female or male) (female or male)
CAN_ GND CA N_L
Shield pin designation pin designation
1 n.c. n.c. 1
2 2
3 3
4 n.c. n.c. 4
5 5
6 n.c. CA N_H n.c. 6
CAN_GND
7 (at inner wire shield) 7
8 n.c. n.c. 8
Do not connect 9 n.c. n.c. 9
to earth
connec tor case connec tor case
at this point !
n.c. = not connected
earth (PE)
๭ 2.2 ච௠зҪ֥ CAN ‫׈‬ভ௩༅ა৵ࢤ
ᄝ൐ႨචҪ௠зཌ֥ච࢛ཌൈđ൐Ⴈᆀсྶᇿၩğ‫׈‬ভ֥ຓ௠зҪᆺି๙‫ݖ‬၂۱৵ࢤ
ఖ֥ຓ॔৵ࢤ֞նֹഈbႮႿ৵ࢤఖ֥ຓ॔၂Ϯაၘࢤֹ֥ഡСభ૫ϰཌྷ৵ࢤđ৵ࢤ֞֞ຓ
௠зҪ֥৵ࢤఖຓ॔‫ބ‬৵ࢤఖ֥ 5 ᆌᄝຩ઎ᇏ၂ׄ৵ࢤbᆃॖၛФႋႨ֞োර֥ଽ௠зҪ္
ࢤֹ֥ഡСഈb
2.3.2 ‫׈‬ভႵི‫׈‬ቅ
‫࠽ݓ‬ѓሙ ISO/DIS-11898 Ⴕၛ༯๷ࡩᆴğᆰੀ׈࿢ҕඔaᇔ؊׈ቅაѯหੱ࣍රᆴđ
ॖၛҕॉհ༂Ćໃᅳ֞ႄႨჷbb
і 2.1 აԮൻཌӉ؇ཌྷܱ֥‫׈‬ভᆰੀҕඔ๷ࡩᆴ
ሹཌӉ؇ ‫׈‬ভ 1*) ᇔ؊‫׈‬ቅ ቋնѯหੱ
ᆰੀ‫׈‬ቅ ֝ཌࢩ૫ࠒ
0l40m 70mȤ/m 0.25 mm² j0.34 mm² 124Ȥ/1% 1Mbps
AWG23, AWG22 at 40m
40ml300m <60mȤ/m 0.34 mm² j0.6 mm² 127Ȥ/1% 2*) >500Kbps
AWG22, AWG20 at 100m
300ml600m <40mȤ/m 0.5 mm² j0.6 mm² 127Ȥ/1% 2*) >100Kbps
AWG20 at 500m
600ml1km <20mȤ/m 0.75 mm² j0.8 mm² 127Ȥ/1% 2*) >50Kbps
AWG18 at 1km
1) ׈ভࢌੀҕඔ๷ࡩᆴğ120Ȥหᆘ׈ቅa5ns/m ࿼ൈĠ
2) ູਔϜ‫׈‬ভᆰੀ‫׈‬ቅႄఏ֥‫׈‬࿢කࡨࢆ֞ቋཬđࢠն֥ᇔ؊‫׈‬ቅᆴč২ೂ࿊Ⴈ٤ѓሙ֥ 150j300ȤĠ
‫ط‬ᄝ ISO11898 ѓሙᇏđิ֥܂ҕॉᆴູo118Ȥ<RT<130ȤpٓຶĎႵᇹႿᄹࡆሹཌӉ؇b
2.3.3 DB9 ৵ࢤఖ֥Ⴕི‫׈‬ቅ
֒ಒ׈קভ֥׈࿢කࡨުđ৵ࢤఖ֥Ԯൻ׈ቅ္ླေॉ੮ᄝ׈׈ቅᇏb၇ᅶളӁഅ
֥ܿٓđe.g. DB9 ৵ࢤఖૄ۱Ԩ֥ׄಸॆᄝ 2.5mȤ‫ ބ10mȤᆭࡗđૄ۱Ҭ๨֥Ⴕི׈ቅᄹ
ࡆ 5mȤ֞ 20mȤb
2.3.4 ‫׈‬ভൡႨো྘ൕ২
ၛ༯і 2.2 ਙԛਔ၂ུ CAN ච࢛ཌ/௠зච࢛ཌ֥׈ভ྘ݼbᆃ۱ݼౢֆᆺ൞ቔູ
۱ҕॉđѩ҂ေ౰აі۬ᇏປಆ၂ᇁbႨ޼۴ऌఃႋႨਵთथק৚൐Ⴈଧᇕো྘֥׈ভb
ᄝथק൐Ⴈޅ׈ভᆭభđ౨ҕॉটሱളӁഅ֥׈ভ࠯ඌҕඔb
3
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
і 2.2 ၂ུ๷ࡩ֥‫׈‬ভো྘
RVVP ௠зཌaච࢛௠зཌ
྘‫ݼ‬ ྉඔ X ѓӫࢩ૫(mm2) ุ֝ࢲ‫( ܒNo./mm) ๙࿟ए৖ (૜)
RVVP 2X0.50 2X28/0.15 ච࢛؅༌๞щᆮ
RVVP 2X0.75 2X24/0.20 ච࢛؅༌๞щᆮ 1000
RVVP 2X1.00 2X32/0.20 ච࢛؅༌๞щᆮ 3000
ZR RVVP 2X1.00 ቅಗ 2X32/0.2 ච࢛؅༌๞щᆮ
RVVP 2X1.50 2X48/0.2 ච࢛؅༌๞щᆮ 5000
ZR RVVP 2X1.50 ቅಗ 2X48/0.2 ච࢛؅༌๞щᆮ
RVVP 2X2.50 2X49/0.25 ච࢛؅༌๞щᆮ
1) ၛഈ׈ভ֥ྐ༏টሱധ㥬დཌভ܄ඳđ࡮ຩᆶğwww.lingyu.cnbѓᇿ RVV ູ௴๙ච࢛ཌđRVVP
ູ௠зච࢛ཌčྍ‫ݓ‬ѓࡼච࢛྘‫׿‬৫ԛটđູ RVSPb طRVVP ଏಪູ٤ච࢛֥ཌভĎ
‫ݓ‬ຓ္Ⴕህ૊ളӁ CAN-bus ຩ઎ࠇ DeviceNet ຩ઎֥‫׈‬ভӌഅđбೂૅ‫ݓ‬Ϥ๙‫׈‬ভ‫܄‬
ඳđ෰ૌህ૊ളӁ֥׈ভൡކႿ۲ᇕگᄖ֥๙࿟ຩ઎۽ӱཛଢbі 2.3aі 2.4 ਙԛਔ‫܄ھ‬
ඳ๷ࡩ֥ DeviceNet ׈ভ࿊྘b
і 2.3 ๷ࡩ֥ DeviceNet ׈ভো྘č1Ď
4
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
і 2.4 ๷ࡩ֥ DeviceNet ׈ভো྘č2Ď
2.4 ౼थႿ‫׈‬ভӉ؇֥ѯหੱ
2.4.1 CiA ๷ࡩ໊֥‫ק‬ൈ
і 2.5 ູ CiA ิ‫֥܂‬ѯหੱၛࠣཌྷႋ֥ SJA1000aPCA82C200aPCA82527 ྉோ໊֥
‫ק‬ൈ॥ᇅ࠷թఖ BTR0aBTR1 ഡקᆴb࠽ݓѓሙᇏ֥ሹཌӉ؇ܿٓđႭః൞ᄝۚѯหੱ༯
č>500kbpsĎđაЧ໓֥ൌ࠽ܿٓ҂๝bఃჰၹିᄝႿЧ໓֥ܿٓ൞ၛࢤ१࿼ൈቔູ႕ཙ
CAN ྐݼԮൻᇶေၹ෍ൈቋߊ֥ঃ༯ᇅ֥קbൌ࠽ႋႨіૼđ๙ӈđ൐ႨЧ໓๷ࡩ֥ࢤ
१ҕඔି࿼ഥ֞۷Ӊ֥ए৖b
֒ಖđೂ‫ݔ‬୆൐Ⴈ CiA ๷ࡩ֥ѯหੱđ൞ીႵ಩ޅ໙ี֥bೂݔሹཌഈ৵ࢤႵః෱ള
Ӂഅ֥ሹཌଆॶđᄵႋھႄఏᇿၩb
і 2.5 CAN ຩ઎໊‫ק‬ൈѓሙčҐႨࣖᆒູ 16MHzĎ
ѯหੱ ໊ൈࡗ ૄ໊֥ൈࡗ‫ٺ‬ ൈࡗ‫حٺ‬ᆴ Ґဢ໊ׄᇂ BTR0 BTR1
ሹཌӉ؇ ‫ح‬ඔਈ [HEX] [HEX]
1 Mbps 1Ȱs 8 125ns 6tq 00 14
25 m (750ns)
800 Kbps 1.25Ȱs 10 125ns 8tq 00 16
50 m (1us)
500 Kbps 2Ȱs 16 125ns 14tq 00 1C
100 m (1.75us)
250 Kbps 4Ȱs 16 250ns 14tq 01 1C
250 m (3.5us)
125 Kbps 8Ȱs 16 500ns 14tq 03 1C
500 m (7us)
100 Kbps 10Ȱs 16 625ns 14tq 04 1C
650 m (8.75us)
50 Kbps 20Ȱs 16 1.25us 14tq 09 1C
1 km (17.5us)
20 Kbps 50Ȱs 16 3.125us 14tq 18 1C
2.5 km (43.75us)
10 Kbps 100Ȱs 16 6.25us 14tq 31 1C
5 km (87.5us)
1) ᇿၩğሹཌӉ؇֥ᆜඔᆴ൞ၛ 5ns/m ֥‫׈‬ভ࿼ൈູࠎԤ֥đ‫֥קࡌط‬ଽ҆࿼ൈ၇ঠႿᆃུѯหੱ
1M...800KbpsĠ500k...250KbpsĠ300nsĠ125k...100KbpsĠ450nsĠ50k...10Kbpsğ1.5tqb۷‫ྐ֥؟‬༏ҕ
ॉ CiA ֥ԛϱ໾b
5
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
2.4.2 ҐႨЧ໓ CAN ࢤ१ൈቋն֥֝ཌӉ؇
൐ႨЧ໓๷ࡩ֥ CAN ࢤ१ٚൔൈđቋն֥֝ཌӉ؇ॖၛ۴ऌ༯૫֥ٚӱൔট࠹ෘğ
lMAX tx cabledelay (tx Ģ tSAMPLING Ē tDELAY) ‫܄‬ൔ 2-1
2
lMAX
ts1 2 trxdel ttxdel 2 topto ‫܄‬ൔ 2-2
2cable de lay
ts1 T0 Tbrp Tseg1 Tsjw1 (ts1ĢҐဢׄ) ‫܄‬ൔ 2-3
۲ཛҕඔඪૼೂ༯ğ (ؓႿӈႨ֥ SJA1000 ྉோ)
(BTR0x Ģ CAN ॥ᇅఖ BTR0 ࠷թఖଽಸ
T0 = 2/16 MHz = 125 ns ၛ 0x3F ဃз(->BTR0 ࠷թఖ໊ 6...0))
Tbrp = BTR0x + 1 (BTR1x Ģ CAN ॥ᇅఖ BTR1 ࠷թఖଽಸ
ၛ 0x0F ဃз(->BTR1 ࠷թఖ໊ 3...0))
Tseg1 = BTR1x + 1 (Ґဢ๋ׄሇॺ؇Ġsjw Ģ BTR1 ࠷թఖଽಸၛ 0xC0 ဃз
(-> BTR1 ໊֥ 7 ބ6)đ ᆴ֥ٓຶ 0..3)
Tsjw = sjw + 1 (CAN ॥ᇅఖ࿼ൈ)
(ൌҩᆴ)
trxdel = max. 62 ns (CAN ‫ؿ‬ෂఖ 82C250 ֥࿼ൈᆴ)
50 ns
(৵֞ HCPL710x ֥‫྘ׅ‬࿼ൈ)
ttxdel = max. 40 ns (Tx) (HCPL710x ܻ୽࿼ൈ)
max. 80 ns (Rx)
30 ns (৵֞ 82C250 ֥‫྘ׅ‬࿼ൈ)
(ච࢛ཌ‫྘ׅ‬ᆴ(ႵིӉ؇), ӌഅܿٓ, ࡮భ૫֥ CiA ѓሙ)
topto = max. 40 ns
typ. 28 ns
15 ns
Cable delay = 5.5 ns/m
ၹՎ, ؓႿ CAN ॥ᇅఖ SJA1000đ82527 ࠇ 8xC591 ྉோđၛ༯ٚӱ֥ࢲ‫( ݔ‬ᄝ 5.5 ns/m
‫׈‬ভ࿼ൈ֥౦ঃ༯đ෮Ⴕൈࡗֆູ໊ ns)࡮іղൔğ
lMAX 125ns BTR0x
1 BTR1x 1sjw1 1 2 trxdel ttxdel 2 topto
11ns m ‫܄‬ൔ 2-4
і 2.6 ູ֝ཌቋնӉ؇֥྘ׅބ၂ུѯหੱঃ༯֝ཌ֥ቋཬӉ؇b
֝ཌቋնӉ؇֥྘ׅކژЧ໓֥ࣜဒᆴđѩࣜݖൌ࠽ҩਈ֥ᆣൌbЧ໓෮ਙඔऌၘࣜ
‫ݖ‬ѓሙҩ൫ѩ቎࿖ 1Mbps หקᆴ࡟Ұb
ቋཬႵིཌӉၘࣜФ൐Ⴈᄝӌഅܿٓᇏቋҵ࿼ൈ֥ӆކbᆃུཌӉ҂ି๙ݖҩਈটᆣൌđ
ၹູჭࡱ֥࿼ൈޓ׻ᆞӈ౏ݺႿቋҵӆק֥ܿٓܿކb
Ⴎ໑؇ႄఏ֥࿼ൈ֥ཁᇷэ߄ॖၛФஆԢb๙ӈႮఖࡱളӁ༂ҵႄఏ֥࿼ൈ֥ொ၍б
؇ႄఏ֥ေնb
౨ᇿၩջႵᇔ؊׈ቅ֥ຩ઎ܒӮਔᆃུ֥ܿٓࠎԤbૄ۱ཌഈ֥׈ቅčೂࢠӉ֥ᆦཌĎ
߶ႄఏႵིཌӉ֥ࡨഒb
6
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
і 2.6 ѓሙѯหੱൈ֥֝ཌቋնӉ؇a֝ཌቋཬӉ؇
֝ཌቋնӉ؇ ֝ཌቋཬӉ؇ ѯหੱ [kbps] SJA1000 ࠷թఖ
lmax [m] 1*Ď lmin [m] 2*Ď
1000 BTR0 [HEX] BTR1 [HEX]
37 20 800 00 14
59 42 666.6 00 16
80 65 500 00 18
130 110 333.3 00 1C
180 160 250 01 18
270 250 166 01 1C
420 400 125 02 1C
570 550 100 03 1C
710 700 66.6 43 2F
1000 980 50 45 2F
1400 1400 33.3 47 2F
2000 2000 20 4B 2F
3600 3600 12.5 53 2F
5400 5400 10 5F 2F
7300 7300 67 2F
1*Ď࿼ൈ 2*Ď࿼ൈ
trxdel = 50 ns trxdel = 62 ns
ttxdel = 30 ns ttxdel = 60 ns
topto = 15 ns topto = 40 ns
…TDEL = 110 ns … TDEL = 202 ns
2.5 ҃ཌӉ؇aࢫׄඔਈaཌভཌࣥᆭࡗ֥ܱ༢
҃ཌӉ؇aࢫׄඔਈaཌভཌࣥ೘ᆀᆀᆭࡗթᄝ٤ӈࣅૡ֥ܱ༢bೂ๭෮ൕđູࢩ๭
CANopen ܿٓѓሙ֥ܱ༢๭b๙ӈঃ༯ླေ༵ಒקԮൻए৖ׄࢫބඔਈđಖުथקҐႨ
൉હཌভb ๭ 2.3 ҃ཌӉ؇aࢫׄඔਈaཌভཌ֥ࣥб২ܱ༢
7
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
3. Ҭቖ֥࿊ᄴ
3.1 ஥ཌ‫ބ‬৵ࢤ
CAN ຩ઎֥ຉ௪ࢲܒ൞oᆰཌൔp֥Ġؓбྒྙࠇߌྙຩ઎đຩ઎Ⴕਆ۱o؊ׄpbᄝ
ਆ۱؊ׄഈđ‫׻‬Ⴕ 1 ۱նჿ 120Ȥ֥ᇔ؊׈ቅФ৵ࢤᄝ CAN_H ބCAN_L ྐݼཌഈb
౨ಒಪ୆ሹ൞ᄝሹཌਆ؊൐Ⴈֆ‫֥׿‬ᇔ؊‫׈‬ቅđၹູ֒ᄝࡼটؓຩ઎ቔԛ၂ུ‫ڿ‬эൈđ
ᄝሹཌࢤ๨ࠇ PCB ৚֥׈ޓ଴Фؿགྷbᆌൔ֥ࠇ।ൔ֥ 9 ᆌ DB9 ৵ࢤఖ‫׻‬ॖၛФႨቔ
CAN ሹཌࢤ๨b
$"/ #PBS E $POOFDU JOH $"/@) 'FNBM F $POOFDU PS
$"/@(/%U P $"/@-
F H1$*  1S PU FDU J WF $POEVDU PS 1& $"/@(/% .BM F $POOFDU PS
$"/64#
/FU  1& 5FS NJO BU PS .BM F 5FS NJ OBU PS
7 .&$ "/ FU D  /FU  0SEFS OP $  
XJ U I 1& $POOFDU PS
'FNBM F 5FS NJOB U PS
5 $POOFDUPS 0SEFS OP $  
0S EFS OP $  
M    N
5 $POOFDUPS 5 $POOFDUPS 5 $POOFDUPS 5 $POOFDUPS
$   $   $   $   5FS NJO BU PS
M    N M    N M    N M    N
$"/ $#. $"/ $#. $"/ $#. F H
%* 0 "*  $0. $"/4 14* OU FS G BDF
$4$ 
PS
$"/1 $ #PBSE
$"/$BCM F $"/$BCM F $"/$BCM F
0S EFS OP $   0S EFS OP $   0S EFS OP $  
๭ 3.1 CAN-bus ຩ઎֥஥ཌა৵ࢤ
၂ུ CAN-bus ଆॶᆦӻᆃᇕሹཌࢲ‫ܒ‬đၹູ෰ૌႵਆ۱҂๝֥ DB9 ྘Ҭቖğ၂۱৵ࢤ
ൻೆཌđਸ਼၂۱৵ࢤൻԛཌbೂݔ۱ଆॶФՖ৽ࢤഈ၍ԢđCAN ሹཌି৫ࠧ޺ཌྷ৵ࢤđ
ၹູ၂۱Ⴕ।ൔ֥ DB9 ৵ࢤఖ‫ط‬ਸ਼၂۱Ⴕ၂۱ᆌൔ֥ DB9 ৵ࢤఖb
๙ӈ౦ঃ༯đሹཌ؊ׄࣇႵ၂۱ CAN ৵ࢤ֥ഡСb෱֥৵ࢤॖၛ๙ݖ۱ T ྘৵ࢤఖb
ሹཌଌ؊ᆦཌӉ؇ႋ࣐ॖି֥؋b๙ӈđࢤ࣍ 0.3m ֥Ӊ؇൞ॖၛ֤֞Ќᆣ֥b
ҕॉ‫ ໊ؓ׈CAN ሹཌႵ႕ཙđၹູૄ۱ଆॶдՎᆭࡗ൞ཌྷ޺ۯ৖֥bҕॉ໊׈ᄝຩ઎
ᇏ֥ଖ၂ׄФࢤֹb౨ಒಪᆺႵ၂۱ࢤֹׄđڎᄵ߶ᄝ CAN_GND ཌഈྙӮֹߌੀb
ೂ‫ݔ‬৵ࢤਔ၂۱ીႵ‫׈‬గ‫ۯ‬৖֥ CAN ࢤ१đӁളི֥ࣼݔཞ৵ֹbၹՎđቋ؟ᆺି৵
ࢤ၂۱ીႵ‫׈‬గ‫ۯ‬৖֥ CAN ࢤ१b
෮Ⴕ CAN Ӂ௖׻ھС׈ۯ৖ࢤ१bൌ࠽ഈೂݔଆॶીႵ׈ۯ৖ࢤ१đࡼᄝଆ
Ҩ৚Фหљิࠣb
ೂ‫ݔ‬൐ႨֆҪ௠з‫׈‬ভൈđቔູ CAN_GND ֥௠зཌ҂ି৵ࢤ֞ DB9 ࢤ๨֥௠зҪđ
ᆺିა pin 3 ‫ބ‬/ࠇ pin 6 ৵ࢤb௠зҪड़קᄝଖ၂ׄԩФࢤֹčPEĎbၹՎđॖၛҐႨห൹
֥৵ֹ֥ᇔ؊b
ೂ‫ݔ‬൐ႨਔචҪ௠з‫׈‬ভđؓႿଽ௠зҪđোරႿֆҪ௠з‫׈‬ভ௠зҪ֥ႋႨğቔູ
CAN_GND ྐ‫ݼ‬ཌ౏ᄝଖ၂ׄԩࢤֹ(PE)b
ຓ௠зҪ๝ဢႋھᄝଖ၂ׄԩࢤֹčPEĎb֌҂൞ቔູ CAN_GNDbط൞đຓ௠зҪႋ
‫ھ‬ሹ൞Ф৵ࢤ֞ DB9 Ҭቖ֥ࢤ๨௠зҪbೂݔ৵ࢤఖીႵ௠зҪčೂы௜׈ভ৵ࢤఖĎຓ
௠зҪߎླေ৵ࢤ֞ pin 5 ၛಒЌॖौ֥ࢤֹb
8
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
๭ 3.2 CAN-bus ຩ઎֥ཌভა৵ࢤఖ
ၛ༯ਙіඪૼਔቆࡹ CAN ຩ઎ൈႋ‫ھ‬቎൯֥ܿᄵğ
і 3.1 CAN-bus ຩ઎֥৵ࢤܿᄵ
྽ ܿᄵඪૼ
1 ຩ઎ਆ؊сྶႵਆ۱ٓຶᄝ Ȥ35Ȥ֥ᇔ؊‫׈‬ቅčᄝ CAN_L ބCAN_H ྐ‫ݼ‬ᆭࡗĎĆ
2 ҕॉ໊׈o$"/@(/%pᄝଖ၂ׄԩ৵ࢤֹ֞čPEĎbପ৚сྶ൞၂ׄࢤֹĆ
3 ֒൐ႨචҪ௠з׈ভൈđຓ௠зҪᄝଖ၂ׄԩ৵ࢤֹ֞bପ৚္сྶ൞၂ׄࢤֹ!
4 ીႨ֥ᆦཌсྶ࣐ॖି֥؋(Ӊ؇<0.3m)Ć
5 ൐Ⴈൡ֥֒‫׈‬ভো྘Ćсྶಒ‫׈ק‬ভ֥‫׈‬࿢කࡨĆ
6 ಒЌ҂ေᄝ‫ۄ‬ಠჷ‫҃࣍ڸ‬ᇂ CAN ሹཌbೂݔ҂֤҂ᆃဢቓđࡹၰ൐ႨචҪ௠з׈ভb
3.2 DB9 ৵ࢤٚൔ֥ҬቖაҬ๨
հ༂Ćໃᅳ֞ႄႨჷbඪૼਔ CAN ሹཌ֥ 9 ᆌ DB9 ৵ࢤఖč‫܄‬๨Ďčა CiA ླྀ߶֥
DRP303-1 ѓሙ၂ᇁĎ֥ႄ࢖ٳ஥b๙ӈ֥Ӂ௖ᇏđCAN ଆॶࠇ CAN ष‫ؿ‬ϰᆺ‫ٳ‬஥ CAN_Ha
CAN_L ྐݼđࣼॖၛᆞӈ๙࿟bၹՎđໃࡆඪૼൈđն؟ඔ৵ࢤ׈ভᇏ҂ླေٳ஥ః෰ྐ
ݼb
і 3.2 DB9 ᆌൔ৵ࢤఖ
ྐ‫ݼ‬ ႄ࢖ ྐ‫ݼ‬
CAN_GND 6 1 Ќ਽
CAN_H 7 1 2 CAN_L
Ќ਽ CAN_GND
6 2
(CAN_V+) 7 Ќ਽
8 8 3 3
9 4
5
9
4
9
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
5 CAN_SHIELD
CAN_LaCAN_H CAN ྐݼཌb
CAN_GND CAN ໾৘Ҫ֥ҕॉ׈௜b৵ࢤ֞௠зҪࠇᆀ֒൐ႨචҪ௠з׈ভൈđ৵ࢤ֞ଽ
௠зҪb
(GND) ॖ࿊֥ GND ބCAN_V+֥ҕॉ‫׈‬௜čᄝЧ໓ष‫ؿ‬ϰഈ‫ٳ‬஥۳ CAN_GNDĎb
CAN_SHIELD CAN ௠зҪđ҆‫္ކֹٳ‬ѓູ FGb
֒൐ႨචҪ௠з׈ভൈđCAN_SHLD ৵ࢤ֞ຓ௠зҪ‫ ބDB9 ৵ࢤఖ֥௠з॔b
ѩ౏đຓ௠зҪФ৵ࢤ֞ pin 5 ၛЌᆣ֒൐ႨીႵ௠з৵ࢤ֥৵ࢤఖൈđॖौ֥
ࢤֹb
(CAN_V+) ॖ࿊֥đCAN ࢤ१֥‫׈‬࿢ჷ(+7V<V+<+13V)b
ն‫؟‬ඔЧ໓ष‫ؿ‬ϰ҂ေ౰๙‫ݖ‬ሹཌ‫׈܂‬đೂ‫ླݔ‬ေҐႨሹཌ‫׈܂‬đ҂ܵႨ‫ޅ‬ᇕٚ
‫م‬đಒЌ‫׈‬ჷཌᄝྐ‫ݼ‬ཌֻ֥၂Ҫ௠зҪຓđ౏ູਔЌՎࢠ֥֮‫׈‬࿢කࡨđႋ൐
Ⴈቀܔՙ֥ཌb
ܼᇜᇁჹ‫׈‬ሰิ‫ ܂TEZ ༢ਙ৵ࢤఖđቋնॖၛ৵ࢤཌູࣥ 1.5mm2 ֥௴๙ච࢛ཌa௠
зච࢛ཌĠਸ਼ຓđຓ॔ഈഡႵॖၛ‫ڿ‬эଽࡹ 120Ȥᇔ؊׈ቅ֥ѭ׮षܱđॖၛٚьֹႨቔູ
CAN-bus ຩ઎ᇔ؊৵ࢤఖđࠇ೘๙৵ࢤఖb
๭ 3.3 TEZ-C01 ৵ࢤఖູ TEZ-C01 ৵ࢤఖ֥ຓܴൕၩ๭b
๭ 3.3 TEZ-C01 ৵ࢤఖ
TEZ-C01/02/03 ৵ࢤఖॖႨႿۚղ 1Mbps ෎ੱ֥ CAN-bus ຩ઎ᇏđॖၛิ‫܂‬ሹཌ‫׈‬ভ
ॹ෎đٚьđॖौ֥৵ࢤିۿb
TEZ-C01/02/03 ৵ࢤఖႨႿൌགྷགྷӆഡСॹ෎৵ࢤ֞ CAN-bus ຩ઎đ္ॖၛቔູຩ઎ᇔ
؊৵ࢤఖa೘๙৵ࢤఖaѓሙሇߐఖ൐ႨbൡႨၛ༯ӆކğ
ॹ෎৵ࢤ CAN-bus གྷӆഡС֞ CAN-bus ຩ઎đิ׈܂ভॹ෎ࢤཌ֥ٚمb
ႨႿ CAN-bus ຩ઎֥ਆ۱ᇔ؊ࢫׄđቔູࠢӮ 120 ୸ଚ׈ቅ֥ሹཌ؊ࢤఖb
ႨႿ CAN-bus ຩ઎֥ᇏࡗࢫׄđቔູຩ઎ᇏ֥೘๙৵ࢤఖb
120 ୸ଚ֥ᇔ؊‫׈‬ቅၘࣜࠢӮᄝ TEZ-C01/02/03 ৵ࢤఖᇏđᄝຓ҆๙‫ݖ‬၂۱߁‫׮‬षܱট
׮ğຓ֥҆ѓ്o0/໊pᇂіൕ൐Ⴈଽᇂ֥ 120 ୸ଚᇔ؊׈ቅĠo0''໊pᇂіൕ؎षč҂൐
ႨĎଽᇂ֥ 120 ୸ଚᇔ؊׈ቅbԢՎᆭຓđۚᇉਈ֥௠зൔ৵ࢤఖຓ॔ಒЌਔࠧьᄝቋ֥ۚ
Ԯൻ෎ੱ༯đӁ௖္ିЌӻۚ؇֥ॆۄಠି৯b
TEZ-C01/02/03 ৵ࢤఖഡ࠹ႨႿ‫ ކژCiA Draft Recommendation 303-1 ѓሙܿ‫׈֥ק‬ভ
ຓ҆ᆰູࣥ 8mma๞֝ཌࢩ૫ࠒཬႿ 1.5mm2 ֥෮Ⴕ CAN-bus ׈ভbTEZ-C01/02/03 ৵ࢤఖ
္ॖၛᆦӻջႵ၂ུ஥ࡱ֥໭௠з࢛׈ކভb
10
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
๭ 3.4 TEZ-C01 ৵ࢤఖ๭ோ
๭ 3.5 TEZ-C02 ৵ࢤఖ๭ோ
๭ 3.6 TEZ-C03 ৵ࢤఖ๭ோ
3.3 OPEN5 ৵ࢤఖ
հ༂Ćໃᅳ֞ႄႨჷbඪૼਔ CAN ሹཌ֥ OPEN5 ৵ࢤఖč๙ӈ֥ PHOENIX ؊ሰĎ
֥ႄ࢖ྐٳݼ஥b๙ӈᆺླٳ஥ğCAN_HaCAN_L ྐݼb
11
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
ႄ࢖ і 3.3 OPEN5 ৵ࢤఖ ൕၩ๭
5 ྐ‫ݼ‬
4 (CAN_V+)
3 CAN_H
2 CAN_SHIELD
1 CAN_L
(CAN_GND)
OPEN5 Ҭቖ֞ DB9 Ҭቖ(҂ջ‫׈‬ჷ৵ࢤ)֥޺৵ႄ࢖ྐ‫ٳݼ‬஥࡮๭ 3.7b
5IF QJ O %46#
DPOOFDU PS J T
BTT J HOFE J O
BDDPS EBODF XJU I
$J " %31
๭ 3.7 OPEN5 ৵ࢤఖა DB9 ৵ࢤఖ֥޺৵
ܼᇜᇁჹ‫׈‬ሰളӁ֥ CAN-bus Ӂ௖၂Ϯ࿊ᄴ DB9 ᆌ྘/।྘Ҭቖđఃܵ࢖ྐ‫קݼ‬ၬೂ
і 3.4 ෮ൕbDB9 Ҭቖ֥ܵ࢖‫ק‬ၬ‫ ކژCiA ѓሙb
і 3.4 CAN ৵ࢤఖ DB9 ᆌ྘Ҭቖ
ႄ࢖‫ݼ‬ ྐ‫ݼ‬ ‫ିۿ‬
2 CAN_L CAN_L ྐ‫ݼ‬ཌ
7 CAN_H CAN_H ྐ‫ݼ‬ཌ
3a6 GND ҕॉֹ
5 CAN_SHIELD ௠зཌ
ໃႨ
1a4a8a9 ॢ
Ⴈ޼ॖၛ๙‫ݖ‬࿊஥֥ DB9OPEN5 ሇߐఖđࡼ DB9 ᆌൔҬቖ֥ CAN-bus ྐ‫ݼ‬ሇߐӮ 5
ႄ࢖֥ DeviceNet ࠇ CANopen ຩ઎b༯૫ၛ৵ࢤᇀ DeviceNet ຩ઎ູ২đࢺക OPEN5 Ҭ
ቖ֥ൻԛྐ‫ݼ‬đೂ๭ 3.8 ෮ൕb
V ‫ޣ‬೤ P.M.S#207C
CAN_H Ϣ೤ EIA935A ཌভཋᇅ
௠зཌ
CAN_L ড೤ P.M.S.#297C
V ‫ޑ‬೤ P.M.S.#426C
๭ 3.8 OPEN5 ৵ࢤఖ֥ DeviceNet ‫ק‬ၬ
12
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
๭ 3.9 ູ DB9OPEN5 ሇߐఖ֥ຓܴൕၩ๭b
๭ 3.9 DB9OPEN5 ৵ࢤఖ
13
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
4. 布线规范与终端电阻选择
4.1 直线型拓扑结构
直线型拓扑结构是 CAN 总线布线规范中最为常用的。如图 4.1 所示。即主干的两条线
上分支出支线到各个节点。主干的两端配置合适的终端电阻实现阻抗匹配2km 内通常为
120 欧)。
图 4.1 直线型拓扑结构
4.1.1 “手牵手”式连接
由于分支长度以及分支长度的积累都会造成阻抗不连续,在接头处产生“反射”现象。
所以直线型拓扑结构中,最常用的就是“手牵手”式的连接。如图 4.2 所示。
图 4.2 “手牵手”式的连接
由于要在同一个接线端子里面插入 2 根线,在线缆较粗的情况下,可能插不进去,或者
无法可靠牢固地拧紧。所以在设计节点的时候,将同一路 CAN 分成 4 个端子引出2 两两
并联,如图 4.3 所示。
图 4.3 方便接线的“手牵手”方式
4.1.2 “T”型分支式连接
在绝大多数的工业现场、轨道机车中,由于整体线缆非常多,均需要使用接线排,方便
维护。所以 CAN 的节点分支也不可避免。只能尽量减小分支长度。如图 4.4 所示。
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
图 4.4 T 型分支方式
这个分支长度在 1M 波特率下不得大于 0.3m,因为 1M 波特率是 CAN 的最高波特率,
所以其他波特率时,分支长度如果也遵循 0.3m 的规范,则可以稳定运行。
当然在一些场合无法做到很短的分支,所以根据不同波特率,有不同的分支长度规范,
如表 4.1 所示,为高速 CAN 中的分支规则。可见随着波特率增加,分支约束越来越宽松。
表 4.1 不同波特率下的分支规则
如果更低的波特率,分支规则会继续放宽,如在 5K 波特率下,笔者曾经测试过 100 米
的分支可以稳定通讯。
4.1.3 使用 CAN 网桥中继器的连接
如果布线长度超过 CAN bus 在某一波特率下的最大值,则需要使用 CAN 网桥
CANBridge 进行中继延长距离。如图 4.5 所示。
图 4.5 使用 CAN 网桥延长距离
在不同波特率下,增加 CANBridge 网桥的最大距离也不同,这里按以 1.5mm 的屏蔽双
绞线为传输介质,需要增加网桥的实际距离与终端电阻值,如表 4.2 所示。
15
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
表 4.2 CAN 实用最大距离
通讯距离 最高波特率(bps)
25m 1M终端电阻为 120 欧)
40m 800k终端电阻为 120 欧)
70m 500k终端电阻为 120 欧)
140m 250k终端电阻为 120 欧)
280m 125k终端电阻为 120 欧)
350m 100k终端电阻为 120 欧)
450m 80k终端电阻为 120 欧)
700m 50k终端电阻为 120 欧)
1 km 35k终端电阻为 120 欧)
2 km 18k终端电阻为 120 欧)
3 km 9k终端电阻为 160 欧)
4 km 7k终端电阻为 220 欧)
5 km 7k终端电阻为 240 欧)
6 km 6k终端电阻为 270 欧)
7 km 5k终端电阻为 300 欧)
8 km
9 km 5k终端电阻为 330 欧)
10 km 5k终端电阻为 360 欧)
5k终端电阻为 390 欧)
4.1.4 使用 CAN 光纤转换器的连接
在某些电磁干扰非常严重场合,需要将 CAN-bus 转换为光信号来传输,避免受到雷击
浪涌等影响。如图 4.6 所示为使用 CANhub-AF2S2 两路光纤两路 CAN 的组网方案。自动中
继,不断延长距离。
图 4.6 CAN 光纤组网方案
4.2 星型拓扑结构
4.2.1 “等长”星型连接
16
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
图 4.7 星形状等长拓扑结构
在星形基本等长情况下,可不使用集线器设备,调整每个节点的终端电阻即可实现组网:
R=n×60 欧姆
R:每个分支的终端电阻
n:分支数量
注意:每个节点都需要加终端电阻,星形的中心不得加任何电阻!
4.2.2 使用 CAN 集线器的连接
如果分支不等长,或者是非常复杂的分支结构,就需要使用 CAN 集线器 CANHub-AS4
来进行分支。如图 4.8 所示,使用 CANHub-AS4 可以组合成任意的分支结构。
图 4.8 CANHub-AS4 分支
如图 4.9 所示,为集线器与中继器配合使用在煤矿组网的应用。
17
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
图 4.9 集线器和中继器配合使用
18
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
5. 参考资料
[1]周立功著项目驱动——CAN-bus 现场总线基础教程,第 1 版,北京:北京航空航天出
版社2012ISBN:7512408218, 9787512408210
[2]蔡豪格(德)著,周立功译,现场总线 CANopen 设计与应用,第 1 版,北京:北京航空
航天出版社2011ISBN: 9787512404861, 7512404867
19
CAN-bus ‫׈‬ভ/Ҭቖ/҃ཌܿٓ
‫۽‬ӱႋႨг࠺
6. 免责声明
应用信息
本应用信息中的案例或意图均为假设,仅方便用户熟悉产品的特性以及使用方法。客户
在开发产品前必须根据其产品特性给予修改并验证。
修改文档的权利
本手册所陈述的产品文本及相关软件版权均属广州致远电子股份有限公司所有,其产权
受国家法律绝对保护,未经本公司授权,其它公司、单位、代理商及个人不得非法使用和
拷贝,否则将受到国家法律的严厉制裁。广州致远电子股份有限公司保留在任何时候修订本
用户手册且不需通知的权利。
您若需要我公司产品及相关信息,请及时与我们联系,我们将热情接待。
20

BIN
figure/CANid.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

BIN
figure/CANid设置.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

BIN
figure/DH.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

BIN
figure/Spherica_Wrist.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
figure/eular_angle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
figure/rotate.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
figure/叉乘.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

19
matlab/dh2Tmat.m Normal file
View File

@ -0,0 +1,19 @@
function T = dh2Tmat(theta,d,a,alpha)
sin_th = sin(theta);
cos_th = cos(theta);
sin_al = sin(alpha);
cos_al = cos(alpha);
% T = [cos_th -sin_th 0 a;
% sin_th*cos_al cos_th*cos_al -sin_al -sin_al*d;
% sin_th*sin_al cos_th*sin_al cos_al cos_al*d;
% 0 0 0 1;
% ];
T = [cos_th, -sin_th*cos_al, sin_th*sin_al, a*cos_th;
sin_th, cos_th*cos_al, -cos_th*sin_al, a*sin_th;
0, sin_al, cos_al, d;
0, 0 , 0 , 1;
];
end

61
matlab/myArm.m Normal file
View File

@ -0,0 +1,61 @@
clear;
clc;
L1=0.151;L3=0.350; L4=0.139;
theta_1=-0.02;
theta_2=-1.473;
theta_3=-0.024;
theta_4=-1.559;
theta_5=-2.98966;
q = [theta_1,theta_2,theta_3,theta_4,theta_5]
%
lim1_min = -pi/2; lim1_max = pi/2; %1(-90,90)
lim2_min = -pi/2; lim2_max = pi/2; %2(090)
lim3_min = -pi; lim3_max = pi; %4(-180180)
lim4_min = -pi; lim4_max = pi; %5(-180180)
lim5_min = -pi/2; lim5_max = pi/2; %6(-9090)
%
lim1 = lim1_max - lim1_min;
lim2 = lim2_max - lim2_min;
lim3 = lim3_max - lim3_min;
lim4 = lim4_max - lim4_min;
lim5 = lim5_max - lim5_min;
%
r(1)=Link([0 L1 0 pi/2]);r(1).qlim=[lim1_min,lim1_max];
r(2)=Link([0 0 L3 pi/2]);r(2).qlim=[lim2_min,lim2_max];
r(3)=Link([0 0 0 -pi/2]);r(3).qlim=[lim3_min,lim3_max];
r(4)=Link([0 0 0 pi/2]);r(4).qlim=[lim4_min,lim4_max];
r(5)=Link([0 L4 0 0]);r(5).qlim=[lim5_min,lim5_max];
%
robot=SerialLink([r(1),r(2),r(3),r(4),r(5)],'name','robot');
robot.fkine(q)
robot.display();
%
%使
N=5000;
theta1 = ( lim1_min + (lim1 * rand(N,1)) );
theta2 = ( lim2_min + (lim2 * rand(N,1)) );
theta3 = ( lim3_min + (lim3 * rand(N,1)) );
theta4 = ( lim4_min + (lim4 * rand(N,1)) );
theta5 = ( lim5_min + (lim5 * rand(N,1)) );
% for n = 1:N
% theta = [theta1(n),theta2(n),theta3(n),theta4(n),theta5(n)];
% workspace = robot.fkine(theta);
% plot3(workspace.t(1),workspace.t(2),workspace.t(3),'b.','markersize',1);
% hold on;
% end
% robot.plot(theta); %
robot.teach;

10
matlab/myFk.m Normal file
View File

@ -0,0 +1,10 @@
function T = myFk(theta1,theta2,theta3,theta4,theta5)
L1=0.151;L3=0.350; L4=0.139;
T01 = dh2Tmat(theta1,L1,0,pi/2);
T12 = dh2Tmat(theta2,0,0,pi/2);
T23 = dh2Tmat(theta3,L3,0,-pi/2);
T34 = dh2Tmat(theta4,0,0,pi/2);
T45 = dh2Tmat(theta5,L4,0,0);
T = T01*T12*T23*T34*T45;
end

40
matlab/myIK.m Normal file
View File

@ -0,0 +1,40 @@
T05 = myFk(0.001,-0.653+pi/2,-0.22,0.001,pi/2);
L1=0.151;L3=0.350; L4=0.139;
Pe = T05(1:3,4);
Ze = T05(1:3,3);
%W
Pw = Pe - L4*Ze;
%theta1
theta_1 = atan2(Pw(2),Pw(1));
%theta2
%L1^2 + L3^2 - 2*L1*L3*cos_th2 = norm(Pw)^2
cos_th2 = (L1^2 + L3^2 - norm(Pw)^2)/(2*L1*L3);
theta_2 = acos(cos_th2);
%T02
T01 = dh2Tmat(theta_1,L1,0,pi/2); %1
T12 = dh2Tmat(theta_2,0,0,pi/2); %2
T02 = T01*T12;
%T25 T05 = T02 * T25
T = inv(T02) * T05;
%T25_f = dh2Tmat(0,0.5,0,-pi/2)*dh2Tmat(pi/4,0,0,pi/2)*dh2Tmat(0,0.3,0,0);
%(theta_5)
theta_3 = atan2(T(2,3),T(1,3));
theta_4 = atan2(sqrt(T(1,3)^2+T(2,3)^2),T(3,3));
theta_5 = atan2(T(3,2),-T(3,1));
%(theta_5)
theta_33 = atan2(-T(2,3),-T(1,3));
theta_44 = atan2(-sqrt(T(1,3)^2+T(2,3)^2),T(3,3));
theta_55 = atan2(-T(3,2),T(3,1));
theta = [theta_1,theta_2,theta_3,theta_4,theta_5;
theta_1,theta_2,theta_33,theta_44,theta_55;]

View File

@ -0,0 +1,41 @@
# 24赛季工程机器人代码笔记
24赛季工程机器人代码为`basic_framework`框架下C/C++混编,主要目的为使用上海交通大学开源的嵌入式机器人学运算库 [SJTU-RoboMaster-Team/Matrix_and_Robotics_on_STM32](https://github.com/SJTU-RoboMaster-Team/Matrix_and_Robotics_on_STM32)
## 混合编译注意事项
机械臂解算相关代码放在了`gimbal.cpp`中代码中使用了C++特性的源文件都需要以`.cpp`结尾
如果希望`.c`文件能够调用`.cpp`文件提供的函数,则需要在`.cpp`文件对应的头文件中加入`extern "C" {}`关键字
如`gimbal.h`
``` C
#ifndef GIMBAL_H
#define GIMBAL_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief 初始化云台,会被RobotInit()调用
*
*/
void GimbalInit();
/**
* @brief 云台任务
*
*/
void GimbalTask();
#ifdef __cplusplus
}
#endif
#endif // GIMBAL_H
```
## 达妙电机相关
湖大开源`basic_framework`框架的达妙驱动为每个达妙电机单独创建了一个任务但赛场测试发现这会经常导致某些电机离线因此新版代码中将所有达妙电机像DJI电机一样在一个任务中控制
### ID设置规范
![alt text](figure/CANid.jpg)
![alt text](figure/CANid设置.jpg)

View File

@ -0,0 +1,190 @@
# 机器人学基础及机械臂解算
copyright@合肥工业大学苍穹竞技机器人队
## 1 机器人学基础
### 1.1 向量叉乘
向量叉乘满足右手定则,如图所示
![alt text](figure/叉乘.png)
注意叉乘有前后顺序, $a\times b=-b\times a$
向量叉乘可以被表示为一个线性关系
$$
a\times b = \left[\begin{matrix}
a_2b_3 - a_3b_2 \\
a_3b_1 - a_1b_3 \\
a_1b_2 - a_2b_1
\end{matrix}\right] = \left[\begin{matrix}
0 & -a_3 & a_2 \\
a_3 & 0 &-a_1 \\
-a_2 & a_1 & 0
\end{matrix}\right]b = [a]b
$$
每个三维向量 $a$ 都对应一个三维的反对称矩阵 $[a]$
$$
[a] = -[a]^T
$$
### 1.2 旋转矩阵
一般规定所有坐标系为右手系,即坐标系的三个正交基向量(三个轴) $\hat x,\hat y,\hat z$ 满足
$$
\hat x \times \hat y = \hat z
$$
![alt text](figure/rotate.png)
将坐标系 $\{A\}$ 旋转到坐标系 $\{B\}$ 的位置,可以由旋转矩阵 $R$ 表示
$$
^AR_B = \begin{bmatrix}
{^A\hat x_B} & {^A\hat y_B} & {^A\hat z_B}
\end{bmatrix}
$$
${^A\hat x_B}$ 表示向量 $\hat x_B$ 在坐标系 $\{A\}$ 下的坐标
旋转矩阵的一些性质:
- $R^TR=I$
- $\det(R)=1$
- $SO(n) = \left\{R\in\R^{n\times n}:R^TR = I,\det(R) = 1\right\}$
旋转矩阵的物理意义:
1. 表示一个旋转姿态(定义)
2. 在两个参考坐标系之间转换:
如有一向量$v$,在坐标系 $\{A\}$ 和坐标系 $\{B\}$ 下的坐标为 $^Av,{^Bv}$
$$
^Av = {^AR_B}{^Bv}
$$
3. 表示一个旋转动作将A点旋转至A'点
$$
{^OR_{A'}} = R{^OR_A}
$$
> 左乘,绕着固定轴旋转;右乘,绕着旋转后的轴旋转 (证明较复杂先记住结论)
### 1.3 其他表示旋转的方法
#### 欧拉角
如旋转顺序为ZYZ的欧拉角依次绕着上次旋转后的轴进行旋转
![alt text](figure\eular_angle.png)
$$
^0R_1(\alpha ,\beta,\gamma) = R_z(\alpha)R_y(\beta)R_z(\gamma)
$$
ZYX欧拉角等价与绕定轴旋转的RPY角roll-pitch-yaw
$$
^0R_1(\text{yaw,pitch,roll}) = R_z(\text{yaw})R_y(\text{pitch})R_x(\text{roll})
$$
### 1.4 变换矩阵
在三维世界中,不仅有旋转动作,还有平移动作,想要完全描述坐标系 $\{A\}$ 和坐标系 $\{B\}$ 的位姿关系,需要旋转矩阵 $^AR_B$ 和 坐标系 $\{B\}$ 的原点在坐标系 $\{A\}$ 中的坐标 $^Ao_B$
对于点 $p$ ,有
$$
^Ap = {^Ao_B} +{^AR_B}{^Bp}
$$
为了将其描述为线性关系,我们将 $p\in \R^3$ 扩展为齐次坐标
$$
\tilde{p} = \begin{bmatrix}
p \\ 1
\end{bmatrix} \in \R^4
$$
> 对于点齐次坐标添加1对于向量齐次坐标添加0、
定义从坐标系 $\{A\}$ 到坐标系 $\{B\}$ 的变换矩阵
$$
^AT_B = \begin{bmatrix}
{^AR_B} & {^Ao_B} \\
0 & 1
\end{bmatrix}
$$
$$
^A\tilde{p} = {^AT_B}{^B\tilde{p}}
$$
## 2 机械臂运动学
### 1.1 正运动学 DH参数法
- 连杆——link
- 关节——jiont
- 通过每个link的DH参数可以仅通过关节变量求得相邻两jiont之间的齐次变换矩阵
![alt text](figure/DH.png)
对每个jiont建立坐标系指定 $z_i$ 为旋转/平移关节的旋转轴/平动轴;$x_i$ 为 $z_i$ 和 $z_{i-1}$ 的公垂线且与 $z_{i-1}$ 相交,方向由 $z_{i-1}$ 指向 $z_{i}$ $y_i$ 遵循右手系规则
DH参数共有四个
1. 连杆长度 $a_i$ : 沿 $x_i$ 方向, $z_i$ 和 $z_{i-1}$间的距离
2. 连杆扭转 $\alpha_i$ : $z_i$ 轴和 $z_{i-1}$ 轴的夹角,正方向如图所示,由 $z_{i-1}$ 指向 $z_i$ 轴;
3. 关节偏移 $d_i$ : 沿着 $z_{i-1}$ ,点 $o_{i-1}$ 到 $x_i$ 和 $z_{i-1}$ 交点的距离
4. 关节转角 $\theta_i$ : $x_i$ 轴和 $x_{i-1}$ 轴的夹角,正方向如图所示,由 $x_{i-1}$ 指向 $x_i$ 轴;
> 对于平动关节来说,$d_i$ 为关节变量,其他为常数
> 对于转动关节来说,$\theta_i$ 为关节变量,其他为常数
>
得到每个关节的DH参数后可通过计算得到相邻两关节的齐次变换矩阵
$$
^{i-1}T_i = Rot_{z,\theta}Trans_{z,d}Trans_{x,a}Rot_{x,a} = \begin{bmatrix}
c_\theta & -s_\theta c_\alpha & s_\theta s_\alpha & ac_\theta \\
s_\theta & c_\theta c_\alpha & -c_\theta s_\alpha & as_\theta \\
0 & s_\alpha & c_\alpha & d \\
0 & 0 & 0 & 1
\end{bmatrix}
$$
> 式中 $c_\theta = \cos \theta$ , $s_\theta = \sin \theta$
将每个关节之间的变换矩阵相乘即可得到从基座坐标系到工具坐标系之间的变换矩阵
$$
^0T_n = {^0T_1}{^1T_2}{^2T_3}\cdots{^{n-1}T_n}
$$
### 2.2 逆运动学
逆运动学可分为数值迭代法和解析法,一般为了保证能求出解以及实时性,采用几何解析解法。
> 在机械臂结构设计时需要满足一定结构规范,才能保证能够求得解析解
>
#### 2.2.1 标准正交球形腕逆运动学
在大多数六轴机械臂的最后三轴都会采用球形腕Spherical Wrist结构来保证能够达到工作空间中的所有姿态如苍穹战队RM2024赛季工程机器人机械臂末端
![alt text](figure/Spherica_Wrist.png)
设现在需要的第三关节到第六关节间的旋转矩阵为
$$
^3R_6 = \begin{bmatrix}
n_x & s_x & a_x \\
n_y & s_y & a_y \\
n_z & s_z & a_z
\end{bmatrix}
$$
有两组解:
当 $\theta_5\in(0,\pi)$
$$
\theta_4 = Atan2(a_y,a_x) \\
\theta_5 = Atan2(\sqrt{{a_x}^2+{a_y}^2},a_z) \\
\theta_6 = Atan2(s_z,-n_z) \\
$$
当 $\theta_5\in(-\pi,0)$
$$
\theta_4 = Atan2(-a_y,-a_x) \\
\theta_5 = Atan2(-\sqrt{{a_x}^2+{a_y}^2},a_z) \\
\theta_6 = Atan2(-s_z,n_z) \\
$$
证明过程见[Modeling, Motion Planning, and Control of Manipulators and Mobile Robots——Inverse Kinematics](https://opentextbooks.clemson.edu/wangrobotics/chapter/inverse-kinematics/)(链接中有完整的六轴机械臂解算方法)
## 3 机械臂动力学
24赛季未考虑机械臂动力学使用PID+前馈方式对每个关节进行单独控制,若机械臂结构更复杂则需要考虑动力学补偿,为后续迭代方向,我有空更新
## 4 仿真验证
可以使用MATLAB Robotic toolbox 进行仿真验证,仿真验证相关代码放在`matlab`文件夹
# 参考文献
[Modeling, Motion Planning, and Control of Manipulators and Mobile Robots](https://opentextbooks.clemson.edu/wangrobotics)
[SUSTech MEE5114 Advanced Control For Robotics](https://www.wzhanglab.site/teaching/advanced-control-for-robotics-sp23/)

View File

@ -0,0 +1,121 @@
机器人学基础及机械臂解算
copyright@合肥工业大学苍穹竞技机器人队
1 机器人学基础
1.1 向量叉乘
向量叉乘满足右手定则,如图所示
注意叉乘有前后顺序,
向量叉乘可以被表示为一个线性关系
每个三维向量 都对应一个三维的反对称矩阵
1.2 旋转矩阵
一般规定所有坐标系为右手系,即坐标系的三个正交基向量(三个轴) 满足
将坐标系 旋转到坐标系 的位置,可以由旋转矩阵 表示
表示向量 在坐标系 下的坐标
旋转矩阵的一些性质:
旋转矩阵的物理意义:
1. 表示一个旋转姿态(定义)
2. 在两个参考坐标系之间转换:
如有一向量 ,在坐标系 和坐标系 下的坐标为
3. 表示一个旋转动作将A点旋转至A'点
左乘,绕着固定轴旋转;右乘,绕着旋转后的轴旋转 (证明较复杂先记住结论)
1.3 其他表示旋转的方法
欧拉角
如旋转顺序为ZYZ的欧拉角依次绕着上次旋转后的轴进行旋转
ZYX欧拉角等价与绕定轴旋转的RPY角roll-pitch-yaw
1.4 变换矩阵
在三维世界中,不仅有旋转动作,还有平移动作,想要完全描述坐标系 和坐标系 的位姿关
系,需要旋转矩阵 和 坐标系 的原点在坐标系 中的坐标
对于点 ,有
为了将其描述为线性关系,我们将 扩展为齐次坐标
对于点齐次坐标添加1对于向量齐次坐标添加0、
定义从坐标系 到坐标系 的变换矩阵
2 机械臂运动学
1.1 正运动学 DH参数法
连杆——link
关节——jiont
通过每个link的DH参数可以仅通过关节变量求得相邻两jiont之间的齐次变换矩阵
对每个jiont建立坐标系指定 为旋转/平移关节的旋转轴/平动轴; 为 和 的公垂线且与
相交,方向由 指向 遵循右手系规则
DH参数共有四个
1. 连杆长度 : 沿 方向, 和 间的距离
2. 连杆扭转
3. 关节偏移 : 轴和 轴的夹角,正方向如图所示,由 指向 轴;
4. 关节转角 指向 轴;
: 沿着 ,点 到和 交点的距离
: 轴和 轴的夹角,正方向如图所示,由
对于平动关节来说, 为关节变量,其他为常数
对于转动关节来说, 为关节变量,其他为常数
得到每个关节的DH参数后可通过计算得到相邻两关节的齐次变换矩阵
式中 ,
将每个关节之间的变换矩阵相乘即可得到从基座坐标系到工具坐标系之间的变换矩阵
2.2 逆运动学
逆运动学可分为数值迭代法和解析法,一般为了保证能求出解以及实时性,采用几何解析解法。
在机械臂结构设计时需要满足一定结构规范,才能保证能够求得解析解
2.2.1 标准正交球形腕逆运动学
在大多数六轴机械臂的最后三轴都会采用球形腕Spherical Wrist结构来保证能够达到工作空间中
的所有姿态如苍穹战队RM2024赛季工程机器人机械臂末端
设现在需要的第三关节到第六关节间的旋转矩阵为
有两组解:
证明过程见Modeling, Motion Planning, and Control of Manipulators and Mobile Robots——Inverse
Kinematics链接中有完整的六轴机械臂解算方法
3 机械臂动力学
24赛季未考虑机械臂动力学使用PID+前馈方式对每个关节进行单独控制,若机械臂结构更复杂则需要
考虑动力学补偿,为后续迭代方向,我有空更新
4 仿真验证
可以使用MATLAB Robotic toolbox 进行仿真验证,仿真验证相关代码放在 matlab 文件夹
参考文献
Modeling, Motion Planning, and Control of Manipulators and Mobile Robots
SUSTech MEE5114 Advanced Control For Robotics