PCM and the new gen 3 prius

the protocol is the same.
So the capture is perfect.
But I had no time at all to capture structured infos and analyse them.
I will start from aug 15th.
 
The P3 send more pid then the P2. Only one is the same : speed.
That's to say Pcm show actualy the speed : 0b4.
May be also the 025 (direction)

Here all the pid send by the P3:
16714a45bf51787a5.png


This is a capture made by Pcm. ;-)
 
@Priusfan.

J'ai commencé à regarder la capture de la P3 que j'avais mise de côté.

-On a la vitesse sur le pid 0B4 octets 6 et 7, comme la Prius2.
-Le pid 0B6 octets 1 et 2 a quasiment la même valeur que le 0B4.

-Il est quasi-sûr que le Pid 1C4 octets 1 et 2 forment un mot de 16 bits qui est le régime en tr/mn du thermique. EDIT : Non, valeur trop forte.

Probable:
-Le Pid 0AA contient 4 mots de 16 bits, valeurs variant de 6800 à 7300. Si on divise par 32 on va de 212 à 228.
Mais ce n'est pas la tension de la batterie. Elle augmente (un peu) quand on roule en Ev.
Ces 4 "tensions" sont légèrement différentes, par moments.

A suivre.

Ajout 7/8/9.
J'ai constaté une bizarerie concernant les mots de 16bits pour plusieurs pid.
Si on regarde un seul pid et son évolution dans le temps:
L'octet de poids fort est en retard d'une réception du pid !!!
Exemple on a 0&255, le suivant sera 0&0 puis 1&1
Alors qu'on aurait dû avoir 0&255, 1&0 puis 1&1
La bascule du pid de poids fort 0 à 1 est en retard d'une réception du pid !!
Facile à gérer dans le prog pcm.
 
Dernière édition:
PID 0AA = vitesse des roues

Le PID 0AA contient les 4 vitesses de roues sur 16 bits

vitesse_avd = can_uint16(v0AA,0)
vitesse_avg = can_uint16(v0AA,2)
vitesse_ard = can_uint16(v0AA,4)
vitesse_arg = can_uint16(v0AA,6)

On voit très nettement la différence des vitesses lorsque le volant est braqué.

Mais ce sont des vitesses "brutes" # valeur min == 6767 # valeur max > 17371 Il faut soustraire ce 6767 pour obtenir la vitesse avec une unité de l'ordre de 10 m/h.
 
Dernière édition:
PID 0B4 = vitesse et odomètre

Le PID 0B4 contient la vitesse, comme l'a noté planétaire. En retirant un peu plus de 1%, on compare tres bien avec la vitesse des roues PID 0AA. On déduit en observant les forts braquages que la mesure est basée sur les roues avant.

vitesse = can_uint16(v0B4,5) # 0 ..10718 (unité probablement de l'ordre de 10 m/h)

Mais il y a aussi mon odomètre chéri

odometre = can_uint8(v0B4,4)
 
Dernière édition:
PID 1C4 = vitesse ICE

v_ICE = can_uint16(v1C4,0)

Sur un log de Priusfan, j'observe des vitesses moteur plutôt élevées, mais jamais plus de 5150. Un ralenti de chauffe à 1600, un entrainement à plus de 70 km/h valeur 1280.

Pour étalonner en observant le plateau du régime moteur maximal 5200 t/min, il faudrait faire un test 0..100 km/h accélérateur à fond.
 
PID 4C1, 4C3, 4C6, 4C7, 4C8, 4DD = versions d'ECU

Les ECU 1,3,7,8,9,30 transmettent leur numéro de version

4C1 (1,0,9,4,0,0,0,0)
4C3 (3,0,23,5,0,0,0,0)
4C6 (7,0,2,0,0,0,0,0)
4C7 (8,0,1,33,0,0,0,0)
4C8 (9,0,9,4,0,0,0,0)
4DD (30,0,2,1,0,0,0,0)
 
