Talaan ng mga Nilalaman:
- Hakbang 1: Ginamit na Mga Mapagkukunan
- Hakbang 2: CAN (Controller Area Network)
- Hakbang 3: MAAARI - Mga Tampok
- Hakbang 4: Ginamit ang Circuit
- Hakbang 5: Mga Boltahe ng Linya ng Paghahatid (Pagkakaiba ng Pagtuklas)
- Hakbang 6: MAAARI ang Format ng Mga Pamantayan at Mga Frame
- Hakbang 7: MAAARI ang Mga Pamantayan sa Format at Mga Frame
- Hakbang 8: MAAARI ang Format ng Mga Pamantayan at Mga Frame
- Hakbang 9: Apat na Mga Uri ng Mga Frame (mga frame)
- Hakbang 10: Circuit - Mga Detalye ng Mga Koneksyon
- Hakbang 11: Circuit - Data Capture
- Hakbang 12: Circuit - Data Capture
- Hakbang 13: Circuit - Data Capture
- Hakbang 14: Arduino Library - CAN
- Hakbang 15: Github
- Hakbang 16: Code ng Source ng Transmitter
- Hakbang 17: Source Code: Loop (), Pagpapadala ng isang Karaniwang CAN 2.0 Packet
- Hakbang 18: Source Code: Loop (), Pagpapadala ng isang Pinalawak na CAN 2.0 Package
- Hakbang 19: Source Code ng Tagatanggap
- Hakbang 20: Source Code: Loop (), Pagkuha ng Package at Suriin ang Format
- Hakbang 21: Pinagmulan: Loop (), Mga Suriin upang Makita Kung Ito Ay Isang Malayong Package
- Hakbang 22: Source Code: Loop (), Haba ng Data na Hiniling o Natanggap
- Hakbang 23: Source Code: Loop (), Kung Natanggap ang Data, Pagkatapos Ito ay Nagpi-print
- Hakbang 24: I-download ang Mga File
Video: CAN Protocol - Oo, Maaari Namin !: 24 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Ang isa pang paksa na iminungkahi kamakailan ng mga tagasunod ng aking channel sa YouTube ay ang CAN (Controller Area Network) na protokol, na kung saan ay pagtuunan namin ng pansin ngayon. Mahalagang ipaliwanag na ang CAN ay isang sabay-sabay na serial communication protocol. Nangangahulugan ito na ang synchronism sa pagitan ng mga module na konektado sa network ay ginaganap na may kaugnayan sa simula ng bawat mensahe na ipinadala sa bus. Magsisimula kami sa pamamagitan ng pagpapakilala ng mga pangunahing konsepto ng CAN protocol at magsagawa ng isang simpleng pagpupulong na may dalawang mga ESP32.
Sa aming circuit, ang mga ESP ay maaaring kumilos bilang parehong Master at Alipin. Maaari kang magkaroon ng maraming mga microcontroller nang sabay-sabay na paghahatid, dahil ang CAN ay makitungo sa banggaan ng lahat nang awtomatiko. Ang source code ng proyektong ito ay sobrang simple. Suriin ito!
Hakbang 1: Ginamit na Mga Mapagkukunan
- Dalawang modyul ng ESP WROOM 32 NodeMcu
- Dalawang CAN transceiver mula sa WaveShare
- Mga jumper para sa mga koneksyon
- Lohikal na analista para sa pagkuha
- Tatlong mga USB cable para sa mga ESP at analyzer
- 10 metro ng baluktot na pares upang maglingkod bilang isang bus
Hakbang 2: CAN (Controller Area Network)
- Ito ay binuo ni Robert Bosch GmbH noong 1980s upang magsilbi sa industriya ng automotive.
- Ito ay naging laganap sa mga nakaraang taon dahil sa pagiging matatag at kakayahang umangkop ng pagpapatupad nito. Ginagamit ito gamit ang mga kagamitang pang-militar, makinarya sa agrikultura, pang-industriya at pagbuo ng automation, robotics, at kagamitang medikal.
Hakbang 3: MAAARI - Mga Tampok
- Dalawang-wire na komunikasyon sa serial
- Maximum na 8 bytes ng kapaki-pakinabang na impormasyon sa bawat frame, na may posibilidad na pagkakawatak-watak
- Ang direksyon ay nakadirekta sa mensahe at hindi sa node
- Ang pagtatalaga ng priyoridad sa mga mensahe at pag-relay ng mga "on hold" na mensahe
- Mabisang kakayahang makita at mag-signal ng mga error
- Kakayahang multi-master (ang lahat ng mga node ay maaaring humiling ng pag-access sa bus)
- Kakayahang Multicast (isang mensahe para sa maraming mga tagatanggap nang sabay)
- Mga rate ng paglipat ng hanggang sa 1Mbit / s sa isang 40-metro na bus (pagbawas ng rate na may pagtaas ng haba ng busbar)
- Kakayahang umangkop ng pagsasaayos at pagpapakilala ng mga bagong node (hanggang sa 120 node bawat bus)
- Karaniwang hardware, mababang gastos, at mahusay na kakayahang magamit
- Regulated na protocol: ISO 11898
Hakbang 4: Ginamit ang Circuit
Narito, mayroon akong mga Transceiver. Mayroong isa sa bawat panig, at nakakonekta sila ng isang pares ng mga wire. Ang isa ay responsable para sa pagpapadala at ang isa pa para sa pagtanggap ng data.
Hakbang 5: Mga Boltahe ng Linya ng Paghahatid (Pagkakaiba ng Pagtuklas)
Sa CAN, ang nangingibabaw na piraso ay Zero.
Ang Pagkakaiba ng Detalye ng Line ay Binabawasan ang Sensitivity ng Noise (EFI)
Hakbang 6: MAAARI ang Format ng Mga Pamantayan at Mga Frame
Karaniwang format na may 11-bit identifier
Hakbang 7: MAAARI ang Mga Pamantayan sa Format at Mga Frame
Pinalawak na format na may 29-bit identifier
Hakbang 8: MAAARI ang Format ng Mga Pamantayan at Mga Frame
Mahalagang tandaan na kinakalkula na ng isang protocol ang CRC at nagpapadala ng mga signal ng ACK at EOF, na mga bagay na nagawa na ng CAN protocol. Ginagarantiyahan nito na ang mensahe na ipinadala ay hindi darating sa maling paraan. Ito ay dahil kung magbibigay ito ng isang problema sa CRC (Redundant Cyclic Check o Redundancy Check), na kapareho ng isang digit ng impormasyon ng tseke, makikilala ito ng CRC.
Hakbang 9: Apat na Mga Uri ng Mga Frame (mga frame)
Mahalagang tandaan na kinakalkula na ng isang protocol ang CRC at nagpapadala ng mga signal ng ACK at EOF, na mga bagay na nagawa na ng CAN protocol. Ginagarantiyahan nito na ang mensahe na ipinadala ay hindi darating sa maling paraan. Ito ay dahil kung magbibigay ito ng isang problema sa CRC (Redundant Cyclic Check o Redundancy Check), na kapareho ng isang digit ng impormasyon ng tseke, makikilala ito ng CRC.
Apat na uri ng mga frame (frame)
Ang paghahatid at pagtanggap ng data sa CAN ay batay sa apat na uri ng mga frame. Ang mga uri ng frame ay makikilala ng mga pagkakaiba-iba sa mga control bit o kahit na sa pamamagitan ng mga pagbabago sa mga panuntunan sa pagsulat ng frame para sa bawat kaso.
- Data Frame: Naglalaman ng data ng transmiter para sa (mga) tatanggap
- Remote Frame: Ito ay isang kahilingan para sa data mula sa isa sa mga node
- Error Frame: Ito ay isang frame na ipinadala ng alinman sa mga node kapag nakikilala ang isang error sa bus at maaaring makita ng lahat ng mga node
- Overload Frame: Naghahatid upang maantala ang trapiko sa bus dahil sa labis na karga ng data o pagkaantala sa isa o higit pang mga node.
Hakbang 10: Circuit - Mga Detalye ng Mga Koneksyon
Hakbang 11: Circuit - Data Capture
Mga haba ng haba na nakuha para sa pamantayan ng CAN na may 11-bit ID
Hakbang 12: Circuit - Data Capture
Mga haba ng haba na nakuha para sa pinalawig na CAN na may 29-bit ID
Hakbang 13: Circuit - Data Capture
Ang data na nakuha ng tagapag-aral ng lohika
Hakbang 14: Arduino Library - CAN
Ipinapakita ko rito ang dalawang mga pagpipilian kung saan maaari mong mai-install ang CAN Driver Library
Arduino IDE Library Manager
Hakbang 15: Github
github.com/sandeepmistry/arduino-CAN
Hakbang 16: Code ng Source ng Transmitter
Source Code: Kasama at Pag-setup ()
Isasama namin ang CAN library, simulan ang serial para sa pag-debug, at simulan ang CAN bus sa 500 kbps.
#include // Inclui a biblioteca CAN CAN void setup () {Serial.begin (9600); // inicia isang serial para debug habang (! Serial); Serial.println ("Transmissor CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador habang (1); }}
Hakbang 17: Source Code: Loop (), Pagpapadala ng isang Karaniwang CAN 2.0 Packet
Gamit ang karaniwang CAN 2.0, nagpapadala kami ng isang pakete. Kinikilala ng 11-bit ID ang mensahe. Ang data block ay dapat magkaroon ng hanggang 8 bytes. Sinisimula nito ang packet na may ID 18 sa hexadecimal. Nag-iimpake ito ng 5 bytes at isinasara ang pagpapaandar.
void loop () {// Usando o CAN 2.0 padrão // Envia um pacote: o id 11 11 bit at magkakilala ng isang mensagem (nauna, kahit na) // o bloco de maging deve posuir até 8 bytes Serial.println ("Enviando pacote … "); CAN.beginPacket (0x12); // id 18 em hexadecimal CAN. magsulat ('h'); // 1º byte CAN. Magsulat ('e'); // 2º byte CAN. Magsulat ('l'); // 3º byte CAN. Magsulat ('l'); // 4º byte CAN. Magsulat ('o'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); pagkaantala (1000);
Hakbang 18: Source Code: Loop (), Pagpapadala ng isang Pinalawak na CAN 2.0 Package
Sa hakbang na ito, ang ID ay mayroong 29 na piraso. Nagsisimula itong magpadala ng 24 na piraso ng ID at, sa sandaling muli, naka-pack na 5 bytes at quits.
// Usando CAN 2.0 Estendido // Envia um pacote: o id tem 29 bits and identifica a mensagem (prioridade, evento) // o bloco de magiging deve posuir até 8 bytes Serial.println ("Enviando pacote estendido…"); CAN.beginExtendedPacket (0xabcdef); // id 11259375 decimal (abcdef em hexa) = 24 bits preenchidos até aqui CAN.write ('w'); // 1º byte CAN. Magsulat ('o'); // 2º byte CAN. Magsulat ('r'); // 3º byte CAN. Magsulat ('l'); // 4º byte CAN. Isulat ('d'); // 5º byte CAN.endPacket (); // encerra o pacote para envio Serial.println ("Enviado."); pagkaantala (1000); }
Hakbang 19: Source Code ng Tagatanggap
Source Code: Kasama at Pag-setup ()
Muli, isasama namin ang aklatan ng CAN, simulan ang serial sa pag-debug, at simulan ang CAN bus sa 500 kbps. Kung may naganap na error, mai-print ang error na ito.
#include // Inclui a biblioteca CAN CAN void setup () {Serial.begin (9600); // inicia isang serial para debug habang (! Serial); Serial.println ("Receptor CAN"); // Inicia o barramento CAN a 500 kbps if (! CAN.begin (500E3)) {Serial.println ("Falha ao iniciar o controlador CAN"); // caso não seja possível iniciar o controlador habang (1); }}
Hakbang 20: Source Code: Loop (), Pagkuha ng Package at Suriin ang Format
Sinubukan naming suriin ang laki ng natanggap na packet. Ipinapakita sa akin ng pamamaraang CAN.parsePacket () ang laki ng package na ito. Kaya't kung mayroon kaming isang pakete, susuriin namin kung ito ay pinahaba o hindi.
void loop () {// Tenta verificar o tamanho do acote recebido int packetSize = CAN.parsePacket (); kung (packetSize) {// Se temos um pacote Serial.println ("Recebido pacote."); kung (CAN.packetExtended ()) {// verifica se o pacote é estendido Serial.println ("Estendido"); }
Hakbang 21: Pinagmulan: Loop (), Mga Suriin upang Makita Kung Ito Ay Isang Malayong Package
Dito, sinusuri namin kung ang natanggap na packet ay isang kahilingan sa data. Sa kasong ito, walang data.
kung (CAN.packetRtr ()) {// Verifica se o pacote é um pacote remoto (Requisição de magiging), Neste caso não há maging Serial.print ("RTR"); }
Hakbang 22: Source Code: Loop (), Haba ng Data na Hiniling o Natanggap
Kung ang natanggap na packet ay isang kahilingan, isasaad namin ang hiniling na haba. Pagkatapos ay nakukuha namin ang Data Length Code (DLC), na nagsasaad ng haba ng data. Sa wakas, isinasaad namin ang haba ng natanggap.
Serial.print ("Pacote com id 0x"); Serial.print (CAN.packetId (), HEX); kung (CAN.packetRtr ()) {// se o pacote recebido é de requisição, indikasyon o comprimento solicitado Serial.print ("e requsitou o comprimento"); Serial.println (CAN.packetDlc ()); // obtem o DLC (Data Length Code, que indica o comprimento dos dados)} iba pa {Serial.print ("e comprimento"); // aqui somente indica o comprimento recebido Serial.println (packetSize);
Hakbang 23: Source Code: Loop (), Kung Natanggap ang Data, Pagkatapos Ito ay Nagpi-print
Nai-print namin (sa serial monitor) ang data, ngunit kung ang natanggap na packet ay hindi isang kahilingan.
// Imprime os magiging somente se o pacote recebido não foi de requisição habang (CAN.available ()) {Serial.print ((char) CAN.read ()); } Serial.println (); } Serial.println (); }}
Hakbang 24: I-download ang Mga File
INO
Inirerekumendang:
Paggawa ng isang Simpleng Robot sa Mga Bagay na Maaari Mong Mahanap sa Iyong Bahay (Bersyon ng hotwheel): 5 Mga Hakbang
Paggawa ng isang Simpleng Robot sa Mga Bagay na Maaari Mong Mahanap sa Iyong Bahay (Bersyon ng hotwheel): Ipapakita sa iyo ng Instructable na ito kung paano gumawa ng isang hotwheel na dumadaan mismo na tumatakbo sa mga dobleng A na baterya. Kakailanganin mo lamang gumamit ng mga bagay na malamang na mahahanap mo sa iyong bahay. Mangyaring tandaan na ang robot na ito ay marahil ay hindi eksaktong dumidiretso, isang
Paano Gumawa ng isang Baterya ng Aluminyo Maaari .: 5 Mga Hakbang
Paano Gumawa ng isang Baterya ng Can ng Aluminium .: Maaari kang gumamit ng mga de-lata na aluminyo upang lumikha ng kuryente
Ang Smart Basura Maaari Gamit ang isang Kotse: 5 Hakbang
Ang Smart Garbage Can Sa Isang Kotse: Ito ay isang matalinong lata ng basura gamit ang isang ultrasonic sensor, isang kotse, at isang pindutan, kaya't sumusulong kapag pinindot mo ito. Ang proyektong ito ay inspirasyon ng https://www.instructables.com/id/DIY-Smart-Dustbin-With-Arduino/ Narito ang ilang bahagi na gumawa ako ng mga pagbabago: 4 gulong
"Heeds the Box" - isang Modelong Maaari Mong Magkasya sa Loob ng Kanyang Sariling Ulo: 7 Hakbang
"Heeds the Box" - isang Modelong Maaari Mong Magkasya sa Loob ng Kanyang Sariling Ulo: Narinig ko ang mga laruang karton ng Hapon kung saan ang ulo ay naging isang kahon ng imbakan para sa buong modelo. Sinubukan kong maghanap ng online, ngunit nabigo. O baka nagtagumpay ako ngunit hindi mabasa ang Japanese script? Anyhoo, nagpasya akong gumawa ng sarili ko. Tinawag siyang Heed
Wooden RC Boat Na Maaari mong Montrol ang Manu-mano o Sa pamamagitan ng isang Website: 9 Hakbang
Wooden RC Boat Na Maaari mong Montrol ang Manu-mano o Sa pamamagitan ng isang Website: Kumusta ako ay isang mag-aaral sa Howest at nagtayo ako ng isang Wooden RC boat na makokontrol mo sa pamamagitan ng isang controller o sa pamamagitan ng isang website. Napagod ako sa mabilis na pagkasira ng mga sasakyan at gusto ko ng isang bagay upang masiyahan ako sa aking sarili kapag nakatira ako sa dagat