<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.engineersofinnovation.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fromeijn</id>
	<title>'Engineers of Innovation Wiki' - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.engineersofinnovation.nl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fromeijn"/>
	<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/wiki/Special:Contributions/Fromeijn"/>
	<updated>2026-05-07T13:10:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=280</id>
		<title>Throttle</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=280"/>
		<updated>2026-05-02T10:56:45Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: fix example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The throttle controls the motor and is operated by the pilot during sailing. It controls the duty cycle of the motor via the [[CAN-bus|CAN bus]] using the standard VESC message format. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
[[File:Throttle Schematic.png|thumb|Throttle shown in the inactive (green led) neutral position]]&lt;br /&gt;
To use the throttle to control the motor the green illuminated ''arm-button'' will have to be pressed for a few seconds, however some conditions need to be met to ensure a safe start of the motor. &lt;br /&gt;
&lt;br /&gt;
# The ''dead-man cord'' needs to be applied to the bottom of the throttle body, should snap in place magnetically&lt;br /&gt;
# The ''throttle lever'' Should be in its neutral position, pointing straight up with a noticeable tactile bump&lt;br /&gt;
# The [[CAN-bus|CAN bus]] need to be actively acknowledging packets, which means other devices need to be active on the bus&lt;br /&gt;
# No other error should have occurred inside the electronics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If one of these conditions is not met, the throttle will beep the number of times indicated above. &lt;br /&gt;
&lt;br /&gt;
== Programming Throttle Position ==&lt;br /&gt;
The throttle position is read out by a magnet attached tot the ''throttle lever'', because the orientation of this magnet is not know in the firmware, this position can be programmed into the EEPROM. To enter programming mode hold down the arm button during power-on. A four beep descending tone should be played, and the LED should do a double blink in red continuously. To program the throttle push lever as far forward as possible and press the button, a single beep be heard. Repeat this twice with the lever in the center and finally with the lever all the way backwards. After three beeps the throttle is reprogrammed and normal operation is resumed. To summarize:  &lt;br /&gt;
&lt;br /&gt;
# Lever in the forward position  &lt;br /&gt;
# Lever in the center position &lt;br /&gt;
# Lever in de backward position &lt;br /&gt;
#  &lt;br /&gt;
&lt;br /&gt;
If no programming is desired leave the lever alone for 10 seconds and the lever will reboot into normal mode.&lt;br /&gt;
&lt;br /&gt;
== Setting the Control Mode over CAN ==&lt;br /&gt;
The Throttle controls the VESC motodriver at 40Hz messaging rate with the default CAN format implemented inside the VESC. [https://dongilc.gitbook.io/openrobot-inc/tutorials/control-with-can More info on the format.] and [https://triforce-docs.readthedocs.io/en/latest/canbus/canbus.html Here]. The throttle supports the following modes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Control Mode !! Configuration Byte Value !! Unit !! Additional data required&lt;br /&gt;
|-&lt;br /&gt;
| Filtered Duty Cycle || 0x01 || Percentage || None lever in the maximum forward position is 100%&lt;br /&gt;
|-&lt;br /&gt;
|Duty Cycle|| 0x02 || Percentage  || None lever in the maximum forward position is 100% &lt;br /&gt;
|-&lt;br /&gt;
|Current Control || 0x03 || 100mA  || Specify the max current for forward and backwards in two int16_t's&lt;br /&gt;
|-&lt;br /&gt;
|RPM Control || 0x04 || RPM  || Specify the rpm for forward and backwards in two int16_t's &lt;br /&gt;
|-&lt;br /&gt;
|Current Control Relative&lt;br /&gt;
|0x05&lt;br /&gt;
|Percentage&lt;br /&gt;
|None lever in the maximum forward position is 100%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These modes can be send to the throttle when the throttle is off. If the throttle is on the configuration will be ignored. A sound will play when a message is received. The message has to be send to the Throttle address 0x337, same as the reboot command. the format is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Setting the control mode&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || Control type || MSB int16_t  || LSB int16_t|| MSB int16_t  || LSB int16_t&lt;br /&gt;
|-&lt;br /&gt;
| Hardcoded command|| See Table Above || colspan=2 | Max value for lever completely forward || colspan=2 | Same but for backward (Positive for reverse)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example command: ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;69&amp;quot;&amp;gt;&lt;br /&gt;
# duty cycle&lt;br /&gt;
cansend can0 337#AA0200000000&lt;br /&gt;
&lt;br /&gt;
# 120A current control&lt;br /&gt;
cansend can0 337#AA0304B004B0&lt;br /&gt;
&lt;br /&gt;
# relative current control&lt;br /&gt;
cansend can0 337#AA0500000000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Diagnostics messages ==&lt;br /&gt;
The throttle also send out messages to help debugging every 200 ms. It is send on address 0x337 and has the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Diagnostic Purposes&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5 !! Byte 6 !! Byte 7&lt;br /&gt;
|-&lt;br /&gt;
| MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || uint8_t || Error status&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | Filtered lever position, from +512 to -512 || colspan=2 | Raw position reported by the magnetic encoder || colspan=2 | Raw data from the deadmanswitch ADC || Gain that is required to readout the lever position || Enum of current error state. 0x00 is good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If any of the error status bits are set, the throttle is set into IDLE mode and will shut off the motor. The following table shows what the bitfield represents:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Enum Name !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 2 || twiError || See next table for possible values&lt;br /&gt;
|-&lt;br /&gt;
| 3      || noLimitsLoaded || Reading of EEPROM for throttle limits failed&lt;br /&gt;
|-&lt;br /&gt;
| 4      || gainClipping || The Magnetic encoder detected no good magnetic field present&lt;br /&gt;
|-&lt;br /&gt;
| 5      || gainInvalid || The gain value read from the magnetic encoder is beyond the range specified in software&lt;br /&gt;
|-&lt;br /&gt;
| 6      || deadmanMissing || The hall sensor of the deadman-switch doesn't detect a strong enough magnet&lt;br /&gt;
|-&lt;br /&gt;
| 7      || impeadanceHigh || The impeadance of the deadman signal is too high, indicating a bad connection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ TWI error states&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Error name !! Error Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||	TWI_ERROR_NoError              || Indicates that the command completed successfully.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||	TWI_ERROR_BusFault             || A TWI bus fault occurred while attempting to capture the bus. &lt;br /&gt;
|-&lt;br /&gt;
| 2 ||	TWI_ERROR_BusCaptureTimeout    || A timeout occurred whilst waiting for the bus to be ready. &lt;br /&gt;
|-&lt;br /&gt;
| 3 ||	TWI_ERROR_SlaveResponseTimeout || No ACK received at the nominated slave address within the timeout period.&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||	TWI_ERROR_SlaveNotReady        || Slave NAKed the TWI bus START condition. &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||	TWI_ERROR_SlaveNAK             || Slave NAKed whilst attempting to send data to the device. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=272</id>
		<title>Throttle</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=272"/>
		<updated>2026-04-04T19:45:16Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The throttle controls the motor and is operated by the pilot during sailing. It controls the duty cycle of the motor via the [[CAN-bus|CAN bus]] using the standard VESC message format. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
[[File:Throttle Schematic.png|thumb|Throttle shown in the inactive (green led) neutral position]]&lt;br /&gt;
To use the throttle to control the motor the green illuminated ''arm-button'' will have to be pressed for a few seconds, however some conditions need to be met to ensure a safe start of the motor. &lt;br /&gt;
&lt;br /&gt;
# The ''dead-man cord'' needs to be applied to the bottom of the throttle body, should snap in place magnetically&lt;br /&gt;
# The ''throttle lever'' Should be in its neutral position, pointing straight up with a noticeable tactile bump&lt;br /&gt;
# The [[CAN-bus|CAN bus]] need to be actively acknowledging packets, which means other devices need to be active on the bus&lt;br /&gt;
# No other error should have occurred inside the electronics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If one of these conditions is not met, the throttle will beep the number of times indicated above. &lt;br /&gt;
&lt;br /&gt;
== Programming Throttle Position ==&lt;br /&gt;
The throttle position is read out by a magnet attached tot the ''throttle lever'', because the orientation of this magnet is not know in the firmware, this position can be programmed into the EEPROM. To enter programming mode hold down the arm button during power-on. A four beep descending tone should be played, and the LED should do a double blink in red continuously. To program the throttle push lever as far forward as possible and press the button, a single beep be heard. Repeat this twice with the lever in the center and finally with the lever all the way backwards. After three beeps the throttle is reprogrammed and normal operation is resumed. To summarize:  &lt;br /&gt;
&lt;br /&gt;
# Lever in the forward position  &lt;br /&gt;
# Lever in the center position &lt;br /&gt;
# Lever in de backward position &lt;br /&gt;
#  &lt;br /&gt;
&lt;br /&gt;
If no programming is desired leave the lever alone for 10 seconds and the lever will reboot into normal mode.&lt;br /&gt;
&lt;br /&gt;
== Setting the Control Mode over CAN ==&lt;br /&gt;
The Throttle controls the VESC motodriver at 40Hz messaging rate with the default CAN format implemented inside the VESC. [https://dongilc.gitbook.io/openrobot-inc/tutorials/control-with-can More info on the format.] The throttle supports the following modes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Control Mode !! Configuration Byte Value !! Unit !! Additional data required&lt;br /&gt;
|-&lt;br /&gt;
| Duty Cycle|| 0x00 || Percentage || None lever in the maximum forward position is 100%&lt;br /&gt;
|-&lt;br /&gt;
|Filtered Duty Cycle|| 0x01 || Percentage  || None lever in the maximum forward position is 100% &lt;br /&gt;
|-&lt;br /&gt;
|Current Control || 0x02 || 100mA  || Specify the max current for forward and backwards in two int16_t's&lt;br /&gt;
|-&lt;br /&gt;
|RPM Control || 0x03 || RPM  || Specify the rpm for forward and backwards in two int16_t's &lt;br /&gt;
|-&lt;br /&gt;
|Current Control Relative&lt;br /&gt;
|0x04&lt;br /&gt;
|Percentage&lt;br /&gt;
|None lever in the maximum forward position is 100%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These modes can be send to the throttle when the throttle is off. If the throttle is on the configuration will be ignored. A sound will play when a message is received. The message has to be send to the Throttle address 0x337, same as the reboot command. the format is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Setting the control mode&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || Control type || MSB int16_t  || LSB int16_t|| MSB int16_t  || LSB int16_t&lt;br /&gt;
|-&lt;br /&gt;
| Hardcoded command|| See Table Above || colspan=2 | Max value for lever completely forward || colspan=2 | Same but for backward (Positive for reverse)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example command: ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;69&amp;quot;&amp;gt;&lt;br /&gt;
# duty cycle&lt;br /&gt;
cansend can0 337#AA0000000000&lt;br /&gt;
&lt;br /&gt;
# 120A current control&lt;br /&gt;
cansend can0 337#AA0204B004B0&lt;br /&gt;
&lt;br /&gt;
# relative current control&lt;br /&gt;
cansend can0 337#AA0400000000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Diagnostics messages ==&lt;br /&gt;
The throttle also send out messages to help debugging every 200 ms. It is send on address 0x337 and has the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Diagnostic Purposes&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5 !! Byte 6 !! Byte 7&lt;br /&gt;
|-&lt;br /&gt;
| MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || uint8_t || Error status&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | Filtered lever position, from +512 to -512 || colspan=2 | Raw position reported by the magnetic encoder || colspan=2 | Raw data from the deadmanswitch ADC || Gain that is required to readout the lever position || Enum of current error state. 0x00 is good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If any of the error status bits are set, the throttle is set into IDLE mode and will shut off the motor. The following table shows what the bitfield represents:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Enum Name !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 2 || twiError || See next table for possible values&lt;br /&gt;
|-&lt;br /&gt;
| 3      || noLimitsLoaded || Reading of EEPROM for throttle limits failed&lt;br /&gt;
|-&lt;br /&gt;
| 4      || gainClipping || The Magnetic encoder detected no good magnetic field present&lt;br /&gt;
|-&lt;br /&gt;
| 5      || gainInvalid || The gain value read from the magnetic encoder is beyond the range specified in software&lt;br /&gt;
|-&lt;br /&gt;
| 6      || deadmanMissing || The hall sensor of the deadman-switch doesn't detect a strong enough magnet&lt;br /&gt;
|-&lt;br /&gt;
| 7      || impeadanceHigh || The impeadance of the deadman signal is too high, indicating a bad connection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ TWI error states&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Error name !! Error Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||	TWI_ERROR_NoError              || Indicates that the command completed successfully.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||	TWI_ERROR_BusFault             || A TWI bus fault occurred while attempting to capture the bus. &lt;br /&gt;
|-&lt;br /&gt;
| 2 ||	TWI_ERROR_BusCaptureTimeout    || A timeout occurred whilst waiting for the bus to be ready. &lt;br /&gt;
|-&lt;br /&gt;
| 3 ||	TWI_ERROR_SlaveResponseTimeout || No ACK received at the nominated slave address within the timeout period.&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||	TWI_ERROR_SlaveNotReady        || Slave NAKed the TWI bus START condition. &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||	TWI_ERROR_SlaveNAK             || Slave NAKed whilst attempting to send data to the device. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=271</id>
		<title>Foils</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=271"/>
		<updated>2026-04-02T10:22:32Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The foils of the solar boat is a system that is comprised of the following:&lt;br /&gt;
&lt;br /&gt;
* Wing design&lt;br /&gt;
* Foil assembly&lt;br /&gt;
* [[Autopilot]]&lt;br /&gt;
&lt;br /&gt;
A small overview is given below what any of these signify in the hydrofoils.&lt;br /&gt;
&lt;br /&gt;
== Wing design ==&lt;br /&gt;
[[File:Wing.jpg|thumb|The designed wing to be used on the solar boat.]]&lt;br /&gt;
The wing design is based on the calculation of the airfoil database website: http://airfoiltools.com/plotter/index &lt;br /&gt;
&lt;br /&gt;
From this database an implementation has been made into matlab to tweak some parameters as well as a plot for generating the wing shape. &lt;br /&gt;
&lt;br /&gt;
The matlab scripts are on the [https://git.engineersofinnovation.nl git] and can be found [https://git.engineersofinnovation.nl/matlab-scripts/Hydrofoil_Design here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foil assembly ==&lt;br /&gt;
The foil assembly connects the wing to the foil mast and then to the hull of the boat.&lt;br /&gt;
[[File:Foil assembly.gif|center|thumb|230x230px|Scaled down for showing moving of the foil assembly.]]&lt;br /&gt;
&lt;br /&gt;
== Autopilot ==&lt;br /&gt;
The [[autopilot]] is the control electronics that controls the servos of the foil assembly. This a signal PCB with that measures the angle of the solar boat and adjust accordingly towards keeping the hull above the water.&lt;br /&gt;
&lt;br /&gt;
== Height sensors ==&lt;br /&gt;
We use ultrasonic height sensors for sensing distance between water and our hull. Currently we use cheap A02 RS485 sensors from DYP. &lt;br /&gt;
&lt;br /&gt;
Datasheets can be found https://www.dypcn.com/uploads/A02-Datasheet.pdf and https://www.dypcn.com/uploads/A02-Output-Interfaces.pdf&lt;br /&gt;
&lt;br /&gt;
Data from this sensor is being processed by our RS485 to CAN interface&lt;br /&gt;
&lt;br /&gt;
= CAN Messages =&lt;br /&gt;
All multi-byte values are little-endian. Any state byte not listed maps to &amp;lt;code&amp;gt;Unknown&amp;lt;/code&amp;gt; on the receiver side.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Message&lt;br /&gt;
!CAN ID&lt;br /&gt;
!DLC&lt;br /&gt;
!Byte&lt;br /&gt;
!Field&lt;br /&gt;
!Type&lt;br /&gt;
!Values / Range&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderSetpoint&lt;br /&gt;
|0x010&lt;br /&gt;
|2&lt;br /&gt;
|0–1&lt;br /&gt;
|Setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontLeft&lt;br /&gt;
|0x011&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|distance in mm&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontRight&lt;br /&gt;
|0x012&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|distance in mm&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x013&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|distance in mm&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x014&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|distance in mm&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderStatus&lt;br /&gt;
|0x020&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Uninitialized, 1=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Current setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderCommand&lt;br /&gt;
|0x021&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Command&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Initialize&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=270</id>
		<title>Foils</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=270"/>
		<updated>2026-04-02T08:08:06Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The foils of the solar boat is a system that is comprised of the following:&lt;br /&gt;
&lt;br /&gt;
* Wing design&lt;br /&gt;
* Foil assembly&lt;br /&gt;
* [[Autopilot]]&lt;br /&gt;
&lt;br /&gt;
A small overview is given below what any of these signify in the hydrofoils.&lt;br /&gt;
&lt;br /&gt;
== Wing design ==&lt;br /&gt;
[[File:Wing.jpg|thumb|The designed wing to be used on the solar boat.]]&lt;br /&gt;
The wing design is based on the calculation of the airfoil database website: http://airfoiltools.com/plotter/index &lt;br /&gt;
&lt;br /&gt;
From this database an implementation has been made into matlab to tweak some parameters as well as a plot for generating the wing shape. &lt;br /&gt;
&lt;br /&gt;
The matlab scripts are on the [https://git.engineersofinnovation.nl git] and can be found [https://git.engineersofinnovation.nl/matlab-scripts/Hydrofoil_Design here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foil assembly ==&lt;br /&gt;
The foil assembly connects the wing to the foil mast and then to the hull of the boat.&lt;br /&gt;
[[File:Foil assembly.gif|center|thumb|230x230px|Scaled down for showing moving of the foil assembly.]]&lt;br /&gt;
&lt;br /&gt;
== Autopilot ==&lt;br /&gt;
The [[autopilot]] is the control electronics that controls the servos of the foil assembly. This a signal PCB with that measures the angle of the solar boat and adjust accordingly towards keeping the hull above the water.&lt;br /&gt;
&lt;br /&gt;
== Height sensors ==&lt;br /&gt;
We use ultrasonic height sensors for sensing distance between water and our hull. Currently we use cheap A02 RS485 sensors from DYP. &lt;br /&gt;
&lt;br /&gt;
Datasheets can be found https://www.dypcn.com/uploads/A02-Datasheet.pdf and https://www.dypcn.com/uploads/A02-Output-Interfaces.pdf&lt;br /&gt;
&lt;br /&gt;
Data from this sensor is being processed by our RS485 to CAN interface&lt;br /&gt;
&lt;br /&gt;
= CAN Messages =&lt;br /&gt;
All multi-byte values are little-endian. Any state byte not listed maps to &amp;lt;code&amp;gt;Unknown&amp;lt;/code&amp;gt; on the receiver side.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Message&lt;br /&gt;
!CAN ID&lt;br /&gt;
!DLC&lt;br /&gt;
!Byte&lt;br /&gt;
!Field&lt;br /&gt;
!Type&lt;br /&gt;
!Values / Range&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderSetpoint&lt;br /&gt;
|0x010&lt;br /&gt;
|2&lt;br /&gt;
|0–1&lt;br /&gt;
|Setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontLeft&lt;br /&gt;
|0x011&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontRight&lt;br /&gt;
|0x012&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x013&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x014&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderStatus&lt;br /&gt;
|0x020&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Uninitialized, 1=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Current setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderCommand&lt;br /&gt;
|0x021&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Command&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Initialize&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=269</id>
		<title>Foils</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Foils&amp;diff=269"/>
		<updated>2026-03-31T18:00:18Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The foils of the solar boat is a system that is comprised of the following:&lt;br /&gt;
&lt;br /&gt;
* Wing design&lt;br /&gt;
* Foil assembly&lt;br /&gt;
* [[Autopilot]]&lt;br /&gt;
&lt;br /&gt;
A small overview is given below what any of these signify in the hydrofoils.&lt;br /&gt;
&lt;br /&gt;
== Wing design ==&lt;br /&gt;
[[File:Wing.jpg|thumb|The designed wing to be used on the solar boat.]]&lt;br /&gt;
The wing design is based on the calculation of the airfoil database website: http://airfoiltools.com/plotter/index &lt;br /&gt;
&lt;br /&gt;
From this database an implementation has been made into matlab to tweak some parameters as well as a plot for generating the wing shape. &lt;br /&gt;
&lt;br /&gt;
The matlab scripts are on the [https://git.engineersofinnovation.nl git] and can be found [https://git.engineersofinnovation.nl/matlab-scripts/Hydrofoil_Design here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Foil assembly ==&lt;br /&gt;
The foil assembly connects the wing to the foil mast and then to the hull of the boat.&lt;br /&gt;
[[File:Foil assembly.gif|center|thumb|230x230px|Scaled down for showing moving of the foil assembly.]]&lt;br /&gt;
&lt;br /&gt;
== Autopilot ==&lt;br /&gt;
The [[autopilot]] is the control electronics that controls the servos of the foil assembly. This a signal PCB with that measures the angle of the solar boat and adjust accordingly towards keeping the hull above the water.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CAN Messages =&lt;br /&gt;
All multi-byte values are little-endian. Any state byte not listed maps to &amp;lt;code&amp;gt;Unknown&amp;lt;/code&amp;gt; on the receiver side.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Message&lt;br /&gt;
!CAN ID&lt;br /&gt;
!DLC&lt;br /&gt;
!Byte&lt;br /&gt;
!Field&lt;br /&gt;
!Type&lt;br /&gt;
!Values / Range&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderSetpoint&lt;br /&gt;
|0x010&lt;br /&gt;
|2&lt;br /&gt;
|0–1&lt;br /&gt;
|Setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontLeft&lt;br /&gt;
|0x011&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensorFrontRight&lt;br /&gt;
|0x012&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x013&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|HeightSensor (placement TBD)&lt;br /&gt;
|0x014&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=NotPluggedIn, 1=ModbusError, 2=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Height value&lt;br /&gt;
|u16 LE&lt;br /&gt;
|TBD (raw, unit undecided)&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderStatus&lt;br /&gt;
|0x020&lt;br /&gt;
|3&lt;br /&gt;
|0&lt;br /&gt;
|State&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Uninitialized, 1=Operational, 0xFF=Unknown&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|1–2&lt;br /&gt;
|Current setpoint&lt;br /&gt;
|u16 LE&lt;br /&gt;
|1000–2000&lt;br /&gt;
|-&lt;br /&gt;
|ServoRudderCommand&lt;br /&gt;
|0x021&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|Command&lt;br /&gt;
|u8 enum&lt;br /&gt;
|0=Initialize&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Rudder&amp;diff=260</id>
		<title>Rudder</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Rudder&amp;diff=260"/>
		<updated>2025-11-10T20:43:10Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The motor currently in use in the rudder is the Lehner 30100/12 with a NTC Temp. Sensor (B 25/100 3988 ±1%) installed. There is also a [[Hub Sensor|magnetic encoder]] placed behind the motor.&lt;br /&gt;
&lt;br /&gt;
=== Rudder-controller ===&lt;br /&gt;
To accommodate the new rudder design and its features, a controller is needed. With this controller we want to enable a multiple of functionalities that will help with the integrate cooling system and the control of the back-foil.&lt;br /&gt;
&lt;br /&gt;
The design should therefore have the following requirements:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Requirements for the rudder-controller&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Electrical connections&lt;br /&gt;
|-&lt;br /&gt;
|Power&lt;br /&gt;
|Power will be coming from the [[CAN-bus]]&lt;br /&gt;
It is important that the inrush of the connected motors must not decrease the [[CAN-bus]] voltage.&lt;br /&gt;
|4-pins connector that hosts the [[CAN-bus]] and Power&lt;br /&gt;
|-&lt;br /&gt;
|Communication&lt;br /&gt;
|The board will use the [[CAN-bus]] to communicate and retrieve commands&lt;br /&gt;
|4-pins connector that hosts the [[CAN-bus]] and Power&lt;br /&gt;
|-&lt;br /&gt;
|Back-foil control&lt;br /&gt;
|A TMC2209 or comparable is needed that supports [https://www.analog.com/en/lp/001/building-better-stepper-motor-system.html StallGuard™]&lt;br /&gt;
|Available on the platform connected to the back-foil motor&lt;br /&gt;
|-&lt;br /&gt;
|Back-foil motor&lt;br /&gt;
|The [https://www.omc-stepperonline.com/nema-11-stepper-l-31mm-w-rear-shaft-gear-ratio-14-1-planetary-gearbox-11hs12-0674d-pg14 Nema 11 Stepper motor] fits the rudder design to control the back-foil.&lt;br /&gt;
|4-pins connector for power and control&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Connection information&lt;br /&gt;
!Color&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|Red&lt;br /&gt;
|B+&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|A+&lt;br /&gt;
|-&lt;br /&gt;
|Blue&lt;br /&gt;
|B-&lt;br /&gt;
|-&lt;br /&gt;
|Green&lt;br /&gt;
|A-&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|Water pump &lt;br /&gt;
|The available waterpump: [https://nl.aliexpress.com/i/32870145384.html ZC-A210](24 V version)&lt;br /&gt;
|2-pins connector &lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Connection information&lt;br /&gt;
!Color&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|Red&lt;br /&gt;
|24v&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|GND&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|Flowmeter&lt;br /&gt;
|We have 2 flowmeters for inlet and outlet: [https://nl.aliexpress.com/item/1005006813605315.html?gatewayAdapt=glo2nld#nav-specification DWS-MH-02]&lt;br /&gt;
|6-pins connector &lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Connection information&lt;br /&gt;
!Color&lt;br /&gt;
!Function&lt;br /&gt;
|-&lt;br /&gt;
|Red&lt;br /&gt;
|5-24v&lt;br /&gt;
|-&lt;br /&gt;
|Black&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|Green&lt;br /&gt;
|50k Temp&lt;br /&gt;
|-&lt;br /&gt;
|Yellow&lt;br /&gt;
|Pulse out&lt;br /&gt;
|-&lt;br /&gt;
|Red and Blue&lt;br /&gt;
|TDS sensor&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|Platform&lt;br /&gt;
|Right now(10-11-2025) the [https://www.duet3d.com/duet3toolboard1lc Duet 3 1LC] is available to use for prototyping.&lt;br /&gt;
Other options are [https://www.amazon.nl/-/en/BIGTREETECH-EBB-36-communication-STM32G0B1CBT6/dp/B0B1JBH8R5?dib=eyJ2IjoiMSJ9.u31ykTjqWpKnziWf-HlcFHPpjlpjFLlMqEGFS3VpEFoPMYB-ntfAoEM9qNUGVXtrwW3rHJDEbeMY6RI2Lnt_Jtbu8Ol-uZWBKFFmNuOY6nmBhfIGwyNLOpUkqAEEaxYpMGk7qOkz7OW_7PpcIhFg62Eqz-3x8XMlKipaq8vMtd6wiodByGlve9HrpBM9C38kSyzMRwFGneHUDJH7guP-7ENePjKpuOrLC7x83iRWhyoga6SRJgVPjpXohVvbPL6_Za6mVcNkD2xQyB3WFCoZoBKtCA469K9urtnIuDb5imU.4tJLo0B2n2WNGx17gcoOJ0Y6ITTdpQukln7ZNMG0YR8&amp;amp;dib_tag=se&amp;amp;keywords=ebb36&amp;amp;qid=1762803999&amp;amp;sr=8-1&amp;amp;th=1 EBB 36] and [https://mellow.klipper.cn/en/docs/ProductDoc/ToolBoard/fly-sht36/sht36/ SHT36 with TMC2209]&lt;br /&gt;
|Host listed connections above.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=245</id>
		<title>MPPT</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=245"/>
		<updated>2025-06-02T14:56:49Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Maximum Power Point Trackers (MPPT) are the abdomens of the SolarBoat (BoII) that gives the battery juice from the solar panels.&lt;br /&gt;
&lt;br /&gt;
The MPPTs are self made, where the hardware can be found on the altium365 [https://engineers-of-innovation.365.altium.com workspace] and the software on [https://git.engineersofinnovation.nl/boat-fw/mppt-software Git].&lt;br /&gt;
&lt;br /&gt;
== What is a MPPT? ==&lt;br /&gt;
A MPPT (Maximum Power Point Tracker) is a device that ensures that a solar panel is used at the most efficient point of its I-V curve. The I-V curve of a solar panel can be redrawn into an P-V curve by summing the voltage and current, resulting in the voltage at which the panel generates the most power. Because the output of the MPPT is connected to a battery (which is a very constant voltage source) any adjustments in the dutycycle of the MPPT influence the voltage over the solar panel, making it possible to steer the panel towards its maximum power point.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
[[File:2023-07-17 Updated MPPTS WHITEBG.png|thumb|815x815px|Deck layout with corresponding MPPTs ID per panel.]]&lt;br /&gt;
There are probably 8 MPPT PCBs in total. Where 4 are used in the current SolarBoat. The picture on the right shows the layout of the solar panels with the corresponding MPPTs.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!MPPT&lt;br /&gt;
!ID&lt;br /&gt;
!State&lt;br /&gt;
!Notes:&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|Reseve&lt;br /&gt;
|Channel 3 broken&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|In boat&lt;br /&gt;
|Second&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|In boat&lt;br /&gt;
|Third&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|In boat&lt;br /&gt;
|Most forward (Channel 1 not used)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|In boat&lt;br /&gt;
|Forth, Channel 1 broken(LTC4444) &lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|Reserve&lt;br /&gt;
|Diodes of buck broken&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|7&lt;br /&gt;
|Reserve&lt;br /&gt;
|Harvested for donor componends&lt;br /&gt;
|}&lt;br /&gt;
Note: Most reward position not populated ATM!&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=244</id>
		<title>MPPT</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=244"/>
		<updated>2025-06-02T14:56:09Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Maximum Power Point Trackers (MPPT) are the abdomens of the SolarBoat (BoII) that gives the battery juice from the solar panels.&lt;br /&gt;
&lt;br /&gt;
The MPPTs are self made, where the hardware can be found on the altium365 [https://engineers-of-innovation.365.altium.com workspace] and the software on [https://git.engineersofinnovation.nl/boat-fw/mppt-software Git].&lt;br /&gt;
&lt;br /&gt;
== What is a MPPT? ==&lt;br /&gt;
A MPPT (Maximum Power Point Tracker) is a device that ensures that a solar panel is used at the most efficient point of its I-V curve. The I-V curve of a solar panel can be redrawn into an P-V curve by summing the voltage and current, resulting in the voltage at which the panel generates the most power. Because the output of the MPPT is connected to a battery (which is a very constant voltage source) any adjustments in the dutycycle of the MPPT influence the voltage over the solar panel, making it possible to steer the panel towards its maximum power point.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
[[File:2023-07-17 Updated MPPTS WHITEBG.png|thumb|815x815px|Deck layout with corresponding MPPTs ID per panel.]]&lt;br /&gt;
There are probably 8 MPPT PCBs in total. Where 4 are used in the current SolarBoat. The picture on the right shows the layout of the solar panels with the corresponding MPPTs.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!MPPT&lt;br /&gt;
!ID&lt;br /&gt;
!State&lt;br /&gt;
!Notes:&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|Reseve&lt;br /&gt;
|Channel 3 broken&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|In boat&lt;br /&gt;
|Second&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|In boat&lt;br /&gt;
|Third&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|In boat&lt;br /&gt;
|Most forward (Channel 1 not used)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|In boat&lt;br /&gt;
|Forth Channel 1 broken(LTC4444) &lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|Reserve&lt;br /&gt;
|Diodes of buck broken&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|7&lt;br /&gt;
|Reserve&lt;br /&gt;
|Harvested for donor componends&lt;br /&gt;
|}&lt;br /&gt;
Note: Most reward position not populated ATM!&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=243</id>
		<title>MPPT</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=MPPT&amp;diff=243"/>
		<updated>2025-06-02T14:50:30Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Maximum Power Point Trackers (MPPT) are the abdomens of the SolarBoat (BoII) that gives the battery juice from the solar panels.&lt;br /&gt;
&lt;br /&gt;
The MPPTs are self made, where the hardware can be found on the altium365 [https://engineers-of-innovation.365.altium.com workspace] and the software on [https://git.engineersofinnovation.nl/boat-fw/mppt-software Git].&lt;br /&gt;
&lt;br /&gt;
== What is a MPPT? ==&lt;br /&gt;
A MPPT (Maximum Power Point Tracker) is a device that ensures that a solar panel is used at the most efficient point of its I-V curve. The I-V curve of a solar panel can be redrawn into an P-V curve by summing the voltage and current, resulting in the voltage at which the panel generates the most power. Because the output of the MPPT is connected to a battery (which is a very constant voltage source) any adjustments in the dutycycle of the MPPT influence the voltage over the solar panel, making it possible to steer the panel towards its maximum power point.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
[[File:2023-07-17 Updated MPPTS WHITEBG.png|thumb|815x815px|Deck layout with corresponding MPPTs ID per panel.]]&lt;br /&gt;
There are probably 8 MPPT PCBs in total. Where 4 are used in the current SolarBoat. The picture on the right shows the layout of the solar panels with the corresponding MPPTs.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!MPPT&lt;br /&gt;
!ID&lt;br /&gt;
!State&lt;br /&gt;
!Notes:&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|3&lt;br /&gt;
|Reseve&lt;br /&gt;
|Channel 3 broken&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|5&lt;br /&gt;
|In boat&lt;br /&gt;
|Second&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|In boat&lt;br /&gt;
|Third&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|In boat&lt;br /&gt;
|Most forward (Channel 1 not used)&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|3&lt;br /&gt;
|In boat&lt;br /&gt;
|Channel 1 broken(LTC4444) &lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|1&lt;br /&gt;
|Reserve&lt;br /&gt;
|Diodes of buck broken&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|7&lt;br /&gt;
|Reserve&lt;br /&gt;
|Harvested for donor componends&lt;br /&gt;
|}&lt;br /&gt;
Note: Most reward position not populated ATM!&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Datalogger&amp;diff=229</id>
		<title>Datalogger</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Datalogger&amp;diff=229"/>
		<updated>2025-05-03T21:46:39Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added GNSS can messages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The datalogger is a PCB that stores the [[CAN-bus]] data and shows the data on-screen and sends this data to one of the [[Linux servers|EoI-servers]].&lt;br /&gt;
&lt;br /&gt;
The datalogger is quite complex since it is an embedded Linux platform as well as a screen. The embedded platform makes use of a root file system. Compiling of this file system and any modifications are discussed below.&lt;br /&gt;
&lt;br /&gt;
The screen makes use of cross-compiling QT and is on itself quite the big project for compiling and modifying the generated [[Dashboard|GUI]] for the screen. Therefore one can read more about this topic at [[QT Creator Setup|QT Creator Setup.]]&lt;br /&gt;
&lt;br /&gt;
== Datalogs format ==&lt;br /&gt;
As of October '22 the datalogger [[Dashboard|GUI]] is accessing the [[CAN-bus]] data and creating the logfiles and writing them onto its filesystem. The delimiter of the logfile format is a space, this is done to support the http://www.gnuplot.info/ software. This should probably be delimited with a comma or something else.&lt;br /&gt;
&lt;br /&gt;
A snipped of a logfile is given below:&amp;lt;pre&amp;gt;2022-08-27-09-46-55 807280 47.8 -25.4 3.09 28.5 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-56 807530 47.8 -24.9 3.09 28 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-56 807680 47.8 -24.9 3.45 28.3 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-57 807910 47.8 -25.9 3.29 29.2 96 3.99 32.6411 -16.9089 15.2 261 &lt;br /&gt;
2022-08-27-09-46-57 808090 47.8 -26.2 2.98 29.2 96 3.99 32.6411 -16.9089 15.2 261 &lt;br /&gt;
2022-08-27-09-46-58 808340 47.8 -25.9 3.4 29.4 96 3.99 32.6411 -16.9089 15.2 260 &lt;br /&gt;
2022-08-27-09-46-58 808560 47.8 -24.9 2.98 27.9 96 3.99 32.6411 -16.9089 15.2 260 &lt;br /&gt;
2022-08-27-09-46-59 808740 47.8 -26 3.02 29 96 3.99 32.6411 -16.909 15.2 261&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Date and Time&lt;br /&gt;
!Time since start&lt;br /&gt;
!Battery voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current netto &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current in &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current out &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!SoC &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Highest cell voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
!GPS latitude&lt;br /&gt;
!GPS longitude&lt;br /&gt;
!GPS speed &amp;lt;code&amp;gt;[km/h]&amp;lt;/code&amp;gt;&lt;br /&gt;
!GPS track&lt;br /&gt;
|-&lt;br /&gt;
|2022-08-27-09-46-55&lt;br /&gt;
|807280&lt;br /&gt;
|47.8&lt;br /&gt;
| -25.4&lt;br /&gt;
|3.09&lt;br /&gt;
|28.5&lt;br /&gt;
|96&lt;br /&gt;
|3.99&lt;br /&gt;
|32.6411&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-16.9088&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|15.2&lt;br /&gt;
|261&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Rootfs ==&lt;br /&gt;
The datalogger uses a Debian 10 root file system (rootfs), this page walks you through the steps of setting this up and making modifications.&lt;br /&gt;
&lt;br /&gt;
This process has been automated, this is described in the datalogger rootfs repository https://git.engineersofinnovation.nl/datalogger/rootfs&lt;br /&gt;
&lt;br /&gt;
If you'd like do all the steps manually by all means, please continue reading.&lt;br /&gt;
&lt;br /&gt;
=== Creating a Debian filesystem ===&lt;br /&gt;
To  create  a  filesystem  we  use debootstrap. This guide has been tested on Ubuntu 18.04 and Debian 10 Host machines.&lt;br /&gt;
&lt;br /&gt;
==== 1. Install the required dependencies ====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install debootstrap qemu-user-static binfmt-support&amp;lt;/code&amp;gt;&lt;br /&gt;
====2. Create a new directory 'debian-fs' and enter it====&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir ~/Documents/Datalogger/rootfs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~/Documents/Datalogger/rootfs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====3. run the first stage bootstrap====&lt;br /&gt;
&amp;lt;code&amp;gt;debootstrap --no-check-gpg --arch=armhf --foreign --include apt,kmod,lsof,ssh,wget,dialog buster rootfs &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====4. set up emulation by copying the qemu executable====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cp ./qemu-arm-static rootfs/usr/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====5. run the second stage debootstrap ====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chroot rootfs /debootstrap/debootstrap --second-stage&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====6. Configure the rootfs for your board, run the following script====&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;!/bin/sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Modification from acmesystems acqua.sh, please visit their website for great documentation! (acmesystems.it)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Directory contains the target rootfs&lt;br /&gt;
&lt;br /&gt;
TARGET_ROOTFS_DIR=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Board hostname&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/hostname&lt;br /&gt;
&lt;br /&gt;
echo eoi-datalogger &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bashrc user/hostname color (optional)&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;PS1='\${debian_chroot:+(\$debian_chroot)}\[\033[01;96m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '&amp;quot; &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Default name servers&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
echo nameserver 8.8.8.8 &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo nameserver 8.8.4.4 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Default network interfaces&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;echo auto eth0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo allow-hotplug eth0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo iface eth0 inet dhcp &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo hwaddress ether 00:04:25:12:34:56 &amp;gt;&amp;gt; $filename    #eth0 MAC address&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo auto wlan0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo iface wlan0 inet dhcp &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo wireless-essid any &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo post-down killall -q wpa_supplicant &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; configure Wi-Fi AP&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/wpa_supplicant.conf&lt;br /&gt;
&lt;br /&gt;
touch $filename&lt;br /&gt;
&lt;br /&gt;
echo ctrl_interface=/var/run/wpa_supplicant &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo ap_scan=1 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo network={ &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo 'ssid=&amp;quot;testnaam&amp;quot;' &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo 'psk=&amp;quot;testtest&amp;quot;' &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo } &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Set the the debug port&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/inittab&lt;br /&gt;
&lt;br /&gt;
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Set rules to change wlan dongles&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
echo SUBSYSTEM=='&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;*&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;wlan*&amp;quot;, NAME=&amp;quot;wlan0&amp;quot;' &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; microSD partitions mounting&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo /dev/mmcblk0p1 /boot vfat noatime 0 1 &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo /dev/mmcblk0p2 / ext4 noatime 0 1 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo proc /proc proc defaults 0 0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Add the standard Debian non-free repositories useful to load&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; closed source firmware (i.e. WiFi dongle firmware)&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
echo deb &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt; buster main contrib non-free &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo deb-src &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt; buster main contrib non-free &amp;gt;&amp;gt; $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====7. Install required packages ====&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y net-tools udev iputils-ping ifupdown isc-dhcp-client ca-certificates wpasupplicant firmware-ralink wvdial iw resolvconf libssl-dev ppp autossh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y locales adduser nano usbutils can-utils i2c-tools git fonts-dejavu gpsd gpsd-clients libqgpsmm-dev libqgpsmm23 minicom picocom python3 python3-pip python3-numpy libsocketcan-dev psmisc moreutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libegl1-mesa libegl1-mesa-dev libgles2-mesa-dev mesa-common-dev mesa-utils libgbm-dev libgbm1 libbz2-dev libdrm-dev libgles2-mesa&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y qt5-default qtdeclarative5-* qml-module-qtquick* qml-module-qtquick2 qtquickcontrols5-* qtserialbus5-* qttools5-* qtbase5-* libqt5svg5-* libqtwebkit-* qtmultimedia5-* qmlscene qml gstreamer1.0-omx libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt build-dep qt4-x11 -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt build-dep libqt5gui5 -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====8. set a root password====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chroot rootfs passwd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 9. remove the qemu binary====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo rm rootfs/usr/bin/qemu-arm-static&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====10. download and apply the patchfiles====&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/ssh_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/ssh_patch_client.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/gpsd_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/4g_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/ssh_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/ssh_patch_client.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/gpsd_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/4g_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====11. Other stuff====&lt;br /&gt;
PPP setup?&lt;br /&gt;
&lt;br /&gt;
https://github.com/sixfab/Sixfab_PPP_Installer&lt;br /&gt;
&lt;br /&gt;
Daemons and services for gui and other scripts?&lt;br /&gt;
&lt;br /&gt;
== CAN bus ID Overview ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
0x100 EoI Battery start&lt;br /&gt;
0x10F EoI Battery end&lt;br /&gt;
&lt;br /&gt;
0x200 EoI GNNS info, u8 fix (bool); u8 sats; u8 sats used &lt;br /&gt;
0x201 EoI GNNS f32 speed, kmh; f32 direction, degrees&lt;br /&gt;
0x202 EoI GNNS f64 Latitude, degrees&lt;br /&gt;
0x203 EoI GNNS f64 Longitude, degrees&lt;br /&gt;
0x204 EoI GNNS date time, u16 year, u8 month, u8 day, u8 hour, u8 minute, u8 second&lt;br /&gt;
&lt;br /&gt;
0x302 MG Battery &lt;br /&gt;
0x402 MG Battery&lt;br /&gt;
0x482 MG Battery cell voltage&lt;br /&gt;
&lt;br /&gt;
0x700 MPPT start&lt;br /&gt;
0x77F MPPT end&lt;br /&gt;
&lt;br /&gt;
0x0900 THROTTLE To VESC&lt;br /&gt;
0x1337 THROTTLE Status&lt;br /&gt;
&lt;br /&gt;
0x0909 VESC Status message 1&lt;br /&gt;
0x0E09 VESC Status message 2&lt;br /&gt;
0x0F09 VESC Status message 3&lt;br /&gt;
0x1009 VESC Status message 4&lt;br /&gt;
0x1B09 VESC Status message 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=222</id>
		<title>Throttle</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Throttle&amp;diff=222"/>
		<updated>2024-10-07T18:44:22Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: /* Setting the Control Mode over CAN */ Off by one error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The throttle controls the motor and is operated by the pilot during sailing. It controls the duty cycle of the motor via the CAN bus using the standard VESC message format. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
[[File:Throttle Schematic.png|thumb|Throttle shown in the inactive (green led) neutral position]]&lt;br /&gt;
To use the throttle to control the motor the green illuminated ''arm-button'' will have to be pressed for a few seconds, however some conditions need to be met to ensure a safe start of the motor. &lt;br /&gt;
&lt;br /&gt;
# The ''dead-man cord'' needs to be applied to the bottom of the throttle body, should snap in place magnetically&lt;br /&gt;
# The ''throttle lever'' Should be in its neutral position, pointing straight up with a noticeable tactile bump&lt;br /&gt;
# The CAN bus need to be actively acknowledging packets, which means other devices need to be active on the bus&lt;br /&gt;
# No other error should have occurred inside the electronics&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If one of these conditions is not met, the throttle will beep the number of times indicated above. &lt;br /&gt;
&lt;br /&gt;
== Programming Throttle Position ==&lt;br /&gt;
The throttle position is read out by a magnet attached tot the ''throttle lever'', because the orientation of this magnet is not know in the firmware, this position can be programmed into the EEPROM. To enter programming mode hold down the arm button during power-on. A four beep descending tone should be played, and the LED should do a double blink in red continuously. To program the throttle push lever as far forward as possible and press the button, a single beep be heard. Repeat this twice with the lever in the center and finally with the lever all the way backwards. After three beeps the throttle is reprogrammed and normal operation is resumed. To summarize:  &lt;br /&gt;
&lt;br /&gt;
# Lever in the forward position  &lt;br /&gt;
# Lever in the center position &lt;br /&gt;
# Lever in de backward position &lt;br /&gt;
#  &lt;br /&gt;
&lt;br /&gt;
If no programming is desired leave the lever alone for 10 seconds and the lever will reboot into normal mode.&lt;br /&gt;
&lt;br /&gt;
== Setting the Control Mode over CAN ==&lt;br /&gt;
The Throttle controls the VESC motodriver at 10Hz messaging rate with the default CAN format implemented inside the VESC. [https://dongilc.gitbook.io/openrobot-inc/tutorials/control-with-can More info on the format.] The throttle supports four modes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Control Mode !! Configuration Byte Value !! Unit !! Additional data required&lt;br /&gt;
|-&lt;br /&gt;
| Duty Cycle|| 0x00 || Percentage || None lever in the maximum forward position is 100%&lt;br /&gt;
|-&lt;br /&gt;
|Filtered Duty Cycle|| 0x01 || Percentage  || None lever in the maximum forward position is 100% &lt;br /&gt;
|-&lt;br /&gt;
|Current Control || 0x02 || 100mA  || Specify the max current for forward and backwards in two int16_t's&lt;br /&gt;
|-&lt;br /&gt;
|RPM Control || 0x03 || RPM  || Specify the rpm for forward and backwards in two int16_t's &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These modes can be send to the throttle when the throttle is off. If the throttle is on the configuration will be ignored. A sound will play when a message is received. The message has to be send to the Throttle address 0x337, same as the reboot command. the format is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Setting the control mode&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || Control type || MSB int16_t  || LSB int16_t|| MSB int16_t  || LSB int16_t&lt;br /&gt;
|-&lt;br /&gt;
| Hardcoded command|| See Table Above || colspan=2 | Max value for lever completely forward || colspan=2 | Same but for backward (Positive for reverse)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example command: ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;69&amp;quot;&amp;gt;&lt;br /&gt;
cansend can2 337#AA0000000000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CAN Diagnostics messages ==&lt;br /&gt;
The throttle also send out messages to help debugging every 200 ms. It is send on address 0x337 and has the following format:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Can Message for Diagnostic Purposes&lt;br /&gt;
|-&lt;br /&gt;
! Byte 0 !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! Byte 5 !! Byte 6 !! Byte 7&lt;br /&gt;
|-&lt;br /&gt;
| MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || MSB int16_t  || LSB int16_t || uint8_t || Error status&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 | Filtered lever position, from +512 to -512 || colspan=2 | Raw position reported by the magnetic encoder || colspan=2 | Raw data from the deadmanswitch ADC || Gain that is required to readout the lever position || Enum of current error state. 0x00 is good&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If any of the error status bits are set, the throttle is set into IDLE mode and will shut off the motor. The following table shows what the bitfield represents:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Different control modes of the throttle&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Enum Name !! Explanation&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 2 || twiError || See next table for possible values&lt;br /&gt;
|-&lt;br /&gt;
| 3      || noLimitsLoaded || Reading of EEPROM for throttle limits failed&lt;br /&gt;
|-&lt;br /&gt;
| 4      || gainClipping || The Magnetic encoder detected no good magnetic field present&lt;br /&gt;
|-&lt;br /&gt;
| 5      || gainInvalid || The gain value read from the magnetic encoder is beyond the range specified in software&lt;br /&gt;
|-&lt;br /&gt;
| 6      || deadmanMissing || The hall sensor of the deadman-switch doesn't detect a strong enough magnet&lt;br /&gt;
|-&lt;br /&gt;
| 7      || impeadanceHigh || The impeadance of the deadman signal is too high, indicating a bad connection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ TWI error states&lt;br /&gt;
|-&lt;br /&gt;
! Value !! Error name !! Error Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||	TWI_ERROR_NoError              || Indicates that the command completed successfully.&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||	TWI_ERROR_BusFault             || A TWI bus fault occurred while attempting to capture the bus. &lt;br /&gt;
|-&lt;br /&gt;
| 2 ||	TWI_ERROR_BusCaptureTimeout    || A timeout occurred whilst waiting for the bus to be ready. &lt;br /&gt;
|-&lt;br /&gt;
| 3 ||	TWI_ERROR_SlaveResponseTimeout || No ACK received at the nominated slave address within the timeout period.&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||	TWI_ERROR_SlaveNotReady        || Slave NAKed the TWI bus START condition. &lt;br /&gt;
|-&lt;br /&gt;
| 5 ||	TWI_ERROR_SlaveNAK             || Slave NAKed whilst attempting to send data to the device. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Motordriver&amp;diff=221</id>
		<title>Motordriver</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Motordriver&amp;diff=221"/>
		<updated>2024-09-11T11:00:43Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added dimentions to backup motor driver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Our new boat will be powered with a BLDC (brushless direct current) motor motor instead of a brushed motor, which will make the drivetrain more efficient. This will require a new, more complicated, controller. Efficiency is the most important factor in this design, not only because of the limited power of the solar panels, but an efficient motor controller also produces less heat which ensures easier cooling techniques.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Because the motor (driver) is primarily used during the Solar Sport One (SSO) races, they should comply with their regulations (Link)&lt;br /&gt;
&lt;br /&gt;
To reduce the development time spent on the embedded software, the motor driver was made compatible with the VESC BLDC driver software project. This software can do sensorless field-oriented control (FOC) with minimal development effort. All specifications of the motor driver are summarized below:&lt;br /&gt;
&lt;br /&gt;
* VESC compatible hardware&lt;br /&gt;
* As efficient as possible; &amp;gt;99.5% at around 1kW of motor power&lt;br /&gt;
* Up to 5kW with minimal cooling&lt;br /&gt;
* Max power up to 15kW&lt;br /&gt;
* Modular design for easier future updates&lt;br /&gt;
* Fully isolated data interfaces&lt;br /&gt;
* Upgrade path for more advanced motor control (FPGA)&lt;br /&gt;
* Input power between 32.5 and 58 V DC, 48 V DC nom.&lt;br /&gt;
* High ambient temperature est. 70° C&lt;br /&gt;
* Interface communication&lt;br /&gt;
** CANbus&lt;br /&gt;
** UART, for debugging purposes&lt;br /&gt;
&lt;br /&gt;
== Power stage ==&lt;br /&gt;
The most important part of the design for efficiency are the MOSFETs driving the motor, and is therefore the starting point of the design. MOSFETs were chosen on a figure of merit (FOM) based on their on-resistance RDS(on) over their Gate charge QG. This list of devices is dominated by GaN-based transistors, the top contenders of which were included in more sophisticated losses estimation.&lt;br /&gt;
&lt;br /&gt;
GaN FETs have slightly different power loss parameters than conventional silicon MOSFETs as there is no body diode present in the semiconductor structure, which means there are no reverse recovery losses, something that is a significant loss especially for large and fast switching devices. The rest of the power losses are quite similar and were calculated for the FETs with the highest FOM. An example of the power loss for four parallel EPC2218s, in a three-phase bridge configuration, is shown in the pie chart below.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111532 Pie.png|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
While this efficiency is quite good, a problem with cooling these small power MOSFETs at higher powers is foreseen. To reduce the losses and spread the heat out over a larger surface area, a configurable power-stage was implemented which can switch between 4 and 8 parallel devices. Efficiency calculations of both implementations are plotted below.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111547 Eff.png|center|frameless|1000x1000px|[[File:2109111551 per-FET.png|center|frameless|1000x1000px]]]]&lt;br /&gt;
&lt;br /&gt;
And while the difference in efficiency seems quite small between the two implementations, the real benefit comes when the power dissipation per MOSFET, and thus the ease of cooling, is plotted.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111551 per-FET.png|center|frameless|1000x1000px]]&lt;br /&gt;
&lt;br /&gt;
At high powers about one third of the cooling per FET is required by switching to the 16-FET per bridge configuration.&lt;br /&gt;
&lt;br /&gt;
== Power Circuit Layout ==&lt;br /&gt;
GaN FETs also have the potential for very high switching speeds and low dead-time , which in turn increases the efficiency. These factors however are highly dependent on parasitic inductance and thus the layout of the power-stage is of utmost importance. The image below shows two parallel low-side and two parallel high-side MOSFETS with their ceramic decoupling capacitors.&lt;br /&gt;
[[File:Layout inductance overview.png|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
The low inductance layout used is based around reducing magnetic field loop area (in gray) as much as possible, this is achieved by interleaving opposite current paths and making sure current return paths flow on adjacent layers.&lt;br /&gt;
&lt;br /&gt;
Eurocircuits is the perfect assembler for these boards, as their impressive 0.125 mm clearance on 60 um (2 OZ) thick copper is impossible to get at other poolable PCB services. This with small 0.4mm vias make sure that both the DC resistance and the parasitic inductance can be as low as possible.&lt;br /&gt;
&lt;br /&gt;
The rest of the layout consists of a double mirror-symmetric set of 8 MOSFETS with the low-side FETs near the driver, which is positioned in the middle, the switching layout with all four layers can be seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:PCB Animated right.webp|center|frameless|1000x1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The final layout shown below consists of one phase per PCB with large copper planes to accept 10mm copper busbar, the far end has a connection point for a single motor wire. The near end has a right-angle connector to connect back up to the controller PCB.&lt;br /&gt;
[[File:Phase-scaled.jpg|thumb|Single GaN half bridge with 16 MOSFETs]]&lt;br /&gt;
&lt;br /&gt;
== Controller ==&lt;br /&gt;
The heart of the logic is situated on the controller board shown below. It is based around an STM32, which is used to run the embedded software from the VESC project. The supported communication protocols are CAN and RS485. The three GaN phases are connected as shown at the top of the image. An FPGA is present to process the incoming delta-sigma current signals for controlling the phases.&lt;br /&gt;
[[File:Controller.jpg|thumb|Controller PCB of the motordriver]]&lt;br /&gt;
&lt;br /&gt;
== Electrolytic Capacitor mount ==&lt;br /&gt;
To have the decoupling capacitors as close to the switching action as possible, they are mounted on top of the copper busbars running past all the phases as shown below.  Their PCB layout is symmetrical on top and bottom so that the board can be flipped to accommodate both sides of the Phase-PCB. The mounting holes on these PCBs are there to potentially accommodate heat sinks for better heat dissipation.&lt;br /&gt;
[[File:Image029.jpg|center|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Current Sensors ==&lt;br /&gt;
The Current sensors use an external large sense resistor, as temperature swings would decrease the accuracy of PCB mount shunt resistors. The current sensor boards consist of a simple analogue current shunt amplifier feeding back analogue signals directly to the MCU. These amplifiers, however, have a hard time dealing with the large common mode jumps seen at the output of the motor driver. A future proof solution to this is an isolated delta sigma ADC which digitizes the shunt voltage directly, this requires some signal processing on the FPGA which will be added in future software implementation.&lt;br /&gt;
&lt;br /&gt;
[[File:Current Shunt-scaled.jpg|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
The git repo can be found on Gitlab&lt;br /&gt;
&lt;br /&gt;
== Backup motor driver ==&lt;br /&gt;
Our backup motor driver is the [https://trampaboards.com/1x-vesc-75v-300a-black-anodised-non-conductive-cnc-housing--375-each-p-26627.html Trampa VESC 75V 300A] data sheet can be found [https://trampaboards.com/resources/manuals/256.pdf here] and [https://trampaboards.com/resources/manuals/267.pdf here]&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Motordriver&amp;diff=217</id>
		<title>Motordriver</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Motordriver&amp;diff=217"/>
		<updated>2024-05-08T10:07:06Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added backup motor driver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Our new boat will be powered with a BLDC (brushless direct current) motor motor instead of a brushed motor, which will make the drivetrain more efficient. This will require a new, more complicated, controller. Efficiency is the most important factor in this design, not only because of the limited power of the solar panels, but an efficient motor controller also produces less heat which ensures easier cooling techniques.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
Because the motor (driver) is primarily used during the Solar Sport One (SSO) races, they should comply with their regulations (Link)&lt;br /&gt;
&lt;br /&gt;
To reduce the development time spent on the embedded software, the motor driver was made compatible with the VESC BLDC driver software project. This software can do sensorless field-oriented control (FOC) with minimal development effort. All specifications of the motor driver are summarized below:&lt;br /&gt;
&lt;br /&gt;
* VESC compatible hardware&lt;br /&gt;
* As efficient as possible; &amp;gt;99.5% at around 1kW of motor power&lt;br /&gt;
* Up to 5kW with minimal cooling&lt;br /&gt;
* Max power up to 15kW&lt;br /&gt;
* Modular design for easier future updates&lt;br /&gt;
* Fully isolated data interfaces&lt;br /&gt;
* Upgrade path for more advanced motor control (FPGA)&lt;br /&gt;
* Input power between 32.5 and 58 V DC, 48 V DC nom.&lt;br /&gt;
* High ambient temperature est. 70° C&lt;br /&gt;
* Interface communication&lt;br /&gt;
** CANbus&lt;br /&gt;
** UART, for debugging purposes&lt;br /&gt;
&lt;br /&gt;
== Power stage ==&lt;br /&gt;
The most important part of the design for efficiency are the MOSFETs driving the motor, and is therefore the starting point of the design. MOSFETs were chosen on a figure of merit (FOM) based on their on-resistance RDS(on) over their Gate charge QG. This list of devices is dominated by GaN-based transistors, the top contenders of which were included in more sophisticated losses estimation.&lt;br /&gt;
&lt;br /&gt;
GaN FETs have slightly different power loss parameters than conventional silicon MOSFETs as there is no body diode present in the semiconductor structure, which means there are no reverse recovery losses, something that is a significant loss especially for large and fast switching devices. The rest of the power losses are quite similar and were calculated for the FETs with the highest FOM. An example of the power loss for four parallel EPC2218s, in a three-phase bridge configuration, is shown in the pie chart below.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111532 Pie.png|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
While this efficiency is quite good, a problem with cooling these small power MOSFETs at higher powers is foreseen. To reduce the losses and spread the heat out over a larger surface area, a configurable power-stage was implemented which can switch between 4 and 8 parallel devices. Efficiency calculations of both implementations are plotted below.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111547 Eff.png|center|frameless|1000x1000px|[[File:2109111551 per-FET.png|center|frameless|1000x1000px]]]]&lt;br /&gt;
&lt;br /&gt;
And while the difference in efficiency seems quite small between the two implementations, the real benefit comes when the power dissipation per MOSFET, and thus the ease of cooling, is plotted.&lt;br /&gt;
&lt;br /&gt;
[[File:2109111551 per-FET.png|center|frameless|1000x1000px]]&lt;br /&gt;
&lt;br /&gt;
At high powers about one third of the cooling per FET is required by switching to the 16-FET per bridge configuration.&lt;br /&gt;
&lt;br /&gt;
== Power Circuit Layout ==&lt;br /&gt;
GaN FETs also have the potential for very high switching speeds and low dead-time , which in turn increases the efficiency. These factors however are highly dependent on parasitic inductance and thus the layout of the power-stage is of utmost importance. The image below shows two parallel low-side and two parallel high-side MOSFETS with their ceramic decoupling capacitors.&lt;br /&gt;
[[File:Layout inductance overview.png|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
The low inductance layout used is based around reducing magnetic field loop area (in gray) as much as possible, this is achieved by interleaving opposite current paths and making sure current return paths flow on adjacent layers.&lt;br /&gt;
&lt;br /&gt;
Eurocircuits is the perfect assembler for these boards, as their impressive 0.125 mm clearance on 60 um (2 OZ) thick copper is impossible to get at other poolable PCB services. This with small 0.4mm vias make sure that both the DC resistance and the parasitic inductance can be as low as possible.&lt;br /&gt;
&lt;br /&gt;
The rest of the layout consists of a double mirror-symmetric set of 8 MOSFETS with the low-side FETs near the driver, which is positioned in the middle, the switching layout with all four layers can be seen below.&lt;br /&gt;
&lt;br /&gt;
[[File:PCB Animated right.webp|center|frameless|1000x1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The final layout shown below consists of one phase per PCB with large copper planes to accept 10mm copper busbar, the far end has a connection point for a single motor wire. The near end has a right-angle connector to connect back up to the controller PCB.&lt;br /&gt;
[[File:Phase-scaled.jpg|thumb|Single GaN half bridge with 16 MOSFETs]]&lt;br /&gt;
&lt;br /&gt;
== Controller ==&lt;br /&gt;
The heart of the logic is situated on the controller board shown below. It is based around an STM32, which is used to run the embedded software from the VESC project. The supported communication protocols are CAN and RS485. The three GaN phases are connected as shown at the top of the image. An FPGA is present to process the incoming delta-sigma current signals for controlling the phases.&lt;br /&gt;
[[File:Controller.jpg|thumb|Controller PCB of the motordriver]]&lt;br /&gt;
&lt;br /&gt;
== Electrolytic Capacitor mount ==&lt;br /&gt;
To have the decoupling capacitors as close to the switching action as possible, they are mounted on top of the copper busbars running past all the phases as shown below.  Their PCB layout is symmetrical on top and bottom so that the board can be flipped to accommodate both sides of the Phase-PCB. The mounting holes on these PCBs are there to potentially accommodate heat sinks for better heat dissipation.&lt;br /&gt;
[[File:Image029.jpg|center|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Current Sensors ==&lt;br /&gt;
The Current sensors use an external large sense resistor, as temperature swings would decrease the accuracy of PCB mount shunt resistors. The current sensor boards consist of a simple analogue current shunt amplifier feeding back analogue signals directly to the MCU. These amplifiers, however, have a hard time dealing with the large common mode jumps seen at the output of the motor driver. A future proof solution to this is an isolated delta sigma ADC which digitizes the shunt voltage directly, this requires some signal processing on the FPGA which will be added in future software implementation.&lt;br /&gt;
&lt;br /&gt;
[[File:Current Shunt-scaled.jpg|center|frameless|1000x1000px|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
\\&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
The git repo can be found on Gitlab&lt;br /&gt;
&lt;br /&gt;
== Backup motor driver ==&lt;br /&gt;
Our backup motor driver is the [https://trampaboards.com/1x-vesc-75v-300a-black-anodised-non-conductive-cnc-housing--375-each-p-26627.html Trampa VESC 75V 300A] data sheet can be found [https://trampaboards.com/resources/manuals/256.pdf here]&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=215</id>
		<title>Battery</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=215"/>
		<updated>2024-03-25T18:31:08Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: /* 0x102 */ update soc times 100 since it does otherwise not fit in uint16_t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the information about the EoI battery development, everything from the requirements to the implementation can be found here.&lt;br /&gt;
&lt;br /&gt;
== What is the battery? ==&lt;br /&gt;
The battery is the energy buffer of the boat, it stores the energy coming in from the solar panels and provides a constant voltage for the motor path and peripheral electronics. The battery consists of multiple parts:&lt;br /&gt;
&lt;br /&gt;
* Battery cells&lt;br /&gt;
* Battery management system (BMS)&lt;br /&gt;
&lt;br /&gt;
The BMS makes sure that the battery cells can't be overcharged or over-discharged, as this might damage them and present dangerous situations. Besides monitoring the voltage a BMS usually monitors the current and temperature as well.&lt;br /&gt;
&lt;br /&gt;
== Technical regulations (as per September 2022) ==&lt;br /&gt;
&lt;br /&gt;
* Maximum nominal voltage: 58,8V (14S lithium-ion)&lt;br /&gt;
* Maximum capacity: 1,5 kWh (= 5400 MJ)&lt;br /&gt;
* All battery cells must be commercially available&lt;br /&gt;
* The BMS must monitor the battery voltage and current&lt;br /&gt;
* The BMS must be capable of shutting down the system&lt;br /&gt;
* The BMS must be able to monitor charge and discharge currents&lt;br /&gt;
* The BMS must have a means to limit over-current in charge and discharge paths&lt;br /&gt;
* The BMS must monitor all individual cells&lt;br /&gt;
* All electrical systems must be provided with a fuse in series connection with the main battery ('Main fuse')&lt;br /&gt;
* The battery must be fused&lt;br /&gt;
* The BMS must be fused&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Functional requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specifiction&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nominal pack voltage&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;= 58,8V&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Maximum capacity&lt;br /&gt;
|&amp;lt;code&amp;gt;1,5 kWh&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) voltage&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) current&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) temperature&lt;br /&gt;
|&amp;gt;&amp;gt; 1 sensor (8)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Limit overcurrent in (dis)charge path&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Capable of shutting down the whole system&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|CAN-bus communication&lt;br /&gt;
|&amp;lt;code&amp;gt;5V / 1 Mbit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Internal cell balancing&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Charge and discharge paths can be operated simultaneously&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Motor and MPPT should be enabled independently&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|The battery should be enabled with a N.O. contact&lt;br /&gt;
|open = off&lt;br /&gt;
closed = on&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Separate enable contact for Motor path (output) (Optional: Software disable only)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Battery should be fully disabled (all outputs disabled) by emergency switch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Shelf life (Save battery mode)&lt;br /&gt;
|&amp;gt;= 1 year (&amp;lt;code&amp;gt;2.8mA max&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Humidity sensor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Galvanic separation of safety path (bilge and horn)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) I.M.U.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) Phase change cooling hardware&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Electrical requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Motor path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 300A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Charge path (input)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 50A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Peri path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 2.5A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Safety path (output) (bilge and horn)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 4A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Environmental requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Ambient operating temperature&lt;br /&gt;
|0 - 50 °C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Ingress protection&lt;br /&gt;
|IP67 or better&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery Management System ==&lt;br /&gt;
The Battery Management System (BMS) is the brains of the battery and makes sure to manage the battery so it is Dedier proof and does not catch on fire.&lt;br /&gt;
&lt;br /&gt;
The BMS has different functionalities on the PCB and therefore different settings. Since these settings are extensive (especially with the Cell Voltage Monitoring (CVM) chip, this chip does more than only measuring the cell voltages but we will be calling it the CVM from now for better readability.&lt;br /&gt;
&lt;br /&gt;
The BMS has different hardware components that is used in the EoI-battery, these are shown in their corresponding figures throughout the page. Shown below is the full battery system with cells in the box.&lt;br /&gt;
[[File:Battery in box.png|center|thumb|Battery box]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
The full BMS system consist of at least three PCBs that are:&lt;br /&gt;
&lt;br /&gt;
* Main board&lt;br /&gt;
* Current sense board for the discharge &lt;br /&gt;
* Charge path board&lt;br /&gt;
&lt;br /&gt;
Each of the hardware are further elaborated in their own sections.&lt;br /&gt;
&lt;br /&gt;
==== Main board ====&lt;br /&gt;
[[File:Bms pcb top view.jpg|thumb|691x691px|BMS PCB top view]]&lt;br /&gt;
The main board (shown right) is big brain of the battery system. On the main board there are multiple ICs with their own configurations and applications, namely:&lt;br /&gt;
&lt;br /&gt;
* Cell Voltage Measurement IC&lt;br /&gt;
* ADC&lt;br /&gt;
* Microprocessor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[File:Current sense pcb top view.jpg|thumb|Current sense PCB top view]]&lt;br /&gt;
[[File:Charge path PCB top view.jpg|thumb|Charge path PCB top view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CVM ===&lt;br /&gt;
The CVM that is used on the BMS is the [https://www.ti.com/product/BQ76952 BQ76952], located in the middle of the main board. This CVM-chip has an extensive list of configurations and features which makes it cumbersome to scroll through the code to know which features are enabled and which safety configurations are made. Therefore a list is generated with a description of the used configuration below.&lt;br /&gt;
&lt;br /&gt;
These are preliminary configurations and could be changed through the course of time and should be changed accordingly here as well.&lt;br /&gt;
[[File:FUSE pin.png|thumb|FUSE pin configuration of the CVM IC.|570x570px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short description&lt;br /&gt;
!Configuration&lt;br /&gt;
!Long description&lt;br /&gt;
|-&lt;br /&gt;
|Min Blow Fuse Voltage&lt;br /&gt;
|STACK: 60.2V(4.3V per cell)&lt;br /&gt;
|Permanent faults the device and enables FUSE pin to trigger the fuse.&lt;br /&gt;
FUSE pin stays on indefinitely and thus manual intervention is needed. &lt;br /&gt;
|-&lt;br /&gt;
|PF_FUSE&lt;br /&gt;
|Enabled&lt;br /&gt;
|Whenever a permanent fail occurs the FUSE pin should also be triggered.&lt;br /&gt;
|-&lt;br /&gt;
|Internal regualtors 1 &amp;amp; 2&lt;br /&gt;
|Disabled&lt;br /&gt;
|Regulator 1 and 2 are disabled since we do not use that with the CVM on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|Pre-regulator REG0&lt;br /&gt;
|Disabled&lt;br /&gt;
|Pre regulator is used to generate voltages for regulators 1 &amp;amp; 2.&lt;br /&gt;
|-&lt;br /&gt;
|CFETOFF&lt;br /&gt;
|Disabled&lt;br /&gt;
|CFETOFF pin is not used on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|TS1,2,3&lt;br /&gt;
|18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|Temperature pins are configured to be used in cell temperature protection &lt;br /&gt;
|-&lt;br /&gt;
|DFETOFF&lt;br /&gt;
|DFETOFF pin is configured as a termistor input &lt;br /&gt;
18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|DFETOFF can have different functions and is used for temperature measurement as a termistor input.&lt;br /&gt;
|-&lt;br /&gt;
|DDSG&lt;br /&gt;
|Configured as analogue discharge enable&lt;br /&gt;
|CVM IC can determine if the battery may be discharged. This pin activates the discharge path if everything is within spec&lt;br /&gt;
|-&lt;br /&gt;
|DA&lt;br /&gt;
|Resolution measured current: 0.1mA&lt;br /&gt;
Resolution measured voltage: 10mV&lt;br /&gt;
&lt;br /&gt;
Internal temperature not used for cell/FET protection&lt;br /&gt;
|DA configuration specifies the units for measuring the current and voltage. And can configure if the internal temperature readout should be used for cell protection.&lt;br /&gt;
|-&lt;br /&gt;
|VCELL&lt;br /&gt;
|Disable cell protection on cells 14 and 15&lt;br /&gt;
|Configures which cell should be used for cell protection and which cell should be ignored. Cell 14 and 15 are shorted since EoI uses a 14s battery.&lt;br /&gt;
|-&lt;br /&gt;
|FET settings&lt;br /&gt;
|Disabled&lt;br /&gt;
|The CVM IC can drive its own FETs, as in the MOSFETs can directly be driven by the chip itself since it can run in standalone mode.&lt;br /&gt;
|-&lt;br /&gt;
|FET charge pump&lt;br /&gt;
|Disabled&lt;br /&gt;
|N/A EoI&lt;br /&gt;
|-&lt;br /&gt;
|Shutdown internal temperature&lt;br /&gt;
|80C &lt;br /&gt;
|If measured internal temperature of the CVM is above 80C than the CVM should go into shutdown mode.&lt;br /&gt;
|-&lt;br /&gt;
|Over voltage protection&lt;br /&gt;
|Over voltage: 4.25V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Over voltage reset: 4.00V&lt;br /&gt;
|Over voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Under voltage protection&lt;br /&gt;
|Under voltage: 2.8V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Under voltage reset: 3.00V&lt;br /&gt;
|Under voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure under voltage protection&lt;br /&gt;
|Under voltage: 2.5V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure under voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over voltage protection&lt;br /&gt;
|Over voltage: 4.3V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over temperature protection&lt;br /&gt;
|Temperature: 90C&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over temperature protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure VSSF protection&lt;br /&gt;
|VSSF: 100mV&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over VSSF triggers alert after Delay. VSSF is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure 2LVL protection&lt;br /&gt;
EDIT: Should not have to use.&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over 2LVL triggers alert after Delay. 2LVL is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure LFOF protection&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over LFO oscillator frequency deviates from expected value after Delay triggers alert. LFOF is measured internal of the IC. &lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure HWMX&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure for input MUX used for OV, UV protection if check fails and fails after Delay trigger alert.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for charge&lt;br /&gt;
|Temperature: 60C&lt;br /&gt;
Recovery: 55C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for charge&lt;br /&gt;
|Temperature: 0C&lt;br /&gt;
Recovery: 5C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for discharge&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for discharge&lt;br /&gt;
|Temperature: -40C&lt;br /&gt;
Recovery: -35C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection FET&lt;br /&gt;
|Temperature: 80C&lt;br /&gt;
Recovery: 75C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection internal&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables CVM until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection internal&lt;br /&gt;
|Temperature: -20C&lt;br /&gt;
Recovery: -15&lt;br /&gt;
|Triggers fail and disables CVM path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Balancing configuration minimum cell voltage&lt;br /&gt;
|3.60V&lt;br /&gt;
|Minium cell voltage before balancing&lt;br /&gt;
|-&lt;br /&gt;
|Balancing cell voltage delta&lt;br /&gt;
|10mV&lt;br /&gt;
|Minimum cell voltage between cell before stopping balancing (or start balancing if bigger than)&lt;br /&gt;
|-&lt;br /&gt;
|Number of cells balancing simultaneously&lt;br /&gt;
|7 cells&lt;br /&gt;
|CVM supports multiple cell balancing up to 16 cells.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Do the MPPTs have to be modified for the 14S battery?&lt;br /&gt;
*Integrated or seperate charge/discharge paths? (I've got a slight preference for seperate pcb's)&lt;br /&gt;
&lt;br /&gt;
== CAN ID's ==&lt;br /&gt;
&lt;br /&gt;
=== 0x100 ===&lt;br /&gt;
float rPackCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rPerriCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x101 ===&lt;br /&gt;
float rChargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rDischargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x102 ===&lt;br /&gt;
uint16 * 100 rSOC_pct&lt;br /&gt;
&lt;br /&gt;
uint32 rErrorFlags&lt;br /&gt;
&lt;br /&gt;
uint16 rBalancingStatus&lt;br /&gt;
&lt;br /&gt;
=== 0x103 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_1, rCellVoltages_V_2, rCellVoltages_V_3, rCellVoltages_V_4,&lt;br /&gt;
&lt;br /&gt;
=== 0x104 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_5, rCellVoltages_V_6, rCellVoltages_V_7, rCellVoltages_V_8,&lt;br /&gt;
&lt;br /&gt;
=== 0x105 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_9, rCellVoltages_V_10, rCellVoltages_V_11, rCellVoltages_V_12,&lt;br /&gt;
&lt;br /&gt;
=== 0x106 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_13, rCellVoltages_V_14, rPackVoltage_V, rStackVoltage_V&lt;br /&gt;
&lt;br /&gt;
=== 0x107 ===&lt;br /&gt;
int8 rBattTemps_1, rBattTemps_2, rBattTemps_3, rBattTemps_4&lt;br /&gt;
&lt;br /&gt;
int8 rICTemp_degC&lt;br /&gt;
&lt;br /&gt;
uint8 rBatteryState&lt;br /&gt;
&lt;br /&gt;
uint8 rChargeState&lt;br /&gt;
&lt;br /&gt;
uint8 rMotorState&lt;br /&gt;
=== 0x108 ===&lt;br /&gt;
uint32 uptime ms&lt;br /&gt;
&lt;br /&gt;
uint32 unused&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=CAN-bus&amp;diff=206</id>
		<title>CAN-bus</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=CAN-bus&amp;diff=206"/>
		<updated>2024-03-18T20:37:52Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The communication between the electronics within the [[Solar boat (boii)|solar boat]] is build upon the CAN-bus protocol, where the [[datalogger]] logs the CAN messages. Pinout of our Binder connectors are: &lt;br /&gt;
&lt;br /&gt;
# Brown VCC (24 V) &lt;br /&gt;
# White CAN H &lt;br /&gt;
# Blue CAN L &lt;br /&gt;
#Black GND &lt;br /&gt;
#Safety &lt;br /&gt;
&lt;br /&gt;
== Battery (MG) CAN-format (No longer used) ==&lt;br /&gt;
As of now the MG electronics [[battery]] is used in the [[Solar boat (boii)|solar boat]]. Although a new battery is being developed, this MG battery is still in use (as of September '22). Therefore the battery format is given here below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Node-ID&lt;br /&gt;
!Index&lt;br /&gt;
!Subindex&lt;br /&gt;
!Data&lt;br /&gt;
!Type&lt;br /&gt;
!Resolution&lt;br /&gt;
|-&lt;br /&gt;
|0x302&lt;br /&gt;
|0x2005&lt;br /&gt;
|0x01&lt;br /&gt;
|Voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x02&lt;br /&gt;
|Current &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x03&lt;br /&gt;
|Current Discharge &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x04&lt;br /&gt;
|Current Charge &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x05&lt;br /&gt;
|State-of-Charge &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[%/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x06&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x07&lt;br /&gt;
|Time to Go &amp;lt;code&amp;gt;[min]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[min/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x402&lt;br /&gt;
|0x2005&lt;br /&gt;
|0x09&lt;br /&gt;
|Cell Temperature High &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0A&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0B&lt;br /&gt;
|Cell Temperature Low &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0C&lt;br /&gt;
|Cell Voltage High &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0D&lt;br /&gt;
|Cell Voltage Low &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0E&lt;br /&gt;
|BMS State&lt;br /&gt;
|uint32_t&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0F&lt;br /&gt;
|Temperature Collection &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|4x uint8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x482&lt;br /&gt;
|0x2000&lt;br /&gt;
|Cell nr&lt;br /&gt;
|Cell &amp;lt;code&amp;gt;[Cell_nr]&amp;lt;/code&amp;gt; Voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x202&lt;br /&gt;
|Don't Care&lt;br /&gt;
|Don't Care&lt;br /&gt;
|Power Level &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[%/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=CAN-bus&amp;diff=205</id>
		<title>CAN-bus</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=CAN-bus&amp;diff=205"/>
		<updated>2024-03-18T19:28:54Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: add pinout canbus, removed information that is no longer true&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The communication between the electronics within the [[Solar boat (boii)|solar boat]] is build upon the CAN-bus protocol, where the [[datalogger]] logs the CAN messages. Pinout of our Binder connectors are: &lt;br /&gt;
&lt;br /&gt;
# Shield &lt;br /&gt;
# Brown VCC (24 V) &lt;br /&gt;
# Black GND &lt;br /&gt;
# White CAN H &lt;br /&gt;
# Blue CAN L &lt;br /&gt;
&lt;br /&gt;
== Battery (MG) CAN-format (No longer used) ==&lt;br /&gt;
As of now the MG electronics [[battery]] is used in the [[Solar boat (boii)|solar boat]]. Although a new battery is being developed, this MG battery is still in use (as of September '22). Therefore the battery format is given here below.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Node-ID&lt;br /&gt;
!Index&lt;br /&gt;
!Subindex&lt;br /&gt;
!Data&lt;br /&gt;
!Type&lt;br /&gt;
!Resolution&lt;br /&gt;
|-&lt;br /&gt;
|0x302&lt;br /&gt;
|0x2005&lt;br /&gt;
|0x01&lt;br /&gt;
|Voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x02&lt;br /&gt;
|Current &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x03&lt;br /&gt;
|Current Discharge &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x04&lt;br /&gt;
|Current Charge &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int16_t&lt;br /&gt;
|10 &amp;lt;code&amp;gt;[mA/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x05&lt;br /&gt;
|State-of-Charge &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[%/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x06&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x07&lt;br /&gt;
|Time to Go &amp;lt;code&amp;gt;[min]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[min/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x402&lt;br /&gt;
|0x2005&lt;br /&gt;
|0x09&lt;br /&gt;
|Cell Temperature High &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0A&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0B&lt;br /&gt;
|Cell Temperature Low &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|int8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0C&lt;br /&gt;
|Cell Voltage High &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0D&lt;br /&gt;
|Cell Voltage Low &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0E&lt;br /&gt;
|BMS State&lt;br /&gt;
|uint32_t&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|0x0F&lt;br /&gt;
|Temperature Collection &amp;lt;code&amp;gt;[°C]&amp;lt;/code&amp;gt;&lt;br /&gt;
|4x uint8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[°C/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x482&lt;br /&gt;
|0x2000&lt;br /&gt;
|Cell nr&lt;br /&gt;
|Cell &amp;lt;code&amp;gt;[Cell_nr]&amp;lt;/code&amp;gt; Voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint16_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[mV/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|0x202&lt;br /&gt;
|Don't Care&lt;br /&gt;
|Don't Care&lt;br /&gt;
|Power Level &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
|uint8_t&lt;br /&gt;
|1  &amp;lt;code&amp;gt;[%/LSB]&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=201</id>
		<title>Battery</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=201"/>
		<updated>2024-03-05T08:22:11Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the information about the EoI battery development, everything from the requirements to the implementation can be found here.&lt;br /&gt;
&lt;br /&gt;
== What is the battery? ==&lt;br /&gt;
The battery is the energy buffer of the boat, it stores the energy coming in from the solar panels and provides a constant voltage for the motor path and peripheral electronics. The battery consists of multiple parts:&lt;br /&gt;
&lt;br /&gt;
* Battery cells&lt;br /&gt;
* Battery management system (BMS)&lt;br /&gt;
&lt;br /&gt;
The BMS makes sure that the battery cells can't be overcharged or over-discharged, as this might damage them and present dangerous situations. Besides monitoring the voltage a BMS usually monitors the current and temperature as well.&lt;br /&gt;
&lt;br /&gt;
== Technical regulations (as per September 2022) ==&lt;br /&gt;
&lt;br /&gt;
* Maximum nominal voltage: 58,8V (14S lithium-ion)&lt;br /&gt;
* Maximum capacity: 1,5 kWh (= 5400 MJ)&lt;br /&gt;
* All battery cells must be commercially available&lt;br /&gt;
* The BMS must monitor the battery voltage and current&lt;br /&gt;
* The BMS must be capable of shutting down the system&lt;br /&gt;
* The BMS must be able to monitor charge and discharge currents&lt;br /&gt;
* The BMS must have a means to limit over-current in charge and discharge paths&lt;br /&gt;
* The BMS must monitor all individual cells&lt;br /&gt;
* All electrical systems must be provided with a fuse in series connection with the main battery ('Main fuse')&lt;br /&gt;
* The battery must be fused&lt;br /&gt;
* The BMS must be fused&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Functional requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specifiction&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nominal pack voltage&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;= 58,8V&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Maximum capacity&lt;br /&gt;
|&amp;lt;code&amp;gt;1,5 kWh&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) voltage&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) current&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) temperature&lt;br /&gt;
|&amp;gt;&amp;gt; 1 sensor (8)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Limit overcurrent in (dis)charge path&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Capable of shutting down the whole system&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|CAN-bus communication&lt;br /&gt;
|&amp;lt;code&amp;gt;5V / 1 Mbit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Internal cell balancing&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Charge and discharge paths can be operated simultaneously&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Motor and MPPT should be enabled independently&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|The battery should be enabled with a N.O. contact&lt;br /&gt;
|open = off&lt;br /&gt;
closed = on&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Separate enable contact for Motor path (output) (Optional: Software disable only)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Battery should be fully disabled (all outputs disabled) by emergency switch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Shelf life (Save battery mode)&lt;br /&gt;
|&amp;gt;= 1 year (&amp;lt;code&amp;gt;2.8mA max&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Humidity sensor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Galvanic separation of safety path (bilge and horn)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) I.M.U.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) Phase change cooling hardware&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Electrical requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Motor path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 300A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Charge path (input)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 50A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Peri path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 2.5A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Safety path (output) (bilge and horn)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 4A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Environmental requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Ambient operating temperature&lt;br /&gt;
|0 - 50 °C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Ingress protection&lt;br /&gt;
|IP67 or better&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery Management System ==&lt;br /&gt;
The Battery Management System (BMS) is the brains of the battery and makes sure to manage the battery so it is Dedier proof and does not catch on fire.&lt;br /&gt;
&lt;br /&gt;
The BMS has different functionalities on the PCB and therefore different settings. Since these settings are extensive (especially with the Cell Voltage Monitoring (CVM) chip, this chip does more than only measuring the cell voltages but we will be calling it the CVM from now for better readability.&lt;br /&gt;
&lt;br /&gt;
The BMS has different hardware components that is used in the EoI-battery, these are shown in their corresponding figures throughout the page. Shown below is the full battery system with cells in the box.&lt;br /&gt;
[[File:Battery in box.png|center|thumb|Battery box]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
The full BMS system consist of at least three PCBs that are:&lt;br /&gt;
&lt;br /&gt;
* Main board&lt;br /&gt;
* Current sense board for the discharge &lt;br /&gt;
* Charge path board&lt;br /&gt;
&lt;br /&gt;
Each of the hardware are further elaborated in their own sections.&lt;br /&gt;
&lt;br /&gt;
==== Main board ====&lt;br /&gt;
[[File:Bms pcb top view.jpg|thumb|691x691px|BMS PCB top view]]&lt;br /&gt;
The main board (shown right) is big brain of the battery system. On the main board there are multiple ICs with their own configurations and applications, namely:&lt;br /&gt;
&lt;br /&gt;
* Cell Voltage Measurement IC&lt;br /&gt;
* ADC&lt;br /&gt;
* Microprocessor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[File:Current sense pcb top view.jpg|thumb|Current sense PCB top view]]&lt;br /&gt;
[[File:Charge path PCB top view.jpg|thumb|Charge path PCB top view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CVM ===&lt;br /&gt;
The CVM that is used on the BMS is the [https://www.ti.com/product/BQ76952 BQ76952], located in the middle of the main board. This CVM-chip has an extensive list of configurations and features which makes it cumbersome to scroll through the code to know which features are enabled and which safety configurations are made. Therefore a list is generated with a description of the used configuration below.&lt;br /&gt;
&lt;br /&gt;
These are preliminary configurations and could be changed through the course of time and should be changed accordingly here as well.&lt;br /&gt;
[[File:FUSE pin.png|thumb|FUSE pin configuration of the CVM IC.|570x570px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short description&lt;br /&gt;
!Configuration&lt;br /&gt;
!Long description&lt;br /&gt;
|-&lt;br /&gt;
|Min Blow Fuse Voltage&lt;br /&gt;
|STACK: 60.2V(4.3V per cell)&lt;br /&gt;
|Permanent faults the device and enables FUSE pin to trigger the fuse.&lt;br /&gt;
FUSE pin stays on indefinitely and thus manual intervention is needed. &lt;br /&gt;
|-&lt;br /&gt;
|PF_FUSE&lt;br /&gt;
|Enabled&lt;br /&gt;
|Whenever a permanent fail occurs the FUSE pin should also be triggered.&lt;br /&gt;
|-&lt;br /&gt;
|Internal regualtors 1 &amp;amp; 2&lt;br /&gt;
|Disabled&lt;br /&gt;
|Regulator 1 and 2 are disabled since we do not use that with the CVM on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|Pre-regulator REG0&lt;br /&gt;
|Disabled&lt;br /&gt;
|Pre regulator is used to generate voltages for regulators 1 &amp;amp; 2.&lt;br /&gt;
|-&lt;br /&gt;
|CFETOFF&lt;br /&gt;
|Disabled&lt;br /&gt;
|CFETOFF pin is not used on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|TS1,2,3&lt;br /&gt;
|18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|Temperature pins are configured to be used in cell temperature protection &lt;br /&gt;
|-&lt;br /&gt;
|DFETOFF&lt;br /&gt;
|DFETOFF pin is configured as a termistor input &lt;br /&gt;
18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|DFETOFF can have different functions and is used for temperature measurement as a termistor input.&lt;br /&gt;
|-&lt;br /&gt;
|DDSG&lt;br /&gt;
|Configured as analogue discharge enable&lt;br /&gt;
|CVM IC can determine if the battery may be discharged. This pin activates the discharge path if everything is within spec&lt;br /&gt;
|-&lt;br /&gt;
|DA&lt;br /&gt;
|Resolution measured current: 0.1mA&lt;br /&gt;
Resolution measured voltage: 10mV&lt;br /&gt;
&lt;br /&gt;
Internal temperature not used for cell/FET protection&lt;br /&gt;
|DA configuration specifies the units for measuring the current and voltage. And can configure if the internal temperature readout should be used for cell protection.&lt;br /&gt;
|-&lt;br /&gt;
|VCELL&lt;br /&gt;
|Disable cell protection on cells 14 and 15&lt;br /&gt;
|Configures which cell should be used for cell protection and which cell should be ignored. Cell 14 and 15 are shorted since EoI uses a 14s battery.&lt;br /&gt;
|-&lt;br /&gt;
|FET settings&lt;br /&gt;
|Disabled&lt;br /&gt;
|The CVM IC can drive its own FETs, as in the MOSFETs can directly be driven by the chip itself since it can run in standalone mode.&lt;br /&gt;
|-&lt;br /&gt;
|FET charge pump&lt;br /&gt;
|Disabled&lt;br /&gt;
|N/A EoI&lt;br /&gt;
|-&lt;br /&gt;
|Shutdown internal temperature&lt;br /&gt;
|80C &lt;br /&gt;
|If measured internal temperature of the CVM is above 80C than the CVM should go into shutdown mode.&lt;br /&gt;
|-&lt;br /&gt;
|Over voltage protection&lt;br /&gt;
|Over voltage: 4.25V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Over voltage reset: 4.00V&lt;br /&gt;
|Over voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Under voltage protection&lt;br /&gt;
|Under voltage: 2.8V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Under voltage reset: 3.00V&lt;br /&gt;
|Under voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure under voltage protection&lt;br /&gt;
|Under voltage: 2.5V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure under voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over voltage protection&lt;br /&gt;
|Over voltage: 4.3V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over temperature protection&lt;br /&gt;
|Temperature: 90C&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over temperature protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure VSSF protection&lt;br /&gt;
|VSSF: 100mV&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over VSSF triggers alert after Delay. VSSF is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure 2LVL protection&lt;br /&gt;
EDIT: Should not have to use.&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over 2LVL triggers alert after Delay. 2LVL is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure LFOF protection&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over LFO oscillator frequency deviates from expected value after Delay triggers alert. LFOF is measured internal of the IC. &lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure HWMX&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure for input MUX used for OV, UV protection if check fails and fails after Delay trigger alert.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for charge&lt;br /&gt;
|Temperature: 60C&lt;br /&gt;
Recovery: 55C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for charge&lt;br /&gt;
|Temperature: 0C&lt;br /&gt;
Recovery: 5C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for discharge&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for discharge&lt;br /&gt;
|Temperature: -40C&lt;br /&gt;
Recovery: -35C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection FET&lt;br /&gt;
|Temperature: 80C&lt;br /&gt;
Recovery: 75C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection internal&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables CVM until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection internal&lt;br /&gt;
|Temperature: -20C&lt;br /&gt;
Recovery: -15&lt;br /&gt;
|Triggers fail and disables CVM path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Balancing configuration minimum cell voltage&lt;br /&gt;
|3.60V&lt;br /&gt;
|Minium cell voltage before balancing&lt;br /&gt;
|-&lt;br /&gt;
|Balancing cell voltage delta&lt;br /&gt;
|10mV&lt;br /&gt;
|Minimum cell voltage between cell before stopping balancing (or start balancing if bigger than)&lt;br /&gt;
|-&lt;br /&gt;
|Number of cells balancing simultaneously&lt;br /&gt;
|7 cells&lt;br /&gt;
|CVM supports multiple cell balancing up to 16 cells.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Do the MPPTs have to be modified for the 14S battery?&lt;br /&gt;
*Integrated or seperate charge/discharge paths? (I've got a slight preference for seperate pcb's)&lt;br /&gt;
&lt;br /&gt;
== CAN ID's ==&lt;br /&gt;
&lt;br /&gt;
=== 0x100 ===&lt;br /&gt;
float rPackCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rPerriCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x101 ===&lt;br /&gt;
float rChargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rDischargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x102 ===&lt;br /&gt;
uint16 * 1000 rSOC_pct&lt;br /&gt;
&lt;br /&gt;
uint32 rErrorFlags&lt;br /&gt;
&lt;br /&gt;
uint16 rBalancingStatus&lt;br /&gt;
&lt;br /&gt;
=== 0x103 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_1, rCellVoltages_V_2, rCellVoltages_V_3, rCellVoltages_V_4,&lt;br /&gt;
&lt;br /&gt;
=== 0x104 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_5, rCellVoltages_V_6, rCellVoltages_V_7, rCellVoltages_V_8,&lt;br /&gt;
&lt;br /&gt;
=== 0x105 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_9, rCellVoltages_V_10, rCellVoltages_V_11, rCellVoltages_V_12,&lt;br /&gt;
&lt;br /&gt;
=== 0x106 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_13, rCellVoltages_V_14, rPackVoltage_V, rStackVoltage_V&lt;br /&gt;
&lt;br /&gt;
=== 0x107 ===&lt;br /&gt;
int8 rBattTemps_1, rBattTemps_2, rBattTemps_3, rBattTemps_4&lt;br /&gt;
&lt;br /&gt;
int8 rICTemp_degC&lt;br /&gt;
&lt;br /&gt;
uint8 rBatteryState&lt;br /&gt;
&lt;br /&gt;
uint8 rChargeState&lt;br /&gt;
&lt;br /&gt;
uint8 rMotorState&lt;br /&gt;
=== 0x108 ===&lt;br /&gt;
uint32 uptime ms&lt;br /&gt;
&lt;br /&gt;
uint32 unused&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=200</id>
		<title>Battery</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=200"/>
		<updated>2024-03-05T08:17:53Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added uptime&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the information about the EoI battery development, everything from the requirements to the implementation can be found here.&lt;br /&gt;
&lt;br /&gt;
== What is the battery? ==&lt;br /&gt;
The battery is the energy buffer of the boat, it stores the energy coming in from the solar panels and provides a constant voltage for the motor path and peripheral electronics. The battery consists of multiple parts:&lt;br /&gt;
&lt;br /&gt;
* Battery cells&lt;br /&gt;
* Battery management system (BMS)&lt;br /&gt;
&lt;br /&gt;
The BMS makes sure that the battery cells can't be overcharged or over-discharged, as this might damage them and present dangerous situations. Besides monitoring the voltage a BMS usually monitors the current and temperature as well.&lt;br /&gt;
&lt;br /&gt;
== Technical regulations (as per September 2022) ==&lt;br /&gt;
&lt;br /&gt;
* Maximum nominal voltage: 58,8V (14S lithium-ion)&lt;br /&gt;
* Maximum capacity: 1,5 kWh (= 5400 MJ)&lt;br /&gt;
* All battery cells must be commercially available&lt;br /&gt;
* The BMS must monitor the battery voltage and current&lt;br /&gt;
* The BMS must be capable of shutting down the system&lt;br /&gt;
* The BMS must be able to monitor charge and discharge currents&lt;br /&gt;
* The BMS must have a means to limit over-current in charge and discharge paths&lt;br /&gt;
* The BMS must monitor all individual cells&lt;br /&gt;
* All electrical systems must be provided with a fuse in series connection with the main battery ('Main fuse')&lt;br /&gt;
* The battery must be fused&lt;br /&gt;
* The BMS must be fused&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Functional requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specifiction&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nominal pack voltage&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;= 58,8V&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Maximum capacity&lt;br /&gt;
|&amp;lt;code&amp;gt;1,5 kWh&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) voltage&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) current&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) temperature&lt;br /&gt;
|&amp;gt;&amp;gt; 1 sensor (8)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Limit overcurrent in (dis)charge path&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Capable of shutting down the whole system&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|CAN-bus communication&lt;br /&gt;
|&amp;lt;code&amp;gt;5V / 1 Mbit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Internal cell balancing&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Charge and discharge paths can be operated simultaneously&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Motor and MPPT should be enabled independently&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|The battery should be enabled with a N.O. contact&lt;br /&gt;
|open = off&lt;br /&gt;
closed = on&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Separate enable contact for Motor path (output) (Optional: Software disable only)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Battery should be fully disabled (all outputs disabled) by emergency switch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Shelf life (Save battery mode)&lt;br /&gt;
|&amp;gt;= 1 year (&amp;lt;code&amp;gt;2.8mA max&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Humidity sensor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Galvanic separation of safety path (bilge and horn)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) I.M.U.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) Phase change cooling hardware&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Electrical requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Motor path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 300A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Charge path (input)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 50A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Peri path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 2.5A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Safety path (output) (bilge and horn)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 4A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Environmental requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Ambient operating temperature&lt;br /&gt;
|0 - 50 °C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Ingress protection&lt;br /&gt;
|IP67 or better&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery Management System ==&lt;br /&gt;
The Battery Management System (BMS) is the brains of the battery and makes sure to manage the battery so it is Dedier proof and does not catch on fire.&lt;br /&gt;
&lt;br /&gt;
The BMS has different functionalities on the PCB and therefore different settings. Since these settings are extensive (especially with the Cell Voltage Monitoring (CVM) chip, this chip does more than only measuring the cell voltages but we will be calling it the CVM from now for better readability.&lt;br /&gt;
&lt;br /&gt;
The BMS has different hardware components that is used in the EoI-battery, these are shown in their corresponding figures throughout the page. Shown below is the full battery system with cells in the box.&lt;br /&gt;
[[File:Battery in box.png|center|thumb|Battery box]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
The full BMS system consist of at least three PCBs that are:&lt;br /&gt;
&lt;br /&gt;
* Main board&lt;br /&gt;
* Current sense board for the discharge &lt;br /&gt;
* Charge path board&lt;br /&gt;
&lt;br /&gt;
Each of the hardware are further elaborated in their own sections.&lt;br /&gt;
&lt;br /&gt;
==== Main board ====&lt;br /&gt;
[[File:Bms pcb top view.jpg|thumb|691x691px|BMS PCB top view]]&lt;br /&gt;
The main board (shown right) is big brain of the battery system. On the main board there are multiple ICs with their own configurations and applications, namely:&lt;br /&gt;
&lt;br /&gt;
* Cell Voltage Measurement IC&lt;br /&gt;
* ADC&lt;br /&gt;
* Microprocessor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[File:Current sense pcb top view.jpg|thumb|Current sense PCB top view]]&lt;br /&gt;
[[File:Charge path PCB top view.jpg|thumb|Charge path PCB top view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CVM ===&lt;br /&gt;
The CVM that is used on the BMS is the [https://www.ti.com/product/BQ76952 BQ76952], located in the middle of the main board. This CVM-chip has an extensive list of configurations and features which makes it cumbersome to scroll through the code to know which features are enabled and which safety configurations are made. Therefore a list is generated with a description of the used configuration below.&lt;br /&gt;
&lt;br /&gt;
These are preliminary configurations and could be changed through the course of time and should be changed accordingly here as well.&lt;br /&gt;
[[File:FUSE pin.png|thumb|FUSE pin configuration of the CVM IC.|570x570px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short description&lt;br /&gt;
!Configuration&lt;br /&gt;
!Long description&lt;br /&gt;
|-&lt;br /&gt;
|Min Blow Fuse Voltage&lt;br /&gt;
|STACK: 60.2V(4.3V per cell)&lt;br /&gt;
|Permanent faults the device and enables FUSE pin to trigger the fuse.&lt;br /&gt;
FUSE pin stays on indefinitely and thus manual intervention is needed. &lt;br /&gt;
|-&lt;br /&gt;
|PF_FUSE&lt;br /&gt;
|Enabled&lt;br /&gt;
|Whenever a permanent fail occurs the FUSE pin should also be triggered.&lt;br /&gt;
|-&lt;br /&gt;
|Internal regualtors 1 &amp;amp; 2&lt;br /&gt;
|Disabled&lt;br /&gt;
|Regulator 1 and 2 are disabled since we do not use that with the CVM on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|Pre-regulator REG0&lt;br /&gt;
|Disabled&lt;br /&gt;
|Pre regulator is used to generate voltages for regulators 1 &amp;amp; 2.&lt;br /&gt;
|-&lt;br /&gt;
|CFETOFF&lt;br /&gt;
|Disabled&lt;br /&gt;
|CFETOFF pin is not used on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|TS1,2,3&lt;br /&gt;
|18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|Temperature pins are configured to be used in cell temperature protection &lt;br /&gt;
|-&lt;br /&gt;
|DFETOFF&lt;br /&gt;
|DFETOFF pin is configured as a termistor input &lt;br /&gt;
18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|DFETOFF can have different functions and is used for temperature measurement as a termistor input.&lt;br /&gt;
|-&lt;br /&gt;
|DDSG&lt;br /&gt;
|Configured as analogue discharge enable&lt;br /&gt;
|CVM IC can determine if the battery may be discharged. This pin activates the discharge path if everything is within spec&lt;br /&gt;
|-&lt;br /&gt;
|DA&lt;br /&gt;
|Resolution measured current: 0.1mA&lt;br /&gt;
Resolution measured voltage: 10mV&lt;br /&gt;
&lt;br /&gt;
Internal temperature not used for cell/FET protection&lt;br /&gt;
|DA configuration specifies the units for measuring the current and voltage. And can configure if the internal temperature readout should be used for cell protection.&lt;br /&gt;
|-&lt;br /&gt;
|VCELL&lt;br /&gt;
|Disable cell protection on cells 14 and 15&lt;br /&gt;
|Configures which cell should be used for cell protection and which cell should be ignored. Cell 14 and 15 are shorted since EoI uses a 14s battery.&lt;br /&gt;
|-&lt;br /&gt;
|FET settings&lt;br /&gt;
|Disabled&lt;br /&gt;
|The CVM IC can drive its own FETs, as in the MOSFETs can directly be driven by the chip itself since it can run in standalone mode.&lt;br /&gt;
|-&lt;br /&gt;
|FET charge pump&lt;br /&gt;
|Disabled&lt;br /&gt;
|N/A EoI&lt;br /&gt;
|-&lt;br /&gt;
|Shutdown internal temperature&lt;br /&gt;
|80C &lt;br /&gt;
|If measured internal temperature of the CVM is above 80C than the CVM should go into shutdown mode.&lt;br /&gt;
|-&lt;br /&gt;
|Over voltage protection&lt;br /&gt;
|Over voltage: 4.25V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Over voltage reset: 4.00V&lt;br /&gt;
|Over voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Under voltage protection&lt;br /&gt;
|Under voltage: 2.8V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Under voltage reset: 3.00V&lt;br /&gt;
|Under voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure under voltage protection&lt;br /&gt;
|Under voltage: 2.5V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure under voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over voltage protection&lt;br /&gt;
|Over voltage: 4.3V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over temperature protection&lt;br /&gt;
|Temperature: 90C&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over temperature protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure VSSF protection&lt;br /&gt;
|VSSF: 100mV&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over VSSF triggers alert after Delay. VSSF is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure 2LVL protection&lt;br /&gt;
EDIT: Should not have to use.&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over 2LVL triggers alert after Delay. 2LVL is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure LFOF protection&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over LFO oscillator frequency deviates from expected value after Delay triggers alert. LFOF is measured internal of the IC. &lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure HWMX&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure for input MUX used for OV, UV protection if check fails and fails after Delay trigger alert.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for charge&lt;br /&gt;
|Temperature: 60C&lt;br /&gt;
Recovery: 55C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for charge&lt;br /&gt;
|Temperature: 0C&lt;br /&gt;
Recovery: 5C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for discharge&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for discharge&lt;br /&gt;
|Temperature: -40C&lt;br /&gt;
Recovery: -35C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection FET&lt;br /&gt;
|Temperature: 80C&lt;br /&gt;
Recovery: 75C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection internal&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables CVM until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection internal&lt;br /&gt;
|Temperature: -20C&lt;br /&gt;
Recovery: -15&lt;br /&gt;
|Triggers fail and disables CVM path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Balancing configuration minimum cell voltage&lt;br /&gt;
|3.60V&lt;br /&gt;
|Minium cell voltage before balancing&lt;br /&gt;
|-&lt;br /&gt;
|Balancing cell voltage delta&lt;br /&gt;
|10mV&lt;br /&gt;
|Minimum cell voltage between cell before stopping balancing (or start balancing if bigger than)&lt;br /&gt;
|-&lt;br /&gt;
|Number of cells balancing simultaneously&lt;br /&gt;
|7 cells&lt;br /&gt;
|CVM supports multiple cell balancing up to 16 cells.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Do the MPPTs have to be modified for the 14S battery?&lt;br /&gt;
*Integrated or seperate charge/discharge paths? (I've got a slight preference for seperate pcb's)&lt;br /&gt;
&lt;br /&gt;
== CAN ID's ==&lt;br /&gt;
&lt;br /&gt;
=== 0x100 ===&lt;br /&gt;
float rPackCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rPerriCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x101 ===&lt;br /&gt;
float rChargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rDischargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x102 ===&lt;br /&gt;
uint16 * 1000 rSOC_pct&lt;br /&gt;
&lt;br /&gt;
uint32 rErrorFlags&lt;br /&gt;
&lt;br /&gt;
uint16 rBalancingStatus&lt;br /&gt;
&lt;br /&gt;
=== 0x103 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_1, rCellVoltages_V_2, rCellVoltages_V_3, rCellVoltages_V_4,&lt;br /&gt;
&lt;br /&gt;
=== 0x104 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_5, rCellVoltages_V_6, rCellVoltages_V_7, rCellVoltages_V_8,&lt;br /&gt;
&lt;br /&gt;
=== 0x105 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_9, rCellVoltages_V_10, rCellVoltages_V_11, rCellVoltages_V_12,&lt;br /&gt;
&lt;br /&gt;
=== 0x106 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_13, rCellVoltages_V_14, rPackVoltage_V, rStackVoltage_V&lt;br /&gt;
&lt;br /&gt;
=== 0x107 ===&lt;br /&gt;
int8 rBattTemps_1, rBattTemps_2, rBattTemps_3, rBattTemps_4&lt;br /&gt;
&lt;br /&gt;
int8 rICTemp_degC&lt;br /&gt;
&lt;br /&gt;
uint8 rBatteryState&lt;br /&gt;
&lt;br /&gt;
uint8 rChargeState&lt;br /&gt;
&lt;br /&gt;
uint8 rMotorState&lt;br /&gt;
=== 0x108 ===&lt;br /&gt;
uit32 uptime ms&lt;br /&gt;
&lt;br /&gt;
uit32 unused&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=199</id>
		<title>Battery</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=199"/>
		<updated>2024-02-05T20:01:14Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the information about the EoI battery development, everything from the requirements to the implementation can be found here.&lt;br /&gt;
&lt;br /&gt;
== What is the battery? ==&lt;br /&gt;
The battery is the energy buffer of the boat, it stores the energy coming in from the solar panels and provides a constant voltage for the motor path and peripheral electronics. The battery consists of multiple parts:&lt;br /&gt;
&lt;br /&gt;
* Battery cells&lt;br /&gt;
* Battery management system (BMS)&lt;br /&gt;
&lt;br /&gt;
The BMS makes sure that the battery cells can't be overcharged or over-discharged, as this might damage them and present dangerous situations. Besides monitoring the voltage a BMS usually monitors the current and temperature as well.&lt;br /&gt;
&lt;br /&gt;
== Technical regulations (as per September 2022) ==&lt;br /&gt;
&lt;br /&gt;
* Maximum nominal voltage: 58,8V (14S lithium-ion)&lt;br /&gt;
* Maximum capacity: 1,5 kWh (= 5400 MJ)&lt;br /&gt;
* All battery cells must be commercially available&lt;br /&gt;
* The BMS must monitor the battery voltage and current&lt;br /&gt;
* The BMS must be capable of shutting down the system&lt;br /&gt;
* The BMS must be able to monitor charge and discharge currents&lt;br /&gt;
* The BMS must have a means to limit over-current in charge and discharge paths&lt;br /&gt;
* The BMS must monitor all individual cells&lt;br /&gt;
* All electrical systems must be provided with a fuse in series connection with the main battery ('Main fuse')&lt;br /&gt;
* The battery must be fused&lt;br /&gt;
* The BMS must be fused&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Functional requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specifiction&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nominal pack voltage&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;= 58,8V&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Maximum capacity&lt;br /&gt;
|&amp;lt;code&amp;gt;1,5 kWh&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) voltage&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) current&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) temperature&lt;br /&gt;
|&amp;gt;&amp;gt; 1 sensor (8)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Limit overcurrent in (dis)charge path&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Capable of shutting down the whole system&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|CAN-bus communication&lt;br /&gt;
|&amp;lt;code&amp;gt;5V / 1 Mbit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Internal cell balancing&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Charge and discharge paths can be operated simultaneously&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Motor and MPPT should be enabled independently&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|The battery should be enabled with a N.O. contact&lt;br /&gt;
|open = off&lt;br /&gt;
closed = on&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Separate enable contact for Motor path (output) (Optional: Software disable only)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Battery should be fully disabled (all outputs disabled) by emergency switch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Shelf life (Save battery mode)&lt;br /&gt;
|&amp;gt;= 1 year (&amp;lt;code&amp;gt;2.8mA max&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Humidity sensor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Galvanic separation of safety path (bilge and horn)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) I.M.U.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) Phase change cooling hardware&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Electrical requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Motor path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 300A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Charge path (input)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 50A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Peri path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 2.5A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Safety path (output) (bilge and horn)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 4A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Environmental requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Ambient operating temperature&lt;br /&gt;
|0 - 50 °C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Ingress protection&lt;br /&gt;
|IP67 or better&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery Management System ==&lt;br /&gt;
The Battery Management System (BMS) is the brains of the battery and makes sure to manage the battery so it is Dedier proof and does not catch on fire.&lt;br /&gt;
&lt;br /&gt;
The BMS has different functionalities on the PCB and therefore different settings. Since these settings are extensive (especially with the Cell Voltage Monitoring (CVM) chip, this chip does more than only measuring the cell voltages but we will be calling it the CVM from now for better readability.&lt;br /&gt;
&lt;br /&gt;
The BMS has different hardware components that is used in the EoI-battery, these are shown in their corresponding figures throughout the page. Shown below is the full battery system with cells in the box.&lt;br /&gt;
[[File:Battery in box.png|center|thumb|Battery box]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
The full BMS system consist of at least three PCBs that are:&lt;br /&gt;
&lt;br /&gt;
* Main board&lt;br /&gt;
* Current sense board for the discharge &lt;br /&gt;
* Charge path board&lt;br /&gt;
&lt;br /&gt;
Each of the hardware are further elaborated in their own sections.&lt;br /&gt;
&lt;br /&gt;
==== Main board ====&lt;br /&gt;
[[File:Bms pcb top view.jpg|thumb|691x691px|BMS PCB top view]]&lt;br /&gt;
The main board (shown right) is big brain of the battery system. On the main board there are multiple ICs with their own configurations and applications, namely:&lt;br /&gt;
&lt;br /&gt;
* Cell Voltage Measurement IC&lt;br /&gt;
* ADC&lt;br /&gt;
* Microprocessor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[File:Current sense pcb top view.jpg|thumb|Current sense PCB top view]]&lt;br /&gt;
[[File:Charge path PCB top view.jpg|thumb|Charge path PCB top view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CVM ===&lt;br /&gt;
The CVM that is used on the BMS is the [https://www.ti.com/product/BQ76952 BQ76952], located in the middle of the main board. This CVM-chip has an extensive list of configurations and features which makes it cumbersome to scroll through the code to know which features are enabled and which safety configurations are made. Therefore a list is generated with a description of the used configuration below.&lt;br /&gt;
&lt;br /&gt;
These are preliminary configurations and could be changed through the course of time and should be changed accordingly here as well.&lt;br /&gt;
[[File:FUSE pin.png|thumb|FUSE pin configuration of the CVM IC.|570x570px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short description&lt;br /&gt;
!Configuration&lt;br /&gt;
!Long description&lt;br /&gt;
|-&lt;br /&gt;
|Min Blow Fuse Voltage&lt;br /&gt;
|STACK: 60.2V(4.3V per cell)&lt;br /&gt;
|Permanent faults the device and enables FUSE pin to trigger the fuse.&lt;br /&gt;
FUSE pin stays on indefinitely and thus manual intervention is needed. &lt;br /&gt;
|-&lt;br /&gt;
|PF_FUSE&lt;br /&gt;
|Enabled&lt;br /&gt;
|Whenever a permanent fail occurs the FUSE pin should also be triggered.&lt;br /&gt;
|-&lt;br /&gt;
|Internal regualtors 1 &amp;amp; 2&lt;br /&gt;
|Disabled&lt;br /&gt;
|Regulator 1 and 2 are disabled since we do not use that with the CVM on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|Pre-regulator REG0&lt;br /&gt;
|Disabled&lt;br /&gt;
|Pre regulator is used to generate voltages for regulators 1 &amp;amp; 2.&lt;br /&gt;
|-&lt;br /&gt;
|CFETOFF&lt;br /&gt;
|Disabled&lt;br /&gt;
|CFETOFF pin is not used on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|TS1,2,3&lt;br /&gt;
|18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|Temperature pins are configured to be used in cell temperature protection &lt;br /&gt;
|-&lt;br /&gt;
|DFETOFF&lt;br /&gt;
|DFETOFF pin is configured as a termistor input &lt;br /&gt;
18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|DFETOFF can have different functions and is used for temperature measurement as a termistor input.&lt;br /&gt;
|-&lt;br /&gt;
|DDSG&lt;br /&gt;
|Configured as analogue discharge enable&lt;br /&gt;
|CVM IC can determine if the battery may be discharged. This pin activates the discharge path if everything is within spec&lt;br /&gt;
|-&lt;br /&gt;
|DA&lt;br /&gt;
|Resolution measured current: 0.1mA&lt;br /&gt;
Resolution measured voltage: 10mV&lt;br /&gt;
&lt;br /&gt;
Internal temperature not used for cell/FET protection&lt;br /&gt;
|DA configuration specifies the units for measuring the current and voltage. And can configure if the internal temperature readout should be used for cell protection.&lt;br /&gt;
|-&lt;br /&gt;
|VCELL&lt;br /&gt;
|Disable cell protection on cells 14 and 15&lt;br /&gt;
|Configures which cell should be used for cell protection and which cell should be ignored. Cell 14 and 15 are shorted since EoI uses a 14s battery.&lt;br /&gt;
|-&lt;br /&gt;
|FET settings&lt;br /&gt;
|Disabled&lt;br /&gt;
|The CVM IC can drive its own FETs, as in the MOSFETs can directly be driven by the chip itself since it can run in standalone mode.&lt;br /&gt;
|-&lt;br /&gt;
|FET charge pump&lt;br /&gt;
|Disabled&lt;br /&gt;
|N/A EoI&lt;br /&gt;
|-&lt;br /&gt;
|Shutdown internal temperature&lt;br /&gt;
|80C &lt;br /&gt;
|If measured internal temperature of the CVM is above 80C than the CVM should go into shutdown mode.&lt;br /&gt;
|-&lt;br /&gt;
|Over voltage protection&lt;br /&gt;
|Over voltage: 4.25V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Over voltage reset: 4.00V&lt;br /&gt;
|Over voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Under voltage protection&lt;br /&gt;
|Under voltage: 2.8V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Under voltage reset: 3.00V&lt;br /&gt;
|Under voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure under voltage protection&lt;br /&gt;
|Under voltage: 2.5V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure under voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over voltage protection&lt;br /&gt;
|Over voltage: 4.3V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over temperature protection&lt;br /&gt;
|Temperature: 90C&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over temperature protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure VSSF protection&lt;br /&gt;
|VSSF: 100mV&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over VSSF triggers alert after Delay. VSSF is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure 2LVL protection&lt;br /&gt;
EDIT: Should not have to use.&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over 2LVL triggers alert after Delay. 2LVL is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure LFOF protection&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over LFO oscillator frequency deviates from expected value after Delay triggers alert. LFOF is measured internal of the IC. &lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure HWMX&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure for input MUX used for OV, UV protection if check fails and fails after Delay trigger alert.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for charge&lt;br /&gt;
|Temperature: 60C&lt;br /&gt;
Recovery: 55C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for charge&lt;br /&gt;
|Temperature: 0C&lt;br /&gt;
Recovery: 5C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for discharge&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for discharge&lt;br /&gt;
|Temperature: -40C&lt;br /&gt;
Recovery: -35C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection FET&lt;br /&gt;
|Temperature: 80C&lt;br /&gt;
Recovery: 75C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection internal&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables CVM until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection internal&lt;br /&gt;
|Temperature: -20C&lt;br /&gt;
Recovery: -15&lt;br /&gt;
|Triggers fail and disables CVM path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Balancing configuration minimum cell voltage&lt;br /&gt;
|3.60V&lt;br /&gt;
|Minium cell voltage before balancing&lt;br /&gt;
|-&lt;br /&gt;
|Balancing cell voltage delta&lt;br /&gt;
|10mV&lt;br /&gt;
|Minimum cell voltage between cell before stopping balancing (or start balancing if bigger than)&lt;br /&gt;
|-&lt;br /&gt;
|Number of cells balancing simultaneously&lt;br /&gt;
|7 cells&lt;br /&gt;
|CVM supports multiple cell balancing up to 16 cells.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Do the MPPTs have to be modified for the 14S battery?&lt;br /&gt;
*Integrated or seperate charge/discharge paths? (I've got a slight preference for seperate pcb's)&lt;br /&gt;
&lt;br /&gt;
== CAN ID's ==&lt;br /&gt;
&lt;br /&gt;
=== 0x100 ===&lt;br /&gt;
float rPackCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rPerriCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x101 ===&lt;br /&gt;
float rChargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rDischargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x102 ===&lt;br /&gt;
uint16 * 1000 rSOC_pct&lt;br /&gt;
&lt;br /&gt;
uint32 rErrorFlags&lt;br /&gt;
&lt;br /&gt;
uint16 rBalancingStatus&lt;br /&gt;
&lt;br /&gt;
=== 0x103 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_1, rCellVoltages_V_2, rCellVoltages_V_3, rCellVoltages_V_4,&lt;br /&gt;
&lt;br /&gt;
=== 0x104 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_5, rCellVoltages_V_6, rCellVoltages_V_7, rCellVoltages_V_8,&lt;br /&gt;
&lt;br /&gt;
=== 0x105 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_9, rCellVoltages_V_10, rCellVoltages_V_11, rCellVoltages_V_12,&lt;br /&gt;
&lt;br /&gt;
=== 0x106 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_13, rCellVoltages_V_14, rPackVoltage_V, rStackVoltage_V&lt;br /&gt;
&lt;br /&gt;
=== 0x107 ===&lt;br /&gt;
int8 rBattTemps_1, rBattTemps_2, rBattTemps_3, rBattTemps_4&lt;br /&gt;
&lt;br /&gt;
int8 rICTemp_degC&lt;br /&gt;
&lt;br /&gt;
uint8 rBatteryState&lt;br /&gt;
&lt;br /&gt;
uint8 rChargeState&lt;br /&gt;
&lt;br /&gt;
uint8 rMotorState&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=198</id>
		<title>Battery</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Battery&amp;diff=198"/>
		<updated>2024-02-05T19:57:31Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added basic can messages bms&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains the information about the EoI battery development, everything from the requirements to the implementation can be found here.&lt;br /&gt;
&lt;br /&gt;
== What is the battery? ==&lt;br /&gt;
The battery is the energy buffer of the boat, it stores the energy coming in from the solar panels and provides a constant voltage for the motor path and peripheral electronics. The battery consists of multiple parts:&lt;br /&gt;
&lt;br /&gt;
* Battery cells&lt;br /&gt;
* Battery management system (BMS)&lt;br /&gt;
&lt;br /&gt;
The BMS makes sure that the battery cells can't be overcharged or over-discharged, as this might damage them and present dangerous situations. Besides monitoring the voltage a BMS usually monitors the current and temperature as well.&lt;br /&gt;
&lt;br /&gt;
== Technical regulations (as per September 2022) ==&lt;br /&gt;
&lt;br /&gt;
* Maximum nominal voltage: 58,8V (14S lithium-ion)&lt;br /&gt;
* Maximum capacity: 1,5 kWh (= 5400 MJ)&lt;br /&gt;
* All battery cells must be commercially available&lt;br /&gt;
* The BMS must monitor the battery voltage and current&lt;br /&gt;
* The BMS must be capable of shutting down the system&lt;br /&gt;
* The BMS must be able to monitor charge and discharge currents&lt;br /&gt;
* The BMS must have a means to limit over-current in charge and discharge paths&lt;br /&gt;
* The BMS must monitor all individual cells&lt;br /&gt;
* All electrical systems must be provided with a fuse in series connection with the main battery ('Main fuse')&lt;br /&gt;
* The battery must be fused&lt;br /&gt;
* The BMS must be fused&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Functional requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specifiction&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nominal pack voltage&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;lt;= 58,8V&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Maximum capacity&lt;br /&gt;
|&amp;lt;code&amp;gt;1,5 kWh&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) voltage&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) current&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Monitor (pack) temperature&lt;br /&gt;
|&amp;gt;&amp;gt; 1 sensor (8)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Limit overcurrent in (dis)charge path&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Capable of shutting down the whole system&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|CAN-bus communication&lt;br /&gt;
|&amp;lt;code&amp;gt;5V / 1 Mbit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Internal cell balancing&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Charge and discharge paths can be operated simultaneously&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Motor and MPPT should be enabled independently&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|The battery should be enabled with a N.O. contact&lt;br /&gt;
|open = off&lt;br /&gt;
closed = on&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Separate enable contact for Motor path (output) (Optional: Software disable only)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Battery should be fully disabled (all outputs disabled) by emergency switch&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Shelf life (Save battery mode)&lt;br /&gt;
|&amp;gt;= 1 year (&amp;lt;code&amp;gt;2.8mA max&amp;lt;/code&amp;gt;)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Humidity sensor&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Galvanic separation of safety path (bilge and horn)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) I.M.U.&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|(Optional) Phase change cooling hardware&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Electrical requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Motor path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 300A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Charge path (input)&lt;br /&gt;
|&amp;lt;code&amp;gt;60V / 50A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Peri path (output)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 2.5A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Safety path (output) (bilge and horn)&lt;br /&gt;
|&amp;lt;code&amp;gt;24V / 4A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Environmental requirements&lt;br /&gt;
!ID&lt;br /&gt;
!Specification&lt;br /&gt;
!Value&lt;br /&gt;
!Pass/Fail&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Ambient operating temperature&lt;br /&gt;
|0 - 50 °C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Ingress protection&lt;br /&gt;
|IP67 or better&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery Management System ==&lt;br /&gt;
The Battery Management System (BMS) is the brains of the battery and makes sure to manage the battery so it is Dedier proof and does not catch on fire.&lt;br /&gt;
&lt;br /&gt;
The BMS has different functionalities on the PCB and therefore different settings. Since these settings are extensive (especially with the Cell Voltage Monitoring (CVM) chip, this chip does more than only measuring the cell voltages but we will be calling it the CVM from now for better readability.&lt;br /&gt;
&lt;br /&gt;
The BMS has different hardware components that is used in the EoI-battery, these are shown in their corresponding figures throughout the page. Shown below is the full battery system with cells in the box.&lt;br /&gt;
[[File:Battery in box.png|center|thumb|Battery box]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
The full BMS system consist of at least three PCBs that are:&lt;br /&gt;
&lt;br /&gt;
* Main board&lt;br /&gt;
* Current sense board for the discharge &lt;br /&gt;
* Charge path board&lt;br /&gt;
&lt;br /&gt;
Each of the hardware are further elaborated in their own sections.&lt;br /&gt;
&lt;br /&gt;
==== Main board ====&lt;br /&gt;
[[File:Bms pcb top view.jpg|thumb|691x691px|BMS PCB top view]]&lt;br /&gt;
The main board (shown right) is big brain of the battery system. On the main board there are multiple ICs with their own configurations and applications, namely:&lt;br /&gt;
&lt;br /&gt;
* Cell Voltage Measurement IC&lt;br /&gt;
* ADC&lt;br /&gt;
* Microprocessor&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
[[File:Current sense pcb top view.jpg|thumb|Current sense PCB top view]]&lt;br /&gt;
[[File:Charge path PCB top view.jpg|thumb|Charge path PCB top view]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CVM ===&lt;br /&gt;
The CVM that is used on the BMS is the [https://www.ti.com/product/BQ76952 BQ76952], located in the middle of the main board. This CVM-chip has an extensive list of configurations and features which makes it cumbersome to scroll through the code to know which features are enabled and which safety configurations are made. Therefore a list is generated with a description of the used configuration below.&lt;br /&gt;
&lt;br /&gt;
These are preliminary configurations and could be changed through the course of time and should be changed accordingly here as well.&lt;br /&gt;
[[File:FUSE pin.png|thumb|FUSE pin configuration of the CVM IC.|570x570px]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Short description&lt;br /&gt;
!Configuration&lt;br /&gt;
!Long description&lt;br /&gt;
|-&lt;br /&gt;
|Min Blow Fuse Voltage&lt;br /&gt;
|STACK: 60.2V(4.3V per cell)&lt;br /&gt;
|Permanent faults the device and enables FUSE pin to trigger the fuse.&lt;br /&gt;
FUSE pin stays on indefinitely and thus manual intervention is needed. &lt;br /&gt;
|-&lt;br /&gt;
|PF_FUSE&lt;br /&gt;
|Enabled&lt;br /&gt;
|Whenever a permanent fail occurs the FUSE pin should also be triggered.&lt;br /&gt;
|-&lt;br /&gt;
|Internal regualtors 1 &amp;amp; 2&lt;br /&gt;
|Disabled&lt;br /&gt;
|Regulator 1 and 2 are disabled since we do not use that with the CVM on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|Pre-regulator REG0&lt;br /&gt;
|Disabled&lt;br /&gt;
|Pre regulator is used to generate voltages for regulators 1 &amp;amp; 2.&lt;br /&gt;
|-&lt;br /&gt;
|CFETOFF&lt;br /&gt;
|Disabled&lt;br /&gt;
|CFETOFF pin is not used on the BMS.&lt;br /&gt;
|-&lt;br /&gt;
|TS1,2,3&lt;br /&gt;
|18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|Temperature pins are configured to be used in cell temperature protection &lt;br /&gt;
|-&lt;br /&gt;
|DFETOFF&lt;br /&gt;
|DFETOFF pin is configured as a termistor input &lt;br /&gt;
18k resistor model &amp;amp; 18k pull-up resistor internal&lt;br /&gt;
&lt;br /&gt;
Used for cell protection&lt;br /&gt;
|DFETOFF can have different functions and is used for temperature measurement as a termistor input.&lt;br /&gt;
|-&lt;br /&gt;
|DDSG&lt;br /&gt;
|Configured as analogue discharge enable&lt;br /&gt;
|CVM IC can determine if the battery may be discharged. This pin activates the discharge path if everything is within spec&lt;br /&gt;
|-&lt;br /&gt;
|DA&lt;br /&gt;
|Resolution measured current: 0.1mA&lt;br /&gt;
Resolution measured voltage: 10mV&lt;br /&gt;
&lt;br /&gt;
Internal temperature not used for cell/FET protection&lt;br /&gt;
|DA configuration specifies the units for measuring the current and voltage. And can configure if the internal temperature readout should be used for cell protection.&lt;br /&gt;
|-&lt;br /&gt;
|VCELL&lt;br /&gt;
|Disable cell protection on cells 14 and 15&lt;br /&gt;
|Configures which cell should be used for cell protection and which cell should be ignored. Cell 14 and 15 are shorted since EoI uses a 14s battery.&lt;br /&gt;
|-&lt;br /&gt;
|FET settings&lt;br /&gt;
|Disabled&lt;br /&gt;
|The CVM IC can drive its own FETs, as in the MOSFETs can directly be driven by the chip itself since it can run in standalone mode.&lt;br /&gt;
|-&lt;br /&gt;
|FET charge pump&lt;br /&gt;
|Disabled&lt;br /&gt;
|N/A EoI&lt;br /&gt;
|-&lt;br /&gt;
|Shutdown internal temperature&lt;br /&gt;
|80C &lt;br /&gt;
|If measured internal temperature of the CVM is above 80C than the CVM should go into shutdown mode.&lt;br /&gt;
|-&lt;br /&gt;
|Over voltage protection&lt;br /&gt;
|Over voltage: 4.25V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Over voltage reset: 4.00V&lt;br /&gt;
|Over voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Under voltage protection&lt;br /&gt;
|Under voltage: 2.8V&lt;br /&gt;
Delay: 2000ms&lt;br /&gt;
&lt;br /&gt;
Under voltage reset: 3.00V&lt;br /&gt;
|Under voltage protection triggers alert after Delay resets trigger after reset voltage&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure under voltage protection&lt;br /&gt;
|Under voltage: 2.5V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure under voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over voltage protection&lt;br /&gt;
|Over voltage: 4.3V&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over voltage protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure over temperature protection&lt;br /&gt;
|Temperature: 90C&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over temperature protection triggers alert after Delay&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure VSSF protection&lt;br /&gt;
|VSSF: 100mV&lt;br /&gt;
Delay: 5000ms&lt;br /&gt;
|Permanent failure over VSSF triggers alert after Delay. VSSF is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure 2LVL protection&lt;br /&gt;
EDIT: Should not have to use.&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over 2LVL triggers alert after Delay. 2LVL is measured internal of the IC.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure LFOF protection&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure over LFO oscillator frequency deviates from expected value after Delay triggers alert. LFOF is measured internal of the IC. &lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Permanent failure HWMX&lt;br /&gt;
|Delay: 5000ms&lt;br /&gt;
|Permanent failure for input MUX used for OV, UV protection if check fails and fails after Delay trigger alert.&lt;br /&gt;
Needs manual intervention for reset&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for charge&lt;br /&gt;
|Temperature: 60C&lt;br /&gt;
Recovery: 55C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for charge&lt;br /&gt;
|Temperature: 0C&lt;br /&gt;
Recovery: 5C&lt;br /&gt;
|Triggers fail and disables charge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection for discharge&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection for discharge&lt;br /&gt;
|Temperature: -40C&lt;br /&gt;
Recovery: -35C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection FET&lt;br /&gt;
|Temperature: 80C&lt;br /&gt;
Recovery: 75C&lt;br /&gt;
|Triggers fail and disables discharge path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Over temperature protection internal&lt;br /&gt;
|Temperature: 70C&lt;br /&gt;
Recovery: 65C&lt;br /&gt;
|Triggers fail and disables CVM until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Under temperature protection internal&lt;br /&gt;
|Temperature: -20C&lt;br /&gt;
Recovery: -15&lt;br /&gt;
|Triggers fail and disables CVM path until Recovery&lt;br /&gt;
|-&lt;br /&gt;
|Balancing configuration minimum cell voltage&lt;br /&gt;
|3.60V&lt;br /&gt;
|Minium cell voltage before balancing&lt;br /&gt;
|-&lt;br /&gt;
|Balancing cell voltage delta&lt;br /&gt;
|10mV&lt;br /&gt;
|Minimum cell voltage between cell before stopping balancing (or start balancing if bigger than)&lt;br /&gt;
|-&lt;br /&gt;
|Number of cells balancing simultaneously&lt;br /&gt;
|7 cells&lt;br /&gt;
|CVM supports multiple cell balancing up to 16 cells.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open questions ==&lt;br /&gt;
&lt;br /&gt;
* Do the MPPTs have to be modified for the 14S battery?&lt;br /&gt;
*Integrated or seperate charge/discharge paths? (I've got a slight preference for seperate pcb's)&lt;br /&gt;
&lt;br /&gt;
== CAN ID's ==&lt;br /&gt;
&lt;br /&gt;
=== 0x100 ===&lt;br /&gt;
float rPackCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rPerriCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x1031 ===&lt;br /&gt;
float rChargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
float rDischargeCurrent_A&lt;br /&gt;
&lt;br /&gt;
=== 0x102 ===&lt;br /&gt;
uint16 * 1000 rSOC_pct&lt;br /&gt;
&lt;br /&gt;
uint32 rErrorFlags&lt;br /&gt;
&lt;br /&gt;
uint16 rBalancingStatus&lt;br /&gt;
&lt;br /&gt;
=== 0x103 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_1, rCellVoltages_V_2, rCellVoltages_V_3, rCellVoltages_V_4,&lt;br /&gt;
&lt;br /&gt;
=== 0x104 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_5, rCellVoltages_V_6, rCellVoltages_V_7, rCellVoltages_V_8,&lt;br /&gt;
&lt;br /&gt;
=== 0x105 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_9, rCellVoltages_V_10, rCellVoltages_V_11, rCellVoltages_V_12,&lt;br /&gt;
&lt;br /&gt;
=== 0x106 ===&lt;br /&gt;
uint16 * 1000 rCellVoltages_V_13, rCellVoltages_V_14, rPackVoltage_V, rStackVoltage_V&lt;br /&gt;
&lt;br /&gt;
=== 0x107 ===&lt;br /&gt;
int8 rBattTemps_1, rBattTemps_2, rBattTemps_3, rBattTemps_4&lt;br /&gt;
&lt;br /&gt;
int8 rICTemp_degC&lt;br /&gt;
&lt;br /&gt;
uint8 rBatteryState&lt;br /&gt;
&lt;br /&gt;
uint8 rChargeState&lt;br /&gt;
&lt;br /&gt;
uint8 rMotorState&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Datalogger&amp;diff=197</id>
		<title>Datalogger</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Datalogger&amp;diff=197"/>
		<updated>2024-02-05T19:50:15Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added can bus id overview&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The datalogger is a PCB that stores the [[CAN-bus]] data and shows the data on-screen and sends this data to one of the [[Linux servers|EoI-servers]].&lt;br /&gt;
&lt;br /&gt;
The datalogger is quite complex since it is an embedded Linux platform as well as a screen. The embedded platform makes use of a root file system. Compiling of this file system and any modifications are discussed below.&lt;br /&gt;
&lt;br /&gt;
The screen makes use of cross-compiling QT and is on itself quite the big project for compiling and modifying the generated [[Dashboard|GUI]] for the screen. Therefore one can read more about this topic at [[QT Creator Setup|QT Creator Setup.]]&lt;br /&gt;
&lt;br /&gt;
== Datalogs format ==&lt;br /&gt;
As of October '22 the datalogger [[Dashboard|GUI]] is accessing the [[CAN-bus]] data and creating the logfiles and writing them onto its filesystem. The delimiter of the logfile format is a space, this is done to support the http://www.gnuplot.info/ software. This should probably be delimited with a comma or something else.&lt;br /&gt;
&lt;br /&gt;
A snipped of a logfile is given below:&amp;lt;pre&amp;gt;2022-08-27-09-46-55 807280 47.8 -25.4 3.09 28.5 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-56 807530 47.8 -24.9 3.09 28 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-56 807680 47.8 -24.9 3.45 28.3 96 3.99 32.6411 -16.9088 15.2 261 &lt;br /&gt;
2022-08-27-09-46-57 807910 47.8 -25.9 3.29 29.2 96 3.99 32.6411 -16.9089 15.2 261 &lt;br /&gt;
2022-08-27-09-46-57 808090 47.8 -26.2 2.98 29.2 96 3.99 32.6411 -16.9089 15.2 261 &lt;br /&gt;
2022-08-27-09-46-58 808340 47.8 -25.9 3.4 29.4 96 3.99 32.6411 -16.9089 15.2 260 &lt;br /&gt;
2022-08-27-09-46-58 808560 47.8 -24.9 2.98 27.9 96 3.99 32.6411 -16.9089 15.2 260 &lt;br /&gt;
2022-08-27-09-46-59 808740 47.8 -26 3.02 29 96 3.99 32.6411 -16.909 15.2 261&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Date and Time&lt;br /&gt;
!Time since start&lt;br /&gt;
!Battery voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current netto &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current in &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Battery current out &amp;lt;code&amp;gt;[A]&amp;lt;/code&amp;gt;&lt;br /&gt;
!SoC &amp;lt;code&amp;gt;[%]&amp;lt;/code&amp;gt;&lt;br /&gt;
!Highest cell voltage &amp;lt;code&amp;gt;[V]&amp;lt;/code&amp;gt;&lt;br /&gt;
!GPS latitude&lt;br /&gt;
!GPS longitude&lt;br /&gt;
!GPS speed &amp;lt;code&amp;gt;[km/h]&amp;lt;/code&amp;gt;&lt;br /&gt;
!GPS track&lt;br /&gt;
|-&lt;br /&gt;
|2022-08-27-09-46-55&lt;br /&gt;
|807280&lt;br /&gt;
|47.8&lt;br /&gt;
| -25.4&lt;br /&gt;
|3.09&lt;br /&gt;
|28.5&lt;br /&gt;
|96&lt;br /&gt;
|3.99&lt;br /&gt;
|32.6411&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-16.9088&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|15.2&lt;br /&gt;
|261&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Rootfs ==&lt;br /&gt;
The datalogger uses a Debian 10 root file system (rootfs), this page walks you through the steps of setting this up and making modifications.&lt;br /&gt;
&lt;br /&gt;
This process has been automated, this is described in the datalogger rootfs repository https://git.engineersofinnovation.nl/datalogger/rootfs&lt;br /&gt;
&lt;br /&gt;
If you'd like do all the steps manually by all means, please continue reading.&lt;br /&gt;
&lt;br /&gt;
=== Creating a Debian filesystem ===&lt;br /&gt;
To  create  a  filesystem  we  use debootstrap. This guide has been tested on Ubuntu 18.04 and Debian 10 Host machines.&lt;br /&gt;
&lt;br /&gt;
==== 1. Install the required dependencies ====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install debootstrap qemu-user-static binfmt-support&amp;lt;/code&amp;gt;&lt;br /&gt;
====2. Create a new directory 'debian-fs' and enter it====&lt;br /&gt;
&amp;lt;code&amp;gt;mkdir ~/Documents/Datalogger/rootfs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cd ~/Documents/Datalogger/rootfs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====3. run the first stage bootstrap====&lt;br /&gt;
&amp;lt;code&amp;gt;debootstrap --no-check-gpg --arch=armhf --foreign --include apt,kmod,lsof,ssh,wget,dialog buster rootfs &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====4. set up emulation by copying the qemu executable====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cp ./qemu-arm-static rootfs/usr/bin&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====5. run the second stage debootstrap ====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chroot rootfs /debootstrap/debootstrap --second-stage&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====6. Configure the rootfs for your board, run the following script====&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;!/bin/sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Modification from acmesystems acqua.sh, please visit their website for great documentation! (acmesystems.it)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Directory contains the target rootfs&lt;br /&gt;
&lt;br /&gt;
TARGET_ROOTFS_DIR=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Board hostname&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/hostname&lt;br /&gt;
&lt;br /&gt;
echo eoi-datalogger &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bashrc user/hostname color (optional)&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/root/.bashrc&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;PS1='\${debian_chroot:+(\$debian_chroot)}\[\033[01;96m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\\$ '&amp;quot; &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Default name servers&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
echo nameserver 8.8.8.8 &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo nameserver 8.8.4.4 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Default network interfaces&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/network/interfaces&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;echo auto eth0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo allow-hotplug eth0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo iface eth0 inet dhcp &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo hwaddress ether 00:04:25:12:34:56 &amp;gt;&amp;gt; $filename    #eth0 MAC address&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo auto wlan0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo iface wlan0 inet dhcp &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo wireless-essid any &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo post-down killall -q wpa_supplicant &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; configure Wi-Fi AP&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/wpa_supplicant.conf&lt;br /&gt;
&lt;br /&gt;
touch $filename&lt;br /&gt;
&lt;br /&gt;
echo ctrl_interface=/var/run/wpa_supplicant &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo ap_scan=1 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo network={ &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo 'ssid=&amp;quot;testnaam&amp;quot;' &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo 'psk=&amp;quot;testtest&amp;quot;' &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo } &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Set the the debug port&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/inittab&lt;br /&gt;
&lt;br /&gt;
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Set rules to change wlan dongles&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/udev/rules.d/70-persistent-net.rules&lt;br /&gt;
&lt;br /&gt;
echo SUBSYSTEM=='&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, ATTR{address}==&amp;quot;*&amp;quot;, ATTR{dev_id}==&amp;quot;0x0&amp;quot;, ATTR{type}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;wlan*&amp;quot;, NAME=&amp;quot;wlan0&amp;quot;' &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; microSD partitions mounting&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/fstab&lt;br /&gt;
&lt;br /&gt;
echo /dev/mmcblk0p1 /boot vfat noatime 0 1 &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo /dev/mmcblk0p2 / ext4 noatime 0 1 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo proc /proc proc defaults 0 0 &amp;gt;&amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Add the standard Debian non-free repositories useful to load&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; closed source firmware (i.e. WiFi dongle firmware)&lt;br /&gt;
&lt;br /&gt;
filename=$TARGET_ROOTFS_DIR/etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
echo deb &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt; buster main contrib non-free &amp;gt; $filename&lt;br /&gt;
&lt;br /&gt;
echo deb-src &amp;lt;nowiki&amp;gt;http://deb.debian.org/debian/&amp;lt;/nowiki&amp;gt; buster main contrib non-free &amp;gt;&amp;gt; $filename&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====7. Install required packages ====&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y net-tools udev iputils-ping ifupdown isc-dhcp-client ca-certificates wpasupplicant firmware-ralink wvdial iw resolvconf libssl-dev ppp autossh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y locales adduser nano usbutils can-utils i2c-tools git fonts-dejavu gpsd gpsd-clients libqgpsmm-dev libqgpsmm23 minicom picocom python3 python3-pip python3-numpy libsocketcan-dev psmisc moreutils&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libegl1-mesa libegl1-mesa-dev libgles2-mesa-dev mesa-common-dev mesa-utils libgbm-dev libgbm1 libbz2-dev libdrm-dev libgles2-mesa&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt install -y qt5-default qtdeclarative5-* qml-module-qtquick* qml-module-qtquick2 qtquickcontrols5-* qtserialbus5-* qttools5-* qtbase5-* libqt5svg5-* libqtwebkit-* qtmultimedia5-* qmlscene qml gstreamer1.0-omx libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt build-dep qt4-x11 -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo LC_ALL=C LANGUAGE=C LANG=C chroot rootfs apt build-dep libqt5gui5 -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====8. set a root password====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo chroot rootfs passwd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 9. remove the qemu binary====&lt;br /&gt;
&amp;lt;code&amp;gt;sudo rm rootfs/usr/bin/qemu-arm-static&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====10. download and apply the patchfiles====&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/ssh_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/ssh_patch_client.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/gpsd_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wget &amp;lt;nowiki&amp;gt;https://git.engineersofinnovation.nl/datalogger/rootfs/-/raw/master/patches/4g_patch.patch&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/ssh_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/ssh_patch_client.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/gpsd_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo patch -p1 &amp;lt; ./patches/4g_patch.patch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====11. Other stuff====&lt;br /&gt;
PPP setup?&lt;br /&gt;
&lt;br /&gt;
https://github.com/sixfab/Sixfab_PPP_Installer&lt;br /&gt;
&lt;br /&gt;
Daemons and services for gui and other scripts?&lt;br /&gt;
&lt;br /&gt;
== CAN bus ID Overview ==&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
0x100 EoI Battery start&lt;br /&gt;
0x10F EoI Battery end&lt;br /&gt;
&lt;br /&gt;
0x302 MG Battery &lt;br /&gt;
0x402 MG Battery&lt;br /&gt;
0x482 MG Battery cell voltage&lt;br /&gt;
&lt;br /&gt;
0x700 MPPT start&lt;br /&gt;
0x77F MPPT end&lt;br /&gt;
&lt;br /&gt;
0x0900 THROTTLE To VESC&lt;br /&gt;
0x1337 THROTTLE Status&lt;br /&gt;
&lt;br /&gt;
0x0909 VESC Status message 1&lt;br /&gt;
0x0E09 VESC Status message 2&lt;br /&gt;
0x0F09 VESC Status message 3&lt;br /&gt;
0x1009 VESC Status message 4&lt;br /&gt;
0x1B09 VESC Status message 5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=Live_data&amp;diff=170</id>
		<title>Live data</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=Live_data&amp;diff=170"/>
		<updated>2023-05-17T15:49:42Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: added known issues for connecting ha to mqtt broker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The live data of the [[Solar boat (boii)|solar boat]] is build upon the logged [[CAN-bus|CAN-data]] from the [[datalogger]] that sends a JSON string of MQTT packet to the [[Linux servers|EoI Linux server]] that can be used to show in the home assistant dashboard.&lt;br /&gt;
&lt;br /&gt;
This dashboard can be accessed through [https://Live.boi2.nl live.boi2.nl]. Where a login is prompted before it can be accessed, the login can be asked from: '''Quinten or Floris.'''&lt;br /&gt;
&lt;br /&gt;
== Home assistant dashboard ==&lt;br /&gt;
The home assistant dashboard is subscribed to the MQTT topic, where the [[CAN-bus|CAN-data]] is processed and shown on the dashboard.&lt;br /&gt;
&lt;br /&gt;
=== Pages ===&lt;br /&gt;
On the dashboard there are multiple pages where the data is shown to the user. A list of those pages are given below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!'''Pagename'''&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|HOME&lt;br /&gt;
|This is the overview with common used data during a race.&lt;br /&gt;
|-&lt;br /&gt;
|BATTERY&lt;br /&gt;
|A detailed view within the state of the battery.&lt;br /&gt;
|-&lt;br /&gt;
|MPPT&lt;br /&gt;
|A detailed view of the different MPPTs.&lt;br /&gt;
|-&lt;br /&gt;
|GRAPHS&lt;br /&gt;
|A graph showing the power output of all the solar panels.&lt;br /&gt;
|-&lt;br /&gt;
|MAP&lt;br /&gt;
|Map showing the location of the boat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Wish list ==&lt;br /&gt;
The dashboard and plug-ins that home assistant provides is still in its infant state and can be drastically improved to show the data in a sophisticated way. Therefore a list of possible improvements are shown here.&lt;br /&gt;
&lt;br /&gt;
* An easier way to create graphs for different variables&lt;br /&gt;
* Map were a path can be drawn and calculate distance ( for long distance races )&lt;br /&gt;
* A way to start a timer of some sort to create a point for data analysis&lt;br /&gt;
* A way to show estimated time on basis of incoming and outgoing power&lt;br /&gt;
*As of now the dashboard only includes live data that is sent to the server via MQTT. A way for simulating data while the [[datalogger]] is not generating that data, is a must feature for developing strategies.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Connecting our MQTT to Home Assistant might not work when setting it up via add new integration button, since we are using MQTT with TLS for encryption. Work flow is as follows:&lt;br /&gt;
&lt;br /&gt;
Go to you profile in HA, enable '''Advanced Mode''', then go to Settings-&amp;gt;Integrations and click on add integration, search for MQTT and click on it (plain). Open Advanced settings, fill everything out as shown below:&lt;br /&gt;
[[File:Mqtt config 2.png|thumb]]&lt;br /&gt;
[[File:Mqtt config 1.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=File:Mqtt_config_2.png&amp;diff=169</id>
		<title>File:Mqtt config 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=File:Mqtt_config_2.png&amp;diff=169"/>
		<updated>2023-05-17T15:48:22Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mqtt config&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
	<entry>
		<id>https://wiki.engineersofinnovation.nl/index.php?title=File:Mqtt_config_1.png&amp;diff=168</id>
		<title>File:Mqtt config 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.engineersofinnovation.nl/index.php?title=File:Mqtt_config_1.png&amp;diff=168"/>
		<updated>2023-05-17T15:42:30Z</updated>

		<summary type="html">&lt;p&gt;Fromeijn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mqtt config&lt;/div&gt;</summary>
		<author><name>Fromeijn</name></author>
	</entry>
</feed>