Агуулгын хүснэгт:

CANBUS -ийн энгийн заавар: 8 алхам
CANBUS -ийн энгийн заавар: 8 алхам

Видео: CANBUS -ийн энгийн заавар: 8 алхам

Видео: CANBUS -ийн энгийн заавар: 8 алхам
Видео: Өөртөө Итгэлтэй Болох Маш Энгийн 8 Арга 2024, Долдугаар сарын
Anonim
CANBUS -ийн энгийн заавар
CANBUS -ийн энгийн заавар

Би гурван долоо хоногийн турш CAN хэл сурч байсан бөгөөд одоо сургалтын үр дүнг баталгаажуулахын тулд зарим програмыг бөглөсөн. Энэхүү гарын авлагад та CANBUS холболтыг хэрэгжүүлэхийн тулд Arduino програмыг хэрхэн ашиглах талаар сурах болно. Хэрэв танд ямар нэгэн санал байвал мессеж үлдээгээрэй.

Хангамж:

Техник хангамж:

  • Maduino Zero CANBUS
  • DHT11 Температур ба чийгшлийн модуль
  • 1.3 "I2C OLED 128x64- Цэнхэр
  • DB9 -DB9 кабель (эмэгтэй -эмэгтэй)
  • Дюпон шугам

Програм хангамж:

Arduino IDE

Алхам 1: КАНБУС гэж юу вэ

КАНБУС гэж юу вэ
КАНБУС гэж юу вэ
КАНБУС гэж юу вэ
КАНБУС гэж юу вэ

CAN -ийн тухай

CAN (Controller Area Network) нь тархсан бодит хяналтыг хэрэгжүүлэх боломжтой цуваа холбооны сүлжээ юм. Энэ нь автомашины үйлдвэрлэлд зориулагдсан бөгөөд нарийн утастай бэхэлгээг хоёр утастай автобусаар солих болно.

CAN протокол нь OSI загварт өгөгдлийн холболтын давхарга ба физик давхаргын хэсгийг тодорхойлдог.

CAN протокол нь ISO11898 ба ISO11519 стандартаар ISO стандартчилагдсан болно. ISO11898 бол 125kbps-1Mbps хурдтай CAN өндөр хурдны холбооны стандарт юм. ISO11519 бол 125 кбит / с-ээс бага хурдтай CAN бага хурдны холбооны стандарт юм.

Энд бид өндөр хурдны CAN дээр анхаарлаа хандуулж байна.

ISO-11898 нь сүлжээнд байгаа төхөөрөмжүүдийн хооронд хэрхэн мэдээлэл дамжуулж, давхаргын хувьд тодорхойлогддог Нээлттэй системийн харилцан холболтын загварт (OSI) нийцэж байгааг тодорхойлдог. Физик орчинд холбогдсон төхөөрөмжүүдийн бодит харилцаа холбоог загварын физик давхаргаар тодорхойлно

  • Автобусанд холбогдсон CAN нэгж бүрийг зангилаа гэж нэрлэж болно. CAN -ийн бүх нэгжүүд нь 120 Ω эсэргүүцэл бүхий төгсгөлд нь таслагдсан автобусанд холбогдсон сүлжээг бий болгодог. Автобус нь CAN_H ба CAN_L шугамаас бүрдэнэ. CAN хянагч нь хоёр утсан дээрх тэжээлийн түвшний ялгааг үндэслэн автобусны түвшинг тодорхойлдог. Автобусны түвшинг давамгайлсан ба рецессив түвшинд хуваадаг бөгөөд энэ нь тэдний нэг байх ёстой. Илгээгч нь автобусны түвшинд өөрчлөлт хийх замаар хүлээн авагч руу мессеж илгээдэг. Автобусанд "ба" логик мөрийг гүйцэтгэх үед давамгайлах түвшин нь "0", рецессив түвшин нь "1" болно.
  • Давамгайлсан төлөвт CAN_H -ийн хүчдэл 3.5V орчим, CAN_L -ийн хүчдэл 1.5V орчим байна. Рецессив төлөвт хоёр шугамын хүчдэл 2.5 В орчим байна.
  • Дохио нь ялгаатай тул CAN нь дуу чимээ ихтэй дархлаа, алдааг тэсвэрлэх чадварыг олж авдаг. Тэнцвэртэй дифференциал дохио нь дуу чимээний холболтыг бууруулж, эрчилсэн хос кабель дээр дохиоллын өндөр хурдыг өгөх боломжийг олгодог. Дохионы шугам тус бүрийн гүйдэл тэнцүү боловч эсрэг чиглэлд байгаа бөгөөд энэ нь дуу чимээ бага ялгаруулдаг гол хүчин зүйл болох талбарыг цуцлах нөлөө үзүүлдэг. Тэнцвэртэй дифференциал хүлээн авагч ба эрчилсэн хос кабелийг ашиглах нь CAN автобусны нийтлэг горимоос татгалзах, дуу чимээ ихтэй дархлааг сайжруулдаг.

