Designing Scalable Precision Loads For Testing Airbag Controllers
Today’s airbag controllers not only sense the impact of a collision, but also determine if the collision requires deployment of the airbags and seat-belt pretensioners. As can be seen in Figure 1, there are many sensor circuits to test.
As the airbag controllers become more complex, the testing requirements increase. Multiple airbags in the front, sides, and roof plus circuits that detect if seats are occupied and, if so, whether it’s a bag of groceries or a small child also are increasing the testing process. These safety-critical products must be very carefully tested to ensure quality and minimize liability risks to both the automobile OEM and the airbag manufacturer.
Testing Issues
During normal operation of the airbag controller, the airbag igniters, or squibs, are checked for proper resistance. Functional testing of the airbag and pretensioner circuits requires precision scalable load circuits that simulate nominal and fault conditions on as many as 15 squib loops.
Airbag controller electronics must distinguish discrepancies in load values from 0.6 to 7.0 W with a 1% tolerance. The tight tolerances are due to the very low resistance values of the various components.Figure 2 shows that the typical resistances present in the squib loops total a very small amount. When checking the squib paths, both a shorted path and a high-resistance path must be simulated because these represent failed conditions. In many cases, the differences in the loads are very small; that is, for a shorted condition, 1.6
W is acceptable but 0.7 W is a fault.Test loads must be applied simultaneously to multiple inputs. As a result, there must be a cost-effective way to accomplish this.
Circuit Description
The scalable loads are accomplished by using relays to switch resistors in parallel. But because the resistance of the relays and cabling can cause changes in the actual load resistance, a four-terminal measurement is needed to accurately provide the correct resistance.
The four-terminal connections are made at the airbag controller terminals, but the controller itself is disconnected during the measurement. This precaution ensures that the measured resistance is the actual value seen by the controller when it is reconnected for the load test. By manipulating the relays, a very precise, low-resistance load value can be achieved that falls within the 1% tolerance.
Figure 3
shows an example circuit that uses relays and resistors in a binary ladder to achieve precision loads. Multiple loads can be achieved by adding more banks of resistors for each of the sensor connections needed.
Design Issues
Design parameters are based on the load values needed and the granularity of those values. The binary resistive network was selected to obtain the required resolution in the 0.6- to 7.0-
W
range for the low-resistance test requirements.Table 1 shows three examples of these parameters:
Circuit A = 1, 2, 4, 8, 16, and 32
W
in parallel.Circuit B = 1, 2, 4, 8, 16, 32, 64, and 128
W
in parallel.Circuit C = 1.37, 2.7, 5.6, 11.3, 22.6, 47, 91, 180, and 360
W
in parallel.As can be seen, the resistor values and the number of resistors have an effect on granularity.
The numbers in each column represent the number of steps or values in each range. Depending on the resistors used, these can be increased or decreased. Circuit A contains six resistors in the binary ladder. But by adding two more resistors in Circuit B, you can significantly increase the incremental steps. Circuit C gives a good resolution from 0.6 to 7.0
W. As you see by the following values, the resolution at the low end of the resistance scale is very tight, just over 1 mW
.
Calibration
As shown in Figure 3, a multimeter to perform a Kelvin four-terminal resistance measurement can be connected to the UUT. By closing the right combination of relays and checking the result using the multimeter, the resistance needed for a particular test can be achieved. By saving the relay closures and corresponding resistance values to a calibration file, you can call up the relays that must be closed in your test program. By associating the information in the calibration file to the specific squib or pretensioner circuit, you can select the proper loads that will eliminate any errors caused by fixture wiring, relay contacts, and connections.
Implementation
The scalable loads can be incorporated on a PCB or a breadboard inside a test fixture. VXI test systems provide a good platform, and many manufacturers offer relay driver products that can be used to activate the scalable loads.
Other options include using the parallel port of a PC to drive a relay matrix. PXI and CompactPCI systems also provide low-cost alternatives.
Conclusions
By using the binary ladder technique, you can create multiple load networks where many low-value, precision resistances are needed. By using a multimeter with a Kelvin connection at the UUT, you can calibrate the loads accurately. This approach provides an inexpensive alternative to programmable resistive-load units.
About the Author
Geoffrey Templeton has been employed at GenRad for 19 years. He manages the Sales Support Group for the company’s GENEVA Test Systems. GenRad, 7 Technology Park Dr., Westford, MA 01886, (978) 589-7797, e-mail: [email protected].
Table 1.
Circuit
1 to 2 W
2 to 3 W
3 to 4 W
4 to 5 W
5 to 6 W
6 to 7 W
A
31
16
6
2
2
1
1
B
127
64
19
10
7
4
3
C
158
178
55
30
18
12
9
main()
{
double resistive[]= {1,2,4,8,16,32,64,128}; /* change these values for different resistors */
double array_out[512];
double total_res;
int max_resistance = 256;
int number_bits = 8;
int check = 1;
int result, count, shift, number;
/* Test all possible parallel resistances */
for (count = 1; count
/* Test each bit position to select the resistance value out */
/* of the resistive array */
{
total_res = 0;
for (shift = 0; shift
{
number = count >> shift;
/* Compute the total parallel resistance */
if (number & check == 1) total_res = total_res + (1/resistive[shift]);
}
array_out[count] = 1/total_res;
}
/* Sort array_out in ascending order and print out values */
Sort (array_out, max_resistance, 0, array_out);
for (count = 1; count
}
Figure 4.
Copyright 1998 Nelson Publishing Inc.