<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.olliw.eu/storm32bgc-v1-wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katman</id>
	<title>STorM32-BGC Wiki V1 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.olliw.eu/storm32bgc-v1-wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katman"/>
	<link rel="alternate" type="text/html" href="http://www.olliw.eu/storm32bgc-v1-wiki/Special:Contributions/Katman"/>
	<updated>2026-04-28T21:40:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://www.olliw.eu/storm32bgc-v1-wiki/index.php?title=I2C_Error_Compendium&amp;diff=2308</id>
		<title>I2C Error Compendium</title>
		<link rel="alternate" type="text/html" href="http://www.olliw.eu/storm32bgc-v1-wiki/index.php?title=I2C_Error_Compendium&amp;diff=2308"/>
		<updated>2015-03-29T23:39:19Z</updated>

		<summary type="html">&lt;p&gt;Katman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:88%&amp;quot;&amp;gt;&#039;&#039;by OlliW, with edits by Bruce356&amp;lt;/span&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I2C errors are probably the most annoying side effect of the technology we are using in our brushless gimbals.&lt;br /&gt;
&lt;br /&gt;
I2C errors occur when the signals on the I2C clock and data lines (SCL,SDA) are disturbed beyond certain limits, and this happens for two main reasons:&lt;br /&gt;
* capacitive load on the I2C clock and/or data lines&lt;br /&gt;
* induced signal disturbances due to capacitive coupling to outside fields&lt;br /&gt;
&lt;br /&gt;
Importantly, all error sources add up. One therefore can&#039;t give decisive threshold values, for example, the length of the I2C wires should not be more than 40 cm long. Without any further error sources one might be able to use much longer wires, but if motor wires are too close to the IMU cabling then shorter wires might be required. &lt;br /&gt;
&lt;br /&gt;
It&#039;s like a glass of wine: When it&#039;s full, it&#039;s full. It doesn&#039;t matter whether it was filled with Bordeaux, Chianti, or any other mixture. When the glass contains only a tiny bit of Bordeaux, one can add a lot of Chianti before it overflows, but when the glass is nearly full of Bordeaux, only a tiny amount of Chianti will fit before it reaches the overflow point. So, its not possible to tell how much Chianti is acceptable, since this depends on how much Bordeaux is already in the glass, the only thing that can be determined is that the more Chianti you poor in the glass the more likely it will overflow.&lt;br /&gt;
&lt;br /&gt;
You can find I2C errors recorded in the &amp;quot;Data Display&amp;quot; window, which can be found by clicking on the &amp;quot;Data Display&amp;quot; button near the bottom of the GUI.&lt;br /&gt;
&lt;br /&gt;
== Ways to Reduce the I2C Error Rate ==&lt;br /&gt;
&lt;br /&gt;
Before looking at the I2C errors, here is a brief summary of methods, which help reduce problems with the I2C connection to an IMU module:&lt;br /&gt;
&lt;br /&gt;
* reduce length of I2C cables&lt;br /&gt;
&lt;br /&gt;
* increase spacing between I2C cables and motor wires&lt;br /&gt;
&lt;br /&gt;
* twist the I2C wires; this can take several forms, such as twisting all four together, just twisting SCL and SDL, twisting SCL with GND and SDA with VCC etc.&lt;br /&gt;
&lt;br /&gt;
* shield the I2C wires; using e.g. a coax cable or wrapping the wires with a self adhesive conductive cloth, &amp;quot;EMI shielding&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* lower the (motor) voltage &lt;br /&gt;
&lt;br /&gt;
* add ferrite rings; these can be fitted in various ways, such as, putting the rings on the I2C wires and/or the motor wires, they can be fitted at either ends of the wires.&lt;br /&gt;
&lt;br /&gt;
* reduce the I2C pullup resistors on the IMU module&lt;br /&gt;
&lt;br /&gt;
== Capacitive Load ==&lt;br /&gt;
&lt;br /&gt;
Capacitive load decreases the slew rate of the signal, and eventually prevents the electronics from detecting the signal correctly, and an I2C error occurs.&lt;br /&gt;
&lt;br /&gt;
Capacitive load arises from the cables themselves, and the longer the cables are the higher the capacitive load becomes.&lt;br /&gt;
&lt;br /&gt;
Therefore, for any I2C system there is an &amp;quot;intrinsic&amp;quot; maximum length up to which the I2C communication will work. In practice this maximum length is not achieved, since, as mentioned in the introduction, other I2C error sources may be present reducing the practical length. The capacitive load depends also on the used type of cable. Thin wires for instance have a smaller capacity than thicker wires. In practice, however, there is usually little room to play with this factor. &lt;br /&gt;
&lt;br /&gt;
Capacitive load also arises from anything conducting in the near surrounding area of the I2C clock and/or data wires.&lt;br /&gt;
&lt;br /&gt;
This is indeed a major factor, and - fortunately - it is to a high degree under our control. The possible contributors falling into this category are very diverse; they range from things like spacing between the wires themselves or to GND or Vcc, shielding such as in coax wires, twisted or non-twisted wires and the manner in which they are twisted, conducting areas like metal bars or carbon plates to which the IMU module is mounted or the I2C cables are fixed to, and so on. It is as it was mentioned, it can arise from &#039;&#039;&#039;&#039;&#039;anything&#039;&#039;&#039;&#039;&#039; that is conducting in the surrounding area. Fortunately, the rules which determine the value for capacitance are well known. In a nutshell, the larger the conducting area the larger the capacitance, and the further the distance from the conducting area the smaller the capacitance. This immediately gives us the necessary rules to control, and possibly avoid the problem.&lt;br /&gt;
&lt;br /&gt;
The acceptable capacitive load, from both the cables and the conducting surrounding areas, depends on additional factors, such as the current capabilities of the I2C drivers and the pullup resistors.&lt;br /&gt;
&lt;br /&gt;
== Induced Signal Disturbances ==&lt;br /&gt;
&lt;br /&gt;
Wires in close proximity to the I2C clock and data lines may, due to capacitive coupling, induce fault voltages in the I2C lines and thus disrupt the I2C signals. This again may prevent the electronics from detecting the I2C signals correctly and even bring it into an unexpected state, therefore causing I2C errors to occur. The I2C errors due to induced disturbances are often fatal in the sense that it can be difficult for the electronics to recover from these errors.&lt;br /&gt;
&lt;br /&gt;
For our gimbals, the primary origin of these interferences are from the motor wires. The motor wires carry high voltage signals, high in comparison to the circa 3 volts of the I2C signals, which in addition are pulsed with large slew rates. When the motor wires come close to the I2C lines, they can easily disturb the signals on the I2C lines.&lt;br /&gt;
&lt;br /&gt;
The strength of the induced disturbances depends on some additional factors, such as the current capabilities of the I2C drivers and the pullup resistors.&lt;br /&gt;
&lt;br /&gt;
== Practical Implications ==&lt;br /&gt;
&lt;br /&gt;
Equipped with the understanding of the origin of the I2C errors, most of the counter measures listed in the above become obvious.&lt;br /&gt;
&lt;br /&gt;
Some can have both positive and negative effects. For instance, twisting the I2C wires or shielding them can be very successful in protecting the I2C signals from the induced disturbances of the motor wires, but on the other hand they also increase the capacitive load. Whether these counter measures work or not therefore depends on the particular situation, whether the &amp;quot;induced disturbances&amp;quot; or &amp;quot;capacitive load&amp;quot; are the dominating I2C error sources.&lt;br /&gt;
&lt;br /&gt;
Ferrite rings are very commonly used to suppress I2C errors. When placed on the motor wires they reduce the slew rate of the motor signals and thereby their ability to induce fault voltages in the I2C lines. When placed on the I2C lines they can compensate, to some degree, the capacitive load and thereby improve the I2C signal quality.&lt;br /&gt;
&lt;br /&gt;
The alert reader will have noticed that increasing the current in the I2C lines or decreasing the pullup resistors, respectively, helps to diminish both the effects of the capacitive load and induced voltage disturbances. This in fact helps quite considerably, and it is a good idea to use small pullup resistors, e.g. 1k to 2k on the IMU module. One may wonder why not use really small pullup resistors instead of the typical 2k to 10k range. Well, the answer is that the common I2C drivers are not designed to handle currents larger than a few mA (and this in turn is related to the way in which I2C works). Therefore if very small pullup resistors are used this may damage your electronics. Circuitry exists to create low-impedance I2C communications, but it is not used in our low-budget applications.&lt;/div&gt;</summary>
		<author><name>Katman</name></author>
	</entry>
	<entry>
		<id>http://www.olliw.eu/storm32bgc-v1-wiki/index.php?title=STorM32_FAQ&amp;diff=2307</id>
		<title>STorM32 FAQ</title>
		<link rel="alternate" type="text/html" href="http://www.olliw.eu/storm32bgc-v1-wiki/index.php?title=STorM32_FAQ&amp;diff=2307"/>
		<updated>2015-03-29T17:28:25Z</updated>

		<summary type="html">&lt;p&gt;Katman: /* Does it matter where to install the camera IMU sensor? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Electronics ==&lt;br /&gt;
&lt;br /&gt;
==== What are the differences between the boards? ====&lt;br /&gt;
&lt;br /&gt;
For a comparison of v1.3 and v1.31 boards see this post on rcgroups: [http://www.rcgroups.com/forums/showpost.php?p=30438164&amp;amp;postcount=2949 #2949]. The v1.1 is essentially identical to the v1.3 board, except of some minor details. For more info on the technical details of the boards see [[Boards]].&lt;br /&gt;
&lt;br /&gt;
==== Which MPU modules do work with the board? ====&lt;br /&gt;
&lt;br /&gt;
 According to current experience any MPU module works fine with the STorM32-BGC board.&lt;br /&gt;
&lt;br /&gt;
Specifically this includes the [https://www.google.de/search?q=mpu+module+gy-521&amp;amp;client=firefox-a&amp;amp;hs=C3C&amp;amp;rls=org.mozilla:de:official&amp;amp;channel=sb&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=20USU8jdMOS9ygPhpYGgDQ&amp;amp;ved=0CAoQ_AUoAg&amp;amp;biw=1349&amp;amp;bih=915 GY-521] module. However, also the xoodee module and even the [https://www.google.de/search?q=gy-86+10dof&amp;amp;client=firefox-a&amp;amp;hs=GPs&amp;amp;rls=org.mozilla:de:official&amp;amp;channel=sb&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=NUYSU6bTPMP8ywPXgoLgDg&amp;amp;ved=0CAoQ_AUoAg&amp;amp;biw=1349&amp;amp;bih=915 GY-86 10DOF] module have been in use.&lt;br /&gt;
&lt;br /&gt;
A comment on the supply voltage. The STorM32-BGC works internally with a voltage of 3.3 V. Accordingly, it also provides only 3.3 V at its I2C and I2C#2 ports, to which external MPU modules and breakout boards are connected. Most of the available MPU modules/breakout boards are however &amp;quot;Arduino compatible&amp;quot;, which means that they have a 5 V pin and can be supplied with voltages of 5 V and higher, thanks to a voltage regulator on the module. The question arises if these MPU modules do also work with the 3.3 V provided by the STorM32-BGC. The answer is that so far no issues have been reported with using them. &lt;br /&gt;
&lt;br /&gt;
==== What connectors are used for connecting the MPU modules to the board? ====&lt;br /&gt;
&lt;br /&gt;
The connectors for the MPU modules on the STorM32-BGC board are [http://www.molex.com/molex/products/family?key=picoblade&amp;amp;channel=products&amp;amp;chanName=family&amp;amp;pageTitle=Introduction Molex picoblade] types with 1.25 mm pitch (for a comparison of various connectors see [http://www.rcgroups.com/forums/showthread.php?t=1493712 here]). They are also known as micro JST 1.25 mm, and it is in fact best to search for this, e.g. on ebay: [http://www.ebay.com/sch/i.html?_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xmicro+jst+1.25&amp;amp;_nkw=micro+jst+1.25&amp;amp;_sacat=0&amp;amp;_from=R40 micro jst 1.25].&lt;br /&gt;
&lt;br /&gt;
==== What about the magnetometer support? ====&lt;br /&gt;
&lt;br /&gt;
In version 0.51.2e magnetometer is not jet supported: http://www.rcgroups.com/forums/showpost.php?p=29756073&amp;amp;postcount=2062&lt;br /&gt;
If a mag-imu is connected as main imu on the camera, mag will not be detected:&lt;br /&gt;
&lt;br /&gt;
v... v0.51&lt;br /&gt;
&lt;br /&gt;
s... ok&lt;br /&gt;
&lt;br /&gt;
IMU is PRESENT @ LOW ADR&lt;br /&gt;
&lt;br /&gt;
IMU2 is PRESENT @ LOW ADR = external IMU&lt;br /&gt;
&lt;br /&gt;
MAG is not available&lt;br /&gt;
&lt;br /&gt;
STATE is NORMAL&lt;br /&gt;
&lt;br /&gt;
== Software and GUI ==&lt;br /&gt;
&lt;br /&gt;
==== How does Read, Write, and Store work? ====&lt;br /&gt;
&lt;br /&gt;
{{GUI|Read}} reads the currently active settings from the board to the GUI.&lt;br /&gt;
&lt;br /&gt;
{{GUI|Write}} writes the values of the GUI to the board and makes them effective immediately. The changes last until the board is reset or powered down.&lt;br /&gt;
&lt;br /&gt;
{{GUI|Store}} makes that the board stores its current values into the EEProm so that they become permanent. The settings stored in the EEprom will be used at power up.&lt;br /&gt;
&lt;br /&gt;
{{GUI|Write+Store}} does first a Write and then a Store.&lt;br /&gt;
&lt;br /&gt;
Thus: With the {{GUI|Write}} button, all parameter values are copied to the board, and become effective immediately. They are however not stored permanently in the Eeprom, i.e., changes will be lost after a power down. To store changes permanently do a {{GUI|Write+Store}}, e.g., by clicking the check box next to the {{GUI|Write}} button.&lt;br /&gt;
&lt;br /&gt;
==== Storing the parameter values to the EEPROM doesn&#039;t seem to work ====&lt;br /&gt;
&lt;br /&gt;
Please double-check that the correct firmware for your board has been flashed. The problem typically happens then e.g. the firmware for a F103RB is flashed onto a board with a F103RC.&lt;br /&gt;
&lt;br /&gt;
==== Which drivers are needed for the USB? ====&lt;br /&gt;
&lt;br /&gt;
On Win7 the driver is usually installed automatically (this may take few minutes, be patient). The driver, usable also for WinXP, can also be obtained from [http://www.st.com/web/en/catalog/tools/PF257938 here]. &amp;lt;!-- [http://www.st.com/web/en/catalog/tools/FM146/CL1984/SC724/SS1677/PF251168 here]. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Flashing with the usb-ttl adapter produces Windows error messages ====&lt;br /&gt;
&lt;br /&gt;
If upon flashing you get Windows errors such as mfc110.dll is missing, msvcr110.dll is missing, or application was unable to start correctly (0xc000007b), then first check that you&#039;re not using an outdated GUI version. Otherwise, you need to install the VC++ runtime libraries. Download vcredist_x64.exe or vcredist_x86.exe depending on your Win system from [//www.microsoft.com/en-us/download/details.aspx?id=30679 here], and run the exe file.&lt;br /&gt;
&lt;br /&gt;
== Gimbal Construction ==&lt;br /&gt;
&lt;br /&gt;
==== Does it matter where to install the camera IMU sensor? ====&lt;br /&gt;
&lt;br /&gt;
In principle no, one can mount it wherever it is most convenient (of course as long as it tracks the camera motion). Some folks have however reported that the performance can depend on where the IMU sensor is mounted, depending on the specific gimbal some places seem to be better, i.e. allow e.g high PID values, than others. So, it may need experimenting.&lt;br /&gt;
&lt;br /&gt;
==== IMU Auto Detect Orientation ====&lt;br /&gt;
&lt;br /&gt;
The IMU can be placed in any position provided it is parallel with the vertical and horizontal axis of the camera. In the GUI, under &amp;quot;Gimbal Configuration Tab&amp;quot;, click on the &amp;quot;Configure Gimbal Tool&amp;quot; button. This will produce a pop up window with instructions to follow for the controller to  automatically determine IMU orientation. When it says to tilt 45 degrees, tilt the entire gimbal, don&#039;t rotate the pitch mechanism to 45 degrees. If you are doing it wrong, the procedure will time out. Once an attitude of 45 degrees is met, the software will recognize the position, then you can continue.&lt;br /&gt;
&lt;br /&gt;
==== Where should the main board be mounted for correct use of the second IMU? ====&lt;br /&gt;
&lt;br /&gt;
See [[Using a 2nd IMU]].&lt;/div&gt;</summary>
		<author><name>Katman</name></author>
	</entry>
</feed>