Jump to content

CAN bus loggeris


fest
 Share

Recommended Posts

Vienam manam projektiņam (ko centīšos aprakstīt drīzumā) bija nepieciešams pieslēgties pie auto CAN bus, lai nolasītu pogu stāvokli uz stūres (konkrēti interesē tieši navigācijas pogas- Back/Enter, bultiņas).

 

Nedaudz par subjektu- Volvo S80. Tam auto pa CAN busu komunicē gandrīz viss- sākot ar piesprādzēšanās lampiņām uz spoguļa un pagriezieniem, beidzot ar motoru, ātrumkārbu, ABS u.c. Pēc manuāļa noskaidroju, ka auto ir divas atsevišķas CAN bus "sliedes"- viena, kas darbojas ar 125 kbit/s perifērijai- nafigācijai, telefonam, spuldzītēm un citiem mezgliem. Otra sliede, komunicē starp motoru/ABS/pretizslīdēšanas/ātrumkārbas mezgliem ar 500 kbit/s.

 

Lai pieslēgtos pie CAN bus, izmantoju visai izplatītu un lētu kombināciju- MCP2551 un MCP2515. Pirmais ir CAN bus transceiveris- pārveido CAN bus signālus TTL līmenī. Savukārt otrais ir CAN kontrolieris- mikrene, kas stiiipri atvieglo pieslēgšanos pie CAN busa- tiek galā ar taimingiem priekš vajadzīgā bitreita, rx/tx bufferi, filtri kā arī interrupti kad ir saņemti CAN ziņojumi. Izstrādei noderīgs ir loopback režīms, lai notestētu komunikāciju starp mikrokontrolieri un MCP2515.

 

"Nav lielākas nelaimes kā programmētājs ar lodāmuru rokās" /interneti/

 

 

IMAG0055.jpg

IMAG0056.jpg

 

 

CAN kontrolieris vadās caur SPI. Testiem pašlaik izmantoju Arduino, kas saņemtos CAN ziņojumus pa seriālo portu nosūta uz PC, kur tie tiek apstrādāti ar pitonā uzrakstītu GUI.

 

GUI ir atsevišķas rindkopas vērts. Tā kā man vajadzēja redzēt tikai nospiestās pogas- no sākuma mēģināju parādīt visus ziņojumus uz ekrāna. Aplauzos, >100 ziņojumu sekundē.

 

Nākošais mēģinājums- nespaidot pogas, krāt ziņojumus, kuru ID'us ignorēt. Pēc tam pārtraukt ignorēšanu- piespiest pogu, un skatīties, kas atnāks. Arī aplauzos, nesaņēmu vairs neko.

 

Trešais piegājiens- nespaidot pogas, krāt ziņojumus, kurus ignorēt. Ignorēšanu pārtraukt, piespiest pogu, un skatīties, kas atnāks. Aplauzos, tāpat pāris 10 ziņojumu sekundē.

 

Ceturtais piegājiens- apvieno trešo piegājienu + filtru: "Rādīt tikai ziņojumus, kas atkārtojušies tieši N reizes". N reizes piespiežam pogu uz stūres- un vualā, atnāk tieši interesējošais ziņojums. Kad bija rokā CAN bus ziņojuma ID, pārējās pogas atrast vairs nebija grūti- filtrējot pēc ID smuki izdevās atrast arī datu daļu katram pogas spiedienam.

 

canbus_logger_screenshot.png

 

Ja nu kādam noder- kods priekš Arduino un GUI iekš python'a atrodams šeit: https://github.com/f...v/canbus_logger

Labots - fest
Link to comment
Share on other sites

Par projektu - kamēr nav aprakstīts, tikmēr nav ko komentēt :D Ja nu vienīgi pavaicāt, cik reizes staigāji uz auto :)

 

Par plati - šāda tipa plates arī izmanto?

Link to comment
Share on other sites

Uz auto staigāju tikai beigu stadijā- no sākuma uz galda saliku plati, uzrakstīju/izmēģināju/debugoju softu uz Arduino, kas sazinās ar kontrolieri. Uz mašīnu staigāju tikai beigās, kad jau dati ielogojās un strādāju pie GUI.

 

Par plati- jā, izmantoju arī šādu. No sākuma biju saspraudis uz tādas, bet SPI man īsti negribēja darboties. Visdrīzāk kaut kur bija nestabils kontakts- tad nospļāvos un uzlodēju uz šitās plates. Gala variantam tāpat kodināšu PCB- šis ir tikai izmēģinājums, lai saprastu, vai shēma strāda, un lai ielogotu ziņojumus.

 

Tīri intereses pēc nomērīju- tikai pie ieslēgtas aizdedzes tur skraida ~300 ziņojumi sekundē.

mps.png

Labots - fest
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...