CAN дамжуулагч

CAN Transceiver нь логик түвшин ба физик дохионы хооронд хөрвүүлэх үүрэгтэй. Логик дохиог дифференциал түвшинд эсвэл физик дохиог логик түвшинд хөрвүүлэх.

CAN хянагч

CAN хянагч нь CAN протокол дахь өгөгдлийн холболтын давхаргын бүх үүргийг гүйцэтгэдэг бөгөөд CAN протоколыг автоматаар шийдвэрлэх чадвартай CAN -ийн үндсэн бүрэлдэхүүн хэсэг юм.

MCU

MCU нь функциональ хэлхээ ба CAN хянагчийн хяналтыг хариуцдаг. Жишээлбэл, зангилаа эхлэх үед CAN хянагчийн параметрүүдийг эхлүүлж, CAN хүрээг CAN хянагчаар дамжуулан уншуулж, илгээх гэх мэт.

Алхам 2: CAN Communications -ийн тухай

Автобус зогссон үед бүх зангилаа мессеж илгээж болно (олон мастер удирдлага). Автобусанд хамгийн түрүүнд ханддаг зангилаа илгээх эрхтэй болдог (CSMA/CA горим). Олон зангилаа нэгэн зэрэг илгээж эхлэх үед өндөр ач холбогдол бүхий ID мессеж илгээдэг зангилаа илгээх эрхтэй болно.

CAN протоколд бүх мессежийг тогтмол хэлбэрээр илгээдэг. Автобус зогссон үед автобусанд холбогдсон бүх нэгжүүд шинэ мессеж илгээх боломжтой болно. Хоёроос дээш нүд нэгэн зэрэг мессеж илгээж эхлэхэд танигч дээр үндэслэн тэргүүлэх чиглэлийг тодорхойлно. ID нь илгээгчийн очих хаягийг илэрхийлэхгүй, харин автобус руу нэвтрэх мессежийн тэргүүлэх чиглэл юм. Хоёроос дээш нүд нэгэн зэрэг мессеж илгээж эхлэхэд хүүгүй ID-ийн бит бүрийг нэг нэгээр нь арбитрлана. Арбитрт ялсан нэгж үргэлжлүүлэн мессеж илгээх боломжтой бөгөөд арбитрт ялагдсан нэгж тэр даруй илгээхээ больж, ажлыг хүлээн авдаг.

CAN автобус нь өргөн нэвтрүүлгийн автобус юм. Энэ нь бүх зангилаа бүх дамжуулалтыг "сонсох" боломжтой гэсэн үг юм. бүх зангилаа бүх урсгалыг байнга авах болно. CAN тоног төхөөрөмж нь орон нутгийн шүүлтүүрийг хангадаг бөгөөд ингэснээр зангилаа бүр зөвхөн сонирхолтой мессежүүдэд хариу үйлдэл үзүүлэх болно.

Алхам 3: Хүрээ

Хүрээ
Хүрээ

CAN төхөөрөмжүүд нь өгөгдлийг CAN сүлжээгээр фрэйм гэж нэрлэдэг пакетаар илгээдэг. CAN нь дөрвөн төрлийн хүрээтэй:

  • Өгөгдлийн хүрээ: дамжуулах зангилааны өгөгдлийг агуулсан хүрээ
  • Алсын хүрээ: тодорхой таних тэмдэг дамжуулахыг хүссэн хүрээ
  • Алдааны хүрээ: алдаа илрүүлэх ямар ч зангилаанаас дамжуулсан хүрээ
  • Хэт ачааллын хүрээ: өгөгдөл эсвэл алсын фрэймийн хооронд саатал оруулах хүрээ

Өгөгдлийн хүрээ