v_ICE = can_uint16(v1C4,0)

Sur un log de Priusfan, j'observe des vitesses moteur plutôt élevées, mais jamais plus de 5150. Un ralenti de chauffe à 1600, un entrainement à plus de 70 km/h valeur 1280.

Pour étalonner en observant le plateau du régime moteur maximal 5200 t/min, il faudrait faire un test 0..100 km/h accélérateur à fond.

pas de pb: ya ka demander :-D

pour info, la log que j'ai envoyée à kinetik correspond à un trajet assez vallonné.
ce fichier fait un peu plus de 82 meg pour un peu plus de 2 180 000 trames, à raison d'environ 1000 trames/sec (et oui la p3 est moins bavarde que son ainée).

l'équipement de capture:
un obdlink communiquant en USB à 2Mbps
avec un "vieux" laptop HP EliteBook (doublecoeur) tournant sous linux (ubuntu 12.04.2 32bits) et un script python de kinetik.....

un énorme bravo au super détective :jap: ....
 
PID 0AA, 0B4, 0B6 = vitesses

Le PID 0B4 donne la vitesse moyenne des roues avant, multipliée par 1.0128

Le PID 0B6 donnee la vitesse moyenne des roues arrière, sans multiplicateur.

vitesse_avd = can_uint16(v0AA,0) - 6767
vitesse_avg = can_uint16(v0AA,2) - 6767
vitesse_ard = can_uint16(v0AA,4) - 6767
vitesse_arg = can_uint16(v0AA,6) - 6767
vitesse_av = can_uint16(v0B4,5) / 1.0128
vitesse_ar = can_uint16(v0B6,0)
 
L'analyse de la totalité des PID passifs de la P3 est ici :
https://docs.google.com/file/d/0B67T1kwFymSWdm1hV0k5UHJTU2s/edit

J'ai joint une mini capture sans autre intérêt que de vérifier que le programme tourne.

Il faut créer une nouvelle capture dans logs_p3 avec "python ../bin/capture.py" Ce programme tourne sous Linux. Il peut être adapté sous Windows, mais XP n'a pas de timer microseconde.

Ensuite on crée le répertoire des PID en se plaçant dans logs_p3 avec "python ../bin/read_can_p3.py 2013xxxxxxxx"

Enfin on se place dans python/2013-04-14, on lance python puis "execfile '001_full_p3.py'"

La lecture du fichier 001_full_p3.py donne de manière plus ou moins lisible les quelques informations que j'ai analysées. Vous pouvez l'adapter pour poursuivre l'interprétation.
 
Dernière édition:
Tu veux dire P3, non ?
 
accélérateur et vitesse MG2 : PID 245 et 3B3

Le PID 245, octet 2 (le troisième) donne directement la position de la pédale d'accélérateur, de 0 à 200 toutes les 24 ms.

Sur le même PID, octets 0 et 1 on a la vitesse de MG2. Sur ton relevé le max est de 7736, avec un max des octets 5 et 6 du PID 0B4 égal à 10472, soit 102 km/h. Que vaut le rapport de transmission de la P3 ? Quelle est la dimension des pneus ? En tous cas, si la vitesse max de MG2 est 13500, je calcule 102*13500/7736 = 178 km/h.

Le PID 3B3 octet 2 (le troisième) n'est délivré que toutes les 500 ms. Il reflète fidèlement la position de la pédale d'accélérateur mais au lieu d'aller de 0 à 200, il va de 40 à 170, de 2 en 2. C'est peut-être pour coder des valeurs négatives. Mais je ne l'ai jamais vu sur tes relevés. Essaye de passer dans les autres modes de conduite (sportif?, B ?).

Je n'ai vu pas de plateau à 5200 t/min de ce que je croyais être la vitesse du thermique. À l'oreille, il y avait un plateau ?
 
Dernière édition:
je tenterai (peut-être) demain un autre relevé en utilisant sur l'autre branche du Y, soit torque sur android, soit ma petite appli avec mbed.
objectif: au moins étalonner les rpm de ICE...
 
