I understand how CAN works (I think). Good info here if you would like to see: Difference between OBDII and CAN
So very briefly, there are multiple modules and each module posts interesting data on the wires. Every module gets the data, it then decides if the data is interesting for that module, if it is save it, if not ignore it. (I realise this is very brief and doesn't go into priorities if multiple post at once etc but we don't need to worry about that here)
I have been using a bluetooth ELM327 OBD2 scanner and an Arduino/ESP32 to read data from my car.
I read that on some cars that you can't poll faster than 10Hz as this can cause internal issues. This is where I got confused.
So let's say all I want to get is the RPM from the ELM327.
From my understanding of CAN, you don't poll for data, you just save it off every time it is posted if it is interesting to you.
Surely with my understanding of CAN above the ELM327 would be a module and every time the RPM data was posted, it would save the data. Then it would just return the saved RPM data to me when I ask for it with the Arduino. Although this maybe doesn't hold up as the OBD2 devices can get fault codes that are stored on the various modules and not posted.
Or, is there an "OBD2 module" in the car that the ELM327 connects to and the ELM327 polls it? If this was the case I don't see the need for the CAN wires to be present in the OBD2 plug which they are.
I am aware OBD2 has PID's, I'm not sure how they work. When polling those what happens? Does it just search for previously stored posts in the "OBD module" using the PID as some sort of key or does it actually convert it to CAN and poll on can which goes against how I think CAN works?
Am I completely wrong on how OBD2 interfaces with CAN? Or maybe I don't understand CAN properly?
I would like to get the RPM data faster than 10Hz but I don't want to destroy anything. My car is a 2006 Renault if that helps at all.
Thanks in advance