Өгөгдлийн хүрээ нь стандарт ба өргөтгөсөн гэсэн хоёр төрөл байдаг.

Зургийн бит талбаруудын утга нь:

  • SOF - Ганц давамгайлсан фрэйм (SOF) бит нь мессежийн эхлэлийг илэрхийлдэг бөгөөд сул зогсолтын дараа автобусны зангилаа синхрончлоход ашиглагддаг.
  • Танигч-CAN 11 битийн стандарт таних тэмдэг нь мессежийн тэргүүлэх чиглэлийг тогтоодог. Хоёртын утга бага байх тусам түүний тэргүүлэх ач холбогдол өндөр болно.
  • RTR - Нэг алсын дамжуулалтын хүсэлт (RTR) бит
  • IDE - Давамгайлсан ганц танигч өргөтгөл (IDE) бит гэдэг нь өргөтгөлгүй стандарт CAN танигчийг дамжуулж байгаа гэсэн үг юм.
  • R0 - Хадгалагдсан бит (ирээдүйн стандарт өөрчлөлтөөр ашиглах боломжтой).
  • DLC-4 битийн өгөгдлийн уртын код (DLC) нь дамжуулж буй өгөгдлийн байтын тоог агуулдаг.
  • Өгөгдөл - 64 бит хүртэлх програмын өгөгдлийг дамжуулж болно.
  • CRC-16 битийн (15 бит дээр тусгаарлагч) мөчлөгийн илүүдлийн шалгалт (CRC) нь алдааг илрүүлэхийн тулд өмнөх програмын өгөгдлийн хяналтын дүнг (дамжуулсан битүүдийн тоо) агуулдаг.
  • ACK -ACK нь 2 бит бөгөөд нэг нь хүлээн зөвшөөрөх бит, хоёр дахь нь тусгаарлагч юм.
  • EOF-Энэ хүрээний төгсгөл (7-бит) талбар нь CAN фрэймийн төгсгөлийг (зурвас) тэмдэглэж, бит бөглөлтийг идэвхгүй болгодог бөгөөд энэ нь давамгайлах үед бөглөх алдааг илтгэнэ. Ердийн ажиллагааны явцад ижил логик түвшний 5 бит дараалан гарч ирэхэд эсрэг талын логик түвшний бага зэрэг хэсгийг өгөгдөлд оруулна.
  • IFS-Энэхүү 7 битийн фрэймийн зай (IFS) нь зөв хүлээн авсан хүрээг мессеж буфер хэсэгт зохих байрлалд шилжүүлэхэд шаардагдах хугацааг агуулдаг.

Арбитрын ажиллагаа

Автобус сул зогсолтын үед мессеж илгээж эхэлдэг нэгж эхлээд илгээх эрхийг авдаг. Олон нэгж нэгэн зэрэг илгээж эхлэх үед илгээгч нэгж бүр арбитрын хэсгийн эхний хэсгээс эхэлдэг. Хамгийн их тасралтгүй гаралтын давамгайлсан түвшний нэгжийг үргэлжлүүлэн илгээх боломжтой.

Алхам 4: Хурд ба зай

Хурд ба зай
Хурд ба зай

CAN автобус нь олон нэгжийг нэгэн зэрэг холбосон автобус юм. Холбогдох нэгжийн нийт тооны хувьд онолын хувьд хязгаар байхгүй. Гэсэн хэдий ч практик дээр холбох боломжтой нэгжийн тоо нь автобусны саатал, цахилгаан ачаалал зэргээс шалтгаалан хязгаарлагддаг. Харилцааны хурдыг бууруулж, холбож болох нэгжийн тоог нэмэгдүүлж, харилцааны хурдыг нэмэгдүүлснээр холбогдож болох нэгжийн тоо буурдаг.

Харилцааны зай нь холбооны хурдтай урвуу хамааралтай бөгөөд харилцаа холбооны зай хэр хол байх тусам холбооны хурд бага байх болно. Илүү урт зай нь 1 км ба түүнээс дээш байж болох боловч хурд нь 40 км -ээс бага байна.

Алхам 5: Техник хангамж

Техник хангамж
Техник хангамж