PID 127 : couple demandé

Le PID 127, 11 bits des octets 3 et 4, donne le couple demandé. C'est un entier signé. Le bit 6 (l'avant-dernier plus fort) de l'octet 3 dit si on est en freinage électrique : il est activé si le couple demandé est négatif (voire nul) et si en même temps la vitesse n'est pas trop faible.

Sur le même PID on a la position PRBDN ou PRNDB (à voir), moitié haute de l'octet 5.

Sur 12 bits, moitié basse de l'octet 5 et octet 6, on a l'angle provenant du résolveur de MG2.

Ton conducteur n'a pas osé appuyer à fond en partant de l'arrêt. Il a mis une seconde, et on ne voit pas de plateau du couple max. Néanmoins, cela monte à 256. Considérant que le couple max. c'est le couple max de MG2 (207 N×m) plus une fraction du couple max du moteur, l'unité du couple demandé est proche du couple au niveau de MG2. Le couple max en marche arrière cela peut être instructif. Je pense que tu peux le baire en bloquant le frein à main à pied. Ça ne devrait pas déraper dans ce sens.

En multipliant le couple par la vitesse on obtient la puissance. En supposant que le couple est bien le couple demandé exprimé en N×m le maximum a été de 83 kW, lors de la première accélération. Seulement de 80 kW pour les deux autres. Il faudrait que tu fasses un test sur autouroute. Idéalement un départ à fond de 0 à 130 km/h. Mais une accélération à fond de 90 à 130 km/h irait bien. Voire si tu n'as que des voies rapides une accélération à fond de 70 à 115 km/h réels.
 
hello Kinetik
je comprends fort bien tes demandes et je suis pantois devant tes déductions à partir d' une série de chiffres...

pour procéder à des captures complémentaires, j'ai besoin d'un pilote (safety first) et ce ne sont ni mon épouse ni mon chien qui pourraient jouer ce rôle.
pour atteindre l' A13 (où l'on peut rouler à 130) à chambourcy, j'ai une approche de 25 minutes.
j'adore d'ailleurs les départs "canon" aux barrières de péage....
peut-être thierryb se dévouera-t’il un jour... (à moins que toi-même fasse un voyage dans le nord).
 
J'aurais peut-être une course dans ton coin (violon électrique) et dévissage du filtre à huile sur ton descente de parking ... à faire :-D
Donc je puis être ton pilote. Si tu le veux bien.
Reste à savoir quand ? Cette semaine j'aurais de trucs à faire mais je passe le viaduc de la prochaine sur Paris.
 
v_ICE = can_uint16(v1C4,0)

Sur un log de Priusfan, j'observe des vitesses moteur plutôt élevées, mais jamais plus de 5150. Un ralenti de chauffe à 1600, un entrainement à plus de 70 km/h valeur 1280...

je viens de procéder à un test en sollicitant ice_rpm avec le mbed avec la requète 7E0 01 0C et en loggant tout le traffic.

la comparaison depuis la log avec 1C4 fait apparaitre très exactement un facteur 1.28.

concrètement :
v_ICE = can_uint16(v1C4,0) / 1.28

la preuve en images:
comparaison%201c4_%20010c.jpg


la log est ici
 
PID 247 = courant batterie

Très convaincant ce facteur 1,28. Dans tes trois accélérations avec Pont Vert le plateau attendu à 5200 t/min n'était pas apparu parce que vous n'aviez pas assez poussé la bête : 4900 t/min dans pour la première et 4580 t/min et 4480 t/min pour les deux autres.

En revanche la batterie a été bien sollicitée, avec trois beaux plateaux de courant de décharge à 150 A et un de charge à 100 A.

Le courant est donné toutes les 24 ms par 9 bits, avec un bit de l'octet 0 du PID 247 et 8 de l'octet 1. L'unité est probablement l'ampère parce que le plateau vaut 150 et que la puissance batterie attendue est de 136-98 = 38 ch = 28 kW, et que 28000/150 = 187 V correspond assez bien à la tension batterie attendue sous charge.

