SEMI ACTIVE SUSPENSION CONTROL METHODS USING SKYHOOK AND ENDSTOP CONTROL
20240017653 ยท 2024-01-18
Assignee
Inventors
Cpc classification
F16F15/002
MECHANICAL ENGINEERING; LIGHTING; HEATING; WEAPONS; BLASTING
B60N2/501
PERFORMING OPERATIONS; TRANSPORTING
International classification
Abstract
A method is disclosed to smooth the ride of a seat occupant by controlling the damping force of a fluid damper positioned between the seat and base. The method selects between different subprocesses to minimize the ride discomfort and to minimize peak seat accelerations and endstop jerks. The controller uses the input from the different subprocesses to create the best ride for the immediate operational conditions.
Claims
1. A method of controlling a damping force of a seat damper positioned between a seat and a base, the seat damper having a seat controller providing control thereto, the method comprising: measuring and calculating a plurality of input values, the plurality of input including the steps of: measuring an absolute acceleration (a.sub.abs) of the seat or base and generating an acceleration signal; measuring an unscaled relative displacement (x.sub.rel_unscaled) of the seat relative to the base and generating a displacement signal; calculating a maximum unscaled displacement (x.sub.max_unscaled) and a minimum unscaled displacement (x.sub.min_scaled), from an AutoCalibration subprocess; calculating a scaled relative displacement (x.sub.rel_scaled), a maximum scaled displacement (x.sub.max_scaled), and a minimum scaled displacement (x.sub.min_scaled) using a standardized scaling subprocess; calculating an absolute velocity (V.sub.abs_seat) of the seat and a relative velocity (V.sub.rel) of the seat relative to the base from a signal processing subprocess using the absolute acceleration (a.sub.abs) and the scaled relative displacement (x.sub.rel_scaled); using the plurality of input values simultaneously determining a maximum endstop control signal (u.sub.ES) and a skyhook control signal (u.sub.skyhook), wherein the maximum endstop control signal (u.sub.ES) is determined by simultaneously running an absolute ellipse endstop control (EEC) subprocess generating an absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs), a relative EEC subprocess generating a relative EEC endstop control signal (Ctrl.sub.Ellipse_rel), and an ESO2 endstop control subprocess generating an endstop control signal (Ctrl.sub.ESO2), wherein the maximum of the three is selected as the maximum endstop control signals (u.sub.ES), wherein the skyhook control signal (Ctrl.sub.skyhook) is determined by running a skyhook control subprocess and generating a skyhook control signal (Ctrl.sub.skyhook) and running a rising edge filter subprocess on the skyhook control signal (Ctrl.sub.skyhook); aggregating the maximum endstop control signal (u.sub.ES) and the skyhook control signal (u.sub.skyhook) to determine a desired seat performance by testing whether a sum of the maximum endstop control signal (u.sub.ES) and the skyhook control signal (u.sub.skyhook) provides the desired seat performance, or a maximum between the maximum endstop control signal (u.sub.ES) or the skyhook control signal (u.sub.skyhook) provides desired seat performance; generating a damping force control signal (u.sub.Ctrl) based upon the desired seat performance; and controlling the seat damper.
2. The method of claim 1, wherein the AutoCalibration subprocess further compromises the steps of populating a nonvolatile random access memory (NVRAM) with a plurality of values from a last power cycle subprocess, a parameter data input file (PDIF) initialization subprocess, a continuous AutoCAL subprocess, an AutoCAL leak subprocess, and an overwrite subprocess, wherein some of the plurality of values are stored in a RAM include a previously stored maximum unscaled displacement (x.sub.max_unscaled_old), a minimum unscaled displacement (x.sub.min_unscaled_old), and more than one values of a PDIF, the PDIF being read during the PDIF initialization subprocess, the more than one values of the PDIF at least including an autocalibration maximum and minimum displacement (x.sub.ACAL_max/min) and an autocalibration tolerance up or down displacement (x.sub.ACAL_Tolerance_up/dn), wherein the more than one values of the PDIF further including a value for an upper snubber thickness (Snubber_up) and a value for a lower snubber thickness (Snubber_dn).
3. The method of claim 2, wherein the continuous AutoCAL subprocess further includes the steps of: determining if the previously stored maximum unscaled displacement (x.sub.max_unscaled_old) and minimum unscaled displacement (x.sub.min_unscaled_old) are valid, wherein if they are invalid then an AutoCAL range is reset to the value in the PDIF for the autocalibration maximum displacement (x.sub.ACAL_max) minus the upper snubber thickness (Snubber_up) and the value of the autocalibration minimum displacement (x.sub.ACAL_min) plus the lower snubber thickness (Snubber_dn), wherein if they are valid then the current values for the maximum unscaled displacement (x.sub.max_unscaled_old) and the current value of the minimum unscaled displacement (x.sub.min_unscaled_old) in the NVRAM are retained; subtracting the upper snubber thickness (Snubber_up) from the unscaled relative displacement (x.sub.rel_unscaled) of the seat and determining if the difference is greater than the maximum unscaled displacement (x.sub.max_unscaled) and if the difference is greater than the maximum unscaled displacement (x.sub.max_unscaled), determining if the unscaled relative displacement (x.sub.rel_unscaled) is greater than the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up), wherein if the unscaled relative displacement (x.sub.rel_unscaled) is not greater than the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up) writing the unscaled relative displacement (x.sub.rel_unscaled) of the seat minus the upper snubber thickness (Snubber_up) to the NVRAM, wherein if the difference of subtracting the upper snubber thickness (Snubber_up) from the unscaled relative displacement (x.sub.rel_unscaled) of the seat is less than or equal to the maximum unscaled displacement (x.sub.max_unscaled) then the current value of the maximum unscaled displacement (x.sub.max_unscaled_old) in the NVRAM are retained, wherein if the unscaled relative displacement (x.sub.rel_unscaled) is greater than or equal to the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up) then the current value of the maximum unscaled displacement (x.sub.max_unscaled_old) in the NVRAM are retained; and adding the lower snubber thickness (Snubber_dn) and the unscaled relative displacement (x.sub.rel_unscaled) of the seat and determining if the sum is less than the minimum unscaled displacement (x.sub.min_unscaled) and if the sum is less than the minimum unscaled displacement (x.sub.min_unscaled), determining if the unscaled relative displacement (x.sub.rel_unscaled) is less than the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn), wherein if the unscaled relative displacement (x.sub.rel_unscaled) is not less than the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) writing the result of the sum of the unscaled relative displacement (x.sub.rel_unscaled) of the seat and the lower snubber thickness (Snubber_dn) to the NVRAM, wherein if the sum of adding the lower snubber thickness (Snubber_dn) to the unscaled relative displacement (x.sub.rel_unscaled) of the seat is greater than or equal to the minimum unscaled displacement (x.sub.min_unscaled) then the current value of the minimum unscaled displacement (x.sub.min_unscaled_old) in the NVRAM is retained, wherein if the unscaled relative displacement (x.sub.rel_unscaled) is less than or equal to the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) then the current value of the minimum unscaled displacement (x.sub.min_unscaled_old) in the NVRAM is retained.
4. The method of claim 3, wherein the AutoCAL leak subprocess further comprises the steps of: determining if a time is true for a time t1, and if true initiate the AutoCAL leak subprocess; subtracting a leakage value (x.sub.ACAL_leak) from the previously stored maximum unscaled displacement (x.sub.max_unscaled_old) and the difference is written to the NVRAM if the difference is less than or equal to the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up) and greater than or equal to the autocalibration maximum displacement (x.sub.ACAL_max) minus the upper snubber thickness (Snubber_up); and adding the leakage value (x.sub.ACAL_leak) to the previously stored minimum unscaled displacement (x.sub.min_unscaled_old) and the sum is written to the NVRAM if the sum is greater than or equal to the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) and less than or equal to the autocalibration minimum displacement (x.sub.ACAL_min) plus the lower snubber thickness (Snubber_dn).
5. The method of claim 3, wherein the overwrite subprocess uses input from the continuous AutoCAL subprocess and the AutoCAL leak subprocess to write a current value for the maximum unscaled displacement (x.sub.max_unscaled) and the minimum unscaled displacement (x.sub.min_unscaled) to the NVRAM.
6. The method of claim 1, wherein the signal processing subprocess further comprises the steps of: measuring a displacement of the seat using a digital displacement sensor or an analog displacement sensor; processing data from the digital displacement sensor with a digital low pass filter to match to an accelerometer analog low pass anti-alias filter if paired with an analog accelerometer, or processing the analog displacement sensor with an analog low pass anti-alias filter, if paired with either the analog accelerometer or a digital accelerometer; processing output from the digital low pass filter to match to the accelerometer analog low pass anti-alias filter or the analog low pass anti-alias filter with a bandwidth limited differentiator; processing output from the bandwidth limited differentiator with a high pass filter to match to an accelerometer base washout filter; and processing output from the high pass filter with a second high pass filter to match to an accelerometer leaky integrator, wherein output from the second high pass filter is the relative velocity (V.sub.rel) of the seat relative to the base.
7. The method of claim 6, wherein the signal processing subprocess further comprises the steps of: measuring an acceleration of the seat using the digital accelerometer or an analog accelerometer; processing data from the digital accelerometer with a digital low pass filter to match with an analog displacement sensor low pass anti-alias filter if paired with the analog displacement sensor, or processing the analog accelerometer with an analog low pass anti-alias filter if paired with either the digital displacement sensor or the analog displacement sensor; processing output from the digital low pass filter to match with an analog displacement sensor low pass anti-alias filter or the analog low pass anti-alias filter with a base washout digital high pass filter; processing output from the base washout digital high pass filter with a low pass filter and matching for a bandwidth limited differentiator of the displacement sensor; and processing output from the low pass filter with a leak integrator, wherein output from the leaky integrator is the absolute velocity (V.sub.abs_seat) of the seat or an absolute velocity (V.sub.abs_base) of the base.
8. The method of claim 1, wherein the signal processing subprocess further comprises the steps of: measuring a displacement of the seat using a digital displacement sensor when paired with a digital accelerometer; processing output from the digital displacement sensor processing with a bandwidth limited differentiator; processing output from the bandwidth limited differentiator with a high pass filter to match to an accelerometer base washout filter; processing output from the high pass filter with a second high pass filter to match to an accelerometer leaky integrator, wherein output from the second high pass filter is the relative velocity (V.sub.rel) of the seat relative to the base; measuring an acceleration of the seat using the digital accelerometer; processing data from the digital accelerometer with a base washout digital high pass filter; processing output from the base washout digital high pass filter with a low pass filter to match to the displacement sensor bandwidth limited differentiator; and processing output from the low pass filter with a leak integrator, wherein output from the leaky integrator is the absolute velocity (V.sub.abs_seat) of the seat or an absolute velocity (V.sub.abs_base) of the base.
9. The method of claim 1, wherein the absolute EEC subprocess and the relative EEC subprocess further comprises: an ellipse parameter selection subprocess; a dynamic velocity component subprocess; a dynamic displacement component subprocess; and an ellipse control calculation subprocess, wherein the ellipse control calculation generates the absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs) and/or the relative EEC endstop control signal (Ctrl.sub.Ellipse_rel).
10. The method of claim 9, wherein the ellipse parameter selection subprocess further comprises the steps of: determining if the seat is extending or compressing based upon the relative velocity (V.sub.rel) of the seat; communicating at least one stored value from a parameter data input file (PDIF) to the dynamic velocity component subprocess, the dynamic displacement component subprocess, and the ellipse control calculation subprocess; wherein the stored values communicated to the dynamic velocity component subprocess include a displacement radius up or down (x.sub.Radius_up/dn); wherein the stored values communicated to the dynamic displacement component subprocess include the displacement radius up or down (x.sub.Radius_up/dn), a relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn), and an offset displacement up or down (x.sub.Offset_up/dn); and wherein the stored values communicated to the ellipse control calculation subprocess include a relative or absolute velocity elliptical gain up or down (G.sub.Elliptical_rel/abs_up/dn).
11. The method of claim 10, wherein the dynamic velocity component subprocess further comprises the steps of: squaring the displacement radius up or down (x.sub.Radius_up/dn) and writing a squared displacement radius (x.sub.Radius.sup.2) value to a random access memory (RAM); squaring the relative velocity (V.sub.rel) of the seat or the absolute velocity (V.sub.abs) of the seat as a squared relative or absolute velocity (V.sub.rel/abs.sup.2); generating a squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value by multiplying the squared displacement radius (x.sub.Radius.sup.2) with the squared relative or absolute velocity (V.sub.rel/abs.sup.2), and writing the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value to the RAM; and communicating the squared displacement radius (x.sub.Radius.sup.2) and the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value to the ellipse control calculation subprocess.
12. The method of claim 11, wherein the dynamic displacement component subprocess further comprises the steps of: squaring the relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn) and writing a squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) value to the RAM; calculating an ellipse up or down center (x.sub.Elliptical_up/dn) displacement from an ellipse up center (x.sub.Elliptical_up) displacement by subtracting the displacement radius up (x.sub.Radius_up) the offset displacement up (x.sub.Offset_up), and the scaled relative displacement (x.sub.rel_scaled) from the maximum scaled displacement (x.sub.max_scaled) and squaring the resultant value, or by calculating the elliptical up or down center (x.sub.Elliptical_up/dn) displacement from an ellipse down center (x.sub.Elliptical_dn) displacement by subtracting the displacement radius down (x.sub.Radius_dn), the offset displacement down (x.sub.Offset_dn), and the minimum scaled displacement (x.sub.min_scaled) from the scaled relative displacement (x.sub.rel_scaled) and squaring the resultant value, writing either of a square of the ellipse center up displacement (x.sub.Elliptical_up.sup.2) value or a square of the ellipse center down displacement (x.sub.Elliptical_dn.sup.2) value to the RAM; multiplying the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) by either the square of the ellipse center up (x.sub.Elliptical_up.sup.2) value or the square of the ellipse center down (x.sub.Elliptical_dn.sup.2) value and writing a squared elliptical displacement squared relative or absolute velocity radius (x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2) value to the RAM; and communicating the squared elliptical displacement squared relative or absolute velocity radius (x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2) value to the ellipse control calculation subprocess.
13. The method of claim 12, wherein the ellipse control calculation subprocess further comprises the steps of: adding the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value of the squared displacement radius (x.sub.Radius.sup.2) and the square of the relative or absolute velocity (V.sub.rel/abs.sup.2) with the product of a squared elliptical displacement from the ellipse center up or down (x.sub.Elliptical_up/dn.sup.2) and the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) to determine a penetration value; multiplying the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) with the squared displacement radius (x.sub.Radius.sup.2) to determine an ellipse boundary value; determining if the penetration value is greater than zero, if so, writing the difference between the penetration value and the ellipse boundary value to the RAM, and if not, writing zero to the RAM; multiplying the result of the determining step associated with the penetration value with the relative or absolute velocity elliptical gain up or down (G.sub.Elliptical_rel/abs_up/dn) and generating either the absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs) and/or the relative EEC endstop control signal (Ctrl.sub.Ellipse_rel).
14. The method of claim 1, wherein the ESO2 endstop control subprocess further comprises the steps of: determining if the seat is extending or compressing based upon the relative velocity (V.sub.rel) of the seat; determining if the relative velocity (V.sub.rel) is greater or less than zero; determining a displacement distance to an opposite stop (x.sub.dist_to_opp_stop) is determining a distance from a top endstop when the relative velocity (V.sub.rel) is less than or equal to zero by subtracting the scaled relative displacement (x.sub.rel_scaled) from the maximum scaled displacement (x.sub.max_scaled), or by determining a distance from a bottom endstop when the relative velocity (V.sub.rel) is greater than zero by subtracting the minimum scaled displacement (x.sub.min_scaled) from the scaled relative displacement (x.sub.rel_scaled); determining an ESO2 endstop magnitude (ESO2.sub.Magnitude) by determining the difference between an absolute value of the relative velocity (|V.sub.rel|) and a relative velocity limit up (V.sub.lim_up) and multiplying the resulting difference by a gain value up (G.sub.ESO2_up), or by determining the difference between the absolute value of the relative velocity (|V.sub.rel|) and a relative velocity limit down (V.sub.lim_dn) and multiplying the resulting difference by a gain value down (G.sub.ESO2_dn); determining if a velocity trigger (V.sub.Trigger) value is true when the relative velocity limit up or down (V.sub.lim_up/dn) is subtracted from the absolute value of the relative velocity (|V.sub.rel|) and the difference is greater than or equal to zero, and by determining if the velocity trigger (V.sub.Trigger) value is false when the relative velocity limit up or down (V.sub.lim_up/dn) is subtracted from the absolute value of the relative velocity (|V.sub.rel|) and the difference is less than zero, wherein the velocity trigger (V.sub.Trigger) is enabled if true and is disabled if false; determining if a displacement trigger (x.sub.Trigger) value is true when a displacement distance to the opposite stop (x.sub.dist_to_opp_stop) is subtracted from a displacement limit up or down (x.sub.lim_up/dn) and the difference is greater than or equal to zero, and by determining if the displacement trigger (x.sub.Trigger) value is false when a displacement distance to the opposite stop (x.sub.dist_to_opp_stop) is subtracted from a displacement limit up or down (x.sub.lim_up/dn) and the difference is less than zero, wherein the displacement trigger (x.sub.Trigger) is enabled if true and is disabled if false; determining an ESO2 cyclic trigger by determining a maximum value between the displacement trigger (x.sub.Trigger) and a previous session ESO2 trigger; multiplying the ESO2 cyclic trigger by the velocity trigger (V.sub.Trigger) value to determine a current ESO2 trigger; multiplying the current ESO2 trigger by the ESO2 endstop magnitude (ESO2.sub.Magnitude) to determine the ESO2 control signal (Ctrl.sub.ESO2).
15. The method of claim 1, wherein the skyhook control subprocess further comprises the steps of: determining if a product of absolute velocity (V.sub.abs_seat) of the seat multiplied by the relative velocity (V.sub.rel) of the seat is greater than zero; setting the value for the skyhook control signal (Ctrl.sub.skyhook) to zero when the product is less than or equal to zero; and multiplying a viscous damping coefficient (C.sub.sky) by the absolute velocity (V.sub.abs_seat) of the seat to determine a value of the skyhook control signal (Ctrl.sub.skyhook).
16. The method of claim 14, wherein the rising edge filter subprocess further comprises the steps of: processing the skyhook control signal (Ctrl.sub.skyhook) through a single pole low pass filter; determining that if a first response (A) from the single pole low pass filter is less than or equal to a second response (B), then the skyhook control signal (u.sub.skyhook) is equal to a value of the single pole low pass filter of the skyhook control signal (Ctrl.sub.skyhook); and determining that if the first response (A) from the single pole low pass filter is greater than the second response (B), then the skyhook control signal (u.sub.skyhook) is equal to a value of the skyhook control signal (Ctrl.sub.skyhook) from the skyhook control subprocess.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
DETAILED DESCRIPTION
[0027] There are many vehicles which incorporate a damper between the seat and the mounting base to improve the ride for the person(s) occupying the seat. Passive dampers have a limited ability to react against the seat's natural resonance before beginning to transmit too much high frequency base excitation to the seat and seat occupant(s). Passive damper designs require a compromise between how much the seat moves at resonance, and how much high frequency motion is transmitted to the seat occupant(s).
[0028] Semi-active dampers can improve the performance of the seat in its middle operating range when compared with a passive seat by damping out the seat's natural resonance while still minimizing the amount of high frequency base excitation transmitted to the seat and rider.
[0029] However, there is still an issue when the seat approaches one of its endstops (i.e., full compression, or full extension). If the seat reaches an endstop, the hard impact is transmitted to the seat occupant(s). The current invention solves this problem by applying a progressively firmer damping factor to the seat as it approaches the endstop, thereby preventing the seat reaching the hard endstops, and hence preventing the transmission of that impact to the seat occupant(s).
[0030] Referring to
[0031] Seat 102 has at least one sensor 112 positioned thereon which is capable of providing vertical acceleration data for seat 102 and/or at least one sensor 114 positioned thereon which is capable of providing vertical displacement data for seat 102 relative to base 104. Base 104 may also have at least one sensor 116 positioned thereon which is capable of detecting vertical displacement of base 104 and may also have at least one more sensor 118 positioned thereon which is capable of detecting acceleration of base 104.
[0032] In a non-limiting example, damper 106 is a semi-active damper with controllable damping. Damper 106 is controlled by system controller 110. Damper 106 has a cylinder 120 with piston 122 movably disposed therein. Damper 106 further includes electrically adjustable valve 124 controlled by system controller 110 for varying the operating condition of valve 124 in accordance with a hereinafter discussed control policy and signal data received from sensors 112, 114, 116, and/or 118. Damper 106 has at least a first chamber 126 and a second chamber 128. Fluid 130 is in both first and second chambers 126, 128. Although damper 106 is discussed as being a semi-active damper using fluid 130, damper 106 can be a conventional hydraulic damper that uses hydraulic fluid, or it can be a magnetorheological (MR) damper with MR fluid in the first and second chambers 126, 128. If it is a MR damper, then the associated MR control system (not shown) known to those having skill in the art will also be associated with damper 106.
[0033] As illustrated, damper 106 is secured to seat 102 on piston rod upper end 132 and is secured to base 104 on cylinder lower end 134. Upper snubber 136 and lower snubber 138 are generally illustrated in
[0034] Vertical movement between seat 102 and base 104 displaces fluid 130 through valve 124 and associated conduit 140 interconnecting the first and second chambers 126, 128, which are separated by piston 122 when it is movably disposed within cylinder 120. As depicted in
[0035] Electrically adjustable valve 124 is rapidly adjustable between at least two different operating positions or conditions. In its first operating condition, electrically adjustable valve 124 significantly throttles or restricts fluid flow through conduit 140. This results in the generation of significant damping forces which, in keeping with those generated by any passive or semi-active damper, oppose the then transpiring relative movement of seat 102 that has caused the flow-producing relative movement between piston 122 and cylinder 120. In its second operating condition, electrically adjustable valve 124 is fully open and produces only minimal damping. When electrically adjustable valve 124 is in its second condition, the best achievable result is a minimal damping force approaching zero. Very rapid adjustive transitions from one to the other of the operating conditions of electrically adjustable valve 124 may be produced by control signals transmitted to the valve from system controller 110.
[0036] Referring generally to
[0037] When system controller 110 is installed on seat 102 or base 104, and sensor 114 is installed on seat 102 or within system controller 110, the relative velocity V.sub.rel is obtained directly from sensor 114. The relative velocity V.sub.rel is obtained by taking the derivative of the unscaled relative displacement x.sub.rel_unscaled over time.
[0038] When system controller 110 is installed on the base 104, and sensor 112 is installed within the system controller, the base absolute velocity, V.sub.abs_base is obtained by taking the integral of the acceleration output from sensor 112. To determine absolute velocity V.sub.abs_seat of seat 102, the seat relative velocity V.sub.rel is added to the base absolute velocity V.sub.abs_base.
[0039] The relative velocity V.sub.rel and the absolute velocity V.sub.abs_seat of seat 102 are mathematically represented by equations 1-3.
V.sub.rel=d(x.sub.rel_scaled)/dt Eq. 1
V.sub.rel=V.sub.abs_seatV.sub.abs_base Eq. 2
V.sub.abs_seat=V.sub.abs_base+V.sub.rel Eq. 3
[0040] Referring to
[0041] In
[0042] The scaled relative displacement x.sub.rel_scaled represented in Equation 4 further includes the working range displacement x.sub.PDIF_Working_range and the working minimum displacement x.sub.PDIF_Working_min, which are both explained in the standardized scaling subprocess 148 section below.
Although the value of the relative displacement x.sub.rel_scaled is between x.sub.max_scaled and x.sub.min_scaled, it is not a mathematical value. Instead, these are point quantities without a reference scale.
[0043] Referring to
[0044] In the illustrated seat configuration, system controller 110 may also use data from sensors 112 and/or 114 and sensors 116 and/or 118 to determine the displacement of seat 102 relative to base 104 and to determine the absolute velocity V.sub.abs_seat of seat 102. However, system controller 110 can also use the same sensors 112 and/or 114 to obtain the absolute acceleration a.sub.abs of base 104.
[0045] In addition, system controller 110 has a control policy that provides for the semi-active control of damper 106. As illustrated in
[0046] Data measured by sensors 112, 114, 116, and/or 118, and calculations executed in system controller 110 are stored in flash memory (not shown) and/or in nonvolatile random-access memory (NVRAM) (not shown). In addition, the flash memory or NVRAM will also store data from previous seat damper system 100 operations as well as data calculated in the various subprocesses described hereinbelow. Additional data may be entered by the original equipment manufacturer (OEM) in a parameter data item file (PDIF) that is stored in the flash memory or the NVRAM. The types of data stored hereinbelow are measured, calculated, and/or stored as described in the individual processes or subprocesses.
[0047] Referring to
[0048] In the process flow chart illustrated in
[0049] The unscaled relative displacement x.sub.rel_unscaled of seat 102 is also communicated to a standardized scaling subprocess 148 along with the maximum unscaled displacement x.sub.max_unscaled and the minimum unscaled displacement x.sub.min_unscaled of seat 102. The output from standard scaling subprocess 148 is the scaled relative displacement x.sub.rel_scaled, the maximum scaled displacement x.sub.max_scaled, and the minimum scaled displacement x.sub.min_scaled of seat 102.
[0050] The absolute acceleration a.sub.abs of seat 102 or base 104 is communicated to signal processing subprocess 150 along with the scaled relative displacement x.sub.rel_scaled of seat 102, which is illustrated as being communicated from standardized scaling subprocess 148. The scaled relative displacement x.sub.rel_scaled of seat 102 may be directly communicated to signal processing subprocess 150. The outputs from signal processing subprocess 150 are the absolute velocity V.sub.abs_seat of seat 102 and the relative velocity V.sub.rel of seat 102.
[0051] The maximum scaled displacement x.sub.max_scaled, the minimum scaled displacement x.sub.min_scaled, and the scaled relative displacement x.sub.rel_scaled are all communicated from a standardized scaling subprocess to absolute ellipse endstop control subprocess 152, relative ellipse endstop control subprocess 154, and ESO2 endstop control subprocess 156. In addition, the absolute velocity V.sub.abs_seat of seat 102 is communicated to absolute ellipse endstop control subprocess 152, and the relative velocity V.sub.rel is communicated to absolute ellipse endstop control subprocess 152, relative ellipse endstop control subprocess 154, and ESO2 endstop control subprocess 156.
[0052] The output for absolute ellipse endstop control subprocess 152 is an endstop control signal Ctrl.sub.Ellipse_abs. The output for relative ellipse endstop control subprocess 154 is an endstop control signal Ctrl.sub.Ellipse_rel. And the output for ESO2 endstop control subprocess 156 is an endstop control signal Ctrl.sub.ESO2. The endstop control signals from the absolute ellipse endstop control subprocess 152, the relative ellipse endstop control subprocess 154, and the ESO2 endstop control subprocess 156 are communicated to the maximum endstop control subprocess 158. The output from the max endstop control subprocess 158 is the maximum endstop control signal u.sub.ES, which is the maximum value of endstop control signals Ctrl.sub.Ellipse_abs, Ctrl.sub.Ellipse_rel, and/or Ctrl.sub.ESO2.
[0053] The absolute velocity V.sub.abs_seat of seat 102 and the relative velocity V.sub.rel are communicated to the skyhook control subprocess 160. The output from the skyhook control subprocess 160 is a skyhook control signal Ctrl.sub.skyhook. The skyhook control signal Ctrl.sub.skyhook is communicated to the rising edge filter subprocess 162. The output from the rising edge filter subprocess 162 is a skyhook control signal u.sub.skyhook.
[0054] The maximum endstop control signal u.sub.ES and the skyhook control signal u.sub.skyhook are communicated to the control aggregation subprocess 164. The output from the control aggregation subprocess 164 is the damper control signal u.sub.ctrl used to provide control input to damper 106. The individual subprocesses are further explained below.
AutoCalibration Subprocess
[0055] The AutoCalibration Subprocess 146 is illustrated in
[0056] PDIF initialization subprocess 168 is initiated upon the powering up of system controller 110. This subprocess uses the AutoCAL PDIF elements from the PDIF that are stored in flash memory and populates the autocalibration maximum and minimum displacement x.sub.ACAL_max/min as well as the autocalibration tolerance up or down displacement x.sub.ACAL_Tolerance_up/dn. Although flash memory is referenced, any memory storage device capable of storing the AutoCAL PDIF elements will work. The autocalibration tolerance up or down displacement x.sub.ACAL_Tolerance_up/dn is the raw unscaled values depicting the combination of the 100% metal stop plus a tolerance percentage that is defined in the PDIF by the OEM.
[0057] The autocalibration maximum and minimum displacement x.sub.ACAL_max/min are the 100% maximum and minimum raw unscaled values of the 100% metal extension/compression stops entered by the OEM into the PDIF. The autocalibration tolerance AutoCAL_Tolerance is the maximum and minimum allowable unscaled relative displacement inputs from the sensor. Values outside of these bounds are considered invalid and indicate some defect of the system.
[0058] Additionally, nonvolatile random-access memory (NVRAM) of system controller 110 has the values stored from the previous/last power cycle. The previously stored maximum unscaled displacement x.sub.max_unscaled_old and the minimum unscaled displacement x.sub.min_unscaled_old, the matching pair values, are read from NVRAM and are communicated to the continuous AutoCAL 170 and the AutoCAL Leak 172 subprocesses. Matching pair values means the code looks at the NVRAM spaces saved for these values and uses the values in NVRAM only if there are duplicate copies of the same value in NVRAM. This ensures values in NVRAM are valid and are from a good past write to NVRAM. One can also use the checksum or CRC of the section to ensure its validity.
[0059] Referring to
[0060] As will be explained below in the standardized scaling subprocess, the standardized range is any range that offers enough resolution to capture small movements between both ends of physical travel. The standardized range values stored in the PDIF include the working minimum displacement and the working range displacement. In one non-limiting example, a working minimum displacement is set as 4,000 units and a working range displacement is set at 24,000 units. Using these units, minimum scaled displacement x.sub.min_scaled scaled will be 4,000 and the maximum scaled displacement x.sub.max_scaled will be 28,000.
[0061] The continuous AutoCAL subprocess 170 also uses information from the NVRAM and the PDIF and includes the unscaled relative displacement x.sub.rel_unscaled. For the snubber up state, once the inputs are determined the upper snubber 136 thickness Snubber_up value is subtracted from the unscaled relative displacement x.sub.rel_unscaled. For mathematical illustration purposes only, this is referred to as Value.sub.CA 1. Next, determine if the unscaled relative displacement x.sub.rel_unscaled minus the upper snubber 136 thickness Snubber_up value is greater than the maximum unscaled displacement x.sub.max_unscaled. If the answer is no, then maximum unscaled displacement x.sub.max_unscaled_old is assigned to be the maximum unscaled displacement x.sub.max_unscaled. If the answer is yes, the process continues, and the question is asked if the unscaled relative displacement x.sub.rel_unscaled is greater than the autocalibration tolerance up displacement x.sub.ACAL_Tolerance_up. If the answer is no, then the value of unscaled relative displacement x.sub.rel_unscaled minus the upper snubber 136 thickness Snubber_up value is written back to NVRAM. If the answer is yes, then maximum unscaled displacement x.sub.max_unscaled_old is assigned to be the maximum unscaled displacement x.sub.max_unscaled.
[0062] For the snubber down state, the continuous AutoCAL subprocess 170 also adds the lower snubber 138 thickness Snubber_dn to the unscaled relative displacement x.sub.rel_unscaled. For mathematical illustration purposes, this is referred to as Value.sub.CA 2. Next, determine if the unscaled relative displacement x.sub.rel_unscaled plus the lower snubber 138 thickness Snubber_dn value is less than the minimum unscaled displacement x.sub.min_unscaled. If the answer is no, then the minimum unscaled displacement x.sub.min_unscaled_old is assigned to be the minimum unscaled displacement x.sub.min_unscaled. If the answer is yes, the process continues, and the question is asked if the unscaled relative displacement x.sub.rel_unscaled is less than the autocalibration tolerance down displacement x.sub.ACAL_Tolerance_dn. If the answer is no, then the value of unscaled relative displacement x.sub.rel_unscaled plus the lower snubber 138 thickness Snubber_dn value is written back to NVRAM. If the answer is yes, then the minimum unscaled displacement x.sub.min_unscaled_old is assigned to be the minimum unscaled displacement x.sub.min_unscaled.
[0063] The equations for the continuous AutoCAL are:
Value.sub.CA1=x.sub.rel_unscaledSnubber_up Eq. 5
Is Value.sub.CA1>x.sub.max_unscaled?Eq. 6
Is x.sub.rel_unscaled>x.sub.ACAL_Tolerance_up?Eq. 7
Value.sub.CA2=x.sub.rel_unscaled+Snubber_dn Eq. 8
Is Value.sub.CA2<x.sub.min_unscaled?Eq. 9
Is x.sub.rel_unscaled<x.sub.ACAL_Tolerance_dn?Eq. 10
[0064] Referring to
[0065] The leakage value x.sub.ACAL_leak is also added to the minimum unscaled displacement x.sub.min_unscaled_old from the previous session. For mathematical illustration purposes only, this value is referred to as Value.sub.AL2. The leak value for the autocalibration maximum displacement x.sub.ACAL_max is only written to NVRAM if it is less than or equal to the autocalibration tolerance up displacement x.sub.ACAL_Tolerance_up and greater than or equal to the autocalibration maximum displacement x.sub.ACAL_max minus the upper snubber thickness Snubber_up. The leak value for the autocalibration minimum displacement x.sub.ACAL_min is only written to NVRAM if it is greater than or equal to the autocalibration tolerance down displacement x.sub.ACAL_Tolerance_Dn and less than or equal to autocalibration minimum displacement x.sub.ACAL_min plus the lower snubber 138 thickness Snubber_dn.
[0066] The equations for the AutoCAL leak are:
Value.sub.AL1=x.sub.max_unscaled_oldx.sub.ACAL_Leak Eq. 11
Saturate=x.sub.ACAL_Tolerance_up, x.sub.ACAL_maxSnubber_up Eq. 12
Value.sub.AL2=x.sub.min_unscaled_old+x.sub.ACAL_Leak Eq. 13
Saturate=x.sub.ACAL_min+Snubber_dn, x.sub.ACAL_Tolerance_dn Eq. 14
[0067] From the input from the continuous AutoCAL subprocess 170 and the AutoCAL Leak subprocess 172, the overwrite subprocess 174 selects the maximum value for the maximum unscaled displacement x.sub.max_unscaled and the minimum value for the minimum unscaled displacement x.sub.min_unscaled. The different decisions described above for the continuous AutoCal subprocess 170 may result in the maximum unscaled displacement x.sub.max_unscaled_old and the minimum unscaled displacement x.sub.min_unscaled_old being assigned to be the maximum unscaled displacement x.sub.max_unscaled and the minimum unscaled displacement x.sub.min_unscaled. When this occurs the overwrite subprocess 174 is bypassed. Otherwise, the outputs from the different decisions described above for the continuous AutoCal subprocess 170 follow the decision logic paths and are provided to the overwrite subprocess 174. The values are written to NVRAM or other designated memory.
Standardized Scaling Subprocess
[0068] Referring to
[0069] The standardized range is a range of displacement travel where the maximum and minimum ends of damper travel are assigned specific hard-coded values independent of raw displacement sensor range values. This provides the same digital resolution inside the algorithms and filters, and hence the values are independent of sensor 112, 114, 116, and/or 118 input resolutions.
Signal Processing Subprocess
[0070] Referring to
[0071] Referring to
[0072] Still referring to
[0073] Referring to
[0074] Still referring to
[0075] Referring to
[0076] Still referring to
[0077] Referring to
[0078] Still referring to
[0079] Referring to bandwidth limited differentiator 180 and the matching low pass filter 188, the bandwidth limitation on the limited differentiator is required to prevent that aspect of the signal processing function from having infinite gain when subjected to a step input. For bandwidth limited differentiator 180 and the matching low pass filter 188, the bandwidth limited differentiator/low pass filter frequency must be far enough above the controllable bandwidth of the seat damper so that the displacement is correctly differentiated to a velocity with minimal phase shift error within the controllable bandwidth of the damper. For example, the low pass filter frequency may be at least about ten (10) times the seat damper controllable bandwidth. Also, the low pass filter must be far enough below the controller sample rate in order to implement a meaningful filter. For example, the low pass filter may be no more than about 0.1 times the sample rate of the controller.
[0080] Referring to high pass filters, base washout filters and leaky integrators 182, 184, 186, 190 are all preferably ideal integrators from well below (e.g., about 0.1) the resonant frequency of seat 102 until well above (e.g., about ten times) the controllable bandwidth of damper 106. In this case, the ideal integrators are where the Laplace transform of V.sub.out/V.sub.in=1/second. Ideal integrators have an undesirable infinite gain under direct current (DC). The leaky integrator adds the high pass filter at a very low frequency which prevents the output of the integrator term from increasing up to one of the saturation values due to the small DC offset values. The high pass filter frequencies for base washout, matching filters, and leaky integrator must be far enough below seat 102 resonant frequency so as to provide minimal phase shift error (e.g., less than the area being controlled and within the area of sample such as about <10 degrees) within the controllable bandwidth of the filter. Preferably, this is no greater than about 0.1 times the resonant frequency of seat 102.
[0081] The leaky integrator is a combination of an ideal integrator, and a low cut-off frequency high pass filter. This high pass filter element is added to prevent the ideal integrator function from having infinite gain at zero hertz. The mathematical equations for this are known to those having skill in the art. In this invention, a non-limiting example of the high pass roll off frequency of about 0.0773 HZ is used. However, this non-limiting value is based upon a particular hardware and software combination. For a different hardware and software combination, the non-limiting value will also be different. The limitations are the resolution and the sample rate of the digital fixed-point processor, which may change for each configuration.
Absolute and Relative Ellipse Endstop Control Subprocesses
[0082] The Ellipse Endstop Control subprocesses 152, 154 is illustrated in
[0083] Referring to
[0084] The displacement radius up x.sub.Radius_up and displacement radius down x.sub.Radius_dn are illustrated in
[0085] The dynamic velocity component subprocess 194 uses the radius displacement up or down x.sub.Radius_up/dn value and the relative or absolute velocity V.sub.rel/abs value. The displacement radius up or down x.sub.Radius_up/dn value is pulled from NVRAM. The relative or absolute velocity V.sub.rel/abs value is squared and then multiplied by the squared displacement radius x.sub.Radius.sup.2 value. The result is the squared displacement radius squared relative or absolute velocity x.sub.Radius.sup.2V.sub.rel/abs.sup.2 value. The displacement radius up or down x.sub.Radius_up/dn value is determined by selecting the appropriate OEM entered displacement radius up x.sub.Radius_Up or displacement radius down x.sub.Radius_Dn based on the direction of travel of the seat: extending [V.sub.rel>0] or compressing [V.sub.rel<0], respectively. Both the squared displacement radius x.sub.Radius.sup.2 value and the squared relative or absolute velocity squared displacement radius x.sub.Radius.sup.2V.sub.rel/abs.sup.2 value are communicated to the ellipse control calculation subprocess 198.
[0086] The dynamic velocity component 194 is mathematically represented by the following equation:
x.sub.Radius.sup.2V.sub.rel/abs.sup.2=x.sub.Radius.sup.2*V.sub.rel/abs.sup.2 Eq. 15
[0087] Referring to
[0088] To calculate the displacement from the ellipse up center x.sub.Elliptical_up for the extending seat 102, the displacement radius up x.sub.Radius_up, the offset displacement up x.sub.Offset_up, and the scaled relative displacement x.sub.rel_scaled, are all subtracted from the maximum scaled displacement x.sub.max_scaled. To calculate the displacement from the ellipse down center x.sub.Elliptical_dn for the compressing seat 102, the displacement radius down x.sub.Radius_dn, the offset displacement down x.sub.Offset_dn, and the minimum scaled displacement x.sub.min_scaled are all subtracted from the scaled relative displacement x.sub.rel_scaled. Depending on whether seat 102 is extending or compressing, the ellipse up center x.sub.Elliptical_up displacement or the ellipse down center x.sub.Elliptical_dn displacement is squared.
[0089] The squared relative or absolute velocity radius V.sub.rel/abs_Radius_up/dn.sup.2 is multiplied by either the squared ellipse up center x.sub.Elliptical_up.sup.2 displacement or the squared ellipse down center x.sub.Elliptical_dn.sup.2 displacement. The output is the squared elliptical displacement squared relative or absolute velocity radius x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2, which is stored and communicated to the ellipse control calculation subprocess 198.
[0090] These dynamic control components are mathematically represented by the following equations:
x.sub.Elliptical_up.sup.2=(x.sub.max_scaledx.sub.Radius_upx.sub.Offset_upx.sub.rel_scaled).sup.2 Eq. 16
x.sub.Elliptical_dn.sup.2=(x.sub.rel_scaledx.sub.Radius_dnx.sub.Offset_dnx.sub.min_scaled).sup.2 Eq. 17
x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2=V.sub.rel/abs_Radius_up/dn.sup.2*x.sub.Elliptical_up/dn.sup.2 Eq. 18
[0091] Referring to
[0092] These ellipse control calculations 198 are mathematically represented by the following equations:
Penetration=x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2x.sub.Radius.sup.2V.sub.rel/abs.sup.2 Eq. 19
Ellipse Boundary=V.sub.rel/abs_Radius_up/dn.sup.2* x.sub.Radius.sup.2 Eq. 20
Ctrl.sub.Ellipse_rel/abs=G.sub.Elliptical_rel/abs_up/dn*(PenetrationEllipse Boundary) when Penetration>0, and Eq. 21
Ctrl.sub.Ellipse_rel/abs=0 when Penetration0 Eq. 22
ESO2 Endstop Control Subprocess
[0093] Referring to
[0094] If the relative velocity V.sub.rel is greater than zero, then the subprocess uses the up set of parameters and gains denoting seat 102 is extending. The up set of parameters and gains are the relative velocity limit up V.sub.lim_up, the relative displacement limit up x.sub.lim_up, and an OEM provided gain value up G.sub.ESO2_up. The relative displacement limit up x.sub.lim_up is a quantity in the scaled relative displacement x.sub.rel_scaled frame of reference. The relative displacement limit up x.sub.lim_up is the displacement threshold that needs to be exceeded in damper 106 compression to trigger the ESO2 control decision process. As depicted in
[0095] The relative velocity limit up V.sub.lim_up parameter is a quantity in the relative velocity V.sub.rel frame of reference that denotes the extending velocity is of sufficient magnitude to indicate the need for extra control to prevent collisions with the endstop. The velocity trigger V.sub.Trigger is set to true if the absolute value of the relative velocity |V.sub.rel| exceeds relative velocity limit up V.sub.lim_up.
[0096] If the velocity trigger V.sub.Trigger and the displacement trigger x.sub.Trigger are true at the same time, the ESO2 control will remain active until the absolute value of the relative velocity |V.sub.rel| returns below the relative velocity limit up V.sub.lim_up value, which indicates seat 102 has been slowed to a controlled level.
[0097] The OEM provided gain value up G.sub.ESO2_up is the scalar relationship between the absolute value of the relative velocity |V.sub.rel| magnitude and the control output of damper 106, which is sufficient to prevent the extension endstop collision while using the full stroke of damper 106. This effectively balances the harshness of endstop collisions and potential overcontrol of damper 106. The OEM provided gain value up G.sub.ESO2_up is then multiplied by the absolute value of the relative velocity |V.sub.rel| magnitude over the velocity limit up V.sub.lim_up to provide a ESO2.sub.Magnitude term. This provides enough control in an effort to prevent the extension endstop collision while using the full stroke of damper 106.
[0098] Similarly, if the determination is that seat 102 is compressing, then the subprocess uses down (dn) set of parameters and gains denoting seat 102 is compressing. The dn set of parameters and gains are the relative velocity limit down V.sub.lim_dn, the relative displacement limit down x.sub.lim_dn, and an OEM provided gain value down G.sub.ESO2_dn. The displacement limit down x.sub.lim_dn is a quantity in the scaled relative displacement x.sub.rel_scaled frame of reference. The displacement limit down x.sub.lim_dn is a displacement threshold that needs to be exceeded in damper 106 extension to trigger the ESO2 control decision process. It is measured as the proximity to the extension end of travel maximum scaled displacement x.sub.max_scaled. If seat 102 extends to above this value, it indicates an imminent compression endstop collision due to the stored potential energy of spring 108 and upper snubber 136. In this case, the displacement trigger x.sub.Trigger is set to true if the displacement distance to the opposite stop x.sub.dist_to_opp_stop is less than or equal to the relative displacement limit down x.sub.lim_dn.
[0099] The relative velocity limit down V.sub.lim_dn parameter is a quantity in the relative velocity V.sub.rel frame of reference that denotes the compressing velocity is of sufficient magnitude to indicate the need for extra control to prevent collisions with the endstop. The velocity trigger V.sub.Trigger is set to true if the absolute value of the relative velocity |V.sub.rel| exceeds relative velocity limit down V.sub.lim_dn.
[0100] As before, if the velocity trigger V.sub.Trigger and the displacement trigger x.sub.Trigger are true at the same time, the ESO2 control will remain active until absolute value of the relative velocity |V.sub.rel| returns below the relative velocity limit down V.sub.lim_dn value, which indicates seat 102 has been slowed to a controlled level.
[0101] The OEM provided gain value down G.sub.ESO2_dn is the scalar relationship between the absolute value of the relative velocity |V.sub.rel| magnitude and the control output of damper 106, which is sufficient to prevent the compression endstop collision while using the full stroke of damper 106. This also effectively balances the harshness of endstop collisions and potential overcontrol of damper 106. The OEM provided gain value down G.sub.ESO2_dn is then multiplied by the absolute value of the relative velocity |V.sub.rel| magnitude over the velocity limit down V.sub.lim_dn to provide a ESO2.sub.Magnitude term. This provides enough control in an effort to prevent the extension endstop collision while using the full stroke of damper 106.
[0102] Determining the velocity trigger calculation starts with determining if seat 102 is extending or compressing. Depending upon the state of seat 102, the relative velocity limit up V.sub.lim_up is subtracted from the absolute value of the relative velocity |V.sub.rel|, or the relative velocity limit down V.sub.lim_dn is subtracted from the absolute value of the relative velocity |V.sub.rel|. The resultant value is multiplied by either the OEM provided gain value up G.sub.ESO2_up, or the OEM provided gain value down G.sub.ESO2_dn to determine the ESO2 endstop magnitude ESO2.sub.Magnitude. This is represented by the following equation:
ESO2.sub.Magnitude=|V.sub.rel|V.sub.lim_up/dn*G.sub.ESO2_up/dn Eq. 23
[0103] When the resultant value of relative velocity limit up or down V.sub.lim_up/dn is subtracted from the absolute value of the relative velocity |V.sub.rel|, and if the result is greater than or equal to zero, then the velocity trigger V.sub.Trigger is set to equal 1. If the resultant value is less than zero, then the velocity trigger V.sub.Trigger is set to equal zero. The velocity trigger V.sub.Trigger is represented by the following equations:
V.sub.Trigger=1 when |V.sub.rel|V.sub.lim_up/dn0 Eq. 24
V.sub.Trigger=0 when |V.sub.rel|V.sub.lim_up/dn<0 Eq. 25
[0104] Determining the displacement trigger calculation starts with determining if seat 102 is extending or compressing. Depending upon the state of seat 102, the displacement distance to the opposite stop x.sub.dist_to_opp_stop is subtracted from the relative displacement limit up x.sub.lim_up, or, the opposite stop x.sub.dist_to_opp_stop is subtracted from the relative displacement limit down x.sub.lim_dn. If that resultant value is greater than or equal to zero, then the displacement trigger x.sub.Trigger is set to equal 1, and if the resultant value is less than zero the displacement trigger x.sub.Trigger is set to equal zero. The displacement trigger x.sub.Trigger is represented by the following equations:
x.sub.Trigger=1 when x.sub.lim_up/dnx.sub.dist_to_opp_stop0 Eq. 26
x.sub.Trigger=0 when x.sub.lim_up/dnx.sub.dist_to_opp_stop<0 Eq. 27
[0105] To determine the displacement distance to the opposite stop x.sub.dist_to_opp_stop begins with knowing if seat 102 is extending or compressing. If compressing, the distance from the top endstop is determined by subtracting the scaled relative displacement x.sub.rel_scaled from the maximum scaled displacement x.sub.max_scaled. If extending, the distance from the compression endstop is determined by subtracting the minimum scaled displacement x.sub.min_scaled from the scaled relative displacement x.sub.rel_scaled. The result is displacement distance to the opposite stop x.sub.dist_to_opp_stop. This is represented by the following equations:
If V.sub.rel0, then x.sub.dist_to_opp_stop=x.sub.max_scaledx.sub.rel_scaled Eq. 28
If V.sub.rel>0, then x.sub.dist_to_opp_stop=x.sub.max_scaledx.sub.rel_scaled Eq. 29
[0106] The next step is to determine ESO2 cyclic trigger ESO2_Cyclic_Trigger by determining the maximum value between the displacement trigger x.sub.Trigger and the ESO2 Trigger from the last system controller processor (not shown) clock cycle. ESO2_Trigger is the decision enabler for ESO2 control that decides ESO2 control signal output. This Boolean output is calculated out of the velocity and displacement trigger decision processes. The ESO2 cyclic trigger ESO2_Cyclic Trigger is multiplied by velocity trigger V.sub.Trigger to determine the ESO2 Trigger ESO2_Trigger. The ESO2 Trigger ESO2_Trigger value is multiplied by the ESO2 endstop magnitude ESO2.sub.Magnitude value to determine the ESO2 control signal Ctrl.sub.ESO2.
[0107] Referring to
[0108] Scaled relative displacement trace 200 is illustrated approaching the relative displacement limit up x.sub.lim_up up proximity to the minimum scaled displacement x.sub.min_scaled, which is the parametric combination measured to indicate a compressive event with sufficient stored energy to potentially cause a subsequent extension endstop collision. Once the relative velocity V.sub.rel is greater than zero, indicating the seat is extending, the up parameters are selected and the displacement trigger x.sub.Trigger is activated.
[0109] At extreme compression, the relative velocity V.sub.rel switches from negative (compressing) to positive (extending) at the point V.sub.rel=0. This activates the up parameters of the algorithm and sets the displacement trigger x.sub.Trigger to true (as indicated by box 202). As time progresses, the relative velocity V.sub.rel (the measured value is not shown) continues to increase until it exceeds the relative velocity limit up V.sub.lim_up parameter. This indicates that the stored energy is not sufficiently controlled to prevent the extension endstop collision, meaning the potential and kinetic stored energy have shown early indicators of an imminent extension collision. This sets the velocity trigger V.sub.Trigger logic to true.
[0110] Since both the displacement trigger x.sub.Trigger and velocity trigger V.sub.Trigger are true, the ESO2 Endstop Control subprocess 156 is active and the output of the control is proportional to the velocity by the quantity G.sub.ESO2_up, which is tuned to provide enough control to prevent endstop collision while utilizing as much of the suspension stroke as possible. This is marked by the beginning point 204 of the region 206. Once the ESO2 control is active, the displacement trigger x.sub.Trigger is no longer needed, and the control remains active until the relative velocity V.sub.rel slows to below the relative velocity limit up V.sub.lim_up up value, which denotes that the seat is back under control and ESO2 Endstop Control subprocess 156 is no longer needed (this is marked on the plot at the ending point 208 of the region 206). The above illustrates a one half-cycle of ESO2 Endstop Control subprocess 15. The ESO2 Endstop Control subprocess 156 would potentially be active again during the subsequent compression cycle, but this is not detailed in
Maximum Endstop Control Subprocess
[0111] In the Maximum Endstop Control subprocess 158, the values of the absolute ellipse control signal Ctrl.sub.Ellipse_abs, the relative ellipse control signal Ctrl.sub.Ellipse_rel, and the ESO2 control signal Ctrl.sub.ESO2 are compared to each other. The maximum value is selected as the endstop control signal u.sub.ES.
Skyhook Control Subprocess
[0112] Referring to
V.sub.abs_seat*V.sub.rel>0 then enable control, Ctrl.sub.Skyhook=C.sub.sky*V.sub.abs_seat Eq. 30
V.sub.abs_seat*V.sub.rel0 then do not enable control, Ctrl.sub.Skyhook=0 Eq. 31
[0113] Referring to
Control Aggregation Subprocess
[0114] Referring to
Tuning Process
[0115] To explain the tuning process, a non-limiting sequential example is used. Other OEM tuning processes may be used and may have different orders of operation for the tuning process. In this non-limiting example, the first step is to exercise the suspension and ensure the scaled displacement limits x.sub.max/min_scaled match valid expectations from the AutoCalibration Subprocess 146. Then, the process tunes the Skyhook Control subprocess 160 to minimize ride discomfort by exercising the suspension with inputs that do not produce endstop collisions. The process next tunes the Ellipse Endstop Control subprocesses 152, 154 to minimize peak seat accelerations and ride discomfort by exercising the suspension with inputs that create endstop collisions. The next step in the process tunes the ESO2 Endstop Control subprocess 156 to minimize peak seat accelerations by exercising the suspension with impulse-driven endstop collisions. A decision is made on the maximum or summation for the Control Aggregation subprocess 164 based upon minimizing the ride discomfort and peak seat accelerations. Referring to
EXAMPLES
[0116]
[0117] In configuration A, seat 102 is controlled using a soft passive damper 106 (i.e., a damper with a low resistance to motion). For an acceptable seat occupant ride, the transmissibility of damper 106 in configuration A will be acceptable when it is above the resonant frequency of the seat system. Stated otherwise, seat 102 will perform well when subjected to high frequency base inputs. However, base input frequencies around the resonant frequency of seat 102 will be significantly amplified. The result of the amplified base input frequencies result in large seat 102 motions in response to lower frequency base inputs. This amplified base input has a high probability of uncomfortable endstop hits.
[0118] In configuration B, seat 102 is controlled using a firm passive damper 106 (i.e., a damper with a high resistance to motion). For an acceptable seat occupant ride, the transmissibility of damper 106 in configuration B will be acceptable when it is around the seat resonant frequency. In this configuration, seat 102 will not significantly amplify base inputs around the resonant frequency. However, higher frequency base inputs (particularly in the 2-6 Hz range in this example) will be significantly amplified. This amplification of base inputs will result in a more uncomfortable ride for the seat occupant.
[0119] In configuration C, seat 102 is controlled by a semi-active damper using a skyhook algorithm. For configuration C, the transmissibility of seat 102 is acceptable around the seat resonant frequency, which is better than the performance of the firmly damped passive damper 106 for low frequency base inputs. This indicates that seat 102 will damp out the natural resonant response of seat 102, reducing the probability of uncomfortable endstop hits. In addition, the high frequency performance of seat 102 performs as well as the soft passive damper 106 for high frequency base inputs. The skyhook controlled semi-active damper 106 provides a combination of the best performance of both a firm passive damper, eliminating seat resonant effects, and a soft passive damper providing minimum transmissibility for high frequency base inputs. This will result in a more comfortable ride for the seat occupant than either a firm or soft passive damper 106.
[0120] The method of controlling the damping force of a seat damper positioned between the seat and the base, the seat damper having a seat controller providing control thereto comprises measuring an absolute acceleration (a.sub.abs) of the seat or base and generating an acceleration signal. The method includes measuring an unscaled relative displacement (x.sub.rel_unscaled) of the seat relative to the base and generating a displacement signal. The method includes calculating a maximum unscaled displacement (x.sub.max_unscaled) and a minimum unscaled displacement (x.sub.min_unscaled) from an Autocalibration subprocess. The method includes calculating a relative scaled displacement (x.sub.rel_scaled), a maximum scaled displacement (x.sub.max_scaled), and a minimum scaled displacement (x.sub.min_scaled) using a standardized scaling subprocess. The method includes calculating an absolute velocity (V.sub.abs_seat) of the seat and a relative velocity (V.sub.rel) of the seat relative to the base from a signal processing subprocess using the absolute acceleration (a.sub.abs) and the scaled relative displacement (x.sub.rel_scaled). The method also includes using the plurality of input values for simultaneously determining a maximum endstop control signal (u.sub.ES) and a skyhook control signal (u.sub.skyhook), wherein the maximum endstop control signal (u.sub.ES) is determined by simultaneously running an absolute ellipse endstop control process generating an absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs), a relative ellipse endstop control process generating a relative EEC endstop control signal (Ctrl.sub.Ellipse_rel), and an ESO2 endstop control process generating an endstop control signal (Ctrl.sub.ESO2), wherein the maximum of the three is selected as the maximum endstop control signals (u.sub.ES), wherein the skyhook control signal (u.sub.skyhook) is determined by running a skyhook control process and generating a skyhook control output (Ctrl.sub.skyhook) and running a rising edge filter process on the skyhook control output (Ctrl.sub.skyhook). The method further includes aggregating the maximum endstop control signal (u.sub.ES) and the skyhook control signal (u.sub.skyhook) to determine a desired seat performance by testing whether a sum of the maximum endstop control signal (u.sub.ES) and the skyhook control signal (u.sub.skyhook) provides the desired seat performance, or a maximum between the maximum endstop control signal (u.sub.ES) or the skyhook control signal (u.sub.skyhook) provides desired seat performance. And the method includes generating a damping force control signal (u.sub.ctrl) based upon the desired seat performance and controlling the seat damper.
[0121] The AutoCalibration subprocess further compromises the steps of populating a nonvolatile random access memory (NVRAM) with a plurality of values from a last power cycle subprocess, a parameter data input file (PDIF) initialization subprocess, a continuous AutoCAL subprocess, an AutoCAL leak subprocess, and an overwrite subprocess, wherein some of the plurality of values are stored in a RAM include a previously stored maximum unscaled displacement (x.sub.max_unscaled_old), a minimum unscaled displacement (x.sub.min_unscaled_old), and more than one values of a PDIF, the PDIF being read during the PDIF initialization subprocess, the more than one values of the PDIF at least including an autocalibration maximum and minimum displacement (x.sub.ACAL_max/min) and an autocalibration tolerance up or down displacement (x.sub.ACAL_Tolerance_up/dn), wherein the more than one values of the PDIF further including a value for an upper snubber thickness (Snubber_up) and a value for a lower snubber thickness (Snubber_dn).
[0122] The method of the continuous AutoCAL subprocess further includes the steps of determining if the previously stored maximum unscaled displacement (x.sub.max_unscaled_old) and minimum unscaled displacement (x.sub.min_unscaled_old) are valid, wherein if they are invalid then an AutoCAL range is reset to the value in the PDIF for the autocalibration maximum displacement (x.sub.ACAL_max) minus the upper snubber thickness (Snubber_up) and the value of the autocalibration minimum displacement (x.sub.ACAL_min) plus the lower snubber thickness (Snubber_dn), wherein if they are valid then the current values for the maximum unscaled displacement (x.sub.max_unscaled_old) and the current value of the minimum unscaled displacement (x.sub.max_unscaled_old) in the NVRAM are retained.
[0123] The method of the continuous AutoCal subprocess also includes subtracting the upper snubber thickness (Snubber_up) from the unscaled relative displacement (x.sub.rel_unscaled) of the seat and determining if the difference is greater than the maximum unscaled displacement (x.sub.max_unscaled) and if the difference is greater than the maximum unscaled displacement (x.sub.max_unscaled), determining if the unscaled relative displacement (x.sub.rel_unscaled) is greater than the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up), wherein if the unscaled relative displacement (x.sub.rel_unscaled) is not greater than the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up) writing the unscaled relative displacement (x.sub.rel_unscaled) of the seat minus the upper snubber thickness (Snubber_up) to the NVRAM, wherein if the difference of subtracting the upper snubber thickness (Snubber_up) from the unscaled relative displacement (x.sub.rel_unscaled) of the seat is less than or equal to the maximum unscaled displacement (x.sub.max_unscaled) then the current value of the maximum unscaled displacement (x.sub.max_unscaled_old) in the NVRAM are retained, wherein if the unscaled relative displacement (x.sub.rel_unscaled) is greater than or equal to the autocalibration tolerance up displacement (x.sub.ACAL_Tolerance_up) then the current value of the maximum unscaled displacement (x.sub.max_unscaled_old) in the NVRAM are retained.
[0124] The method of the continuous AutoCal subprocess further includes adding the lower snubber thickness (Snubber_dn) and the unscaled relative displacement (x.sub.rel_unscaled) of the seat and determining if the sum is less than the minimum unscaled displacement (x.sub.min_unscaled) and if the sum is less than the minimum unscaled displacement (x.sub.min_unscaled), determining if the unscaled relative displacement (x.sub.rel_unscaled) is less than the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn), wherein if the unscaled relative displacement (x.sub.rel_unscaled) is not less than the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) writing the result of the sum of the unscaled relative displacement (x.sub.rel_unscaled) of the seat and the lower snubber thickness (Snubber_dn) to the NVRAM, wherein if the sum of adding the lower snubber thickness (Snubber_dn) to the unscaled relative displacement (x.sub.rel_unscaled) of the seat is greater than or equal to the minimum unscaled displacement (x.sub.min_unscaled) then the current value of the minimum unscaled displacement (x.sub.min_unscaled_old) in the NVRAM is retained, wherein if the unscaled relative displacement (x.sub.rel_unscaled) is less than or equal to the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) then the current value of the minimum unscaled displacement (x.sub.min_unscaled_old) in the NVRAM is retained.
[0125] The method of the AutoCAL leak subprocess comprises the steps of determining if a time is true for a time t1, and if true initiate the AutoCAL leak subprocess; subtracting a leakage value (x.sub.ACAL_leak) from the previously stored maximum unscaled displacement (x.sub.max_unscaled_old) and the difference is written to the NVRAM if the difference is less than or equal to the autocalibration tolerance up displacement (x.sub.CAL_Tolerance_up) and greater than or equal to the autocalibration maximum displacement (x.sub.ACAL_max) minus the upper snubber thickness (Snubber_up); and adding the leakage value (x.sub.ACAL_leak) to the previously stored minimum unscaled displacement (x.sub.min_unscaled_old) and the sum is written to the NVRAM if the sum is greater than or equal to the autocalibration tolerance down displacement (x.sub.ACAL_Tolerance_dn) and less than or equal to the autocalibration minimum displacement (x.sub.ACAL_Tolerance_dn) plus the lower snubber thickness (Snubber_dn).
[0126] The method wherein the overwrite subprocess uses input from the continuous AutoCAL subprocess and the AutoCAL leak subprocess to write a current value for the maximum unscaled displacement (x.sub.max_unscaled) and the minimum unscaled displacement (x.sub.min_unscaled) to the NVRAM.
[0127] The method wherein the signal processing subprocess further comprises the steps of measuring a displacement of the seat using a digital displacement sensor or an analog displacement sensor; processing data from the digital displacement sensor with a digital low pass filter to match to an accelerometer analog low pass anti-alias filter if paired with an analog accelerometer, or processing the analog displacement sensor matched with an analog low pass anti-alias filter, if paired with either the analog accelerometer or a digital accelerometer; processing output from the digital low pass filter matched to the accelerometer analog low pass anti-alias filter or the analog low pass anti-alias filter with a bandwidth limited differentiator; processing output from the bandwidth limited differentiator with a high pass filter matched to an accelerometer base washout filter; and processing output from the high pass filter with a second high pass filter matched to an accelerometer leaky integrator, wherein output from the second high pass filter is the relative velocity (V.sub.rel) of the seat relative to the base.
[0128] The method wherein the signal processing subprocess further comprises the steps of measuring an acceleration of the seat using the digital accelerometer or an analog accelerometer; processing data from the digital accelerometer with a digital low pass filter to match with an analog displacement sensor low pass anti-alias filter if paired with the analog displacement sensor, or processing the analog accelerometer with an analog low pass anti-alias filter if paired with either the digital displacement sensor or the analog displacement sensor; processing output from the digital low pass filter to match with the analog displacement sensor low pass anti-alias filter or the analog low pass anti-alias filter with a base washout digital high pass filter; processing output from the base washout digital high pass filter with a low pass filter and matching for a bandwidth limited differentiator of the displacement sensor; and processing output from the low pass filter with a leak integrator, wherein output from the leaky integrator is the absolute velocity (V.sub.abs_seat) of the seat or an absolute velocity (V.sub.abs_base) of the base.
[0129] The method wherein the signal processing subprocess further comprises the steps of measuring a displacement of the seat using a digital displacement sensor when paired with a digital accelerometer; processing output from the digital displacement sensor processing with a bandwidth limited differentiator; processing output from the bandwidth limited differentiator with a high pass filter to match to an accelerometer base washout filter; processing output from the high pass filter with a second high pass filter to match to an accelerometer leaky integrator, wherein output from the second high pass filter is the relative velocity (V.sub.rel) of the seat relative to the base; measuring an acceleration of the seat using the digital accelerometer; processing data from the digital accelerometer with a base washout digital high pass filter; processing output from the base washout digital high pass filter with a low pass filter to match to the displacement sensor bandwidth limited differentiator; and processing output from the low pass filter with a leak integrator, wherein output from the leaky integrator is the absolute velocity (V.sub.abs_seat) of the seat or an absolute velocity (V.sub.abs_base) of the base.
[0130] The method wherein the absolute EEC subprocess and the relative EEC subprocess further comprises an ellipse parameter selection subprocess; a dynamic velocity component subprocess; a dynamic displacement component subprocess; and an ellipse control calculation subprocess, wherein the ellipse control calculation generates the absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs) and/or the relative EEC endstop control signal (Ctrl.sub.Ellipse_rel).
[0131] The method wherein the ellipse parameter selection subprocess further comprises the steps of determining if the seat is extending or compressing based upon the relative velocity (V.sub.rel) of the seat; communicating at least one stored value from a parameter data input file (PDIF) to the dynamic velocity component subprocess, the dynamic displacement component subprocess, and the ellipse control calculation subprocess; wherein the stored values communicated to the dynamic velocity component subprocess include a displacement radius up or down (x.sub.Radius_up/dn); wherein the stored values communicated to the dynamic displacement component subprocess include the displacement radius up or down (x.sub.Radius_up/dn), a relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn), and an offset displacement up or down (x.sub.Offset_up/dn); and wherein the stored values communicated to the ellipse control calculation subprocess include a relative or absolute velocity elliptical gain up or down (G.sub.Elliptical_rel/abs_up/dn).
[0132] The method wherein the dynamic velocity component subprocess further comprises the steps of squaring the displacement radius up or down (x.sub.Radius_up/dn) and writing a squared displacement radius (x.sub.Radius.sup.2) value to a random access memory (RAM); squaring the relative velocity (V.sub.rel) of the seat or the absolute velocity (V.sub.abs) of the seat as a squared relative or absolute velocity (V.sub.rel/abs.sup.2); generating a squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value by multiplying the squared displacement radius (x.sub.Radius.sup.2) with the squared relative or absolute velocity (V.sub.rel/abs.sup.2), and writing the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value to the RAM; and communicating the squared displacement radius (x.sub.Radius.sup.2) and the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value to the ellipse control calculation subprocess.
[0133] The method wherein the dynamic displacement component subprocess further comprises the steps of squaring the relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn) and writing a squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) value to the RAM; calculating an ellipse up or down center (x.sub.Elliptical_up/dn) displacement from an ellipse up center (x.sub.Elliptical_up) displacement by subtracting the displacement radius up (x.sub.Radius_up), the offset displacement up (x.sub.Offset_up), and the scaled relative displacement (x.sub.rel_scaled) from the maximum scaled displacement (x.sub.max_scaled) and squaring the resultant value, or by calculating the elliptical up or down center (x.sub.Elliptical_up/dn) displacement from an ellipse down center (x.sub.Elliptical_dn) displacement by subtracting the displacement radius down (x.sub.Radius_dn), the offset displacement down (x.sub.Offset_dn), and the minimum scaled displacement (x.sub.min_scaled) from the scaled relative displacement (x.sub.rel_scaled) and squaring the resultant value, writing either of a square of the ellipse center up displacement (x.sub.Elliptical_up.sup.2) value or a square of the ellipse center down displacement (x.sub.Elliptical_dn.sup.2) value to the RAM; multiplying the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) by either the square of the ellipse center up (x.sub.Elliptical_up.sup.2) value or the square of the ellipse center down (x.sub.Elliptical_dn.sup.2) value and writing a squared elliptical displacement squared relative or absolute velocity radius (x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2) value to the RAM; and communicating the squared elliptical displacement squared relative or absolute velocity radius (x.sub.Elliptical_up/dn.sup.2V.sub.rel/abs_Radius_up/dn.sup.2) value to the ellipse control calculation subprocess.
[0134] The method wherein the ellipse control calculation subprocess further comprises the steps of adding the squared product (x.sub.Radius.sup.2V.sub.rel/abs.sup.2) value of the squared displacement radius (x.sub.Radius.sup.2) and the square of the relative or absolute velocity (V.sub.rel/abs.sup.2) with the product of a squared elliptical displacement from the ellipse center up or down (x.sub.Elliptical_up/dn.sup.2) and the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) to determine a penetration value; multiplying the squared relative or absolute velocity radius up or down (V.sub.rel/abs_Radius_up/dn.sup.2) with the squared displacement radius (x.sub.Radius.sup.2) to determine an ellipse boundary value; determining if the penetration value is greater than zero, if so, writing the difference between the penetration value and the ellipse boundary value to the RAM, and if not, writing zero to the RAM; multiplying the result of the determining step associated with the penetration value with the relative or absolute velocity elliptical gain up or down (G.sub.Elliptical_rel/abs_up/dn) and generating either the absolute EEC endstop control signal (Ctrl.sub.Ellipse_abs) and/or the relative EEC endstop control signal (Ctrl.sub.Ellipse_rel).
[0135] The method of claim 1, wherein the ESO2 endstop control subprocess further comprises the steps of determining if the seat is extending or compressing based upon the relative velocity (V.sub.rel) of the seat; determining if the relative velocity (V.sub.rel) is greater or less than zero; determining a displacement distance to an opposite stop (x.sub.dist_to_opp_stop) is determining a distance from a top endstop when the relative velocity (V.sub.rel) is less than zero by subtracting the scaled relative displacement (x.sub.rel_scaled) from the maximum scaled displacement (x.sub.max_scaled), or by determining a distance from a bottom endstop when the relative velocity (V.sub.rel) is greater than zero by subtracting the minimum scaled displacement (x.sub.min_scaled) from the scaled relative displacement (x.sub.rel_scaled); determining an ESO2 endstop magnitude (ESO2.sub.Magnitude) by determining the difference between an absolute value of the relative velocity (|V.sub.rel|) and a relative velocity limit up (V.sub.lim_up) and multiplying the resulting difference by a gain value up (G.sub.ESO2_up), or by determining the difference between the absolute value of the relative velocity (|V.sub.rel|) and a relative velocity limit down (V.sub.lim_dn) and multiplying the resulting difference by a gain value down (G.sub.ESO2_dn); determining if a velocity trigger (V.sub.Trigger) value is true when the relative velocity limit up or down (V.sub.lim_up/dn) is subtracted from the absolute value of the relative velocity (|V.sub.rel|) and the difference is greater than or equal to zero, and by determining if the velocity trigger (V.sub.Trigger) value is false when the relative velocity limit up or down (V.sub.lim_up/dn) is subtracted from the absolute value of the relative velocity (|V.sub.rel|) and the difference is less than zero, wherein the velocity trigger (V.sub.Trigger) is enabled if true and is disabled if false; determining if a displacement trigger (x.sub.Trigger) value is true when a displacement distance to the opposite stop (x.sub.dist_to_opp_stop) is subtracted from a displacement limit up or down (x.sub.lim_up/dn) and the difference is greater than or equal to zero, and by determining if the displacement trigger (x.sub.Trigger) value is false when a displacement distance to the opposite stop (x.sub.dist_to_opp_stop) is subtracted from a displacement limit up or down (x.sub.lim_up/dn) and the difference is less than zero, wherein the displacement trigger (x.sub.Trigger) is enabled if true and is disabled if false; determining an ESO2 cyclic trigger by determining a maximum value between the displacement trigger (x.sub.Trigger) and a previous session ESO2 trigger; multiplying the ESO2 cyclic trigger by the velocity trigger (V.sub.Trigger) value to determine a current ESO2 trigger; multiplying the current ESO2 trigger by the ESO2 endstop magnitude (ESO2.sub.Magnitude) to determine the ESO2 control signal (Ctrl.sub.ESO2).
[0136] The method wherein the skyhook control subprocess further comprises the steps of determining if a product of absolute velocity (V.sub.abs_seat) of the seat multiplied by the relative velocity (V.sub.rel) of the seat is greater than zero; setting the value for the skyhook control signal (Ctrl.sub.skyhook) to zero when the product is less than or equal to zero; and multiplying a viscous damping coefficient (C.sub.sky) by the absolute velocity (V.sub.abs_seat) of the seat to determine a value of the skyhook control signal (Ctrl.sub.skyhook).
[0137] The method wherein the rising edge filter subprocess further comprises the steps of processing the skyhook control signal (Ctrl.sub.skyhook) through a single pole low pass filter; determining that if a first response (A) from the single pole low pass filter is less than or equal to a second response (B), then the skyhook control signal (u.sub.skyhook) is equal to a value of the single pole low pass filter of the skyhook control signal (Ctrl.sub.skyhook); and determining that if the first response (A) from the single pole low pass filter is greater than the second response (B), then the skyhook control signal (u.sub.skyhook) is equal to a value of the skyhook control signal (Ctrl.sub.skyhook) from the skyhook control subprocess.
[0138] Other embodiments of the present invention will be apparent to one skilled in the art. As such, the foregoing description merely enables and describes the general uses and methods of the present invention. Accordingly, the following claims define the true scope of the present invention.