Maduino Zero CAN-BUS модуль нь CANbus харилцаанд зориулагдсан Makerfabs-ийн боловсруулсан хэрэгсэл бөгөөд энэ нь Arduino дээр суурилсан бөгөөд CAN хянагч, CAN дамжуулагчтай бөгөөд ашиглахад бэлэн CAN-автобусны портыг бий болгодог.

  • MCP2515 бол CAN-ийн тодорхойлолтыг хэрэгжүүлдэг бие даасан CAN хянагч юм. Энэ нь стандарт болон өргөтгөсөн өгөгдөл болон алсын фрэймийг дамжуулах, хүлээн авах чадвартай.
  • MAX3051 нь CAN протокол хянагч ба хянагчийн бүсийн сүлжээнд (CAN) автобусны шугамын физик утаснуудын хоорондох интерфэйсүүд юм. MAX3051 нь автобусанд дифференциал дамжуулах, CAN хянагч руу дифференциал хүлээн авах боломжийг олгодог.

Алхам 6: Холболт

Холболт
Холболт

DHT11 модулийг CAN холболтыг дэмжих хэрэгсэл болгон ашиглах утсаар Maduino Zero CAN-BUS модульд холбоно уу. Үүний нэгэн адил дэлгэцийг модульд холбож өгөгдлийг хүлээн авч харуулна.

Maduino Zero CANBUS ба DHT11 хоорондох холболт:

Maduino Zero CANBUS - DHT11

3v3 ------ VCC GND ------ GND D10 ------ DATA

Maduino Zero CANBUS ба OLED -ийн хоорондох холбоо:

Maduino Zero CANBUS - OLED

3v3 ------ VCC GND ------ GND SCL ------ SCL SDA ------ SDA

Maduino Zero CANBUS хоёр модулийг холбохын тулд DB9 кабелийг ашиглана уу.

Алхам 7: Код

MAX3051 нь дифференциал түвшинг логик дохио болгон хувиргах ажлыг гүйцэтгэдэг. MCP2515 нь өгөгдөл кодлох, декодлох гэх мэт CAN функцийг гүйцэтгэдэг. MCU нь зөвхөн хянагчийг эхлүүлж, өгөгдлийг илгээх, хүлээн авахад л хангалттай.

  • Github:
  • Arduino -г суулгасны дараа суулгах шаардлагатай самбарыг дэмжих багц байхгүй байна (Arduino zero).
  • Хэрэгсэл -> Удирдах зөвлөл -> ТУЗ -ийн менежерийг сонгоод "Arduino zero" гэж хайгаад "Arduino SAMD самбар" -ыг суулгана уу.
  • Tools -> Board -> Arduino Zero (Native USB Port) -ийг сонгоод Tools -> Port -> com -ийг сонгоно уу.
  • GitHub -аас програмыг авсны дараа бүх файлууд нь CANBUS -ийг дэмждэг номын сангийн файлуудыг агуулсан төслийн лавлахад байгаа эсэхийг шалгах хэрэгтэй.
  • DHT11 -ийг жолоодож температур, чийгшил авахад ашигладаг Adafruit -ийн DHT мэдрэгчийн номын санг суулгаарай.
  • Test_DHT11.ino кодод өөр өөр хаягийг ашиглан температур, чийгшлийг тусад нь илгээнэ үү.

CAN.sendMsgBuf (0x10, 0, stmp1.length (), stmp_send1);

саатал (500); CAN.sendMsgBuf (0x11, 0, stmp2.length (), stmp_send2); саатал (500);

"0x10" нь мессежийн ID, "0" нь стандарт хүрээ, "stmp1.length ()" нь зурвасын урт, "stmp_send1" нь илгээсэн өгөгдлийг илэрхийлнэ.

  • Test_OLED.ino кодонд CANBUS дээрх бүх мессежийг асуулгаар хүлээн авдаг бөгөөд шаардлагатай мэдээллийг OLED дээр харуулдаг.
  • Maduino-CANbus-RS485/Test_DHT11_OLED/Test_DHT11/Test_DHT11.ino програмыг мэдрэгчтэй холбогдсон модульд, Maduino-CANbus RS485/Test_DHT11_OLED/Test_OLED/Test_OLED.ino програмыг OLED-д холбогдсон өөр модульд байршуулна уу.

Алхам 8: Үзүүлэх

Үзүүлэх
Үзүүлэх
Үзүүлэх
Үзүүлэх

Хоёр модулийг асаахад температур, чийгшил дэлгэц дээр харагдана.

Зөвлөмж болгож буй: