2024-05-19 07:31 AM - last edited on 2024-05-20 02:29 AM by SofLit
Hello everyone,
I'm trying to use MPU6050, HMC5883L and MS5611 all together in a project with an STM32F446RE. The problem is, while every components all work fine alone, when is use MPU6050 and HMC5883L together, it doesn't work. By not working, I'm meaning that the datas collected are all wrong. What's also weird is that : MPU6050 and MS5611 work fine together, same for HMC5883L and MS5611.
So let's focus on MPU6050 and HMC5883L only I guess...
For the connections I just did that :
So in my case, I connect the two sensors to the same SCL and SDA. Which should work, but I suspect that the problem might come from this connection. Indeed, even thought I'm assuming the right addresses are written in the code, could it be possible that troughout I2C, parts of the data are overwritten ? If so, what can I do ?
If you have any other ideas of where the problem could be, feel free to share it ^^
I attached all the code i use.
Thanks for your help !
Solved! Go to Solution.
2024-05-22 08:55 AM - edited 2024-05-22 08:56 AM
So I tried using 10k resistors as pull up resistors, I obtain the datas I need for the MPU6050 but not for the HMC5883L... (while the two are connected on the board). So it indeed seems to be the problem.
I also found a post (using an arduino) with someome having the same problem as me. He solved it by using a shifter :
With that in mind, I guess it's possible to make my own level shifter ? :) (I don't have one :/)
So i'm going to try that out tomorrow and keep you updated...
2024-05-22 09:02 AM - edited 2024-05-22 09:04 AM
So whats the voltage, your adapter using ?
If 1.8V, you need a level shifter .
STM32 is a 3v3 system (except you go for ultra low power, but then other problems coming.).
2024-05-22 09:31 AM - edited 2024-05-22 09:54 AM
I'm using my STM32F446RE connected to my pc with USB. Connected via 3v3 or 5v the problem stays the same...
I don't really understand what you mean by "adapter" :)
edit : I also find out, it's by connecting SCL from HMC5883L to the board that datas are getting wrong
2024-05-22 09:54 AM
I think we all have reasonable access to the part data-sheets.
The problem here is the variety of BOARDs you're using, with a whole lot of other attendant circuitry, often regulators, level shifters and pull-ups. It's the interaction of all these parts that results in the type of problems being discussed here.
What you NEED to do is be more specific about the EXACT MODULEs you're stringing together and THEIR circuit diagrams.
Some good photographic imagery, ie Large and In Focus, might establish the specific board design and vendor, as one design is frequently cloned, and futzed (BoM reduction) by several dozen vendors.
The reason I suggested the GY-86 was that ALL the individual parts were on ONE board, and hopefully the problem was thought through more completely without a lot of externals unknowns being introduced into the problem/circuit analysis.
2024-05-22 10:02 AM
I suspect each board has pull-ups /shifters, and arranged in a star configuration bus. Generally viewed as non-ideal for I2C. Flying 10cm dupont wires not really contributing well to a flat/linear I2C bus topology. Plug the headers into the bread board, and put half the cables back in the bag/box..
The level shift being to address needs of 5V Arduino Makers vs 3.3V of most modern CMOS for the last 3 decades.. not to mention 1.8V and 1.2V systems common in lower power CMOS
2024-05-22 11:09 AM
Ok :)
So I removed most of the cables as you adviced me.
I understand for the level shifter.
For the pics, I have a poor quality camera with my phone but here it is :
For the first sensor on the first photo it is the magnetometer behind it is written GY-271 and HW-246
On the "chip" it is written "HA 5883 2131".
The second sensor is the mpu I can't really read what's written on the chip.
I can give you all the links where i bought everything :
For the MPU6050
For the HMC5883L
Hope it helps :\
Thanks for your help :) !
2024-05-22 05:27 PM - edited 2024-05-22 05:35 PM
The Green is the pull-up / level shifter, the Orange is the "5V/VIN" side 2K2's.
The Red is the 3V3 Regulator
I'd probably lose the orange resistors and the 6-pin IC, and then bridge the SCL/SDA at the pull-up to the respective pads on the ones removed.
2024-05-22 05:58 PM
GY-271
http://wiki.sunfounder.cc/index.php?title=GY-271_HMC5883L_3-Axis_Magnetic_Electronic_Compass_Module
2024-05-22 10:31 PM
Since I'm newbie, can you tell me how to do this operation ? So I don't destroy everything on the way.... x)
Also, would this have any impact on my code ? (address reading ?)
And last question, what led you to this conclusion ? :thinking_face:
Again thanks a lot !