<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.elcanoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Elcanoadmin</id>
	<title>Elcano Project Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.elcanoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Elcanoadmin"/>
	<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/Special:Contributions/Elcanoadmin"/>
	<updated>2026-05-19T17:14:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.2</generator>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=521</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=521"/>
		<updated>2026-05-18T23:58:51Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Theory of operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|600px|]] - 3D PCB Model on KiCAD [[File:Screenshot 2025-06-02 220036.png|600 px|]] -  PCB Diagram on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|600 px|]] - Schematic 1/3 on KiCAD [[File:Screenshot 2025-06-07-232533.png|600 px|]] - Schematic 2/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|600 px|]] - Schematic 3/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The 4.1 board was never built. It evolved into the version 5.0 board.&lt;br /&gt;
This board design is based on DBW V4.0 board. The Steering Board V4.1 was built, but never worked well. It turns out that the standard Arduino Motor Control shield can replace the Steering Board. &lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=520</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=520"/>
		<updated>2026-05-18T23:56:37Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|600px|]] - 3D PCB Model on KiCAD [[File:Screenshot 2025-06-02 220036.png|600 px|]] -  PCB Diagram on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|600 px|]] - Schematic 1/3 on KiCAD [[File:Screenshot 2025-06-07-232533.png|600 px|]] - Schematic 2/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|600 px|]] - Schematic 3/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The 4.1 board was never built. It evolved into the version 5.0 board.&lt;br /&gt;
This board design is based on DBW V4.0 board. The Steering Board V4.1 was built, but never worked well. It turns out that the standard Arduino Motor Control shield can replace the Steering Board. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=519</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=519"/>
		<updated>2026-05-18T23:49:55Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Drive-By-Wire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Welcome to the Elcano Project Wiki =&lt;br /&gt;
As the title says, WELCOME TO THE ELCANO PROJECT! Over the past few years, many different teams have been working hard to create Cheap and Modular autonomy at the University of Washington Bothell. We are currently working on our first two prototypes which are now in the form of tricycles. With the use of affordable microcontrollers, such as the Arduino Mega 2560 and Raspberry PI, we are working towards creating Autonomy for anyone to rebuild anywhere, and that under $2000 and fully open-source. But we don't plan to stop there, no. That is just the first step in reaching our ultimate goal, which is making our systems applicable to any desired ground vehicles, such as cars and other vehicles. Autonomy is nothing new, in fact, it has been around for over 40 years, the difference is that now we have the ability to make it available for anyone who desires to further their knowledge or simply finding a safer way to work.&lt;br /&gt;
&lt;br /&gt;
Visit our github repository [//https://github.com/elcano here].&lt;br /&gt;
&lt;br /&gt;
To '''edit articles''' or '''upload files''', please create an account and request editing rights from a [//www.elcanoproject.org/wiki/index.php?title=Special:ListUsers&amp;amp;group=bureaucrat member of the &amp;quot;bureaucrat&amp;quot; group].&lt;br /&gt;
&lt;br /&gt;
For editing, help visit https://www.mediawiki.org/wiki/Help:Editing_pages or https://www.mediawiki.org/wiki/Help:Formatting.&lt;br /&gt;
--------&lt;br /&gt;
[[File:Catrikes.JPG|1000px]]&lt;br /&gt;
== [[ElcanoIntro | Overview]] ==&lt;br /&gt;
The basic concept of how the Elcano Project vehicle works.&lt;br /&gt;
&lt;br /&gt;
== [[System Architecture]] ==&lt;br /&gt;
How processors connect to sensors, each other, actuators, and other hardware. Includes processor-to-processor communication protocol.&lt;br /&gt;
&lt;br /&gt;
== [[Communication | Communication (CAN Bus)]] ==&lt;br /&gt;
How processors exchange data on the vehicle and a description of data packet contents.&lt;br /&gt;
&lt;br /&gt;
== [[Power System]] ==&lt;br /&gt;
How different modules connect to the batteries or power subsystem hardware.&lt;br /&gt;
&lt;br /&gt;
== [[Low Level]] ==&lt;br /&gt;
&lt;br /&gt;
== [[Drive-By-Wire]] ==&lt;br /&gt;
How the version 5 Drive-By-Wire system (aka Low-Level) uses inputs to control actuators to steer, move, and stop the vehicle.&lt;br /&gt;
&lt;br /&gt;
== [[High Level]] ==&lt;br /&gt;
How the High Level (aka Sensor Hub) system uses stored maps and inputs from navigational sensors to formulate movement instructions sent to Low Level.&lt;br /&gt;
&lt;br /&gt;
Using a stored map of the area of operation, nodes will be created around the map as appropriate. The vehicle program will then implement Dijkstra's Algorithm to get from the starting node to the desired node. Should the vehicle encounter an impassable obstacle, it will revert to its most recent node visited and reimplement Dijkstra's Algorithm. However, this time, the pathing where the obstacle lies will be ignored to use a different path.&lt;br /&gt;
&lt;br /&gt;
If an obstacle can be traversed around, then the vehicle will sense which side (left or right) of the path is being occupied by the obstacle. The vehicle will then veer to the left or right accordingly. There will be sensors to ensure that the vehicle won't go over the path edge, which could be dangerous. In this scenario, the vehicle will reverse and consider the obstacle impassable.&lt;br /&gt;
&lt;br /&gt;
== [[RemoteControl]] ==&lt;br /&gt;
Human control of trike movements through Low Level using hardware connected to Low Level by a radio communication link (drive-by radio). Includes onboard controls (drive by wire).&lt;br /&gt;
&lt;br /&gt;
== [[ Simulator]] ==&lt;br /&gt;
Using the Open-source CARLA platform with a go-between board allows simulation.&lt;br /&gt;
&lt;br /&gt;
== [[SensorsPage]] ==&lt;br /&gt;
&lt;br /&gt;
=== [[SteeringSensor]] ===&lt;br /&gt;
The front wheel angle detector.&lt;br /&gt;
&lt;br /&gt;
=== [[Sonar]] === &lt;br /&gt;
How the sonar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[Lidar]] ===&lt;br /&gt;
How the lidar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
The LiDAR sensor is able to detect the distance and angle of any object in its view. This data can be used by the high-level software to determine where an obstacle is located for the vehicle to avoid.&lt;br /&gt;
&lt;br /&gt;
=== [[ Camera]] ===&lt;br /&gt;
How the camera and vision subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
== [[ActuatorPage]] ==&lt;br /&gt;
&lt;br /&gt;
== [[ Board Diagrams]] ==&lt;br /&gt;
Images of Elcano Project's printed circuit boards for reference. PCB source files and schematics are maintained and stored at [//github.com/elcano].&lt;br /&gt;
&lt;br /&gt;
== Software development procedures ==&lt;br /&gt;
&lt;br /&gt;
=== [[Software repositories]] ===&lt;br /&gt;
What's in each of our GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
Luke Kustra's repo: https://github.com/luke-kustra/JetHawk-LKustra.git &lt;br /&gt;
&lt;br /&gt;
Luke's contribution was experimenting with the LiDAR sensor. He was able to get the LiDAR to deactivate and display information about its surroundings, including the number of objects and their distance from the LiDAR sensor. Of course, the sensor should never deactivate when in real use; however, this deactivation is proof that the LiDAR is ready to be utilized in a larger system such as a vehicle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Henry Haight's repo: https://github.com/Autonomous-ATV-Capstone-Team-Sequence/-LIDAR&lt;br /&gt;
&lt;br /&gt;
=== [[Arduino software]] ===&lt;br /&gt;
Getting started; references; development tools. Dealing with libraries and different parameters for each vehicle.&lt;br /&gt;
&lt;br /&gt;
=== [[Using Git and GitHub]] ===&lt;br /&gt;
Practices for maintaining code and source files on Elcano Project's GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
==[[FilesPage | Files]] ==&lt;br /&gt;
These are media files (pictures, videos, etc.) that are part of the project but are not maintained under version control.&lt;br /&gt;
&lt;br /&gt;
== Elcano Project Main Website ==&lt;br /&gt;
* [//www.elcanoproject.org]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=518</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=518"/>
		<updated>2026-05-18T23:40:57Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Low Level */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Welcome to the Elcano Project Wiki =&lt;br /&gt;
As the title says, WELCOME TO THE ELCANO PROJECT! Over the past few years, many different teams have been working hard to create Cheap and Modular autonomy at the University of Washington Bothell. We are currently working on our first two prototypes which are now in the form of tricycles. With the use of affordable microcontrollers, such as the Arduino Mega 2560 and Raspberry PI, we are working towards creating Autonomy for anyone to rebuild anywhere, and that under $2000 and fully open-source. But we don't plan to stop there, no. That is just the first step in reaching our ultimate goal, which is making our systems applicable to any desired ground vehicles, such as cars and other vehicles. Autonomy is nothing new, in fact, it has been around for over 40 years, the difference is that now we have the ability to make it available for anyone who desires to further their knowledge or simply finding a safer way to work.&lt;br /&gt;
&lt;br /&gt;
Visit our github repository [//https://github.com/elcano here].&lt;br /&gt;
&lt;br /&gt;
To '''edit articles''' or '''upload files''', please create an account and request editing rights from a [//www.elcanoproject.org/wiki/index.php?title=Special:ListUsers&amp;amp;group=bureaucrat member of the &amp;quot;bureaucrat&amp;quot; group].&lt;br /&gt;
&lt;br /&gt;
For editing, help visit https://www.mediawiki.org/wiki/Help:Editing_pages or https://www.mediawiki.org/wiki/Help:Formatting.&lt;br /&gt;
--------&lt;br /&gt;
[[File:Catrikes.JPG|1000px]]&lt;br /&gt;
== [[ElcanoIntro | Overview]] ==&lt;br /&gt;
The basic concept of how the Elcano Project vehicle works.&lt;br /&gt;
&lt;br /&gt;
== [[System Architecture]] ==&lt;br /&gt;
How processors connect to sensors, each other, actuators, and other hardware. Includes processor-to-processor communication protocol.&lt;br /&gt;
&lt;br /&gt;
== [[Communication | Communication (CAN Bus)]] ==&lt;br /&gt;
How processors exchange data on the vehicle and a description of data packet contents.&lt;br /&gt;
&lt;br /&gt;
== [[Power System]] ==&lt;br /&gt;
How different modules connect to the batteries or power subsystem hardware.&lt;br /&gt;
&lt;br /&gt;
== [[Drive-By-Wire]] ==&lt;br /&gt;
How the  Drive-By-Wire system (aka Low-Level) uses inputs to control actuators to steer, move, and stop the vehicle.&lt;br /&gt;
&lt;br /&gt;
== [[High Level]] ==&lt;br /&gt;
How the High Level (aka Sensor Hub) system uses stored maps and inputs from navigational sensors to formulate movement instructions sent to Low Level.&lt;br /&gt;
&lt;br /&gt;
Using a stored map of the area of operation, nodes will be created around the map as appropriate. The vehicle program will then implement Dijkstra's Algorithm to get from the starting node to the desired node. Should the vehicle encounter an impassable obstacle, it will revert to its most recent node visited and reimplement Dijkstra's Algorithm. However, this time, the pathing where the obstacle lies will be ignored to use a different path.&lt;br /&gt;
&lt;br /&gt;
If an obstacle can be traversed around, then the vehicle will sense which side (left or right) of the path is being occupied by the obstacle. The vehicle will then veer to the left or right accordingly. There will be sensors to ensure that the vehicle won't go over the path edge, which could be dangerous. In this scenario, the vehicle will reverse and consider the obstacle impassable.&lt;br /&gt;
&lt;br /&gt;
== [[RemoteControl]] ==&lt;br /&gt;
Human control of trike movements through Low Level using hardware connected to Low Level by a radio communication link (drive-by radio). Includes onboard controls (drive by wire).&lt;br /&gt;
&lt;br /&gt;
== [[ Simulator]] ==&lt;br /&gt;
Using the Open-source CARLA platform with a go-between board allows simulation.&lt;br /&gt;
&lt;br /&gt;
== [[SensorsPage]] ==&lt;br /&gt;
&lt;br /&gt;
=== [[SteeringSensor]] ===&lt;br /&gt;
The front wheel angle detector.&lt;br /&gt;
&lt;br /&gt;
=== [[Sonar]] === &lt;br /&gt;
How the sonar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[Lidar]] ===&lt;br /&gt;
How the lidar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
The LiDAR sensor is able to detect the distance and angle of any object in its view. This data can be used by the high-level software to determine where an obstacle is located for the vehicle to avoid.&lt;br /&gt;
&lt;br /&gt;
=== [[ Camera]] ===&lt;br /&gt;
How the camera and vision subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
== [[ActuatorPage]] ==&lt;br /&gt;
&lt;br /&gt;
== [[ Board Diagrams]] ==&lt;br /&gt;
Images of Elcano Project's printed circuit boards for reference. PCB source files and schematics are maintained and stored at [//github.com/elcano].&lt;br /&gt;
&lt;br /&gt;
== Software development procedures ==&lt;br /&gt;
&lt;br /&gt;
=== [[Software repositories]] ===&lt;br /&gt;
What's in each of our GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
Luke Kustra's repo: https://github.com/luke-kustra/JetHawk-LKustra.git &lt;br /&gt;
&lt;br /&gt;
Luke's contribution was experimenting with the LiDAR sensor. He was able to get the LiDAR to deactivate and display information about its surroundings, including the number of objects and their distance from the LiDAR sensor. Of course, the sensor should never deactivate when in real use; however, this deactivation is proof that the LiDAR is ready to be utilized in a larger system such as a vehicle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Henry Haight's repo: https://github.com/Autonomous-ATV-Capstone-Team-Sequence/-LIDAR&lt;br /&gt;
&lt;br /&gt;
=== [[Arduino software]] ===&lt;br /&gt;
Getting started; references; development tools. Dealing with libraries and different parameters for each vehicle.&lt;br /&gt;
&lt;br /&gt;
=== [[Using Git and GitHub]] ===&lt;br /&gt;
Practices for maintaining code and source files on Elcano Project's GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
==[[FilesPage | Files]] ==&lt;br /&gt;
These are media files (pictures, videos, etc.) that are part of the project but are not maintained under version control.&lt;br /&gt;
&lt;br /&gt;
== Elcano Project Main Website ==&lt;br /&gt;
* [//www.elcanoproject.org]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=517</id>
		<title>Simulator</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=517"/>
		<updated>2026-05-18T23:33:44Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* 2026 Simulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Elcano Carla Simulation External Specification =&lt;br /&gt;
&lt;br /&gt;
[http://carla.org/ CARLA] is an open-source driving simulator. During 2019-20 students develop3e a  go-between circuit board to transfer data between CARLA simulation and the sensor slots of the Elcano hardware. The CARLA software allows users to emulate trike parameters under controlled conditions within a virtual world, providing an efficient system for testing sensor behavior, design implementation, and bench-marking overall vehicle progress. The CARLA software can simulate a variety of road conditions such as traffic patterns, inclines, and weather as well as provide users control over vehicle parameters including weight, engine power, and aerodynamic properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An Arduino Due serves as a router to transfer data from vehicle systems to CARLA under a variety of test conditions, enabling the software to replicate responses and return sensor data to be reevaluated for accuracy. The [https://micro-av.com/store/ols/products/carla-bridge CARLA Micro-AV Bridge] includes the Router, Sensor Hub and Drive-by-wire Arduinos. It permits testing the Elcano trike software, including camera, sonar, throttle, steering and brake systems. Simulation allows users to immediately see the results of adjustments to vehicle parameters and highlight physical aspects of the trike within the virtual environment. This project enables users to efficiently implement improvements and track the immediate effects of design changes without spending the time and resources it would take to transport or operate the trike in real world test scenarios. It enables developers to improve the software without needing to invest in a vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture_CAN_Sim_7_7_20.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The following is a generalized list of the desired functionality of the simulator.&lt;br /&gt;
* Simulate data for all sensors associated with Elcano Trike.&lt;br /&gt;
* Simulate Elcano behavior to throttle, brake, and steering.&lt;br /&gt;
* Have low and high-level boards function normally with the simulated sensor data without knowing data is being simulated.&lt;br /&gt;
* Allow low and high-level board interaction to be tested.&lt;br /&gt;
* Allow autonomous driving to be tested.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
''' Simulation''' &lt;br /&gt;
Code to be executed by a computer that has access to a Carla server, either locally, or through a network.  Controls all objects in Carla simulation.  Retrieves sensor data from Carla, and sends router board.  Also retrieves actuation instructions from the router board and sends to Carla.&lt;br /&gt;
&lt;br /&gt;
'''Sensor Hub [aka High Level] Processor''' &lt;br /&gt;
The same code is used for the virtual or physical vehicle, sending and receiving messages over the CAN Bus. The CARLA Bridge replaces sensor data that would normally come from instruments.&lt;br /&gt;
&lt;br /&gt;
'''Drive-by-wire [aks C2 LowLevel] Processor''' &lt;br /&gt;
Current Elcano Drive-by-wirel code. Actuator data is routed to CARLA.&lt;br /&gt;
&lt;br /&gt;
'''[https://micro-av.com/store/ols/products/carla-bridge Router Board]''' &lt;br /&gt;
Code is executed on the Arduino Due that functions as the router board.  Routes commands from Drive-by-wire to Carla via Python scripts.  Also routes sensor data from Carla to Sensor Hub processor.&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020A.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020B.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==  Current Functionality of Simulation ==&lt;br /&gt;
At the end our Autumn 2019 Capstone, we were able to deliver a demo that demonstrated communication between all components; high-level board (Arduino Due), low-level board (Arduino Mega 2560) with shield running low level code, router board (Arduino Due), and the instance of Carla.  The instructions on how to reproduce the demo will be given later in this document. The primary roadblock that prevented further development into this project was the state of the CAN system of the Elcano trike (particularly the transceiver board which seems to have a flawed design).  These are the current features of the simulator.&lt;br /&gt;
* Implementation of USB serial communication between router board and computer running simulator.py.  Both entities (Computer and ArduinoDue) can send and receive data through USB connection.&lt;br /&gt;
* Implementation of a cyclometer.  Router board can receive the current speed of the simulated vehicle in Carla and convert it into an interrupt-based cyclometer pulse, based on the wheel dimension of the Elcano.  Also considers the random error of cyclometer present on the Elcano trike.  This can be debugged with the built-in LED on the router board.&lt;br /&gt;
* Implementation of NMEA GPS sensor.  Carla is able the output NMEA GPS data to the router board 10 times per second, effectively simulating the GPS sensor on the high-level board.  Router board is successfully able to output it to UART serial which is how it is transmitted to the high-level board.&lt;br /&gt;
* Implementation of timing structure.  Computer running simulator.py waits for data to be interpreted from the router board while the router board executes its update 10 times per second.  This is the desired speed for both sensor data and actuation data to be updated.&lt;br /&gt;
* Implementation of vehicle control updaters through throttle, brake, and steering data.  The computer running simulator.py can take desired throttle, brake, and steering and convert them into corresponding commands for Carla using Carla API. These commands move the vehicle within Carla.  This is the primarily what the demo shows.&lt;br /&gt;
&lt;br /&gt;
== Demo Guide (How to Set-Up) ==&lt;br /&gt;
The following is a guide to set up the Elcano simulator.&lt;br /&gt;
&lt;br /&gt;
===''' Materials '''===&lt;br /&gt;
* 1 Assembled Elcano Simulator Printed Circuit Board (PCB)&lt;br /&gt;
* 2 Arduino Due&lt;br /&gt;
* 1 Arduino Mega 2560&lt;br /&gt;
* 1 Box (200 x 150 x 70 mm)&lt;br /&gt;
* 2 Voltage Level Converter (included w/Simulator PCB)&lt;br /&gt;
* 1 SD Card (w/map files)&lt;br /&gt;
* 1 USB AB Cable (for Arduino Mega)&lt;br /&gt;
* 1 USB Micro Cable (for Arduino Due)&lt;br /&gt;
* 1 computer capable of running Carla&lt;br /&gt;
&lt;br /&gt;
===''' Pre-installation '''===&lt;br /&gt;
Use the following instructions to install the required software to run the simulation.&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Python '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#* Install Python 3 (if not installed already)&lt;br /&gt;
#::-experiments used version 3.7.6&lt;br /&gt;
#* In a terminal, move to .\Simulation\&lt;br /&gt;
#* Run the command “pip3 install -r requirements.txt” to have pip install all the required python libraries for the simulator&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' CARLA '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#*Download [https://carla.org/2020/03/09/release-0.9.8/ CARLA (0.9.8)]&lt;br /&gt;
#*CARLA requirements:&amp;lt;br /&amp;gt;[[File:Carla_Requirements.jpg|500px|]]&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Arduino Libraries '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;Download these Arduino libraries prior to running the simulation:&lt;br /&gt;
#* [https://github.com/Seeed-Studio/CAN_BUS_Shield CAN_BUS_SHIELD by Seeed-Studio]&lt;br /&gt;
#* [https://github.com/br3ttb/Arduino-PID-Library PID by Brett Beauregard]&lt;br /&gt;
#* [https://github.com/NicoHood/PinChangeInterrupt Pin Change Interrupt by Nico Hood]&lt;br /&gt;
#* [https://github.com/SweBarre/MCP48x2 MCP48x2 DAC by Jonas Forsberg]&lt;br /&gt;
#* [https://github.com/ivanseidel/DueTimer Arduino Due Timer Interrupts by Ivan Seidel]&lt;br /&gt;
#* Previous version of [https://github.com/collin80/due_can Arduino Due CAN Bus library] is used but the necessary files are included within the repository.&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Elcano Repositories '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;The Elcano repositories are needed to run the simulation:&lt;br /&gt;
#*[https://github.com/elcano/HighLevel High Level]&lt;br /&gt;
#*[https://github.com/elcano/Simulator Simulator (Router Board &amp;amp; Simulator Script)]&lt;br /&gt;
#*[https://github.com/elcano/Drive-by-wire Drive-by-wire (Low Level)]&lt;br /&gt;
===''' Run Simulation '''===&lt;br /&gt;
Once all the requirements are installed, use the following instructions to run the simulation. &lt;br /&gt;
&amp;lt;br /&amp;gt;[[File:Router_PCB_Connections.jpg|500px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;'''''Step 1: Program all Arduinos'''''&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;router_board_v1.ino&amp;lt;/b&amp;gt; to the router Arduino Due programming port &lt;br /&gt;
#Upload &amp;lt;b&amp;gt;High_Level.ino&amp;lt;/b&amp;gt; to the high level Arduino Due programming port&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;Drive_By_Wire.ino&amp;lt;/b&amp;gt; to the low level Arduino Mega 2560&lt;br /&gt;
'''''Step 2: Run CARLA'''''&lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the directory where CARLA is installed (CARLAUE4.exe)&lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\ElcanoInstaller\CARLA\WindowsNoEditor&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From the CARLA directory, type:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
#:Or, to run in low resolution mode:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe -ResX=720 -ResY=480 -quality-level=Low&amp;lt;/code&amp;gt;&lt;br /&gt;
'''''Step 3: Run Simulation'''''&lt;br /&gt;
#Connect your PC to the native port on the Router Board Due &lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the Simulation directory &lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\Simulator\Simulation&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From Simulation directory, start the Simulator UI &lt;br /&gt;
#:&amp;lt;code&amp;gt;.\Simulation\start.bat&amp;lt;/code&amp;gt;&lt;br /&gt;
#By default, the Simulator UI will populate local running CARLA settings&lt;br /&gt;
#*For control via the router board, leave mode as Auto&lt;br /&gt;
#*To control via manual keyboard input, change mode to Manual.&lt;br /&gt;
#*If running a network-based CARLA server, enter IP and Port of CARLA into the respective boxes. (i.e. 192.168.1.1, 2010)&lt;br /&gt;
#Click &amp;quot;Connect to CARLA&amp;quot;&lt;br /&gt;
#*If Auto mode, it will pop up a selection of COM devices, select routerboard native port COM to begin and press go. &lt;br /&gt;
#*If Manual mode, client will start with keyboard controls (WASD)&lt;br /&gt;
#Observe behavior in simulator.  &lt;br /&gt;
#If car gets stuck, kill current simulator.py process and restart.&lt;br /&gt;
===''' Debug/Logging '''===&lt;br /&gt;
*High Level uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
*Router Board uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
&lt;br /&gt;
== Out of Scope Functionality Tested/Implemented ==&lt;br /&gt;
* Our project required us to delve into pieces of code within the Elcano project outside of our scope.  Understanding of how sensors are read by the high and low-level boards is necessary for the simulation of the sensors.  We were able to fix some issues regarding the CAN communication between the high and low-level boards.  The modified low-level code was not pushed to the main low-level code folder in the repository on Github, however, it is included within the simulator documentation.  The following were implemented.&lt;br /&gt;
* Unification of the proposed CAN message structure and the actual CAN message processing on the low-level code for CAN messages with ID 0x350 (High-level drive instructions).  These are CAN messages the high-level will send to the low level to facilitate autonomy.&lt;br /&gt;
* Fixing the DAC output voltage by using the MCP48x2 library by Jonas Forsberg.&lt;br /&gt;
== To Do (Software): ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Bugs Within Simulator ==&lt;br /&gt;
* Occasionally the simulator and router board will desync and the NMEA GPS messages received by the router board will be faulty.  This is usually followed by a crash of simulator.py.  If not, simply press Ctrl^C and restart simulator.py.&lt;br /&gt;
* If simulator.py unexpectedly terminates, the created actors and sensors in Carla will not be properly destroyed.  This usually does not cause problems for the simulation but proper termination in the future would be safer.  For now if it is causing problems, simply restart Carla.&lt;br /&gt;
* Carla does not stop outputting sensor data even if asked to stop.  This is a bug with Carla and not in our scope.&lt;br /&gt;
* Most malfunctions can be temporarily fixed by restarting the simulator.py instance.&lt;br /&gt;
* While we were able to implement the code for the low-level CAN interpretation of the throttle and brake commands from high-level CAN messages, coding for PWM requires additional testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additional Notes ==&lt;br /&gt;
* Currently, the order that you output data from the router board to the computer running simulator.py is non-trivial.  Data is interpreted based on the order which it is received.&lt;br /&gt;
* Carla sensor listening was flawed at the time this was made; .stop() would not stop the sensor from executing its attached function at each tick of Carla.  Therefore speed was implemented without the use of sensors, and instead uses a command that accesses the speed only when needed.  This is the suggested method until sensors are fixed.  Certain sensors such as NMEA GPS, however, are only implementable using Carla sensors.  Additional information can be found on Carla Documentation.&lt;br /&gt;
* In PowerShell, in CarlaUE4 path, run Carla as: ***Start-Process CarlaUE4 -ArgumentList “—quality-level=Low”*** to lower gpu load.&lt;br /&gt;
* Headless mode can be enabled for complete removal of graphics rendering, however, visual debugging is extremely useful.&lt;br /&gt;
&lt;br /&gt;
= 2026 Simulator =&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=516</id>
		<title>Simulator</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=516"/>
		<updated>2026-05-18T23:32:57Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Additional Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Elcano Carla Simulation External Specification =&lt;br /&gt;
&lt;br /&gt;
[http://carla.org/ CARLA] is an open-source driving simulator. During 2019-20 students develop3e a  go-between circuit board to transfer data between CARLA simulation and the sensor slots of the Elcano hardware. The CARLA software allows users to emulate trike parameters under controlled conditions within a virtual world, providing an efficient system for testing sensor behavior, design implementation, and bench-marking overall vehicle progress. The CARLA software can simulate a variety of road conditions such as traffic patterns, inclines, and weather as well as provide users control over vehicle parameters including weight, engine power, and aerodynamic properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An Arduino Due serves as a router to transfer data from vehicle systems to CARLA under a variety of test conditions, enabling the software to replicate responses and return sensor data to be reevaluated for accuracy. The [https://micro-av.com/store/ols/products/carla-bridge CARLA Micro-AV Bridge] includes the Router, Sensor Hub and Drive-by-wire Arduinos. It permits testing the Elcano trike software, including camera, sonar, throttle, steering and brake systems. Simulation allows users to immediately see the results of adjustments to vehicle parameters and highlight physical aspects of the trike within the virtual environment. This project enables users to efficiently implement improvements and track the immediate effects of design changes without spending the time and resources it would take to transport or operate the trike in real world test scenarios. It enables developers to improve the software without needing to invest in a vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture_CAN_Sim_7_7_20.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The following is a generalized list of the desired functionality of the simulator.&lt;br /&gt;
* Simulate data for all sensors associated with Elcano Trike.&lt;br /&gt;
* Simulate Elcano behavior to throttle, brake, and steering.&lt;br /&gt;
* Have low and high-level boards function normally with the simulated sensor data without knowing data is being simulated.&lt;br /&gt;
* Allow low and high-level board interaction to be tested.&lt;br /&gt;
* Allow autonomous driving to be tested.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
''' Simulation''' &lt;br /&gt;
Code to be executed by a computer that has access to a Carla server, either locally, or through a network.  Controls all objects in Carla simulation.  Retrieves sensor data from Carla, and sends router board.  Also retrieves actuation instructions from the router board and sends to Carla.&lt;br /&gt;
&lt;br /&gt;
'''Sensor Hub [aka High Level] Processor''' &lt;br /&gt;
The same code is used for the virtual or physical vehicle, sending and receiving messages over the CAN Bus. The CARLA Bridge replaces sensor data that would normally come from instruments.&lt;br /&gt;
&lt;br /&gt;
'''Drive-by-wire [aks C2 LowLevel] Processor''' &lt;br /&gt;
Current Elcano Drive-by-wirel code. Actuator data is routed to CARLA.&lt;br /&gt;
&lt;br /&gt;
'''[https://micro-av.com/store/ols/products/carla-bridge Router Board]''' &lt;br /&gt;
Code is executed on the Arduino Due that functions as the router board.  Routes commands from Drive-by-wire to Carla via Python scripts.  Also routes sensor data from Carla to Sensor Hub processor.&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020A.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020B.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==  Current Functionality of Simulation ==&lt;br /&gt;
At the end our Autumn 2019 Capstone, we were able to deliver a demo that demonstrated communication between all components; high-level board (Arduino Due), low-level board (Arduino Mega 2560) with shield running low level code, router board (Arduino Due), and the instance of Carla.  The instructions on how to reproduce the demo will be given later in this document. The primary roadblock that prevented further development into this project was the state of the CAN system of the Elcano trike (particularly the transceiver board which seems to have a flawed design).  These are the current features of the simulator.&lt;br /&gt;
* Implementation of USB serial communication between router board and computer running simulator.py.  Both entities (Computer and ArduinoDue) can send and receive data through USB connection.&lt;br /&gt;
* Implementation of a cyclometer.  Router board can receive the current speed of the simulated vehicle in Carla and convert it into an interrupt-based cyclometer pulse, based on the wheel dimension of the Elcano.  Also considers the random error of cyclometer present on the Elcano trike.  This can be debugged with the built-in LED on the router board.&lt;br /&gt;
* Implementation of NMEA GPS sensor.  Carla is able the output NMEA GPS data to the router board 10 times per second, effectively simulating the GPS sensor on the high-level board.  Router board is successfully able to output it to UART serial which is how it is transmitted to the high-level board.&lt;br /&gt;
* Implementation of timing structure.  Computer running simulator.py waits for data to be interpreted from the router board while the router board executes its update 10 times per second.  This is the desired speed for both sensor data and actuation data to be updated.&lt;br /&gt;
* Implementation of vehicle control updaters through throttle, brake, and steering data.  The computer running simulator.py can take desired throttle, brake, and steering and convert them into corresponding commands for Carla using Carla API. These commands move the vehicle within Carla.  This is the primarily what the demo shows.&lt;br /&gt;
&lt;br /&gt;
== Demo Guide (How to Set-Up) ==&lt;br /&gt;
The following is a guide to set up the Elcano simulator.&lt;br /&gt;
&lt;br /&gt;
===''' Materials '''===&lt;br /&gt;
* 1 Assembled Elcano Simulator Printed Circuit Board (PCB)&lt;br /&gt;
* 2 Arduino Due&lt;br /&gt;
* 1 Arduino Mega 2560&lt;br /&gt;
* 1 Box (200 x 150 x 70 mm)&lt;br /&gt;
* 2 Voltage Level Converter (included w/Simulator PCB)&lt;br /&gt;
* 1 SD Card (w/map files)&lt;br /&gt;
* 1 USB AB Cable (for Arduino Mega)&lt;br /&gt;
* 1 USB Micro Cable (for Arduino Due)&lt;br /&gt;
* 1 computer capable of running Carla&lt;br /&gt;
&lt;br /&gt;
===''' Pre-installation '''===&lt;br /&gt;
Use the following instructions to install the required software to run the simulation.&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Python '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#* Install Python 3 (if not installed already)&lt;br /&gt;
#::-experiments used version 3.7.6&lt;br /&gt;
#* In a terminal, move to .\Simulation\&lt;br /&gt;
#* Run the command “pip3 install -r requirements.txt” to have pip install all the required python libraries for the simulator&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' CARLA '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#*Download [https://carla.org/2020/03/09/release-0.9.8/ CARLA (0.9.8)]&lt;br /&gt;
#*CARLA requirements:&amp;lt;br /&amp;gt;[[File:Carla_Requirements.jpg|500px|]]&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Arduino Libraries '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;Download these Arduino libraries prior to running the simulation:&lt;br /&gt;
#* [https://github.com/Seeed-Studio/CAN_BUS_Shield CAN_BUS_SHIELD by Seeed-Studio]&lt;br /&gt;
#* [https://github.com/br3ttb/Arduino-PID-Library PID by Brett Beauregard]&lt;br /&gt;
#* [https://github.com/NicoHood/PinChangeInterrupt Pin Change Interrupt by Nico Hood]&lt;br /&gt;
#* [https://github.com/SweBarre/MCP48x2 MCP48x2 DAC by Jonas Forsberg]&lt;br /&gt;
#* [https://github.com/ivanseidel/DueTimer Arduino Due Timer Interrupts by Ivan Seidel]&lt;br /&gt;
#* Previous version of [https://github.com/collin80/due_can Arduino Due CAN Bus library] is used but the necessary files are included within the repository.&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Elcano Repositories '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;The Elcano repositories are needed to run the simulation:&lt;br /&gt;
#*[https://github.com/elcano/HighLevel High Level]&lt;br /&gt;
#*[https://github.com/elcano/Simulator Simulator (Router Board &amp;amp; Simulator Script)]&lt;br /&gt;
#*[https://github.com/elcano/Drive-by-wire Drive-by-wire (Low Level)]&lt;br /&gt;
===''' Run Simulation '''===&lt;br /&gt;
Once all the requirements are installed, use the following instructions to run the simulation. &lt;br /&gt;
&amp;lt;br /&amp;gt;[[File:Router_PCB_Connections.jpg|500px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;'''''Step 1: Program all Arduinos'''''&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;router_board_v1.ino&amp;lt;/b&amp;gt; to the router Arduino Due programming port &lt;br /&gt;
#Upload &amp;lt;b&amp;gt;High_Level.ino&amp;lt;/b&amp;gt; to the high level Arduino Due programming port&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;Drive_By_Wire.ino&amp;lt;/b&amp;gt; to the low level Arduino Mega 2560&lt;br /&gt;
'''''Step 2: Run CARLA'''''&lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the directory where CARLA is installed (CARLAUE4.exe)&lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\ElcanoInstaller\CARLA\WindowsNoEditor&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From the CARLA directory, type:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
#:Or, to run in low resolution mode:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe -ResX=720 -ResY=480 -quality-level=Low&amp;lt;/code&amp;gt;&lt;br /&gt;
'''''Step 3: Run Simulation'''''&lt;br /&gt;
#Connect your PC to the native port on the Router Board Due &lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the Simulation directory &lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\Simulator\Simulation&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From Simulation directory, start the Simulator UI &lt;br /&gt;
#:&amp;lt;code&amp;gt;.\Simulation\start.bat&amp;lt;/code&amp;gt;&lt;br /&gt;
#By default, the Simulator UI will populate local running CARLA settings&lt;br /&gt;
#*For control via the router board, leave mode as Auto&lt;br /&gt;
#*To control via manual keyboard input, change mode to Manual.&lt;br /&gt;
#*If running a network-based CARLA server, enter IP and Port of CARLA into the respective boxes. (i.e. 192.168.1.1, 2010)&lt;br /&gt;
#Click &amp;quot;Connect to CARLA&amp;quot;&lt;br /&gt;
#*If Auto mode, it will pop up a selection of COM devices, select routerboard native port COM to begin and press go. &lt;br /&gt;
#*If Manual mode, client will start with keyboard controls (WASD)&lt;br /&gt;
#Observe behavior in simulator.  &lt;br /&gt;
#If car gets stuck, kill current simulator.py process and restart.&lt;br /&gt;
===''' Debug/Logging '''===&lt;br /&gt;
*High Level uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
*Router Board uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
&lt;br /&gt;
== Out of Scope Functionality Tested/Implemented ==&lt;br /&gt;
* Our project required us to delve into pieces of code within the Elcano project outside of our scope.  Understanding of how sensors are read by the high and low-level boards is necessary for the simulation of the sensors.  We were able to fix some issues regarding the CAN communication between the high and low-level boards.  The modified low-level code was not pushed to the main low-level code folder in the repository on Github, however, it is included within the simulator documentation.  The following were implemented.&lt;br /&gt;
* Unification of the proposed CAN message structure and the actual CAN message processing on the low-level code for CAN messages with ID 0x350 (High-level drive instructions).  These are CAN messages the high-level will send to the low level to facilitate autonomy.&lt;br /&gt;
* Fixing the DAC output voltage by using the MCP48x2 library by Jonas Forsberg.&lt;br /&gt;
== To Do (Software): ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Bugs Within Simulator ==&lt;br /&gt;
* Occasionally the simulator and router board will desync and the NMEA GPS messages received by the router board will be faulty.  This is usually followed by a crash of simulator.py.  If not, simply press Ctrl^C and restart simulator.py.&lt;br /&gt;
* If simulator.py unexpectedly terminates, the created actors and sensors in Carla will not be properly destroyed.  This usually does not cause problems for the simulation but proper termination in the future would be safer.  For now if it is causing problems, simply restart Carla.&lt;br /&gt;
* Carla does not stop outputting sensor data even if asked to stop.  This is a bug with Carla and not in our scope.&lt;br /&gt;
* Most malfunctions can be temporarily fixed by restarting the simulator.py instance.&lt;br /&gt;
* While we were able to implement the code for the low-level CAN interpretation of the throttle and brake commands from high-level CAN messages, coding for PWM requires additional testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additional Notes ==&lt;br /&gt;
* Currently, the order that you output data from the router board to the computer running simulator.py is non-trivial.  Data is interpreted based on the order which it is received.&lt;br /&gt;
* Carla sensor listening was flawed at the time this was made; .stop() would not stop the sensor from executing its attached function at each tick of Carla.  Therefore speed was implemented without the use of sensors, and instead uses a command that accesses the speed only when needed.  This is the suggested method until sensors are fixed.  Certain sensors such as NMEA GPS, however, are only implementable using Carla sensors.  Additional information can be found on Carla Documentation.&lt;br /&gt;
* In PowerShell, in CarlaUE4 path, run Carla as: ***Start-Process CarlaUE4 -ArgumentList “—quality-level=Low”*** to lower gpu load.&lt;br /&gt;
* Headless mode can be enabled for complete removal of graphics rendering, however, visual debugging is extremely useful.&lt;br /&gt;
&lt;br /&gt;
= 2026 Simulation =&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=515</id>
		<title>Simulator</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Simulator&amp;diff=515"/>
		<updated>2026-05-18T23:29:57Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* To Do (Software): */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Elcano Carla Simulation External Specification =&lt;br /&gt;
&lt;br /&gt;
[http://carla.org/ CARLA] is an open-source driving simulator. During 2019-20 students develop3e a  go-between circuit board to transfer data between CARLA simulation and the sensor slots of the Elcano hardware. The CARLA software allows users to emulate trike parameters under controlled conditions within a virtual world, providing an efficient system for testing sensor behavior, design implementation, and bench-marking overall vehicle progress. The CARLA software can simulate a variety of road conditions such as traffic patterns, inclines, and weather as well as provide users control over vehicle parameters including weight, engine power, and aerodynamic properties.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
An Arduino Due serves as a router to transfer data from vehicle systems to CARLA under a variety of test conditions, enabling the software to replicate responses and return sensor data to be reevaluated for accuracy. The [https://micro-av.com/store/ols/products/carla-bridge CARLA Micro-AV Bridge] includes the Router, Sensor Hub and Drive-by-wire Arduinos. It permits testing the Elcano trike software, including camera, sonar, throttle, steering and brake systems. Simulation allows users to immediately see the results of adjustments to vehicle parameters and highlight physical aspects of the trike within the virtual environment. This project enables users to efficiently implement improvements and track the immediate effects of design changes without spending the time and resources it would take to transport or operate the trike in real world test scenarios. It enables developers to improve the software without needing to invest in a vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:Architecture_CAN_Sim_7_7_20.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
The following is a generalized list of the desired functionality of the simulator.&lt;br /&gt;
* Simulate data for all sensors associated with Elcano Trike.&lt;br /&gt;
* Simulate Elcano behavior to throttle, brake, and steering.&lt;br /&gt;
* Have low and high-level boards function normally with the simulated sensor data without knowing data is being simulated.&lt;br /&gt;
* Allow low and high-level board interaction to be tested.&lt;br /&gt;
* Allow autonomous driving to be tested.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
''' Simulation''' &lt;br /&gt;
Code to be executed by a computer that has access to a Carla server, either locally, or through a network.  Controls all objects in Carla simulation.  Retrieves sensor data from Carla, and sends router board.  Also retrieves actuation instructions from the router board and sends to Carla.&lt;br /&gt;
&lt;br /&gt;
'''Sensor Hub [aka High Level] Processor''' &lt;br /&gt;
The same code is used for the virtual or physical vehicle, sending and receiving messages over the CAN Bus. The CARLA Bridge replaces sensor data that would normally come from instruments.&lt;br /&gt;
&lt;br /&gt;
'''Drive-by-wire [aks C2 LowLevel] Processor''' &lt;br /&gt;
Current Elcano Drive-by-wirel code. Actuator data is routed to CARLA.&lt;br /&gt;
&lt;br /&gt;
'''[https://micro-av.com/store/ols/products/carla-bridge Router Board]''' &lt;br /&gt;
Code is executed on the Arduino Due that functions as the router board.  Routes commands from Drive-by-wire to Carla via Python scripts.  Also routes sensor data from Carla to Sensor Hub processor.&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020A.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
[[File:RouterBoard2020B.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==  Current Functionality of Simulation ==&lt;br /&gt;
At the end our Autumn 2019 Capstone, we were able to deliver a demo that demonstrated communication between all components; high-level board (Arduino Due), low-level board (Arduino Mega 2560) with shield running low level code, router board (Arduino Due), and the instance of Carla.  The instructions on how to reproduce the demo will be given later in this document. The primary roadblock that prevented further development into this project was the state of the CAN system of the Elcano trike (particularly the transceiver board which seems to have a flawed design).  These are the current features of the simulator.&lt;br /&gt;
* Implementation of USB serial communication between router board and computer running simulator.py.  Both entities (Computer and ArduinoDue) can send and receive data through USB connection.&lt;br /&gt;
* Implementation of a cyclometer.  Router board can receive the current speed of the simulated vehicle in Carla and convert it into an interrupt-based cyclometer pulse, based on the wheel dimension of the Elcano.  Also considers the random error of cyclometer present on the Elcano trike.  This can be debugged with the built-in LED on the router board.&lt;br /&gt;
* Implementation of NMEA GPS sensor.  Carla is able the output NMEA GPS data to the router board 10 times per second, effectively simulating the GPS sensor on the high-level board.  Router board is successfully able to output it to UART serial which is how it is transmitted to the high-level board.&lt;br /&gt;
* Implementation of timing structure.  Computer running simulator.py waits for data to be interpreted from the router board while the router board executes its update 10 times per second.  This is the desired speed for both sensor data and actuation data to be updated.&lt;br /&gt;
* Implementation of vehicle control updaters through throttle, brake, and steering data.  The computer running simulator.py can take desired throttle, brake, and steering and convert them into corresponding commands for Carla using Carla API. These commands move the vehicle within Carla.  This is the primarily what the demo shows.&lt;br /&gt;
&lt;br /&gt;
== Demo Guide (How to Set-Up) ==&lt;br /&gt;
The following is a guide to set up the Elcano simulator.&lt;br /&gt;
&lt;br /&gt;
===''' Materials '''===&lt;br /&gt;
* 1 Assembled Elcano Simulator Printed Circuit Board (PCB)&lt;br /&gt;
* 2 Arduino Due&lt;br /&gt;
* 1 Arduino Mega 2560&lt;br /&gt;
* 1 Box (200 x 150 x 70 mm)&lt;br /&gt;
* 2 Voltage Level Converter (included w/Simulator PCB)&lt;br /&gt;
* 1 SD Card (w/map files)&lt;br /&gt;
* 1 USB AB Cable (for Arduino Mega)&lt;br /&gt;
* 1 USB Micro Cable (for Arduino Due)&lt;br /&gt;
* 1 computer capable of running Carla&lt;br /&gt;
&lt;br /&gt;
===''' Pre-installation '''===&lt;br /&gt;
Use the following instructions to install the required software to run the simulation.&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Python '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#* Install Python 3 (if not installed already)&lt;br /&gt;
#::-experiments used version 3.7.6&lt;br /&gt;
#* In a terminal, move to .\Simulation\&lt;br /&gt;
#* Run the command “pip3 install -r requirements.txt” to have pip install all the required python libraries for the simulator&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' CARLA '''''&amp;lt;/u&amp;gt;&lt;br /&gt;
#*Download [https://carla.org/2020/03/09/release-0.9.8/ CARLA (0.9.8)]&lt;br /&gt;
#*CARLA requirements:&amp;lt;br /&amp;gt;[[File:Carla_Requirements.jpg|500px|]]&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Arduino Libraries '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;Download these Arduino libraries prior to running the simulation:&lt;br /&gt;
#* [https://github.com/Seeed-Studio/CAN_BUS_Shield CAN_BUS_SHIELD by Seeed-Studio]&lt;br /&gt;
#* [https://github.com/br3ttb/Arduino-PID-Library PID by Brett Beauregard]&lt;br /&gt;
#* [https://github.com/NicoHood/PinChangeInterrupt Pin Change Interrupt by Nico Hood]&lt;br /&gt;
#* [https://github.com/SweBarre/MCP48x2 MCP48x2 DAC by Jonas Forsberg]&lt;br /&gt;
#* [https://github.com/ivanseidel/DueTimer Arduino Due Timer Interrupts by Ivan Seidel]&lt;br /&gt;
#* Previous version of [https://github.com/collin80/due_can Arduino Due CAN Bus library] is used but the necessary files are included within the repository.&lt;br /&gt;
#&amp;lt;u&amp;gt;''''' Elcano Repositories '''''&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;The Elcano repositories are needed to run the simulation:&lt;br /&gt;
#*[https://github.com/elcano/HighLevel High Level]&lt;br /&gt;
#*[https://github.com/elcano/Simulator Simulator (Router Board &amp;amp; Simulator Script)]&lt;br /&gt;
#*[https://github.com/elcano/Drive-by-wire Drive-by-wire (Low Level)]&lt;br /&gt;
===''' Run Simulation '''===&lt;br /&gt;
Once all the requirements are installed, use the following instructions to run the simulation. &lt;br /&gt;
&amp;lt;br /&amp;gt;[[File:Router_PCB_Connections.jpg|500px]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;'''''Step 1: Program all Arduinos'''''&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;router_board_v1.ino&amp;lt;/b&amp;gt; to the router Arduino Due programming port &lt;br /&gt;
#Upload &amp;lt;b&amp;gt;High_Level.ino&amp;lt;/b&amp;gt; to the high level Arduino Due programming port&lt;br /&gt;
#Upload &amp;lt;b&amp;gt;Drive_By_Wire.ino&amp;lt;/b&amp;gt; to the low level Arduino Mega 2560&lt;br /&gt;
'''''Step 2: Run CARLA'''''&lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the directory where CARLA is installed (CARLAUE4.exe)&lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\ElcanoInstaller\CARLA\WindowsNoEditor&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From the CARLA directory, type:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe&amp;lt;/code&amp;gt;&lt;br /&gt;
#:Or, to run in low resolution mode:&lt;br /&gt;
#:&amp;lt;code&amp;gt;CARLAUE4.exe -ResX=720 -ResY=480 -quality-level=Low&amp;lt;/code&amp;gt;&lt;br /&gt;
'''''Step 3: Run Simulation'''''&lt;br /&gt;
#Connect your PC to the native port on the Router Board Due &lt;br /&gt;
#Open a command prompt (type cmd in the windows search box)&lt;br /&gt;
#Go to the Simulation directory &lt;br /&gt;
#:&amp;lt;code&amp;gt;cd C:\Users\bobross\Documents\Simulator\Simulation&amp;lt;/code&amp;gt;&lt;br /&gt;
#::-You may have it saved to a different directory&lt;br /&gt;
#From Simulation directory, start the Simulator UI &lt;br /&gt;
#:&amp;lt;code&amp;gt;.\Simulation\start.bat&amp;lt;/code&amp;gt;&lt;br /&gt;
#By default, the Simulator UI will populate local running CARLA settings&lt;br /&gt;
#*For control via the router board, leave mode as Auto&lt;br /&gt;
#*To control via manual keyboard input, change mode to Manual.&lt;br /&gt;
#*If running a network-based CARLA server, enter IP and Port of CARLA into the respective boxes. (i.e. 192.168.1.1, 2010)&lt;br /&gt;
#Click &amp;quot;Connect to CARLA&amp;quot;&lt;br /&gt;
#*If Auto mode, it will pop up a selection of COM devices, select routerboard native port COM to begin and press go. &lt;br /&gt;
#*If Manual mode, client will start with keyboard controls (WASD)&lt;br /&gt;
#Observe behavior in simulator.  &lt;br /&gt;
#If car gets stuck, kill current simulator.py process and restart.&lt;br /&gt;
===''' Debug/Logging '''===&lt;br /&gt;
*High Level uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
*Router Board uses the Programming Port to display debug messages over serial monitor&lt;br /&gt;
&lt;br /&gt;
== Out of Scope Functionality Tested/Implemented ==&lt;br /&gt;
* Our project required us to delve into pieces of code within the Elcano project outside of our scope.  Understanding of how sensors are read by the high and low-level boards is necessary for the simulation of the sensors.  We were able to fix some issues regarding the CAN communication between the high and low-level boards.  The modified low-level code was not pushed to the main low-level code folder in the repository on Github, however, it is included within the simulator documentation.  The following were implemented.&lt;br /&gt;
* Unification of the proposed CAN message structure and the actual CAN message processing on the low-level code for CAN messages with ID 0x350 (High-level drive instructions).  These are CAN messages the high-level will send to the low level to facilitate autonomy.&lt;br /&gt;
* Fixing the DAC output voltage by using the MCP48x2 library by Jonas Forsberg.&lt;br /&gt;
== To Do (Software): ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Bugs Within Simulator ==&lt;br /&gt;
* Occasionally the simulator and router board will desync and the NMEA GPS messages received by the router board will be faulty.  This is usually followed by a crash of simulator.py.  If not, simply press Ctrl^C and restart simulator.py.&lt;br /&gt;
* If simulator.py unexpectedly terminates, the created actors and sensors in Carla will not be properly destroyed.  This usually does not cause problems for the simulation but proper termination in the future would be safer.  For now if it is causing problems, simply restart Carla.&lt;br /&gt;
* Carla does not stop outputting sensor data even if asked to stop.  This is a bug with Carla and not in our scope.&lt;br /&gt;
* Most malfunctions can be temporarily fixed by restarting the simulator.py instance.&lt;br /&gt;
* While we were able to implement the code for the low-level CAN interpretation of the throttle and brake commands from high-level CAN messages, coding for PWM requires additional testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Additional Notes ==&lt;br /&gt;
* Currently, the order that you output data from the router board to the computer running simulator.py is non-trivial.  Data is interpreted based on the order which it is received.&lt;br /&gt;
* Carla sensor listening was flawed at the time this was made; .stop() would not stop the sensor from executing its attached function at each tick of Carla.  Therefore speed was implemented without the use of sensors, and instead uses a command that accesses the speed only when needed.  This is the suggested method until sensors are fixed.  Certain sensors such as NMEA GPS, however, are only implementable using Carla sensors.  Additional information can be found on Carla Documentation.&lt;br /&gt;
* In PowerShell, in CarlaUE4 path, run Carla as: ***Start-Process CarlaUE4 -ArgumentList “—quality-level=Low”*** to lower gpu load.&lt;br /&gt;
* Headless mode can be enabled for complete removal of graphics rendering, however, visual debugging is extremely useful.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=440</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=440"/>
		<updated>2025-06-09T05:13:07Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|600px|]] - 3D PCB Model on KiCAD [[File:Screenshot 2025-06-02 220036.png|600 px|]] -  PCB Diagram on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|600 px|]] - Schematic 1/3 on KiCAD [[File:Screenshot 2025-06-07-232533.png|600 px|]] - Schematic 2/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|600 px|]] - Schematic 3/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-04_200743.png&amp;diff=439</id>
		<title>File:Screenshot 2025-06-04 200743.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-04_200743.png&amp;diff=439"/>
		<updated>2025-06-09T04:55:45Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Steering Board updated.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Steering Board updated.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=438</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=438"/>
		<updated>2025-06-09T04:51:51Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
3D PCB Model (to be fabricated by next team)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-02 220036.png|800 px|]]&lt;br /&gt;
PCB Diagram on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|800 px|]]&lt;br /&gt;
Schematic 1/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png|800 px|]]&lt;br /&gt;
Schematic 2/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|800 px|]]&lt;br /&gt;
Schematic 3/3 on KiCAD&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=437</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=437"/>
		<updated>2025-06-08T06:58:05Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
==3D PCB Model (to be fabricated by next team)==&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==PCB Diagram on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-02 220036.png|800 px|]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 1/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|800 px|]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 2/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png|800 px|]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 3/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|800 px|]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=436</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=436"/>
		<updated>2025-06-08T06:57:27Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* 3D PCB Model (to be fabricated by next team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
==3D PCB Model (to be fabricated by next team)==&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==PCB Diagram on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-02 220036.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 1/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 2/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 3/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=435</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=435"/>
		<updated>2025-06-08T06:57:09Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
&lt;br /&gt;
==3D PCB Model (to be fabricated by next team==&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==PCB Diagram on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-02 220036.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 1/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 2/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png]]&lt;br /&gt;
&lt;br /&gt;
==Schematic 3/3 on KiCAD==&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232539.png&amp;diff=434</id>
		<title>File:Screenshot 2025-06-07-232539.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232539.png&amp;diff=434"/>
		<updated>2025-06-08T06:55:13Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232533.png&amp;diff=433</id>
		<title>File:Screenshot 2025-06-07-232533.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232533.png&amp;diff=433"/>
		<updated>2025-06-08T06:54:41Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232527.png&amp;diff=432</id>
		<title>File:Screenshot 2025-06-07-232527.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07-232527.png&amp;diff=432"/>
		<updated>2025-06-08T06:52:55Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=431</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=431"/>
		<updated>2025-06-08T06:49:46Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=430</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=430"/>
		<updated>2025-06-08T06:47:48Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|600px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png|600px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=429</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=429"/>
		<updated>2025-06-08T06:46:20Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232527.png|800px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232533.png|800px|]]&lt;br /&gt;
[[File:Screenshot 2025-06-07-232539.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=428</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=428"/>
		<updated>2025-06-08T06:44:40Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|800px|]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=427</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=427"/>
		<updated>2025-06-08T06:44:28Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|200px|]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=426</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=426"/>
		<updated>2025-06-08T06:44:22Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg|200px\]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=425</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=425"/>
		<updated>2025-06-08T06:41:29Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:LowLevelv4_1_V2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=424</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=424"/>
		<updated>2025-06-08T06:39:46Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
[[File:&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
==Theory of operation==&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Steering v4.1 Board=&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=423</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=423"/>
		<updated>2025-06-08T06:38:06Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LowLevel v4.1 PCB==&lt;br /&gt;
[[File:&lt;br /&gt;
&lt;br /&gt;
=Overview=&lt;br /&gt;
This board that is to be fabricated by the next capstone team, builds from the Low Level V3.1 board which initially worked for the Arduino Mega, was reconfigured for the Arduino Due to behave like the Main DBW V4.0 board that was tested along with the Steering Board V4.1, connecting to the Arduino Due to using Pin Headers along with its ICSP pins the same way configured for the DBW V4.0 Board. There are two RJ45 connectors for the Throttle and Steering and a DB9 connector for CAN/UART signals, assuming the LLB is still the daughter board for the Arduino Due microcontroller board. This board also contains an in-house SD card mount for datalogging, thus possibly eliminating the need for the Arduino Shield. Brake Solenoid power traces are 2 mm, +12 volt is 1 mm, +5V is 0.5mm and the rest of the traces are 0.25 mm. &lt;br /&gt;
&lt;br /&gt;
=Theory of operation=&lt;br /&gt;
This board will control the motor, steering, and brake solenoids through a series of signal traces receiving data from the Arduino DUE and RC Controller that control the trike’s critical functions. 2A will flow to the brake solenoids while the rest of the signal traces that are quarter a millimeter thick (&amp;lt;1 mil) can handle up to 300 mA alongside the +3.3V traces, traces for +5V are 0.5 mm thick and 1 mm thick for +12V assuming they hold higher currents. The motor and steering will send and receive signals/power via individual RJ45 connectors. In LowLevel V3.1, there was a DB15 connector to connect between the low-level and the motor with twelve signals, only six of the high-priotity signals were kept (leaving the pins 5 and 8 for GND and +5V respectively) per the schematic diagram.&lt;br /&gt;
In LowLevel V3.1, there were two relays for the brake solenoids: one to power the solenoids on or off, and the other for switching between 24V pulse and 12V hold. To make it fully solid state, both relays were replaced with an NMOS low-side switch for the ON/OFF state and a dual PMOS high-side switch for 12/24V switching. When simulating the circuit on LTspice, the high-side switch PMOS that controls the 24V was always on regardless of the state of BRAKE_VOLT as shown in the table below. As a result, the 12/24 relay was maintained.&lt;br /&gt;
The highlighted red text shown that the PMOS switch was not functioning properly and the 12/24V relay was maintained for SOLENOID_POWER and SOLENOID_COMMON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:LowLevelv4_1_V2.jpg&amp;diff=422</id>
		<title>File:LowLevelv4 1 V2.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:LowLevelv4_1_V2.jpg&amp;diff=422"/>
		<updated>2025-06-08T06:28:50Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Low Level V4.1 KiCAD 3D Model. This board is to be fabricated and tested by the next capstone team.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Low Level V4.1 KiCAD 3D Model. This board is to be fabricated and tested by the next capstone team.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232539.png&amp;diff=421</id>
		<title>File:Screenshot 2025-06-07 232539.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232539.png&amp;diff=421"/>
		<updated>2025-06-08T06:26:53Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Low Level V4.1 Schematic 3/3.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Low Level V4.1 Schematic 3/3.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232533.png&amp;diff=420</id>
		<title>File:Screenshot 2025-06-07 232533.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232533.png&amp;diff=420"/>
		<updated>2025-06-08T06:26:30Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Low Level V4.1 Schematic 2/3.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Low Level V4.1 Schematic 2/3.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232527.png&amp;diff=419</id>
		<title>File:Screenshot 2025-06-07 232527.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-07_232527.png&amp;diff=419"/>
		<updated>2025-06-08T06:26:02Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Low Level V4.1 Schematic 1/3.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Low Level V4.1 Schematic 1/3.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-02_220036.png&amp;diff=418</id>
		<title>File:Screenshot 2025-06-02 220036.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:Screenshot_2025-06-02_220036.png&amp;diff=418"/>
		<updated>2025-06-08T06:24:12Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: Low Level V4.1 PCB diagram on KiCAD.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Low Level V4.1 PCB diagram on KiCAD.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=417</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=417"/>
		<updated>2025-06-08T06:21:55Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system assuming the LLB is still the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished. This board functions similarly to the LowLevel V4.1&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=416</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=416"/>
		<updated>2025-04-19T20:24:29Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system assuming the LLB is still the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes placed in flyback provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=415</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=415"/>
		<updated>2025-03-18T02:04:17Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Steering v4.1 Board */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system assuming the LLB is still the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
[[File:20250317_132530.jpg|1000px]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:20250317_132530.jpg&amp;diff=414</id>
		<title>File:20250317 132530.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:20250317_132530.jpg&amp;diff=414"/>
		<updated>2025-03-18T02:03:09Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: This is the physical PCB of the Steering Board v4.1.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
This is the physical PCB of the Steering Board v4.1.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=413</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=413"/>
		<updated>2025-03-17T05:58:55Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system assuming the LLB is still the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=412</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=412"/>
		<updated>2025-03-17T05:57:22Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system and the LLB is still the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=411</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=411"/>
		<updated>2025-03-17T05:56:45Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* LowLevel v4.1 PCB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4.1 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=410</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=410"/>
		<updated>2025-03-17T05:54:07Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=LowLevel v4.1 PCB=&lt;br /&gt;
The V4 LowLevel PCB builds upon the V4 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
==Main DBW v4.1 Board==&lt;br /&gt;
This board is a follow-up to the existing DBW v4 Board (refer to the DBW v4 Board below for its functionality), which will build on what the DBW v4 Board has accomplished.&lt;br /&gt;
&lt;br /&gt;
Main DBW v4.1 Board images and PCB are coming in due course.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=409</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=409"/>
		<updated>2025-03-17T05:46:31Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* DBW v4 Board (**TO BE UPDATED**) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board.&lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=408</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=408"/>
		<updated>2025-03-17T05:30:28Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the new steering board.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=407</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=407"/>
		<updated>2025-03-17T05:30:10Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. The DBW v4.1 Board will be redesigned to fit the steering board.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=406</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=406"/>
		<updated>2025-03-17T05:07:14Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
===Functionality:===&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=405</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=405"/>
		<updated>2025-03-17T05:06:38Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=404</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=404"/>
		<updated>2025-03-17T04:44:40Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Functionality: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board's screw terminal block to power the H-bridge circuit and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. The H-Bridge contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off.&lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=403</id>
		<title>Low Level</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Low_Level&amp;diff=403"/>
		<updated>2025-03-17T04:43:16Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=LowLevel v4 PCB =&lt;br /&gt;
&lt;br /&gt;
The V4 LowLevel PCB builds upon the V3.1 PCB. It still communicates over the CAN bus with the manual control or autonomous system from the receiver system. However, the new LLB is the daughter board for the Arduino Due microcontroller board. &lt;br /&gt;
&lt;br /&gt;
== Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Uses binary control for steering as opposed to a PWM input &lt;br /&gt;
* LLB uses internal CAN bus module, removing the need for any external CAN modules&lt;br /&gt;
* Runs on 3.3V of power internally with power provided to the Arduino DUE through a 5v regulator on the DBW board&lt;br /&gt;
* Steering and throttle headers added to lower connector size&lt;br /&gt;
[[File:SteeringJ8.PNG|200px|Steering Connector J8]] [[File:MotorJ7.PNG|200px|Motor Connector J7]]&lt;br /&gt;
* RJ-45 adapter connected to steering pins&lt;br /&gt;
[[File:RJ45Adapter.jpg|300px|Steering header adapter]]&lt;br /&gt;
* Brakes use solenoids instead of actuators&lt;br /&gt;
[[File:YellowBrakes.jpg|300px|Solenoid Brakes]]&lt;br /&gt;
&lt;br /&gt;
* Creates file for outputting date and stores it in SD card&lt;br /&gt;
* PCF8523 RTC calculates and stores the following using system time:&lt;br /&gt;
** Milliseconds since compile time&lt;br /&gt;
** Epoch time&lt;br /&gt;
** Date (YYYY/MM/DD)&lt;br /&gt;
** Day of the week&lt;br /&gt;
** Standard time (HH:MM:SS) (AM/PM)&lt;br /&gt;
==DBW v4 Board (**TO BE UPDATED**)==&lt;br /&gt;
[[File:DBWv4Board.jpg|300px|]] [[File:DBWv4Layout.png|600px|]]&lt;br /&gt;
&lt;br /&gt;
Power is supplied to the board through the 12 V input on the screw terminal closest to the Arduino DUE and steps this down to 5V and 3.3V through its voltage regulators. The 12V input also supplies the solenoid brakes and to the steering board. CAN L and H are also accessible on this screw terminal or can be connected to from the CAN header that is above the steering header. DBW v4 uses level shifters to convert the peripheral voltage 0-5V to 0-3.3 V which the Arduino DUE is able to operate at. The advantage of this is that the Arduino DUE's internal CAN bus can be used instead of an external module with the trade off being the added complexity of the level shifters. An improvement that can be made is to replace 5 V peripherals with 3.3 V peripherals to reduce the amount of level shifters. This is relevant to the current angle sensors using 5 volts and they can be easily converted to using 3.3 V. The brake relays on the DBW v4 board are setup backwards with 24 V being sent to the brakes by default and this needs to be fixed in future iterations. Other future improvements are the addition of RJ-45 connectors that will eliminate the need for a converter box to be used. Problems with the 5V and 3.3V regulator have been found with the 3.3V regulator failing on at least 3 boards. The 12 volt input is directly connected to multiple IC's and has a high risk of damage if there is a voltage spike created from the connected power supply to the board. &lt;br /&gt;
&lt;br /&gt;
==Steering v4.1 Board==&lt;br /&gt;
[[File:SteeringBoard4.1.png|600px|]] [[File:SteeringBoard4.1_PCB.png|600px|]]&lt;br /&gt;
 &lt;br /&gt;
==Functionality:==&lt;br /&gt;
Power is supplied to this board from 12 VDC input on the red Anderson connector from the DBW board's screw terminal block to power the H-bridge circuit, and L7805 voltage regulator which will step down from 12 to 5 VDC to power the LM393 dual comparator. which controls the direction of the 12 VDC linear actuator which turns the trike. This segment contains two of each of the following MOSFETs: AOD4189 (PMOS), AOD66406 (NMOS), and 2N7000 (NMOS). The 2N7000 gate voltages will control the gates of the AOD's, allowing the actuator to turn the front wheels left or right. An LM393 Dual comparator is placed before the H-bridge with each of the comparator outputs going to the one of the two gates of the 2N7000s, the inverting inputs having a fixed reference voltage about 1.8 VDC, one non-inverting input connected to the left turn signal, and the other for the right turn signal with the remaining two pins connected to 5 VDC and GND respectively. there is an RJ45 LAN bus connector which receives signals from the Arduino Due (which in itself receives signals from an external RC infrared receiver), which will tell the LM393 comparator to control the H-bridge MOSFETs accordingly to the input steering direction. SB5H100 Schottky Diodes provide fast feedback times when the AOD4189 and AOD66406 MOSFETs switch on and off. &lt;br /&gt;
&lt;br /&gt;
=LowLevel v3.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* The LowLevel Board (LLB) is a daughter board (shield) for an Arduino Mega microcontroller. It has been renamed &amp;quot;Drive-By-Wire&amp;quot;. It implements drive-by-wire, turning a trike into a CAN-bus based vehicle compatible with commercial self-driving equipment. The LLB communicates over the CAN bus with the higher-level autonomous system or manual control from the receiver system. It directly manages the actuators: the throttle to the motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Motion directives are received on a CAN bus interface, processed, and articulated.&lt;br /&gt;
* System status (turn angle, wheel linear velocity) is reported back to CAN bus.&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x has the following interfaces:&lt;br /&gt;
** One CANbus channel on two connectors; a DB9-M and a three-pin screw terminal. The board includes a 120 ohm terminating resistor.&lt;br /&gt;
** X3 Motor (DB-15M): Interface to E-bike controller&lt;br /&gt;
*** Analog voltage (approximately 0v to 4v) output to hub motor throttle&lt;br /&gt;
*** Digital outputs for activating reverse and regenerative braking.&lt;br /&gt;
*** PWM output for PWM-operated braking (no longer used)&lt;br /&gt;
*** Analog inputs for hall sensor feedback from motor controllers supporting this feature. These inputs are NOT 5V SAFE. They absolutely require external supporting circuitry.&lt;br /&gt;
*** A few spare connections for future expandability, such as a second DAC output and one digital GPIO.&lt;br /&gt;
&lt;br /&gt;
DETAILS &amp;gt; [[DB15M]]&lt;br /&gt;
&lt;br /&gt;
** Steering Header (RJ45): &lt;br /&gt;
*** Two sets of pins to support analog potentiometers (5v, signal input, ground) giving angle of front wheels&lt;br /&gt;
*** One PWM output (with its own ground) to drive the steering actuator.&lt;br /&gt;
*** This cable is broken out into its component signals using an RJ45 patch jack, mounted near the steering actuator.&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack. This is pulled high by default, and brought low when the magnet passes the sensor.&lt;br /&gt;
** High current pluggable terminal for solenoid brakes:&lt;br /&gt;
*** Connections for ground, 12v, and 24v.&lt;br /&gt;
*** Two relay outputs to solenoids: on/off and 12/24V.&lt;br /&gt;
&lt;br /&gt;
* The LowLevel runs on 5V power, and provides outputs for sensors. Note that the Arduino Mega 2560's regulator has a fairly low current limit, and should not be used for any significant current supply. The Arduino's DC input jack accepts 12V, and its USB port may be connected to a typical USB power supply. The 12V is provided by a DC-DC converter from the main battery (36 to 50V).&lt;br /&gt;
&lt;br /&gt;
==Image: [[File:LowLevel.JPG|1000px]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;br /&gt;
&lt;br /&gt;
=LowLevel v2.1 PCB =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Functionality: ==&lt;br /&gt;
&lt;br /&gt;
* Version 2.1 used UART serial connections to other boards instead of the CAN bus. It interprets messages from higher-level autonomous systems or manual controls (RC, joystick). It directly manages the state of the actuators; the hub motor, the turning servo, and the brakes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Depending on the current firmware or operating mode, motion directives are received on one of three interfaces;&lt;br /&gt;
** [[ElcanoSerial]] from the combined [[PilotPage | C3]]/[[PlannerPage | C4]]/[[NavigatorPage | C6]] High Level board &lt;br /&gt;
** RC receiver&lt;br /&gt;
** Manual Joystick&lt;br /&gt;
&lt;br /&gt;
* LLB v2.x has the following low-level interfaces:&lt;br /&gt;
** X2 Cruise (DB-25F) - [[ElcanoSerial]] messages from High Level.&lt;br /&gt;
** X3 Motor ([[DB15M | DB-15M]]): Analog voltage (0,4v) output hub motor.&lt;br /&gt;
** X1/X5 Turn Sensors (RJ45): SPI wheel angle sensor digital inputs. (Digital urn sensors were never implemented.)&lt;br /&gt;
** X4 (ODO): Cyclometer (reed switch) input jack.    Board layout was incorrect. This signal needs to be jumpered to Arduino pin D2.&lt;br /&gt;
** JP9 (8 pin): Joystick analog input signals. &lt;br /&gt;
** JP12 (3 pin): Pulse output signal to steer.  &lt;br /&gt;
** JP11 (3 pin): Pulse output signal to apply main brakes. (No longer used)&lt;br /&gt;
** JP5 (4 pin): Left wheel angle sensor analog input. (Little used since it covers 360 degrees and is less accurate)&lt;br /&gt;
** JP6 (4 pin): Right wheel angle sensor analog input. (Trike prefer this, since it is +/- 30 degrees, and more accurate)&lt;br /&gt;
&lt;br /&gt;
* LLB v3.x makes significant wiring changes:&lt;br /&gt;
** Removes the ElcanoSerial connection and the DB-25F.&lt;br /&gt;
** Removes JP9, joystick analog inputs.&lt;br /&gt;
** Removes headers used to interface the RC receiver.&lt;br /&gt;
** Adds one CANbus interface on a DE-9F socket. For legacy compatibility UART serial is be available on this interface as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=LowLevel v1.0 PCB =&lt;br /&gt;
&lt;br /&gt;
* The first version of the LLB was called MegaShieldDB. It had similar functionality, but different connectors. It had five DB connectors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT &amp;gt; [[High Level]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:SteeringBoard4.1_PCB.png&amp;diff=402</id>
		<title>File:SteeringBoard4.1 PCB.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:SteeringBoard4.1_PCB.png&amp;diff=402"/>
		<updated>2025-03-17T03:47:06Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: This is the PCB Diagram of the Steering Board Version 4.1. Ground Planes have been added to both sides of the board. The power traces have been increased from 1.27 mm to 1.5 mm to handle extra current, and the signal traces have been increased to .75-1...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
This is the PCB Diagram of the Steering Board Version 4.1. Ground Planes have been added to both sides of the board. The power traces have been increased from 1.27 mm to 1.5 mm to handle extra current, and the signal traces have been increased to .75-1 mm. Mounting Hole placement is not exact.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=File:SteeringBoard4.1.png&amp;diff=401</id>
		<title>File:SteeringBoard4.1.png</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=File:SteeringBoard4.1.png&amp;diff=401"/>
		<updated>2025-03-17T02:14:31Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: This is the complete KiCAD Schematic of the Steering Board 4.1. An LM393 Comparator has been implemented to prevent partial MOSFET switching and left and right turn signals from occuring simultaneously. The FR207 diodes have been replaced by SB5H100 Sc...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
This is the complete KiCAD Schematic of the Steering Board 4.1. An LM393 Comparator has been implemented to prevent partial MOSFET switching and left and right turn signals from occuring simultaneously. The FR207 diodes have been replaced by SB5H100 Schottky Diodes.&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=400</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=400"/>
		<updated>2025-03-17T01:36:02Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Welcome to the Elcano Project Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Welcome to the Elcano Project Wiki =&lt;br /&gt;
As the title says, WELCOME TO THE ELCANO PROJECT! Over the past few years, many different teams have been working hard to create Cheap and Modular autonomy at the University of Washington Bothell. We are currently working on our first two prototypes which are now in the form of tricycles. With the use of affordable microcontrollers, such as the Arduino Mega 2560 and Raspberry PI, we are working towards creating Autonomy for anyone to rebuild anywhere, and that under $2000 and fully open-source. But we don't plan to stop there, no. That is just the first step in reaching our ultimate goal, which is making our systems applicable to any desired ground vehicles, such as cars and other vehicles. Autonomy is nothing new, in fact, it has been around for over 40 years, the difference is that now we have the ability to make it available for anyone who desires to further their knowledge or simply finding a safer way to work.&lt;br /&gt;
&lt;br /&gt;
Visit our github repository [//https://github.com/elcano here].&lt;br /&gt;
&lt;br /&gt;
To '''edit articles''' or '''upload files''', please create an account and request editing rights from a [//www.elcanoproject.org/wiki/index.php?title=Special:ListUsers&amp;amp;group=bureaucrat member of the &amp;quot;bureaucrat&amp;quot; group].&lt;br /&gt;
&lt;br /&gt;
For editing, help visit https://www.mediawiki.org/wiki/Help:Editing_pages or https://www.mediawiki.org/wiki/Help:Formatting.&lt;br /&gt;
--------&lt;br /&gt;
[[File:Catrikes.JPG|1000px]]&lt;br /&gt;
== [[ElcanoIntro | Overview]] ==&lt;br /&gt;
The basic concept of how the Elcano Project vehicle works.&lt;br /&gt;
&lt;br /&gt;
== [[System Architecture]] ==&lt;br /&gt;
How processors connect to sensors, each other, actuators, and other hardware. Includes processor-to-processor communication protocol.&lt;br /&gt;
&lt;br /&gt;
== [[Communication | Communication (CAN Bus)]] ==&lt;br /&gt;
How processors exchange data on the vehicle and a description of data packet contents.&lt;br /&gt;
&lt;br /&gt;
== [[Power System]] ==&lt;br /&gt;
How different modules connect to the batteries or power subsystem hardware.&lt;br /&gt;
&lt;br /&gt;
== [[Low Level]] ==&lt;br /&gt;
How the Low-Level system (aka Drive-By_Wire) uses inputs to control actuators to steer, move, and stop the vehicle.&lt;br /&gt;
&lt;br /&gt;
== [[High Level]] ==&lt;br /&gt;
How the High Level (aka Sensor Hub) system uses stored maps and inputs from navigational sensors to formulate movement instructions sent to Low Level.&lt;br /&gt;
&lt;br /&gt;
== [[RemoteControl]] ==&lt;br /&gt;
Human control of trike movements through Low Level using hardware connected to Low Level by a radio communication link (drive-by radio). Includes onboard controls (drive by wire).&lt;br /&gt;
&lt;br /&gt;
== [[ Simulator]] ==&lt;br /&gt;
Using the Open-source CARLA platform with a go-between board allows simulation.&lt;br /&gt;
&lt;br /&gt;
== [[SensorsPage]] ==&lt;br /&gt;
&lt;br /&gt;
=== [[SteeringSensor]] ===&lt;br /&gt;
The front wheel angle detector.&lt;br /&gt;
&lt;br /&gt;
=== [[Sonar]] === &lt;br /&gt;
How the sonar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[Lidar]] ===&lt;br /&gt;
How the lidar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[ Camera]] ===&lt;br /&gt;
How the camera and vision subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
== [[ActuatorPage]] ==&lt;br /&gt;
&lt;br /&gt;
== [[ Board Diagrams]] ==&lt;br /&gt;
Images of Elcano Project's printed circuit boards for reference. PCB source files and schematics are maintained and stored at [//github.com/elcano].&lt;br /&gt;
&lt;br /&gt;
== Software development procedures ==&lt;br /&gt;
&lt;br /&gt;
=== [[Software repositories]] ===&lt;br /&gt;
What's in each of our GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
=== [[Arduino software]] ===&lt;br /&gt;
Getting started; references; development tools. Dealing with libraries and different parameters for each vehicle.&lt;br /&gt;
&lt;br /&gt;
=== [[Using Git and GitHub]] ===&lt;br /&gt;
Practices for maintaining code and source files on Elcano Project's GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
==[[FilesPage | Files]] ==&lt;br /&gt;
These are media files (pictures, videos, etc.) that are part of the project but are not maintained under version control.&lt;br /&gt;
&lt;br /&gt;
== Elcano Project Main Website ==&lt;br /&gt;
* [//www.elcanoproject.org]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=399</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=Main_Page&amp;diff=399"/>
		<updated>2025-03-17T01:35:41Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* Welcome to the Elcano Project Wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= Welcome to the Elcano Project Wiki =&lt;br /&gt;
As the title says, WELCOME TO THE ELCANO PROJECT! Over the past few years, many different teams have been working hard to create Cheap and Modular autonomy at the University of Washington Bothell. We are currently working on our first two prototypes which are now in the form of tricycles. With the use of affordable microcontrollers, such as the Arduino Mega 2560 and Raspberry PI, we are working towards creating Autonomy for anyone to rebuild anywhere, and that under $2000 and fully open-source. But we don't plan to stop there, no. That is just the first step in reaching our ultimate goal, which is making our systems applicable to any desired ground vehicles, such as cars and other vehicles. Autonomy is nothing new, in fact, it has been around for over 40 years, the difference is that now we have the ability to make it available for anyone who desires to further their knowledge or simply finding a safer way to work.&lt;br /&gt;
&lt;br /&gt;
Visit our github repository [//https://github.com/elcano here].&lt;br /&gt;
&lt;br /&gt;
To '''edit articles''' or '''upload files''', please create an account and request editing rights from a [//www.elcanoproject.org/wiki/index.php?title=Special:ListUsers&amp;amp;group=bureaucrat member of the &amp;quot;bureaucrat&amp;quot; group].&lt;br /&gt;
&lt;br /&gt;
For editing, help visit https://www.mediawiki.org/wiki/Help:Editing_pages or https://www.mediawiki.org/wiki/Help:Formatting.&lt;br /&gt;
--------&lt;br /&gt;
[[File:Catrikes.JPG|1000px]]&lt;br /&gt;
== [[ElcanoIntro | Overview]] ==&lt;br /&gt;
The basic concept of how the Elcano Project vehicle works.&lt;br /&gt;
&lt;br /&gt;
== [[System Architecture]] ==&lt;br /&gt;
How processors connect to sensors, each other, actuators, and other hardware. Includes processor-to-processor communication protocol.&lt;br /&gt;
&lt;br /&gt;
== [[Communication | Communication (CAN Bus)]] ==&lt;br /&gt;
How processors exchange data on the vehicle and a description of data packet contents.&lt;br /&gt;
&lt;br /&gt;
== [[Power System]] ==&lt;br /&gt;
How different modules connect to the batteries or power subsystem hardware.&lt;br /&gt;
&lt;br /&gt;
== [[Low Level]] ==&lt;br /&gt;
How the Low-Level system (aka Drive-By_Wire) uses inputs to control actuators to steer, move, and stop the vehicle.&lt;br /&gt;
&lt;br /&gt;
== [[High Level]] ==&lt;br /&gt;
How the High Level (aka Sensor Hub) system uses stored maps and inputs from navigational sensors to formulate movement instructions sent to Low Level.&lt;br /&gt;
&lt;br /&gt;
== [[RemoteControl]] ==&lt;br /&gt;
Human control of trike movements through Low Level using hardware connected to Low Level by a radio communication link (drive-by radio). Includes onboard controls (drive by wire).&lt;br /&gt;
&lt;br /&gt;
== [[ Simulator]] ==&lt;br /&gt;
Using the Open-source CARLA platform with a go-between board allows simulation.&lt;br /&gt;
&lt;br /&gt;
== [[SensorsPage]] ==&lt;br /&gt;
&lt;br /&gt;
=== [[SteeringSensor]] ===&lt;br /&gt;
The front wheel angle detector.&lt;br /&gt;
&lt;br /&gt;
=== [[Sonar]] === &lt;br /&gt;
How the sonar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[Lidar]] ===&lt;br /&gt;
How the lidar subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
=== [[ Camera]] ===&lt;br /&gt;
How the camera and vision subsystem connected to High-Level works.&lt;br /&gt;
&lt;br /&gt;
== [[ActuatorPage]] ==&lt;br /&gt;
&lt;br /&gt;
== [[ Board Diagrams]] ==&lt;br /&gt;
Images of Elcano Project's printed circuit boards for reference. PCB source files and schematics are maintained and stored at [//github.com/elcano].&lt;br /&gt;
&lt;br /&gt;
== Software development procedures ==&lt;br /&gt;
&lt;br /&gt;
=== [[Software repositories]] ===&lt;br /&gt;
What's in each of our GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
=== [[Arduino software]] ===&lt;br /&gt;
Getting started; references; development tools. Dealing with libraries and different parameters for each vehicle.&lt;br /&gt;
&lt;br /&gt;
=== [[Using Git and GitHub]] ===&lt;br /&gt;
Practices for maintaining code and source files on Elcano Project's GitHub repositories.&lt;br /&gt;
&lt;br /&gt;
==[[FilesPage | Files]] ==&lt;br /&gt;
These are media files (pictures, videos, etc.) that are part of the project but are not maintained under version control.&lt;br /&gt;
&lt;br /&gt;
== Elcano Project Main Website ===&lt;br /&gt;
* [//www.elcanoproject.org]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
	<entry>
		<id>https://www.elcanoproject.org/wiki/index.php?title=RemoteControl&amp;diff=398</id>
		<title>RemoteControl</title>
		<link rel="alternate" type="text/html" href="https://www.elcanoproject.org/wiki/index.php?title=RemoteControl&amp;diff=398"/>
		<updated>2024-08-16T01:50:41Z</updated>

		<summary type="html">&lt;p&gt;Elcanoadmin: /* 5- and 6-channel RC Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Historic Systems =&lt;br /&gt;
&lt;br /&gt;
The Elcano system can run autonomously or by remote control. There have been four systems built for manual or remote control.&lt;br /&gt;
&lt;br /&gt;
== Joystick ==&lt;br /&gt;
The first system used an APEM 9000 joystick. The part has five wires: 5V power, ground, and three analog lines. The joystick has two axes. The vertical axis is used for throttle (up) and brakes (down). The third analog signal is the voltage of the joystick when centered. The joystick was used in 2014 and is described in http://www.elcanoproject.org/tutorial/lab2.php.  The Low-level code may still contain inputs and processing for an analog joystick.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth ==&lt;br /&gt;
In 2015 students built a control system using a Bluetooth receiver to the Arduino. The transmitter was a TI Sitara running Android. &lt;br /&gt;
&lt;br /&gt;
== Amplitude Shift Keying (ASK) RC Controller ==&lt;br /&gt;
&lt;br /&gt;
Elcano project used a custom-built radio control system with two arduinos, one in the remote control that collects manual inputs and transmits them with a 433MHz ASK radio transmitter, and one on the Elcano vehicle which receives the information sent over radio and converts it into an ElcanoSerial drive packet which is transmitted to C2 over ElcanoSerial. This information is used to manually drive the trike, begin an autonomous routine, or activate the emergency brake and stop the trike. The RH_ASK system was limited to 40 feet (12 meters) in practice and was never use to drive the vehicle.&lt;br /&gt;
&lt;br /&gt;
= Current System =&lt;br /&gt;
&lt;br /&gt;
== CAN Bus and SAMD21 ==&lt;br /&gt;
&lt;br /&gt;
The RC transceiver board can be built five different ways:&lt;br /&gt;
&lt;br /&gt;
* Transmitter using Bluetooth&lt;br /&gt;
&lt;br /&gt;
* Receiver using Bluetooth&lt;br /&gt;
&lt;br /&gt;
* Transmitter using radio (RFM69HCW)&lt;br /&gt;
&lt;br /&gt;
* Receiver using radio (RFM69HCW)&lt;br /&gt;
&lt;br /&gt;
* Receiver using 5 or 6 channel radio control (RC)&lt;br /&gt;
&lt;br /&gt;
When configured as a receiver it is mounted on the vehicle and communicates drive commands over CAN bus. &lt;br /&gt;
&lt;br /&gt;
CAN is documented on [[Communication]]&lt;br /&gt;
&lt;br /&gt;
As a transmitter, it is packaged in a remote box with joysticks and switches. Functions and pins are explained in TranceiverPins_1_6.docx on https://github.com/elcano/Transceiver/tree/master/Transceiver%20Documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The processor is an Arduino ARM SAMD21 mini dev board, which requires some special steps to install. These are detailed on https://learn.sparkfun.com/tutorials/samd21-minidev-breakout-hookup-guide/setting-up-arduino &lt;br /&gt;
&lt;br /&gt;
Reset requires two quick taps of the reset button. After a reset, the blue LED on the board will pulse slowly for a few seconds. If the board is unresponsive, try resetting this way first.'''&lt;br /&gt;
&lt;br /&gt;
== Setting up SAMD21 ==&lt;br /&gt;
&lt;br /&gt;
Follow the instructions on https://learn.sparkfun.com/tutorials/samd21-minidev-breakout-hookup-guide/setting-up-arduino&lt;br /&gt;
&lt;br /&gt;
Tools &amp;gt; Board &amp;gt; Boards Manager … Then find an entry for Arduino SAMD Boards (32-bits ARM Cortex-M0+). Select it, and install.&lt;br /&gt;
&lt;br /&gt;
Next, open your Arduino preferences (File &amp;gt; Preferences). Then find the Additional Board Manager URLs text box, and paste the below link in:&lt;br /&gt;
&lt;br /&gt;
https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json&lt;br /&gt;
&lt;br /&gt;
Then hit &amp;quot;OK&amp;quot;, and travel back to the Board Manager menu. Find a new entry for SparkFun SAMD Boards.&lt;br /&gt;
Once the board is installed, you should see new entries in your Tools &amp;gt; Board list. Select SparkFun SAMD21 Mini Breakout.&lt;br /&gt;
&lt;br /&gt;
Next step is to find the needed files.&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;RH_RF69.h&amp;gt;        // External; documented at &lt;br /&gt;
http://www.airspayce.com/mikem/arduino/RadioHead/classRH__RF69.html&lt;br /&gt;
&lt;br /&gt;
Download the file from http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.97.zip&lt;br /&gt;
&lt;br /&gt;
Follow https://www.arduino.cc/en/Guide/Libraries to add the library. From Sketch &amp;gt; Include Libraries select Add Zip Library and navigate to the right file. You should then see RadioHead in the list of included libraries.&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;mcp_can_dfs.h&amp;gt;    // &amp;lt;---- Import from another library: Seed-Studio/CAN-BUS-Shield&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;mcp_can.h&amp;gt;        //       (install Library from Arduino, search for &amp;quot;Can-Bus-Shield&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Download zip from&lt;br /&gt;
&lt;br /&gt;
https://github.com/Seeed-Studio/CAN_BUS_Shield&lt;br /&gt;
&lt;br /&gt;
From Sketch &amp;gt; Include Libraries select Add Zip Library and navigate to the right file. You should see CAN_BUS-Shield-master in the Include Libraries.&lt;br /&gt;
&lt;br /&gt;
== 5- and 6-channel RC Controller ==&lt;br /&gt;
&lt;br /&gt;
The system has been run from either a Hitec Optics 5 2.4 five channel unit or a Spektrum DX6i six channel controller. The Low level circuit board has a3x7 pin socket in the corner to accommodate the receiver. Each channel needs to be on its own interrupt. Since the Arduino Mega has only 6 interrupts and the Arduino Micro has 5, this can be a problem, especially since we want another one or two interrupts to handle the speed. Low level code may still have software to handle these interrupts. The RC controllers send a 1.0 to 2.0 ms pulse on each channel at 30 Hz. Some controllers send these signals in turn. We have built a six-input OR circuit to combine all signals, which would allow processing with just one interrupt. Unfortunately, there is no good way to predict whether the RC unit will send pulses in turn or all at once. In fact, the behavior seems to be determined by the receive unit, not the transmitter. Thus a separate interrupt is required for each channel used. Interrupt processing consists of interrupting on a rising edge, then switching to a falling edge interrupt and logging the pulse width. A width of 1.0 ms typically means one extreme, 1.5 ms is centered, and 2.0 ms is the other extreme., This system can get confusing about which channel is assigned which behavior, and the two controllers assign their channels differently. To go beyond the Arduino interrupt limit, the V2 Low Level board has all RC inputs assigned to Analog Input 8 to 13 of the Arduino. These pins are used digitally. Pins A8-A15 on Arduino Mega, all go to the same port. Thus we can use the pin change interrupt, which is activated whenever any bit of the 8-bit port changes.&lt;br /&gt;
&lt;br /&gt;
= Summer 2024 RC controllers =&lt;br /&gt;
DumboRC X6FG 6 channel RC controller2.4 GHz 4.8-10V&lt;br /&gt;
&lt;br /&gt;
Pulse width 1000-2000 milliseconds &lt;br /&gt;
&lt;br /&gt;
* CH1 Steering&lt;br /&gt;
* CH2 Throttle&lt;br /&gt;
* CH3 2 way switch&lt;br /&gt;
* CH4 3 way slider switch&lt;br /&gt;
* CH5 Rotary switch&lt;br /&gt;
* CH6 Rotary switch&lt;br /&gt;
&lt;br /&gt;
[https://www.amazon.com/dp/B09MS4HBC8/ref=sspa_dk_detail_2?psc=1&amp;amp;pd_rd_i=B09MS4HBC8&amp;amp;pd_rd_w=LeIXy&amp;amp;content-id=amzn1.sym.36d4fe03-2814-4a0b-86e2-d1e3d3071509&amp;amp;pf_rd_p=36d4fe03-2814-4a0b-86e2-d1e3d3071509&amp;amp;pf_rd_r=SF0RW81Y2X0PB3BGXJZP&amp;amp;pd_rd_wg=fWdsi&amp;amp;pd_rd_r=6c04f252-61f9-40a5-ac07-847c559b0e41&amp;amp;s=toys-and-games&amp;amp;sp_csd=d2lkZ2V0TmFtZT1zcF9kZXRhaWxfdGhlbWF0aWM Amazon]&lt;br /&gt;
&lt;br /&gt;
[[File:DUMBORC.jpg|300px|]]&lt;br /&gt;
&lt;br /&gt;
== RFM69HCW and SAMD21 ==&lt;br /&gt;
&lt;br /&gt;
The RFM69HCW (915MHz) transceiver offers several benefits over the 433MHz ASK radios:&lt;br /&gt;
* greater range with higher transmit power&lt;br /&gt;
* much higher raw bitrate&lt;br /&gt;
* half-duplex communication and received signal strength indicator (RSSI)&lt;br /&gt;
* compatibility with higher-performance 3.3V ARM boards like SAMD21&lt;br /&gt;
&lt;br /&gt;
Using the RF69 RadioHead library, the RC system has expanded capabilities from the RH ASK implementation. Data is stored on both ends as a C struct, which is broken down and transmitted as bytes by the RF69 library. After successful transmission, the data is accessible directly from the struct and variables larger than one byte need no additional processing before use. After successfully receiving a packet from the remote control, the receiver sends a packet back with an RSSI value. The remote control uses this reply message to indicate radio communication is active. &lt;br /&gt;
&lt;br /&gt;
=== Transmitted data to vehicle ===&lt;br /&gt;
* unsigned 12-bit throttle (0-4095)&lt;br /&gt;
* unsigned 12-bit turn &lt;br /&gt;
* boolean emergency stop&lt;br /&gt;
* boolean autonomous mode&lt;br /&gt;
* signed RSSI of last received packet (from vehicle)&lt;br /&gt;
&lt;br /&gt;
=== Received data from vehicle ===&lt;br /&gt;
* signed RSSI of last received packet (from remote)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NEXT . [[SensorsPage]]&lt;/div&gt;</summary>
		<author><name>Elcanoadmin</name></author>
		
	</entry>
</feed>