Le bit 3 de l'octet 0 est en général à 1. Il vaut 0 au tout début et à la fin du parcours.

Le bit 2 de l'octet 0 vaut normalement 1. Il vaut 0 en cas de demande de courant > 100 A. Il vaut aussi 0 lorsque le courant et nul et que...[à voir].

Le bit 1 de l'octet 0 donne le signe du courant. Il vaut 1 lorsque le courant est <0 et 0 s'il est >=0. C'est presque la même valeur que le bit 0 qui faisant partie de l'entier 9 bits donne aussi le signe. Mais en fait ce bit 1 vaut aussi 1 au tout début et à la fin du parcours, bien que le courant soit nul.

L'octet 2 non signé vaut toujours 50 sauf au tout début ou à la fin du parcours, où il vaut 255.

Les octets 3 et 4 sont toujours nuls.

La tension n'est pas donnée par ce PID. Elle est plausiblement dans le PID 127 octet 0. La précision n'est pas fameuse, l'octet saute de 4 en 4 et il faut multiplier par 2. Cela ferait 8 V de résolution. La valeur moyenne serait de 227 V. Aux pics de courant de décharge, on observe 176 V donc 26.4 kW au lieu de 28 kW.
 
Dernière édition:
PID 260 et 320 : accéléromètres

Le PID 320 transmet avec une période de 48 ms les accélérations longitudinales

Il y a 4 valeurs intéressantes dans des entiers signés 8 bits.

octet 4 : accéléromètre a
octet 7 : accéléromètre b
octet 2 : différence b moins a
octet 5 : décalage départ
On a la formule
octet_7 - octet_4 - octet_2 - octet_5 = 11

Les octets 0 et 3 sont nuls, le 1 vaut 0b00100000, le 6 vaut 0b11000000.

Le PID 260 transmet avec une période de 20 ms les accélérations latérales.

Il y a deux valeurs intéressantes dans des entiers signés 16 bits

octets 1-2 : valeur moins sensible
octets 5-6 : valeur plus sensible
Les deux valeurs sont parfois similaires, mais souvent la seconde est plus forte.

L'octet 2 vaut toujours 0b00001000, les octets 3 et 4 sont nuls.

Dans l'enregistrement du 28 avril, le véhicule a été arrêté 30 secondes avant les 10 minutes. Dans la seconde qui suit l'arrêt, il s'est mis à pencher sur la droite. Le bas-côté s'est-il effondré ? On voit une succession de 5 poussées avec une période de 3 ou 4 secondes, comme si c'etait le sillage de voitures qui passent vite sur la route.
 
:siffle:......C'est tellement sérieux, ici, qu'on ase à peine s'y pointer.....
Mais j'ai parlé de vos octets à la Blonde du coin, et elle m'a assuré qu'elle
pouvait mettre manuellement les Bits sous tension, et que les accélérations
longitudinales de 48ms n'étaient pas extraordinaires. Il parait que l'on peut
prendre son PID à moins !........C'es tout de même une professionnelle !
 
Dans la seconde qui suit l'arrêt, il s'est mis à pencher sur la droite. Le bas-côté s'est-il effondré ? On voit une succession de 5 poussées avec une période de 3 ou 4 secondes

Oui Ageasson, je vois ce que tu veux dire par là.

En attendant la discussion est passionnante même si elle nous est inaccessible qt au contenu scientifique très technique. L'important c'est que ce travail avance parmi les collaborants. Pas besoin de comprendre tout ce qui s'écrit sur le forum surtout qu'il s'agit d'un fil de discussion dédié. Chacun y trouve son compte :jap:

Heureusement, l'humour d'Ageasson est accessible à tous, lui :grin:
 
Pages vues depuis le 20 Oct 2005: 309,057,818
Retour
Haut Bas