Ինժեներական ուղեցույցներ
I²C ընդդեմ SPI ճնշման սենսորների համար. Ընտրեք ճիշտ ավտոբուսը կամ ավելի ուշ ատեք ձեր դասավորությունը
Դուք ընտրել եք ձեր ճնշման սենսորը: Դուք գիտեք շրջանակը, ճշգրտությունը, փաթեթը: Այնուհետև պատվիրման էջում տեսնում եք երկու տարբերակ. I²C մի քանազոր Սպի. Նույն սենսորը: Նույն գինը. Տարբեր չորս տառեր. Ահա թե ինչպես կարելի է որոշել՝ իրական թվերով, ոչ թե դասագրքերի տեսությամբ:
Երկու րոպեանոց թարմացում
Բաց թողեք սա, եթե նախկինում երկու ավտոբուսներն էլ միացրել եք: Եթե չեք արել, ապա բավական է հետևել հոդվածի մնացած հատվածին.
- Լարեր: 2 — SDA (տվյալներ) + SCL (ժամացույց)
- Ազդանշանի տեսակը: Բաց արտահոսք, բարձր քաշված ռեզիստորներով
- Հասցե: 7-բիթանոց հասցե յուրաքանչյուր սարքի համար
- Ուղղություն: Half-duplex
- Արագություն: 100 կՀց / 400 կՀց / 1 ՄՀց / 3,4 ՄՀց
- Վերահսկում. Վարպետի նախաձեռնությամբ; ստրուկները արձագանքում են միայն այն ժամանակ, երբ դիմում են
- Լարեր: 4 — MOSI, MISO, SCLK + 1× CS մեկ սարքի համար
- Ազդանշանի տեսակը: Push-pull CMOS
- Հասցե: Ոչ մեկը — CS գիծն ընտրում է սարքը
- Ուղղություն: Full-duplex
- Արագություն: 1 ՄՀց-ից մինչև 50 ՄՀց
- Վերահսկում. Վարպետը վերահսկում է ժամացույցը; ոչ մի ժամացույցի ձգում
Այս պահին դուք կարող եք մտածել. "SPI is faster, so SPI wins, end of article." Ոչ այնքան, արագությունը գրեթե երբեք կարևոր չէ ճնշման սենսորի համար: Ահա թե ինչու.
Արագության փաստարկը, որը կարևոր չէ
Տիպիկ MEMS ճնշման սենսորը յուրաքանչյուր ընթերցում է կատարում 1-ից 100 միլիվայրկյան — ADC-ի փոխակերպման ժամանակը գերակշռում է, ոչ թե ավտոբուսի արագությունը: Նույնիսկ 1 մվ մեկ նմուշի դեպքում (1 կՀց նմուշառում), դուք սեղմում եք 48 բիթ մեկ ընթերցման համար: դա է 48 կբիթ/վրկ.
I²C-ը 400 կՀց հաճախականությամբ փոխանցում է ~ 320 կբ/վ արագությամբ գլխից հետո: SPI-ը 1 ՄՀց հաճախականությամբ փոխանցում է 1 Մբիթ/վրկ: Մեկն էլ կա 7×-ից 20× ավելի արագ քան սենսորի տվյալների արագությունը: Եթե դուք նմուշառում չեք կատարում ուլտրաձայնային հաճախականությամբ, ինչը դուք չեք, քանի որ ճնշումն այդքան արագ չի փոխվում, ավտոբուսի արագությունն անտեղի է: Սենսորը շիշն է, ոչ թե լարերը:
Ստորին գիծ արագության վրա. նշանակություն չունի: Սենսորի ADC-ն սահմանափակող գործոնն է: Որոշեք այլ հիմքերով:
Pin Count. Փաստարկը, որն իրականում կարևոր է փոքր տախտակների վրա
| Սցենար | Օգտագործված I²C կապիչներ | Օգտագործված SPI կապում |
|---|---|---|
| 1 սենսոր | 2 (SDA+SCL) | 4 (MOSI + MISO + SCLK + CS) |
| 2 սենսոր | 2 (ընդհանուր ավտոբուս) | 5 (ընդհանուր ավտոբուս + 2× CS) |
| 4 սենսոր | 2 (ընդհանուր ավտոբուս) | 7 (ընդհանուր ավտոբուս + 4× CS) |
Եթե ձեր MCU-ն STM32 է 80 GPIO-ով, ո՞ւմ է դա հետաքրքրում: Բայց ESP32-C3-ում 15 օգտագործելի GPIO-ներով, որոնք աշխատում են էկրանով, BLE-ով, երկու կոճակներով և SD քարտով. I²C-ն պահպանում է ձեր քորոցները՝ անկախ նրանից, թե քանի սենսոր ունի ավտոբուսը:
Նշում. I²C-ն արժե ձեզ երկու ձգվող դիմադրություն. SPI-ն ոչ մի արժեք չունի: Երկու 4,7 կՕմ 0402 ռեզիստորների ընդհանուր արժեքը կազմում է մոտ 0,002 դոլար և զբաղեցնում է 2 մմ² տախտակի տարածք, ոչ թե ոչինչ, այլ մոտ է դրան:
Հիմնական գիծը կապում. I²C-ն հաղթում է, երբ GPIO-ները խիտ են: Պինով հարուստ MCU-ի դեպքում առավելությունն անհետանում է. որոշեք այլ գործոններ:
Բազմասենսորային ձևավորում. որտեղ I²C-ն իրականում փայլում է
Երեք ճնշման սենսոր նույն PCB-ի վրա՝ մեկ բարոմետրիկ հղում, մեկ տանկի մակարդակ, մեկ պոմպի ելք: I²C-ով. յուրաքանչյուր սենսորին նշանակեք տարբեր հասցե, SDA-ի և SCL-ի լարերը զուգահեռ, ավարտված են: Երկու հետք. Երեք սենսոր. Զրո լրացուցիչ MCU կապում: SPI-ով. երեք առանձին CS գիծ՝ ընդհանուր MOSI/MISO/SCLK-ի վերևում՝ ընդհանուր վեց լար:
Զգուշացեք. I²C սարքերին անհրաժեշտ են եզակի հասցեներ: Ճնշման սենսորների մեծ մասը առաջարկում է ճշգրիտ երկու հասցե (բարձր կամ ցածր ամրացված քորոց): Դա նշանակում է, որ դուք ավտոբուսում ստանում եք երկու սենսոր՝ նախքան I²C մուլտիպլեքսորի կարիքը, ինչպիսին TCA9548A-ն է, որն ավելացնում է ~0,50 դոլար և մի քանի մմ²: SPI-ն նման սահմանափակում չունի. պարզապես ավելացրեք CS գիծ յուրաքանչյուր սենսորի համար:
Հիմնական գիծը բազմասենսորների վրա. I²C-ն հաղթում է մինչև երկու միանման սենսորների միացման պարզության համար: Դրանից բացի, օգտագործեք SPI կամ I²C mux – ոչ մեկը ակնհայտորեն ավելի լավ չէ, դա դասավորության զանգ է:
Աղմուկի անձեռնմխելիություն. այն մեկը, որտեղ SPI-ն առաջ է տանում
Բարձր լուծաչափով ճնշման սենսորները չափում են 0,03 հՊա փոքր փոփոխությունները, ինչը մոտավորապես ձեր գրասեղանի վրա վայրէջք կատարող մոծակի քաշն է, որը թարգմանվում է որպես էլեկտրական ազդանշան: Այդ բանաձեւում աղմուկը կարեւոր է:
I²C աղմուկի բնութագրերը
Բաց արտահոսքի գծերը ձգվող ռեզիստորներով առաջացնում են RC թեքահարթակի եզրեր, ոչ թե մաքուր CMOS անցումներ: Ձգվող արժեքները փոխզիջում են. չափազանց ուժեղ ուժը վատնում է. չափազանց թույլ է դարձնում բարձրացման ժամանակը դանդաղ և բացում է աղմուկի միացման պատուհանը: Աղմկոտ միջավայրում` շարժիչի վարորդի, անջատիչ կարգավորիչի կամ PWM-ով որևէ այլ բանի կողքին, I²C-ն կարող է խափանվել: Արձանագրությունը չունի ներկառուցված սխալի հայտնաբերում ACK բիթից դուրս (որոշ սենսորներ ավելացնում են CRC բայթ բեռնատարին, որն օգնում է):
SPI աղմուկի բնութագրերը
Push-pull CMOS վարորդներն ակտիվորեն վարում են ինչպես բարձր, այնպես էլ ցածր վիճակներ: Ծայրերը սուր են: CS գիծը մուտք է գործում հենց այն ժամանակ, երբ ստրուկը պետք է լսի, մնացած ժամանակ անտեսելով ավտոբուսի ամեն ինչ: Իրականորեն ավելի լավ SNR:
Գործնականում, մաքուր PCB դասավորությունը կարճ հետքերով, վերգետնյա հարթությամբ և շրջանցող կափարիչներով կպահի I²C-ն երջանիկ դիզայնի մեծ մասում: Բայց եթե ձեր սենսորը գտնվում է MCU-ից մեկ մետր հեռավորության վրա գտնվող մալուխի վրա, կամ կիսում է պարիսպը այն ամենի հետ, որը փոխում է հոսանքի ուժեղացուցիչները, ապա SPI-ի աղմուկի իմունիտետը իսկական առավելություն է:
Աղմուկի հիմնական գիծը. SPI-ն առավել անվտանգ ընտրություն է էլեկտրական թշնամական միջավայրում: Նույն PCB-ի վրա MCU-ից մի քանի սանտիմետր հեռավորության վրա, I²C-ն լավ է:
Որոնվածը բարդություն. The Tiebreaker-ի մասին, որի մասին ոչ ոք չի խոսում
I²C որոնվածը
A state machine. Start condition → send address + R/W bit → wait for ACK → read/write register pointer → read/write data → stop condition. Every step has a timeout, a retry path, and a "what if the sensor holds SDA low because it's still converting" case. Most MCU vendors provide a HAL. Most of those HALs have edge-case bugs you'll discover at 11 PM.
SPI որոնվածը
Assert CS → shift bytes → de-assert CS. That's it. The sensor doesn't get to say "I'm not ready" by clock-stretching or NAKing. The master controls the clock; the slave responds or stays silent.
Վրիպազերծման ցավ. Երբ SPI-ն չի աշխատում, տրամաբանական անալիզատորով ստուգում ես չորս տող և հստակ տեսնում, թե ինչ է կատարվում: Երբ I²C-ն չի աշխատում, դուք նայում եք NAK-ներով լի էկրանին և մտածում՝ արդյոք դա ձգվող արժեքներն են, հասցեն, ժամանակացույցը կամ ավտոբուսի հզորությունը: 8 դոլար արժողությամբ տրամաբանական անալիզատորը լուծում է երկուսն էլ, բայց I²C-ն կվառի ձեր ժամանակը:
Ներքևի գիծը որոնվածի վերաբերյալ. SPI-ն ավելի քիչ զայրացնող է մերկ մետաղից: HAL-ի կամ գրադարանի դեպքում դա մոտավորապես լվացք է: I²C-ն ավելի երկար ժամանակ է պահանջում վրիպազերծման համար, երբ այն խախտում է:
Էլեկտրաէներգիայի սպառում. երկուսն էլ կլորացման սխալներ են
400 կՀց հաճախականությամբ I²C ավտոբուսը 4,7 կՕմ լարումով այրվում է մոտավորապես 0.7 մԱ ակտիվության ժամանակ: SPI-ն, ըստ էության, ոչինչ չի այրում ավտոբուսի մակարդակում՝ զուտ CMOS միացման հոսանքն այս արագություններով (միկրոամպեր):
Context: the pressure sensor element and ADC draw ~5 µA at 1 Hz sampling and 0.3 µA in standby. Whether the bus burns 0.5 mA or 0.05 mA for the 2 ms it takes to read a sample — the energy difference is picowatt-hours. Your BLE radio burns more power sending one "hello" packet than the bus choice will save across the sensor's entire operating lifetime.
Էլեկտրաէներգիայի հիմնական գիծը. մի ընտրեք I²C կամ SPI հոսանքի հիման վրա: Տարբերությունը չափազանց փոքր է նշանակություն ունենալու համար: Փոխարենը որոշեք քորոցների, աղմուկի կամ որոնվածի ողջախոհության մասին:
Որոշումների հոսք — Չորս հարց, առանց մատրիցայի
1Քանի՞ նույնական սենսոր է մեկ ավտոբուսում:
Ոչ մի առավելություն չկա: Անցում դեպի Հարց 2.
Երկու հասցե, երկու լար։ Եթե սենսորները միմյանցից հեռու չեն, ապա SPI:
Եթե ձեզ դուր չի գալիս I²C մուլտիպլեքսերի տվյալների թերթիկները կարդալը:
2Որքա՞ն է սենսորը MCU-ից հեռու:
I²C-ը լավ է տախտակի մակարդակում՝ մաքուր դասավորությամբ:
Կամ I²C դիֆերենցիալ բուֆերով (PCA9615): I²C-ն երբեք նախատեսված չի եղել մալուխների համար:
Օգտագործեք 4–20 մԱ կամ RS-485: Դուք արդյունաբերական հաղորդիչի տարածքում եք:
3Ի՞նչ է EMI միջավայրը:
Մաքուր դասավորությունը շրջանցող գլխարկներով ապահովում է I²C-ի ուրախությունը:
Push-pull վարորդներն ու CS gating-ը կկանխեն ֆանտոմային ընթերցումները:
4Դո՞ւք եք գրում վարորդին։
Վերացականությունը տարբերությունն աննշան է դարձնում: Օգտագործեք այն, ինչ օգտագործում է տախտակի մնացած մասը:
Ավելի քիչ վիճակներ, ոչ մի ժամացույցի ձգում, ոչ հասցեական կոնֆլիկտներ:
Հոբբիստների սենսորային գրադարանների մեծ մասը լռելյայն է I²C: Նախ ստուգեք գրադարանը:
The "Why Not Both" Card
Կրկնակի ինտերֆեյսՈրոշ սենսորներ առաքվում են ինչպես I²C-ն, այնպես էլ SPI-ն միևնույն ձանձրալի վրա, ընտրելի է կապի ժապավենի կամ գրանցման բիտի միջոցով: Սա իսկապես օգտակար է երկու սցենարով.
Նախատիպի ճկունություն
Սկսեք I²C-ից Arduino-ի կամ բեկումնային տախտակի վրա, քանի որ այն ավելի հեշտ է կապել: Երբ դուք պտտում եք ձեր սեփական PCB-ն, անցեք SPI-ին, եթե ձեր դասավորությունը դրանից շահում է: Նույն սենսորը, նույն որոնվածի տրամաբանությունը, պարզապես այլ HAL զանգ:
Արտադրության SKU ճկունություն
Մեկ PCB դիզայն, տարբեր SKU-ներ: Մեկ SKU-ն օգտագործում է I²C, քանի որ այն կիսում է ավտոբուսը ջերմաստիճանի/խոնավության ցուցիչի հետ: Մեկ ուրիշին անհրաժեշտ է SPI՝ հեռավոր սենսորային տախտակին ավելի երկար հետագծելու համար: Դուք ոչինչ չեք վերանախագծում. փոխեք BOM գիծը և ռեզիստորի ժապավենը:
Եթե ձեր սենսորային թեկնածուն չի աջակցում երկու ավտոբուսներին, դա գործարքի անջատիչ չէ: Բայց տարբերակի առկայությունը այն բաներից մեկն է, որը դուք չեք գնահատում մինչև գիշերը ժամը 2-ին կրկին պտտել տախտակը:
Կողք կողքի ամփոփում
| Գործոն | I²C | Սպի | Հաղթող |
|---|---|---|---|
| Լարերի հաշվարկ | 2 | 4 + 1 մեկ սենսորի համար | I²C |
| Արագություն | Մինչև 3,4 ՄՀց | Մինչև 50 ՄՀց | Փողկապ - սենսորային ADC-ն խցանն է |
| Բազմասենսոր (նույն տեսակի) | Առավելագույնը 2 առանց mux | Անսահմանափակ (մեկ CS յուրաքանչյուր սենսորի համար) | SPI 2 սենսորից ավելի |
| Աղմուկի իմունիտետ | Բաց արտահոսք, RC եզրեր | Push-pull CMOS, սուր եզրեր | Սպի |
| Որոնվածը բարդություն | Պետական մեքենա, ACK/NAK, թայմաութներ | Հաստատեք CS, տեղափոխեք բայթերը, արված է | SPI (մերկ մետաղ); Փողկապ (HAL-ով) |
| Վրիպազերծման դժվարություն | Ավելի դժվար — ՆԱԿ որս | Ավելի հեշտ - պարզ ազդանշաններ | Սպի |
| Էլեկտրաէներգիայի սպառում | ~0,7 մԱ (ակտիվ ձգումներ) | ~0 մԱ (առանց ձգումների) | Վզկապ — դելտան պիկովատտ-ժամ է |
| Մալուխը անցնում է | Խորհուրդ չի տրվում >200 մմ | Հանդուրժում է ավելի երկար հետքեր | Սպի |
| Արտաքին բաղադրիչներ | 2× pull up resistors | Ոչ մեկը | Փողկապ — 2× 0402 ռեզիստորներ ≈ 0,002 դոլար |
TL; DR
Շփոթված եք այն հարցում, թե արդյոք ձեզ առաջին հերթին անհրաժեշտ է բացարձակ, չափիչ կամ դիֆերենցիալ ճնշման սենսոր: Կարդացեք պարզ-անգլերեն ուղեցույցը →
Չգիտե՞ք, թե որ ինտերֆեյսը համապատասխանում է ձեր դիզայնին: Ասացեք մեզ ձեր MCU-ի, ձեր տախտակի սահմանափակումների և ձեր միջավայրի մասին. մենք ձեզ ցույց կտանք ճիշտ հատվածը, սովորաբար մեկ ժամվա ընթացքում:
Կապվեք →



