MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Formax51
Inlägg: 75
Blev medlem: 30 april 2013, 18:56:19
Ort: Umeå

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av Formax51 »

Vi kan se det ur ex ett fordons perspektiv... där det vanligt vis används...
ECU--- själva hjärnan.. håller koll på insprutning givare, styrdon ... ... alltså skickar börvärden, styrsignaler till ställdon etc

Så i ditt fall.. om du vill styra ställdonet så blir din "elektronik" = ECU
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Så om motion är ACU och STM32 är ECU
Vad är då source address och destination address?

Typ om jag ska skicka data från ECU till ACU så har jag en DA och en SA?

Men ska jag läsa data från ACU till ECU så är det helt andra DA och SA?

Vid varje uppstart så skickar varje motor sin SA till ECU?
Eller? Eller är det så att motorerna har samma SA, men olika DA?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

SA borde väl vara avsändare och DA mottagare, oavsett vilken riktning meddelandet går? SA och DA är nog inte fasta utan det sätt i varje meddelande. Ungefär som att din egen adress kan vara både adressat och avsändare på ett vanligt brev, det beror ju på om du är mottagare eller avsändare...
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Vid uppstart kommer jag få SA från ACU. Som jag tolkar SA är att SA är alltså ID på vilket typ vi ska tala med.

Så för att tala med motorerna så väljer jag SA adressen. För att tala med specifik motor så väljare jag både SA och DA
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Detta låter konstigt.
This first scenario addresses a standard J1939 network startup. Upon powering up (or when requested), an ECU will send an Address Claimed message into the CAN bus in order to claim an address. All ECUs receiving the address claim will record and verify the newly claimed address with their internal address table. In case of an address conflict, i.e. should two or more ECUs claim the same address, the ECU with the lowest NAME value will succeed and use the address as claimed. The remaining ECUs must claim a different address or stop transmitting to the network.
https://copperhilltech.com/blog/sae-j19 ... anagement/

Men den här säger att ACU skickar.
Bild

Hur som helst, så när man använder en PEAK-USB så börjar man först ansluta CAN-bus med den. I detta exempel har ECU adressen 0x22. Men vad är då ECU? Är det PEAK-USB adaptern? https://www.peak-system.com/PCAN-USB.199.0.html?&L=1 Denna går att använda för att tala med Sonceboz motorer. Mycket bra verktyg, dyr dock!

Sedan för varje acturator kan man se 0x8D osv. Dessa är adresserna till dom.
Sélection_054.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Vad är konstigt? Ser ut som en fungerande rutin för dynamisk allokering av adresser...
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jo. Men är det motorerna som skickar adressen till min ECU?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

De skickar sin antagna adress till alla. Tex två motorer måste komma överens om vilka adresser de ska använda. De kan först försöka med samma adress, då kommer en av dom att försöka med en annan adress, den med högst "name". Den andra, med lägre "name", behåller sin adress.
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jag gjorde tre försök.

Tre motorer, två av dom skickar 0x22 till mig vid uppstart. Jag kan bara styra EN av dom åt gången. Den tredje motorn har 0x8D som den skickar till mig vid start.
Dom alla har adresserna 0x80.

Så om jag kopplar in alla tre motorer, så kommer jag inte få 0x22, 0x22 och 0x8D? Utan jag kommer bara få EN adress från dom? Sedan för att styra dom så måste jag sätta adresserna på dom t.ex. 0x80, 0x81, 0x82 osv?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Tja, det är upp till dig att ta reda på...

Men som jag lite snabbt tolkade det, så kommer motorerna att upptäcka att några av dom
har duplicerade adresser och en av dom kommer att ändra sin adress och försöka igen.
Det är inget som "du" (vad nu det är) behöver göra något åt.

> Tre motorer, två av dom skickar 0x22 till mig vid uppstart.

De skickar inget direkt till dig, de skickar meddelanden ut på CAN bussen.
Alla som är fysiskt ansluta kan se dessa meddelanden och göra vad de vill med dom.
D.v.s. att motorerna med samma adress själva kommer att "reda ut det".

> Så om jag kopplar in alla tre motorer, så kommer jag inte få 0x22, 0x22 och 0x8D?

Först blir det nog så, men en av 0x22 motorerna (den med högst "name", jag antar
att "name" ingår meddelandet) kommer att försöka med en ny adress. men jag vet
inte mer en det än det som du klippte in i tråden...
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Jo. Enligt Sonceboz J1939 så måste jag sätta adresserna på dom. Man börjar på 0x80, sedan uppåt. Vet ej varför 0x80. Man verkar också bara kunna sätta en adress åt gången också.

Okej. Motorerna skickar ut sin adress rakt ut på CAN-bus bussen.

Name ingår inte i meddelandet. Så om en motor skickar 0x23 och andra skickar 0x22, så blir källadressen 0x22?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43149
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av sodjan »

Inte en susning. Lycka till!
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Tackar för hjälp iallafall!

Håller på skriva ett bibliotek för att läsa utav och skriva till J1939. :)
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: MCP2515 CAN-bus C-kod till STM32 - Kan någon testa?

Inlägg av DanielM »

Nu har jag hittat svaret!

ECU = Verktyget, i detta fall PEAK-USB. Men i mitt fall så är det MCP2515 CAN-bus IC-kretsen, eller kan det vara mjukvaran på STM32?
Markering_053.png
Och ACU = Motor.
Markering_054.png
Dessutom så har ECU:n en adress på typ 0x22, vilket kan ändras när som helst av användaren.
ACU:n, dvs motorn, kan ha en SA på 0x80 ...0x8F och en DA på 0x00 ... 0xFD. Se bild nedan.
ECU:n kan bara en adress.
Markering_061.png
Markering_055.png
Så om jag vill byta SA på en ACU, dvs motor, så måste jag först veta min ECU adress och ACU SA-adress.

Vid start så kickar motorn en adress till min STM32. Det är en SA-adress. Nu får jag den på 0x8D. Detta betyder att motorns SA-adress är 0x8D.
För tittar man på denna bild från Sonceboz så är denna ACU motor också satt till 0x8D.
Markering_058.png
Även protokollet om Address Claimed, visar att SA är iallafall inte under 0x80. Se exempel där 81 uppstår. Detta betyder att ACU:ns SA skickas till mig vid uppstart.
Markering_056.png
Då är min fråga:
Om jag vill skicka data från min ECU. Hur hittar jag min ECU adress då? Är det något jag själv får bestämma?
Jag använder STM32, CAN-bus bibliotek och MCP2515.

För jag har lust att ändra SA på ACU, via ECU. Som vi ser här så är 22 alltså ECU adressen! Men hur hittar jag min ECU adress? :)
Markering_059.png
Markering_060.png

Precis som sodjan sade. Detta kommand styrs av lägsta "Name". Så om jag har motorerna 0x80, 0x81, 0x82, 0x83 osv, så översätts dom till 30, 31, 32, 33 osv.
Notera att om jag skriver SA = 0x22 så fungerar detta lika bra om jag skriver ACU SA = ECU SA. Går att ändå styra.
Markering_063.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar