Wiki source code of Sensor Module

Version 61.4 by Heimir Thordarson on 2026/02/23 17:43

Show last authors
1 {{wikibox title="Sensor Module" image="https://wiki.alignracing.no/bin/download/Electrical/Sensor%20Module/WebHome/ASM_AR26.png?rev=1.1" caption="3D model of the Sensor Module from Altium Designer" width="30" labelWidth="50"}}
2 Voltage = 4.5V - 40V
3 Fuse Current = 125mA
4 Sensor Inputs = 13
5 Voltage divider Inputs = 2
6 3V3 Thermistor Inputs = 7
7 5V Pressure Inputs = 4
8 Communication Protocol = CAN FD
9 Max Data rate = 1 Mbps
10
11 {{/wikibox}}
12
13 = Table of Contents =
14
15 {{content}}
16 {{content}}
17 {{content}}
18 {{toc reference="Electrical.Sensor Module.WebHome"/}}
19 {{/content}}
20 {{/content}}
21 {{/content}}
22
23 = Description =
24
25 The Sensor module is designed to measure any extra analog signals rear of the firewall. For AR26, the module is designed to measure two suspension displacement sensors, two oil temperature, four water pressure, four water temperature, and one air temperature sensor. All of the measurements are then transmitted to a CAN network, which there are two of.
26
27 = Design =
28
29 In the following section, how the sensor module is connected will be covered. The connector for the sensor module is a [[High-Density d'sub-44>>https://www.te.com/en/product-2311770-1.html]] which is directly solderen onto the circuit board. The plug needed for this system is the [[204517-3>>doc:Sandbox.TestPage3]], which uses crimps instead of solder cups which is common for the dsub connectors
30
31 [[image:AR26_ASM pinout.png||height="287" width="616"]]
32
33 In the figure above, the pinout shows how the pins are divided. Each box shows which pins belong together for each usecase, where the red box is the power input. Yellow boxes are for each canbus network, while the green box is for each sensor used in AR26.
34
35
36 (% style="width:1058.6px" %)
37 |=(% style="width: 71px;" %)Pin Number|=(% style="width: 164px;" %)Pin Name|=(% style="width: 124px;" %)Type|=(% style="width: 70px;" %)(((
38 Pin
39 Number
40 )))|=(% style="width: 218px;" %)Pin name|=(% style="width: 58px;" %)(((
41 Type
42 )))|=(% style="width: 32px;" %)Pin Number|=(% style="width: 192px;" %)Pin Name|=(% style="width: 90px;" %)Pin Type
43 |(% style="width:71px" %)(((
44 1
45 )))|(% style="width:164px" %)Air Temperature|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)16|(% style="width:218px" %)Air Temperature|(% style="width:58px" %)GND|(% style="width:32px" %)31|(% style="width:192px" %)Suspension Displacement Left|(% style="width:90px" %)GND
46 |(% style="width:71px" %)2|(% style="width:164px" %)Suspension Displacement Left|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)17|(% style="width:218px" %)Suspension Displacement Left|(% style="width:58px" %)3V3|(% style="width:32px" %)32|(% style="width:192px" %)Suspension Displacement Right|(% style="width:90px" %)GND
47 |(% style="width:71px" %)3|(% style="width:164px" %)Suspension Displacement Right|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)18|(% style="width:218px" %)Suspension Displacement Right|(% style="width:58px" %)(((
48 3V3
49 )))|(% style="width:32px" %)33|(% style="width:192px" %) |(% style="width:90px" %)
50 |(% style="width:71px" %)4|(% style="width:164px" %)Oil Temperature Right|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)19|(% style="width:218px" %)Oil Temperature Right|(% style="width:58px" %)3V3|(% style="width:32px" %)34|(% style="width:192px" %) |(% style="width:90px" %)
51 |(% style="width:71px" %)5|(% style="width:164px" %)Oil Temperature Left|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)20|(% style="width:218px" %)Oil Temperature Left|(% style="width:58px" %)3V3|(% style="width:32px" %)35|(% style="width:192px" %) |(% style="width:90px" %)
52 |(% style="width:71px" %)6|(% style="width:164px" %)Cooling Temperature 4|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)21|(% style="width:218px" %)Cooling Sensor 4|(% style="width:58px" %)GND|(% style="width:32px" %)36|(% style="width:192px" %) |(% style="width:90px" %)
53 |(% style="width:71px" %)7|(% style="width:164px" %)Cooling Pressure 4|(% style="width:124px" %)Analog (0-5V)|(% style="width:70px" %)22|(% style="width:218px" %)Cooling Sensor 4|(% style="width:58px" %)3V3|(% style="width:32px" %)37|(% style="width:192px" %) |(% style="width:90px" %)
54 |(% style="width:71px" %)8|(% style="width:164px" %)Cooling Temperature 3|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)23|(% style="width:218px" %)(((
55 Cooling Sensor 3
56 )))|(% style="width:58px" %)GND|(% style="width:32px" %)38|(% style="width:192px" %) |(% style="width:90px" %)
57 |(% style="width:71px" %)9|(% style="width:164px" %)Cooling Pressure 3|(% style="width:124px" %)Analog (0-5V)|(% style="width:70px" %)24|(% style="width:218px" %)(((
58 Cooling Sensor 3
59 )))|(% style="width:58px" %)3V3|(% style="width:32px" %)39|(% style="width:192px" %) |(% style="width:90px" %)
60 |(% style="width:71px" %)10|(% style="width:164px" %)Cooling Temperature 2|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)25|(% style="width:218px" %)Cooling Sensor 2|(% style="width:58px" %)GND|(% style="width:32px" %)40|(% style="width:192px" %) |(% style="width:90px" %)
61 |(% style="width:71px" %)11|(% style="width:164px" %)Cooling Pressure 2|(% style="width:124px" %)Analog (0-5V)|(% style="width:70px" %)26|(% style="width:218px" %)Cooling Sensor 2|(% style="width:58px" %)3V3|(% style="width:32px" %)41|(% style="width:192px" %) |(% style="width:90px" %)
62 |(% style="width:71px" %)12|(% style="width:164px" %)Cooling Temperature 1|(% style="width:124px" %)Analog (0-3.3V)|(% style="width:70px" %)27|(% style="width:218px" %)Cooling Sensor 1|(% style="width:58px" %)GND|(% style="width:32px" %)42|(% style="width:192px" %) |(% style="width:90px" %)
63 |(% style="width:71px" %)13|(% style="width:164px" %)Cooling Pressure 1|(% style="width:124px" %)Analog (0-5V)|(% style="width:70px" %)28|(% style="width:218px" %)(((
64 Cooling Sensor 1
65 )))|(% style="width:58px" %)3V3|(% style="width:32px" %)43|(% style="width:192px" %)Main Power|(% style="width:90px" %)GND
66 |(% style="width:71px" %)14|(% style="width:164px" %)CAN High 1|(% style="width:124px" %)CAN|(% style="width:70px" %)29|(% style="width:218px" %)CAN Low 2|(% style="width:58px" %)CAN|(% style="width:32px" %)44|(% style="width:192px" %)Main Power|(% style="width:90px" %)+24V
67 |(% style="width:71px" %)15|(% style="width:164px" %)CAN Low 1|(% style="width:124px" %)CAN|(% style="width:70px" %)30|(% style="width:218px" %)CAN High 2|(% style="width:58px" %)CAN|(% style="width:32px" %) |(% style="width:192px" %) |(% style="width:90px" %)
68
69 == Microcontroller Pinout ==
70
71 |=(% style="width: 96px;" %)Physical Pin|=(% style="width: 102px;" %)Electrical Pin|=(% style="width: 991px;" %)Description
72 |(% style="width:96px" %)1|(% style="width:102px" %) |(% style="width:991px" %)
73 |(% style="width:96px" %)5|(% style="width:102px" %) |(% style="width:991px" %)
74 |(% style="width:96px" %)7|(% style="width:102px" %) |(% style="width:991px" %)
75 |(% style="width:96px" %)9|(% style="width:102px" %) |(% style="width:991px" %)
76 |(% style="width:96px" %)10|(% style="width:102px" %) |(% style="width:991px" %)
77 |(% style="width:96px" %)11|(% style="width:102px" %) |(% style="width:991px" %)
78 |(% style="width:96px" %)12|(% style="width:102px" %) |(% style="width:991px" %)
79 |(% style="width:96px" %)13|(% style="width:102px" %) |(% style="width:991px" %)
80 |(% style="width:96px" %)14|(% style="width:102px" %) |(% style="width:991px" %)
81 |(% style="width:96px" %)15|(% style="width:102px" %) |(% style="width:991px" %)
82 |(% style="width:96px" %)16|(% style="width:102px" %) |(% style="width:991px" %)
83 |(% style="width:96px" %)17|(% style="width:102px" %) |(% style="width:991px" %)
84 |(% style="width:96px" %)18|(% style="width:102px" %) |(% style="width:991px" %)
85 |(% style="width:96px" %)19|(% style="width:102px" %) |(% style="width:991px" %)
86 |(% style="width:96px" %)20|(% style="width:102px" %) |(% style="width:991px" %)
87 |(% style="width:96px" %)21|(% style="width:102px" %) |(% style="width:991px" %)
88 |(% style="width:96px" %)22|(% style="width:102px" %) |(% style="width:991px" %)
89 |(% style="width:96px" %)23|(% style="width:102px" %) |(% style="width:991px" %)
90 |(% style="width:96px" %)27|(% style="width:102px" %) |(% style="width:991px" %)
91 |(% style="width:96px" %)28|(% style="width:102px" %) |(% style="width:991px" %)
92 |(% style="width:96px" %)29|(% style="width:102px" %) |(% style="width:991px" %)
93 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
94 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
95 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
96 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
97 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
98 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
99 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
100 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
101 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
102 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
103 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
104 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
105 |(% style="width:96px" %) |(% style="width:102px" %) |(% style="width:991px" %)
106
107
108
109 == Air Temperature Sensor ==
110
111 The air temperature sensor will be used to have a dynamic reference setpoint for the cooling system. This could reduce the current draw from the low voltage system compared to having a fixed reference point. This is because the regulator will not try to cool the water to a temperature lower than the ambient temperature. The sensor works as a resistor which varies depending on its temperature. Where in this case, the resistance lowers when the temperature increases (NTC). To make the microcontroller able to measure the changes in resistance, the thermistor is put into a voltage divider circuit.
112
113 [[image:circuit with marks.png||height="237" width="566"]]
114
115 (% class="wikigeneratedid" %)
116 As shown in the figure above, the thermistor is put into a voltage divider circuit with a 4k7 ohm resistor to convert the resistance changes of the thermistor to a measurable voltage. To find the temperature of the thermistor based on the voltage measure by the analog-to-digital converter (ADC), the resistance of the thermistor needs to be calculated based on the voltage from a voltage divider.
117
118 (% style="font-size: 1.5em;" %)
119 (((
120 {{mathjax}}
121 $$
122 R_T = R_f \frac{V_{out}}{V_{in} - V_{out}}
123 $$
124 {{/mathjax}}
125 )))
126
127 Where:
128
129 * {{mathjax}}\(R_f\){{/mathjax}}= The upper resistor in the voltage divider which stays fixed, which in this case is 4.7k {{mathjax}}\(\Omega\){{/mathjax}}
130 * {{mathjax}}\(V_{out}\){{/mathjax}}= The voltage over the thermistor, and the voltage that the microcontroller will measure.
131 * {{mathjax}}\(V_{in}\){{/mathjax}}= The supply voltage of the voltage divider, which in this case is a constant 3.3 {{mathjax}}\(V\){{/mathjax}}
132 * {{mathjax}}\(R_T\){{/mathjax}}= Resistance of the thermistor
133
134 Knowing this, the resistance of the thermistor can be added into the following equation. This will determine the temperature of the thermistor based on the known resistance and the beta value of the thermistor.
135
136 (% style="font-size: 1.5em;" %)
137 (((
138 {{mathjax}}
139 $$
140 T = \frac{1}{\frac{1}{T_0} + \frac{1}{\beta} \ln\left(\frac{R_T}{R_0}\right)}
141 $$
142 {{/mathjax}}
143 )))
144
145 where:
146
147 * {{mathjax}}\(\beta\){{/mathjax}}= material constant that defines the steepness of its resistance-temperature curve between two temperature points, usually 25/85 degrees celsius. In this case it is 3694 //**K.**//
148 * {{mathjax}}\(T_0\){{/mathjax}}= The test temperature at which the thermistor is 10k {{mathjax}}\(\Omega\){{/mathjax}}, which in this case is 25 degrees celsius.
149 * {{mathjax}}\(R_0\){{/mathjax}}= The resistance of the thermistor when it is 25 degrees celsius.
150 * {{mathjax}}\(R_T\){{/mathjax}}= The live resistance of the thermistor.
151
152 === Filtering ===
153
154 Considering that the sensor can only promise a reaction time of 5 seconds when in water, it can be assumed that a heavy filter will not add any problematic latencies. To ensure a low cost, the filter uses common components which will filter any noise above the inverter switching noise.
155
156 (% style="font-size: 1.5em;" %)
157 (((
158 {{mathjax}}
159 $$
160 F_c = \frac{1}{2 \pi R C}
161 $$
162 {{/mathjax}}
163 )))
164
165 Where:
166
167 * {{mathjax}}\(F_c\){{/mathjax}}= Cut-off frequency of the filter. Any noise with a frequency above this will be filtered out.
168 * {{mathjax}}\(R\){{/mathjax}}= Resistance of the resistor in low-pass filter.
169 * {{mathjax}}\(C\){{/mathjax}}= Capacitance of the capacitor in the low-pass filter.
170
171 Using a resistor with 1k {{mathjax}}\(\Omega\){{/mathjax}} and a capacitor with 100 **nF **in capacitance, the cut-off frequency will be 1592 **Hz.**
172
173 == Suspension Displacement Sensor ==
174
175 For AR26, the same sensors from AR25 is reused. These are the [[Texense RSL-A-50-P>>https://cdn.shopify.com/s/files/1/0368/1989/files/technical_datasheet_RSL.pdf?413]] which can be connected as the entire voltage divider when using each end as supply and ground. The output of the sensor will then be the throw of the potentiometer.
176
177 [[image:Suspension Displacement Circuit.png]]
178
179 The sensor has a measurable range of 50mm with electrical range of 51mm, meaning that the electrical range will in practice be 1960 {{mathjax}}\(\Omega\){{/mathjax}} with 40 {{mathjax}}\(\Omega\){{/mathjax}} in total on each end.
180
181 [[image:Actual Representation of Linear Potmeter.png||height="195" width="309"]]
182
183 This can then be used to create the length of the sensor based on the input voltage.
184
185 (% style="font-size: 1.5em;" %)
186 (((
187 {{mathjax}}
188 $$
189 x = \frac{50}{1960} \left( \frac{2000\,V_{\text{out}}}{V_s} - 20 \right)
190 $$
191 {{/mathjax}}
192 )))
193
194 where:
195
196 * {{mathjax}}\(x\){{/mathjax}} = The mechanical placement excluding the dead length (178mm).
197 * {{mathjax}}\(V_s\){{/mathjax}}= The supply voltage of the linear potentiometer, in this case it is 3.3 {{mathjax}}\(V\){{/mathjax}}.
198 * {{mathjax}}\(V_{out}\){{/mathjax}} = The output voltage of the linear potentiometer. ranging from 0.033{{mathjax}}\(V\){{/mathjax}} to 3.267{{mathjax}}\(V\){{/mathjax}}.
199
200 === Filtering ===
201
202 The sensors output latency can be expected to be a lot shorter than the air temperature sensor as the sensor is just a variable sensor based on placement. The limiting factor for the system which uses this information is the CAN-BUS messages from the inverters which send the information each 6.25 milliseconds. This means that the cut-off frequency cannot be any lower than 160 Hz, which will make the same type of low pass filter from the air temperature sensor acceptable with a cut-off frequency of 1591 Hz.
203
204 == Gearbox Temperature Sensor ==
205
206 The gearbox Temperature Sensor for AR26 will be the [[GAG10K3976B1>>https://www.te.com/en/product-GAG10K3976B1.html]], a NTC temperature probe which will be installed into a generic M5 bolt which is mounted on the upright in the wheel assembly. The thermistor will be connected in a voltage divider configuration where the thermistor is in the lower position so that the voltage lowers when the temperature increases.
207
208 [[image:Oil_Temp_schematic.png||height="208" width="486"]]
209
210 Knowing the beta constant of the thermistor, the equation for the temperature based on the voltage measured by the ADC inside microcontroller can be derived.
211
212 (% style="font-size: 1.5em;" %)
213 (((
214 {{mathjax}}
215 $$
216 R_T = R_f \frac{V_{out}}{V_{in} - V_{out}}
217 $$
218 {{/mathjax}}
219 )))
220
221 Where:
222
223 * {{mathjax}}\(R_f\){{/mathjax}}= The upper resistor in the voltage divider which stays fixed, which in this case is 1k {{mathjax}}\(\Omega\){{/mathjax}}
224 * {{mathjax}}\(V_{out}\){{/mathjax}}= The voltage over the thermistor, and the voltage that the microcontroller will measure.
225 * {{mathjax}}\(V_{in}\){{/mathjax}}= The supply voltage of the voltage divider, which in this case is a constant 3.3 {{mathjax}}\(V\){{/mathjax}}
226 * {{mathjax}}\(R_T\){{/mathjax}}= Resistance of the thermistor
227
228 Knowing this, the resistance of the thermistor can be added into the following equation. This will determine the temperature of the thermistor based on the known resistance and the beta value of the thermistor.
229
230 (% style="font-size: 1.5em;" %)
231 (((
232 {{mathjax}}
233 $$
234 T = \frac{1}{\frac{1}{T_0} + \frac{1}{\beta} \ln\left(\frac{R_T}{R_0}\right)}
235 $$
236 {{/mathjax}}
237 )))
238
239 where:
240
241 * {{mathjax}}\(\beta\){{/mathjax}}= material constant that defines the steepness of its resistance-temperature curve between two temperature points, usually 25/85 degrees celsius. In this case it is 3976 //**K.**//
242 * {{mathjax}}\(T_0\){{/mathjax}}= The test temperature at which the thermistor is 10k {{mathjax}}\(\Omega\){{/mathjax}}, which in this case is 25 degrees celsius.
243 * {{mathjax}}\(R_0\){{/mathjax}}= The resistance of the thermistor when it is 25 degrees celsius.
244 * {{mathjax}}\(R_T\){{/mathjax}}= The live resistance of the thermistor.
245
246 === Filtering ===
247
248 The sensors output latency can be expected to be a lot shorter than the oil temperature sensor as the sensor is just a variable sensor based on placement. The limiting factor for the system which uses this information is the CAN-BUS messages from the inverters which send the information each 6.25 milliseconds. This means that the cut-off frequency cannot be any lower than 160 Hz, which will make the same type of low pass filter from the oil temperature sensor acceptable with a cut-off frequency of 1591 Hz.
249
250 = Bill of Materials =
251
252 == Circuit Board ==
253
254 == Wiring Harness ==
255
256 == Sensors ==
257
258