Patent Description:
A fuel cell generates electrical power by converting chemical energy of a fuel into electrical energy by way of an electrochemical reaction, without combustion. Fuel cells typically utilize hydrogen as a fuel and oxygen (usually from air) as an oxidant in the electrochemical reaction. The electrochemical reaction results in electricity, by-product water, and by-product heat. The electrical power generated by a fuel cell may be fed to batteries so that the batteries don't deplete and meet different environment requirements for the fuel cell (e.g., temperature, airflow, and the like). During battery charging a stack current may varies. Due to frequent variations or changes in the stack current the environment requirements for a fuel cell may not be met or met less often and may cause damage to the fuel cell. Additionally, frequent variations of stack current initiate changing requirements for the overall fuel cell system which may then need to re-adjust to match the changing requirements, which is time consuming and may lead to decreases in fuel cell system performance.

The present disclosure provides a stack current controller. The stack current controller may be configured to determine a stack current request based on a state of charge of a battery operationally connected to the fuel cell. The stack current request may refer to a magnitude of a current that is requested from a fuel cell for charging the battery. The stack current controller may determine the stack current request based on stack current magnitude levels and corresponding different thresholds for state of charge (SOC) of the battery. For example, if the battery SOC is less than <NUM>% (which may be a first SOC threshold), then the stack current controller may request 275A stack current (which may be the corresponding first requested stack current level). If the SOC is <NUM>% or more, but less than <NUM>% (which may be a second SOC threshold), then the stack current controller may request 200A stack current (which may be the corresponding second requested stack current level). If the SOC is <NUM>% or more, but less than <NUM>% (which may be a third SOC threshold), then the stack current controller may request 150A stack current (which may be the corresponding third requested stack current level). Other suitable SOC thresholds and requested stack currents may be used depending on desired performances, battery configuration, fuel cell configuration, or other suitable factors.

Further, in an embodiment, the SOC thresholds corresponding to two requested stack current levels may overlap in a range, which may be referred to as a debounce range or a debounce level of the SOC thresholds. The SOC thresholds in the debounce range may be separated by a configurable SOC value, for example <NUM>%. That is to say, there may be a first SOC threshold of <NUM>% and a second SOC threshold of <NUM>%, for a requested stack current magnitude of 150A. Then, the entire range of SOC values within the range of SOC between <NUM>%-<NUM>% may be considered the debounce range for a stack current magnitude of 150A, as an example. The advantage of this debounce range is that as long as the SOC value for the corresponding requested stack current magnitude is within this debounce range there is no switching between stack current magnitude levels.

Thus, having the debounce range as described above, hinders abrupt and frequent switching between stack current magnitude levels, which ultimately helps in improving overall life of system components of a fuel cell.

Additionally, in some embodiments, the stack current controller may be configured to request the stack current magnitude at each battery SOC level in such a manner to avoid the occurrence of resonance between a fan and an air compressor associated with the fuel cell, which may occur at a specific current. Avoiding such a stack current magnitude may provide a less noisy operation of the overall fuel cell and battery system.

The present disclosure also provides a system and a method for controlling a coolant temperature of a fuel cell via stack current requests. Controlling the coolant temperature may refer to maintaining an actual coolant temperature at a desired coolant temperature setpoint when a fuel cell is operating in a relatively low ambient temperature. For reference, a reference to coolant temperature setpoint incudes the actual coolant temperature setpoint and alternatively to either an upper or lower coolant temperature threshold as appropriate for either decreasing or increasing, respectively, the coolant temperature as described throughout this specification. The system receives an actual coolant temperature and the desired coolant temperature setpoint. The system determines an error based on a difference between the actual coolant temperature and the desired coolant temperature setpoint. This error is indicative of how cold the coolant is compared to the coolant temperature setpoint. Further, the system determines a stack current magnitude to request from the stack based on the error. The determined stack current magnitude may be the lowest current magnitude that provides sufficient heat to maintain the actual coolant temperature at the desired coolant temperature setpoint. As a result, the actual coolant temperature may become equal to, or fall within a temperature threshold with respect to, the desired coolant temperature setpoint when the fuel cell operates in relatively low ambient temperatures.

The present disclosure also provides a system and a method for controlling the stack current requested from the fuel cell based on an error value associated with the coolant temperature and the fan speed of the fan unit of the fuel cell system. The system determines the error value based on a difference between an actual coolant temperature and a coolant temperature setpoint. The system controls the stack current request to determine the highest current magnitude at which the coolant temperature setpoint may be sustained. To that end, the system includes a function that is enabled and disabled to regulate the stack current request for the fuel cell. The function may be enabled when the fan speed exceeds a threshold fan speed value and the coolant temperature exceeds the coolant temperature setpoint, for a predefined time-period. More specifically, the system may be configured to determine the error value associated with the difference between the actual coolant temperature and the coolant temperature setpoint, and further to operate to decrease such error. Further, the system may be configured to monitor the fan speed for a predetermined duration to check if the fan speed is above or below a threshold fan speed. Further, the system may modulate the stack current magnitude requested based on decreasing the error value associated with the coolant temperature setpoint and monitoring the fan speed. Further, the highest current magnitude corresponding to the coolant temperature setpoint that may sustain operating conditions for the fuel cell system with the coolant temperature within a threshold of the coolant temperature setpoint may be referred to as a "smart ceiling" current and the corresponding function as a "smart ceiling" function. Furthermore, the smart ceiling function may be disabled when the fan speed is below the threshold fan speed and the coolant temperature is at the coolant temperature setpoint, or within a coolant temperature threshold with respect to the coolant temperature setpoint, for a predefined time-period.

For a more complete understanding of example embodiments of the present disclosure, reference is now made to the following descriptions taken in connection with the accompanying drawings in which:.

In the following detailed description, reference is made to the accompanying drawings which form a part hereof wherein like numerals designate like parts throughout, and in which is shown by way of illustration examples that may be practiced. It is to be understood that other examples may be utilized, and structural or logical changes may be made without departing from the scope of the present disclosure.

Aspects of the disclosure are disclosed in the accompanying description. Alternate examples of the present disclosure and their equivalents may be devised without parting from the spirit or scope of the present disclosure. It should be noted that like elements disclosed below are indicated by like reference numbers in the drawings.

Various operations may be described as multiple discrete actions or operations in turn, in a manner that is most helpful in understanding the claimed subject matter. However, the order of description should not be construed as to imply that these operations are necessarily order dependent. In particular, these operations may not be performed in the order of presentation. Operations described may be performed in a different order than the described example. Various additional operations may be performed and/or described operations may be omitted in additional examples.

The description may use the phrases "in an example," or "in examples," which may each refer to one or more of the same or different examples. Furthermore, the terms "comprising," "including," "having," and the like, as used with respect to examples of the present disclosure, are synonymous.

As used in reference to the operation systems herein, the term "operation" may refer to a single procedure (such as adjusting a travel speed of a vehicle) that may be performed by the operation systems. As used in reference to the operator input device herein, the term "action" may refer to a procedure to be performed by the vehicle that may be made up of one or more operations to be performed by the operation systems.

As used herein, the term "controller" may refer to, be part of, or include one or more of an Application Specific Integrated Circuit (ASIC), an electronic circuit, a processor (shared, dedicated, or group) and/or memory (shared, dedicated, or group), a proportional controller, an integral controller, and a derivative controller, that execute one or more software or firmware programs, a combinational logic circuit, and/or other suitable components that provide the described functionality.

<FIG> shows a block diagram of a system <NUM> for determining a stack current request based on a state of charge of a battery <NUM>, in accordance with one or more embodiments of the present disclosure. A stack current controller <NUM> is configured to determine a stack current request for a fuel cell <NUM> based on a state of charge of the battery <NUM>. The stack current request may refer to a magnitude of a current to be requested from the fuel cell stack <NUM> for charging the battery <NUM>.

In an embodiment, the stack current controller <NUM> obtains the state of charge of the battery <NUM> to use as a basis for requesting a stack current magnitude from the fuel cell stack <NUM>. The battery <NUM> state of charge may be determined by the stack current controller <NUM> based on a voltage and current of the battery <NUM>, a temperature of the battery <NUM>, characteristics of a model of the battery <NUM>, from a battery management system, or based on other relevant indicia relating to the battery <NUM>. Optionally, the controller <NUM> may obtain a coolant temperature and determine whether the coolant temperature is within a coolant temperature threshold that is above and below a coolant temperature setpoint. Normal processing may proceed based on the battery state of charge if the coolant temperature is within the coolant temperature threshold.

The stack current controller <NUM> requests different stack current magnitudes from the fuel cell <NUM> based on the state of charge of the battery <NUM>. The fuel cell <NUM> comprises an air compressor <NUM>, a fan <NUM>, and a stack <NUM>. The air compressor <NUM> may blow air into the fuel cell <NUM> and the fan <NUM> is configured to cool the fuel cell <NUM>. The stack <NUM> generates an electrical current. The air compressor <NUM> and fan <NUM> may have a resonance frequency at a particular stack current magnitude, for example, at 180A. If such a particular current magnitude is requested from the fuel cell stack <NUM> the resonance of the air compressor <NUM> and the fan <NUM> may produce an undesirable noise. Thus, the stack current controller <NUM> may be configured to request stack current magnitudes other than a current magnitude that produces a resonance between the compressor <NUM> and the fan <NUM> to avoid noise associated with such resonance, thus providing a quieter operation of the system <NUM>, which may be installed in a vehicle such as a forklift or other suitable vehicle.

Additionally, the stack current controller <NUM> may be configured to request stack current magnitudes in such a manner that instead of continuously changing the stack current magnitude in response to changes to the state of charge of the battery <NUM> the stack current controller <NUM> requests stack current magnitudes in a stepwise fashion as explained with reference to <FIG>.

<FIG> illustrates a flowchart of a method <NUM> for requesting stack current magnitudes from the fuel cell <NUM> in a stepwise manner based on the state of charge of the battery <NUM>. <FIG> is explained in conjunction with <FIG>, where <FIG> illustrates a plot of different stack current magnitudes (which are the requested stack current magnitudes) plotted along Y-axis against the percentage values corresponding to different battery state of charge levels plotted along X-axis.

<FIG> represents four different stack current magnitude steps, a first stack current magnitude step <NUM>, a second stack current magnitude step <NUM>, a third stack current magnitude step <NUM>, and a fourth stack current magnitude step <NUM>. The first stack current magnitude <NUM> represents the highest stack current value among the four magnitude steps, and the fourth stack current level <NUM> represents the lowest stack current magnitude among the four magnitudes. Each stack current magnitude has either a lower state of charge threshold, to increase the stack current magnitude (requested from fuel cell stack <NUM>), or an upper state of charge threshold, to decrease the stack current magnitude, or both. <FIG> shows each stack current magnitude with its respective thresholds.

The first stack current magnitude <NUM> (that is the highest stack current value) has only an upper first threshold <NUM> of battery <NUM> state of charge to decrease the stack current magnitude, such as to stack current magnitude <NUM>, because current cannot be increased beyond the maximum stack current (value at) magnitude <NUM>.

The fourth stack current magnitude <NUM> (that is the lowest stack current value) has only a lower fourth threshold <NUM> to increase the stack current magnitude, such as to stack current magnitude <NUM>, because current cannot be decreased beyond the minimum stack current (value at) magnitude <NUM>.

In between the highest and the lowest stack current magnitudes, that is between the stack current magnitudes <NUM> and <NUM> respectively, there can be one or a plurality of intermediate stack current magnitudes. The second stack current magnitude <NUM> and the third stack current magnitude <NUM> in <FIG> form two intermediate magnitudes between the (highest) first stack current magnitude <NUM> and the (lowest) fourth stack current magnitude <NUM>. Each of the intermediate stack current magnitudes have an upper state of charge threshold and a lower state of charge threshold. For example, the second stack current magnitude <NUM> has a lower second threshold <NUM> for battery <NUM> state of charge and an upper second threshold <NUM> for battery <NUM> state of charge. The third stack current magnitude <NUM> has a lower third threshold <NUM> for battery <NUM> state of charge and an upper third threshold <NUM> for battery <NUM> state of charge. The lower third threshold <NUM> for the third stack current magnitude <NUM> and the upper second threshold <NUM> for the second stack current magnitude <NUM> overlap with a debounce range value for battery <NUM> state of charge in between. This debounce range value is configurable and may be set as per the specific requirements of each system <NUM>. For example purposes, in <FIG>, the debounce range is set to be <NUM>%. Therefore, within this debounce range, current magnitude request does not switch abruptly from one stack current magnitude to the next stack current magnitude as explained in further detail below. Including a debounce range helps to increase current stability or dwell time at each stack current magnitude and helps in reducing noise also by avoiding rapid switching between different current magnitudes.

Switching between different stack current magnitudes based on battery <NUM> state of charge is explained by operations of method <NUM> applied to stack current magnitudes and battery <NUM> state of charge values depicted in <FIG>.

Upon initialization the stack current controller <NUM> establishes which current magnitude to request. When the method <NUM> starts, at <NUM>, the stack current controller <NUM> is configured to obtain an initial state of charge of the battery <NUM> and compare it with lower state of charge thresholds <NUM>, <NUM>, and <NUM> of each of the stack current magnitudes <NUM> - <NUM>, respectively. Based on the comparison, at <NUM>, the initial stack current magnitude is requested. For example, if it is determined that the initial state of charge is lesser than or equal to the lower second threshold <NUM> of the second stack current magnitude <NUM>, which is <NUM>% in this example, then the highest stack current magnitude corresponding to stack current magnitude <NUM> is requested. If the initial state of charge of battery <NUM> is greater than the lower second threshold <NUM>, but less than or equal to the lower third threshold <NUM>, which is <NUM>% in this example, then the stack current magnitude <NUM> is requested. If the initial state of charge of battery <NUM> is greater than the lower third threshold <NUM>, but less than or equal to the lower fourth threshold <NUM>, which is <NUM>% in this example, then the stack current magnitude <NUM> is requested. If the initial state of charge of battery <NUM> is greater than the lower fourth threshold <NUM> then the stack current magnitude <NUM> is requested.

Once the initial magnitude for the stack current is identified it is set as the active stack current magnitude corresponding to the existing state of charge value for battery <NUM> at <NUM>. Thereafter, continuous monitoring of the battery <NUM> state of charge is done. At <NUM> the state of charge of the battery <NUM> is again obtained. The battery <NUM> state of charge is then, at <NUM>, compared with an upper threshold of the active stack current magnitude. For example, when the active stack current magnitude is the first stack current magnitude <NUM>, the state of charge of the battery <NUM> is compared with the upper first threshold <NUM>. The upper first threshold depicted in <FIG> is <NUM>%. If the battery <NUM> state of charge is more than the upper first threshold <NUM>, such as more than <NUM>%, then at <NUM>, a request to lower the stack current magnitude is generated by the stack current controller <NUM>. Correspondingly, the stack current level is set to the second stack current level <NUM>. And thereafter control of processing returns back to step <NUM>.

However, at <NUM>, if it is determined that the state of charge of the battery <NUM> is at or lower than the upper state of charge threshold of the active stack current magnitude, then the flow of processing moves to step <NUM>. At <NUM>, the state of charge of the battery <NUM> is compared with the lower state of charge threshold of the active stack current magnitude. If the state of charge is more than the lower state of charge threshold, then the stack current remains at the same stack current magnitude and control of processing returns back to the step <NUM>.

However, at <NUM>, if it is determined that the battery <NUM> state of charge is at, or lower than, the lower state of charge threshold of the active stack current magnitude, then at <NUM> a request to raise the stack current magnitude is generated. For example, if the active stack current magnitude is the second stack current magnitude <NUM> its lower state of charge threshold is the second lower threshold <NUM>, which is <NUM>% in the illustrated example. Further, for the stack current magnitude <NUM>, the upper state of charge threshold is the second upper threshold <NUM>, which is <NUM>% as illustrated. At step <NUM>, if the state of charge of the battery <NUM> is more than <NUM>%, then the stack current remains at the magnitude <NUM>. But if the state of charge of the battery <NUM> is at, or less than <NUM>%, then at <NUM> a request to increase the stack current to the next stack current magnitude, which is magnitude <NUM>, is generated.

In another example once the stack current has reached the magnitude defined by the stack current magnitude <NUM>, and as the battery <NUM> is charging, the state of charge of the battery <NUM> is continuously monitored to check if it is lesser than the first upper threshold <NUM> of the stack current level <NUM>. In the illustrated figure, the first upper threshold <NUM> is shown to be <NUM>%. As the battery <NUM> is charging the state of charge of the battery may increase from <NUM>% to <NUM>%. Thus, the state of charge of <NUM>% is again compared to the first upper threshold <NUM> of <NUM>%. Since the state of charge is still less than <NUM>% no change in stack current request happens. But when the state of charge increases beyond <NUM>%, for example becomes <NUM>%, the stack current magnitude is lowered and moves to the second stack current magnitude <NUM>.

At magnitude <NUM>, the state of charge of the battery <NUM> is again continuously monitored. After some time, the state of charge of the battery <NUM> may become <NUM>%. <NUM>% is lesser than the previous upper threshold <NUM> of <NUM>% but is more than the lower second threshold <NUM> of <NUM>%. In fact, <NUM>% lies in the debounce range of <NUM>% - <NUM>%. So, as long as the state of charge of the battery <NUM> remains within the debounce range of <NUM>% - <NUM>% (including both these threshold values in this example, however the threshold values may be outside of the debounce range in other embodiments), the stack current magnitude does not switch. Similar scenarios happen when the battery <NUM> state of charge is within the debounce range of <NUM>% - <NUM>% and <NUM>% - <NUM>% as illustrated in <FIG>. Thus, because of the presence of these debounce ranges, the stack current controller <NUM> may provide more dwell time at each stack current magnitude and avoid rapid noisy switching between different stack current magnitudes than the controller <NUM> would be able to if the debounce ranges were not present.

It may be noted that the example values of the battery <NUM> state of charge shown in <FIG>, which comprise values such as <NUM>%, <NUM>%, <NUM>%, <NUM>%, <NUM>% and <NUM>%, are considered for illustrative purposes. Any suitable range of values of the battery <NUM> state of charge may be selected to provide the various features and functionalities disclosed herein, without deviating from the scope of the present disclosure.

As another example, when the battery <NUM> continues to charge, the state of charge of the battery <NUM> becomes greater than <NUM>%, <NUM>% for example. <NUM>% is lesser than the third upper threshold <NUM> which is <NUM>% in this case. This is determined at step <NUM>. But <NUM>% is above the fourth lower threshold <NUM>, which is <NUM>% as determined at step <NUM>. Thus, as per the method <NUM>, the flow of processing returns to step <NUM>, and no change in stack current magnitude happens. While the battery <NUM> is charging, this loop repeats until the state of charge of the battery <NUM> becomes larger than the third upper threshold <NUM>.

As the battery <NUM> continues to charge, the state of charge of the battery <NUM> becomes greater than the third upper threshold <NUM>, <NUM>% for example. At step <NUM> the stack current controller <NUM> compares the state of charge of the battery <NUM> against the third upper threshold <NUM>. Because the battery <NUM> state of charge is greater than <NUM>%, the stack current controller <NUM> moves to step <NUM> where the stack controller <NUM> commands a lower stack current magnitude <NUM>, which in this example is the minimum stack current magnitude.

If the battery <NUM> continues to charge, the stack current controller repeats the above steps and maintains the stack current at the stack current magnitude <NUM>.

However, if the state of charge of the battery <NUM> begins to decrease, the stack current controller <NUM> increases the stack current magnitude in a stepwise manner similar to how the stack current magnitude is reduced in a stepwise manner as described above. For example, the state of charge of the battery <NUM> obtained by the stack current controller <NUM> at step <NUM> may be <NUM>%. At step <NUM> the stack current controller <NUM> compares the state of charge of the battery <NUM> against the fourth lower threshold <NUM>, which in this example is between and including <NUM>% and <NUM>%. Because <NUM>% is more than the fourth lower threshold <NUM> the stack current controller <NUM> verifies that the current request is at the stack current magnitude <NUM> and makes no changes to the current request at step <NUM>. This loop repeats until the state of charge of the battery <NUM> falls outside (or becomes lesser than) the fourth lower threshold <NUM>.

As the battery <NUM> continues to discharge, the state of charge of the battery <NUM> becomes less than the fourth lower threshold <NUM>, <NUM>% for example. At step <NUM> the stack current controller <NUM> compares the state of charge of the battery <NUM> against the fourth lower threshold <NUM> which in this example is <NUM>% then the stack current controller <NUM> moves to step <NUM> and requests for increasing the stack current magnitude to the level <NUM>. But, if the state of charge of the battery <NUM> is <NUM>%, which falls within the debounce range of <NUM>%-<NUM>%, no change in stack current magnitude happens as processing moves from <NUM> back to <NUM>.

The stack current controller <NUM> continues processing as described above with respect to the different stack current magnitudes <NUM> - <NUM> and different state of charge thresholds <NUM> - <NUM>. Thus, operation of the fuel cell <NUM> at a stack current magnitude that may induce resonance amongst the air compressor <NUM> and the fan <NUM> may be avoided by setting the stack current magnitudes <NUM> - <NUM> to avoid such a resonance causing stack current magnitude. Additionally, the frequency of switching between stack current magnitudes is reduced, thus providing a more stable operating environment for fuel cell <NUM> as described below.

One purpose for the upper and lower thresholds is to inhibit the stack current from "bouncing" from one magnitude to another. Without the thresholds, there may be a single battery <NUM> state of charge percentage, for example, <NUM>%, that operates as a condition to switch from one stack current magnitude <NUM> to another stack current magnitude <NUM>. If a battery <NUM> state of charge fluctuates between <NUM>% and <NUM>% the stack current magnitude will change each time the battery <NUM> state of charge moves past the <NUM>% threshold. However, by implementing upper and lower thresholds associated with each stack current magnitude frequent changes from one stack current magnitude to another stack current magnitude may be inhibited. For example, with the thresholds when the battery <NUM> state of charge fluctuates between <NUM>% and <NUM>% the stack current magnitude requested by controller <NUM> may change from level <NUM> to level <NUM> as the battery <NUM> state of charge moves from <NUM>% to <NUM>%. But, once the stack current magnitude requested by controller <NUM> is at level <NUM>, the request from controller <NUM> will remain for the current magnitude corresponding to level <NUM> even as the battery <NUM> state of charge continues to fluctuate between <NUM>% and <NUM>% as described above. The upper and lower thresholds in the above example create a <NUM>% debounce range for each current magnitude <NUM>, <NUM>, <NUM>, and <NUM>, however, any suitable percentage may be used for a debounce range.

Additionally, the debounce range may be different for different stack current magnitudes. For example, a preferred stack current magnitude may have a larger debounce range to facilitate more operation at that preferred stack current magnitude. Thresholds for each current magnitude may be designed to accommodate one or more of operating characteristics of a fuel cell, the operational environment for a fuel cell, the operational profile for a fuel cell, or for other suitable factors. Whether stack current magnitude switching occurs when a battery state of charge is equal to an upper or lower threshold is a design consideration. Therefore, stack current switching may occur when a battery state of charge is equal to an upper or lower threshold, may occur when a battery state of charge surpasses an upper or lower threshold, or may be a combination of being equal to or surpassing an upper or lower threshold.

The stack current controller <NUM> may therefore determine a stack current magnitude request based on the state of charge of the battery <NUM> and the stack current magnitudes corresponding to different static state of charge thresholds, upper thresholds, and lower thresholds.

In one example, if the battery <NUM> state of charge is less than <NUM>%, then the stack current controller <NUM> requests 275A stack current (the corresponding first requested stack current magnitude <NUM>). If the battery <NUM> state of charge is less than <NUM>%, then the stack current controller <NUM> requests 200A stack current (which is the corresponding second requested stack current magnitude <NUM>). If the battery <NUM> state of charge is less than <NUM>%, then the stack current controller <NUM> requests 150A stack current (which is the corresponding third requested stack current magnitude <NUM>). It may be noted that three different levels of requested stack current magnitudes and corresponding three different battery <NUM> state of charge thresholds have been considered here only for the purpose of example. In fact, any number of levels of requested stack current magnitudes and corresponding different battery <NUM> states of charge thresholds may be possible without deviating from the scope of the present disclosure.

In other embodiments, if the state of charge of the battery <NUM> is less than a battery state of charge threshold, for example <NUM>%, the stack current controller <NUM> may trigger a smart idle function as described in greater detail below. According to an embodiment, triggering the smart idle function refers to initiating controlling a coolant temperature of the fuel cell. The controlling of the coolant temperature may refer to maintaining a coolant temperature at a coolant temperature setpoint.

Additionally, in some embodiments, a second lowest current magnitude, such as level <NUM>, may be considered as a learning level to match an average truck power. The second lowest level refers to a battery <NUM> state of charge corresponding to which the second lowest stack current magnitude is requested. The stack current controller <NUM> may be configured to estimate an average truck power consumption over time to determine the average truck power. The stack current controller <NUM> may further determine an average current magnitude needed for the truck based on the average truck power. Further, the stack current magnitude corresponding to the second lowest level may be changed to match the average current determined by the controller <NUM> needed for the truck based on the average truck power. For example, if the controller determined that the average current is 155A, the current magnitude associated with level <NUM> may be changed from 150A to 155A. As a result, the average current magnitude needed for the truck may be met by requesting output at level <NUM> which may result in dwelling at level <NUM> for longer periods of time than when level <NUM> corresponded to 150A output by the stack 515longer, which in turn reduces a number of times the stack current and environment conditions of the fuel cell need to change. In other words, the stack current controller <NUM> may dynamically set one or more of the current levels based on evaluations of operation of a vehicle powered by the fuel cell <NUM>, for example, to minimize the need to switch between stack currents.

<FIG> shows a diagrammatic representation <NUM> of various plots depicting variation of different parameters, in accordance with some embodiments of the present disclosure. A curve <NUM> represents a variation of the state of charge of the battery <NUM>. A curve <NUM> represents a variation of the stack current magnitude request. A curve <NUM> represents a variation of an actual coolant temperature. A curve <NUM> represents a variation of the coolant temperature setpoint.

From the curves <NUM> and <NUM>, it may be noted that as the battery <NUM> state of charge decreases, the stack current magnitude request increases. Further, from the curves <NUM> and <NUM>, it can be inferred that the coolant temperature set point is maintained or is easier to maintain than if a debounce range were not included.

<FIG> shows a block diagram of a system <NUM> for controlling a coolant temperature indicated by a coolant temperatures sensor <NUM> of a fuel cell <NUM> (<FIG>), in accordance with one or more embodiments of the present disclosure. The system <NUM> may be used in conjunction with the system <NUM>. The system <NUM> includes a controller labeled as an enabler <NUM>, a controller that operates as a temperature difference calculator <NUM>, and a controller <NUM>. The enabler <NUM>, the temperature difference calculator <NUM>, and the controller <NUM> may be separate components, or may be physically combined into one component and differentiated by software or other suitable programming or logic circuitry.

The coolant temperature as sensed by the coolant temperature sensor <NUM> may be used for maintaining the coolant temperature at a desired coolant temperature setpoint established by the setpoint controller <NUM>. The setpoint controller <NUM> may be a setpoint setter. According to an embodiment, the setpoint controller <NUM> is configured to monitor a chemical reaction inside a fuel cell and output setpoints that are desired for the chemical reaction, such as desired coolant temperature, the temperature difference of the coolant before it is used to cool the stack and after the coolant has been used to cool the stack, cathode airflow, the state of whether hydrogen valves are on or off, and other suitable functions. The setpoint controller <NUM> may receive inputs relating to one or more of a dew point temperature of cathode inlet air, a stack current, coolant temperature, and an average stack cell voltage magnitude.

The enabler <NUM> obtains a battery state of charge from a battery state of charge indicator <NUM>, which may be a battery management system or a voltage indicator, a magnitude of the stack current, typically measured in Amperes (A), from the stack current magnitude indicator <NUM>, and a coolant temperature, for example, in degrees Celsius, as indicated by the coolant temperature sensor <NUM>. Based on the information from the battery state of charge indicator <NUM>, the enabler <NUM> determines whether the battery state of charge is less than a threshold battery state of charge, for example, equal to or less than <NUM>%. If the battery state of charge is less than the threshold battery state of charge, then the enabler <NUM> may send a command to the controller <NUM> to initiate controlling the coolant temperature as described in greater detail below. In some embodiments, initiating controlling the coolant temperature may be referred to as enabling 'smart idle'. Further, if the battery state of charge is greater than the threshold battery state of charge, then a normal operation may be continued. In some embodiments the battery state of charge may be the only information used by the controller <NUM> to determine whether to initiate controlling the coolant temperature. In other embodiments the battery state of charge may be used along with other information by the controller <NUM> to determine whether to initiate controlling the coolant temperature.

In some embodiments, the enabler <NUM> may determine whether the stack current magnitude indicated by the stack current magnitude indicator <NUM> is less than a threshold stack current magnitude, for example, less than or equal to <NUM> A. Further, if the stack current magnitude is greater than the threshold stack current magnitude, regardless of the battery state of charge, then the normal operation may be continued. Alternatively, the enabler <NUM> may determine whether the stack current magnitude is greater than zero, and if so, use that information combined with other information to initiate controlling the coolant temperature as described in greater detail below. For example, if the stack current magnitude is greater than zero and the battery state of charge is less than the battery state of charge threshold, then the enabler <NUM> may send a command to the controller <NUM> to initiate controlling the coolant temperature as described in greater detail below. In some embodiments the stack current magnitude may be the only information used by the controller <NUM> to determine whether to initiate controlling the coolant temperature. In other embodiments the stack current magnitude may be used along with other information by the controller <NUM> to determine whether to initiate controlling the coolant temperature.

The enabler <NUM> may determine whether the coolant temperature as indicated by the coolant temperature sensor <NUM> is below a coolant temperature setpoint threshold, for example, equal to or more than <NUM> C below the coolant temperature setpoint established by the setpoint controller <NUM>. Further, if the coolant temperature is within the coolant temperature threshold, then normal operation may be continued regardless of the battery state of charge and regardless of the stack current magnitude. In some embodiments the coolant temperature may be the only information used by the controller <NUM> to determine whether to initiate controlling the coolant temperature. In other embodiments the coolant temperature may be used along with other information by the controller <NUM> to determine whether to initiate controlling the coolant temperature. For example, if the battery state of charge is less than the battery state of charge threshold, the stack current magnitude is greater than zero, and the coolant temperature is below the coolant temperature threshold, then the enabler <NUM> may send a command to the controller <NUM> to initiate controlling the coolant temperature as described in greater detail below.

According to some embodiments, the temperature difference controller <NUM> may be configured to determine a difference between the actual coolant temperature as indicated by the coolant temperature sensor <NUM> and the coolant temperature setpoint established by the setpoint controller <NUM>. The difference between the coolant temperature and the coolant temperature setpoint may be referred to as an error. The error may be provided to the controller <NUM> and used for controlling the coolant temperature as describe in greater detail below.

The controller <NUM>, upon receiving the command to initiate controlling the coolant temperature from the enabler <NUM>, and based at least in part on the error from the temperature difference controller <NUM>, determines a stack current magnitude to request from the stack <NUM> such that the requested stack current magnitude may be the lowest current magnitude that provides sufficient heat to maintain the actual coolant temperature within the coolant temperature threshold with respect to the coolant temperature setpoint established by the setpoint controller <NUM>. The stack <NUM> is part of the fuel cell <NUM> (<FIG>). The controller <NUM> may also modulate the current magnitude requested from the fuel cell stack <NUM> as described in greater detail below. In some embodiments, the controller <NUM> may start with an initial starting value for a current magnitude to request from the stack <NUM> where the initial starting value may be based on an ambient temperature received from an ambient temperature sensor <NUM> and a lookup table, for example, residing within the controller <NUM>. The lookup table may include different current magnitude values to use as the starting value where each current magnitude value corresponds to an ambient temperature. For example, if the ambient temperature is <NUM>, the corresponding current magnitude value may be <NUM> A. Look up table values may be customized based on the characteristics of the fuel cell. The current magnitude output from the stack <NUM> may be modulated by the controller <NUM> to slowly ramp to the current magnitude requested by the controller <NUM>, for example, at a rate of <NUM> A per minute. When the requested current magnitude is reached, the controller <NUM> may start monitoring the error from the temperature difference controller <NUM> to determine whether a different stack current magnitude should be requested as described in greater detail below.

The requested stack current magnitude may be applied to a validator, for example, a program running on the controller <NUM>. The validator is configured to determine if the requested stack current magnitude is between the minimum and maximum stack current magnitudes that the stack <NUM> is capable of producing. If the requested stack current magnitude is between the minimum and the maximum stack current magnitudes that the stack <NUM> is capable of producing, then the validator does not block the requested stack current magnitude from being transmitted to the stack <NUM>. If the requested stack current magnitude is greater than the maximum stack current magnitude that the stack <NUM> is capable of producing, the validator may tell the controller <NUM> to request the maximum current magnitude that the stack <NUM> is capable of producing instead of the previously requested current magnitude.

In one embodiment, the requested stack current magnitude is the lowest current magnitude that provides sufficient heat to maintain the coolant temperature within the coolant temperature threshold with respect to the coolant temperature setpoint set by the setpoint controller <NUM>. Therefore, the actual coolant temperature may become equal to the coolant temperature setpoint or remain within the coolant temperature threshold. When the coolant temperature is maintained within the coolant temperature threshold using the lowest current magnitude a minimal amount of energy is consumed to maintain the coolant temperature within the coolant temperature threshold with respect to the coolant temperature setpoint. Optionally, while controlling the coolant temperature a fan associated with the fuel cell <NUM> may be set to the lowest speed, or may be turned off, to reduce dispersing heat and conserving energy.

Optionally, controlling the coolant temperature by the controller <NUM> may be disabled for certain situations. For example, where controlling the coolant temperature may be enabled based on the battery state of charge being less than a threshold battery state of charge, controlling the coolant temperature by the controller <NUM> may be disabled when the battery state of charge is less the threshold battery state of charge, but the ambient temperature is relatively high, for example, above <NUM>. Alternatively, where controlling the coolant temperature is enabled when the coolant temperature is outside of the coolant temperature threshold, controlling the coolant temperature by the controller <NUM> may be disabled when the current magnitude being produced by the stack <NUM> (such as during normal operation) is greater than a current magnitude that the controller <NUM> would use as an initial starting current magnitude to begin controlling the coolant temperature.

<FIG> shows a flowchart of an example method <NUM> of initiating coolant temperature control, in accordance with one or more embodiments of the present disclosure. At <NUM> the coolant temperature is obtained by the enabler <NUM>, for example, from the coolant temperature sensor <NUM>. In some embodiments the actual coolant temperature may be measured before the coolant is used to transfer heat from the fuel cell. In other embodiments the actual coolant temperature may be measured after the coolant is used to transfer heat from the fuel cell. The enabler <NUM> may be an independent controller or may be a program or other suitable configuration integrated into the controller <NUM>.

At <NUM> the enabler <NUM> determines whether the coolant temperature is outside of the coolant temperature threshold. For example, the coolant temperature threshold may be <NUM> and may be established to be cooler than the setpoint value in °C by the setpoint setter <NUM>. The difference between the setpoint temperature and the actual coolant temperature is referred to as an error (setpoint temperature - actual coolant temperature) and is a positive value as long as the actual coolant temperature is less than the setpoint temperature. Other suitable coolant temperature thresholds may be used; and may be based on the operating characteristics of a fuel cell. For example, a coolant temperature threshold may be in the range of <NUM> to <NUM>, inclusive of the endpoints. The enabler <NUM> may subtract the actual coolant temperature from the setpoint coolant temperature, and if a positive value of the error is larger than the coolant temperature threshold processing may continue at <NUM>. However, if the error is smaller than the coolant temperature threshold processing may return to <NUM> without initiating coolant temperature control.

At <NUM> the magnitude of the current being produced by the stack <NUM> is obtained by the enabler <NUM>, for example, from the stack current magnitude indicator <NUM>.

In one embodiment, the enabler <NUM> may determine whether the current magnitude output by the stack <NUM> is greater than zero at <NUM>, thus indicating that the fuel cell is operating. If the current magnitude output by the stack <NUM> is greater than zero processing may continue at <NUM>. However, if current magnitude output by the stack <NUM> is zero processing may return to <NUM> without initiating coolant temperature control.

In other embodiments, the enabler <NUM> may determine whether the current magnitude output by the stack <NUM> is less than, or is less than or equal to, a current magnitude threshold, for example less than <NUM> A. If the current magnitude output by the stack <NUM> is equal to or less than the current magnitude threshold processing may continue at <NUM>. However, if the current magnitude output by the stack <NUM> is greater than the current magnitude threshold processing may return to <NUM> without initiating coolant temperature control.

At <NUM> the enabler <NUM> obtains the battery <NUM> state of charge from the battery state of charge indicator <NUM>. The battery state of charge indicator <NUM> may comprise a battery management system associated with a battery, a voltage indicator, or other suitable device.

At <NUM> the enabler <NUM> determines whether the battery state of charge is equal to or less than, or in some embodiments just less than, a state of charge threshold. For example, the state of charge threshold may be in the range of <NUM>% to <NUM>%, inclusive of the endpoints, and may be <NUM>% in one embodiment. If the battery state of charge is equal to or less than the state of charge threshold then the enabler <NUM> may request the controller <NUM> to initiate controlling the coolant temperature at <NUM>. However, if the battery state of charge is greater than the state of charge threshold processing may return to <NUM> without initiating coolant temperature control.

<FIG> shows a flowchart of an example method <NUM> of coolant temperature control, in accordance with one or more embodiments of the present disclosure. At <NUM> the controller <NUM> obtains the ambient temperature from the ambient temperature sensor <NUM> and determines a starting value for the initial current magnitude to request from the stack <NUM>. For example, a lookup table residing within the controller <NUM> may correlate different ambient temperatures with different starting values for the initial current magnitude to request from the stack <NUM> and the controller <NUM> may use the value that most closely corresponds to the measured ambient temperature or may interpolate the starting value for the initial current magnitude to request based on the measured ambient temperature and the data in the lookup table. Other suitable manners for determining the starting value for the initial current magnitude to request from the stack <NUM> may be used in other embodiments. For example, the controller <NUM> may be programmed to select a value that is a predetermined percentage greater than the current magnitude being produced by the stack <NUM> as an initial value or the initial value for the current magnitude to request from the stack <NUM> may be based on how large of an error exists between the actual coolant temperature and the setpoint coolant temperature.

At <NUM> the controller <NUM> requests the initial value for the current magnitude from the stack <NUM> thus causing the magnitude of the current being produced by the stack <NUM> to increase. The controller <NUM> may request the stack <NUM> to ramp up to the requested current magnitude at a predetermined rate, such as <NUM> A per minute. Selecting a ramp rate may facilitate smooth and reliable operation of the fuel cell with relatively slow and predictable changes to its operation opposed to simply having the fuel cell operate at its maximum capacity to reach the requested current magnitude output by the stack <NUM>. For some embodiments, step <NUM> is optional and may be omitted.

At <NUM> the controller <NUM> determines the error between the coolant temperature setpoint and the actual coolant temperature. For example, the controller <NUM> may obtain the error from the temperature difference controller <NUM>.

At <NUM> the controller <NUM> may evaluate whether a coolant temperature control stop condition has occurred. Example stop conditions include, but are not limited to, an increase in the ambient temperature such as an increase above a predetermined percentage of the ambient temperature that was measured when coolant temperature control started, the battery state of charge exceeds the state of charge threshold, the coolant temperature rises above the coolant temperature setpoint, the stack <NUM> receives a request for a current magnitude that is greater than the current magnitude being requested by the controller <NUM>, the coolant temperature falls within the coolant temperature threshold, or other suitable condition. An individual condition may be used as a stop condition, or two or more conditions may be combined to create a stop condition, for example, the coolant temperature falling within the coolant temperature threshold and the ambient temperature increasing. If a stop condition has occurred processing ends at <NUM>. Otherwise processing continues at <NUM>.

At <NUM> the controller <NUM> determines whether the error is outside of the coolant temperature threshold, for example, <NUM>, and whether the error is either static, that is, not changing, or whether the error is increasing. If the error is greater than the coolant temperature threshold and is either increasing or static, processing continues at <NUM> where the controller <NUM> requests an increase of the magnitude of the current being produced by the stack <NUM>. If the error is less than the coolant temperature threshold, or if the error is greater than the coolant temperature threshold, but is decreasing, then processing continues at <NUM>.

At <NUM> the controller <NUM> determines whether the error is greater than the coolant temperature threshold and is decreasing. If so, processing continues at <NUM> where the controller <NUM> continues to request the current magnitude output by the stack <NUM> at the same magnitude and returns to <NUM> for processing. If not, processing continues at <NUM> where the controller <NUM> requests a decrease of the current magnitude output by the stack <NUM> before returning to <NUM> for processing. At <NUM> the controller <NUM> may request a lesser current magnitude because the coolant temperature is within the coolant temperature threshold. Requesting a decrease to the current magnitude output by the stack <NUM> may prevent the coolant temperature from exceeding the coolant temperature setpoint.

<FIG> shows a hypothetic diagrammatic representation <NUM> of various plots depicting variation of different parameters during controlling the coolant temperature via controlling the stack current magnitude, in accordance with one or more embodiments of the present disclosure. Curve <NUM> represents enabling and disabling the coolant temperature control. Curve <NUM> represents variation of the requested stack current magnitude in response to enabling and disabling the coolant temperature control. Curve <NUM> represents variation of the coolant temperature setpoint before, during, and after coolant temperature control. Curve <NUM> represents variation of the actual coolant temperature in response to enabling and disabling the coolant temperature control. Curve <NUM> represents variation of the battery state of charge in response to enabling and disabling the coolant temperature control. Curve <NUM> represents variation of the fan speed in response to enabling and disabling the coolant temperature control. For example, a fan associated with a fuel cell's cooling system may be commanded to slow down while coolant temperature control is operating to facilitate increasing the coolant temperature towards the coolant temperature setpoint. In some embodiments, the fan may not be completely shut off to maintain a greater pressure within the fuel cell housing with respect to atmospheric pressure surrounding the fuel cell to aid flushing any accumulated hydrogen out of the fuel cell housing.

It may be observed from the curves <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> shown in <FIG> that the coolant temperature control is initiated when the actual coolant temperature is below the coolant temperature setpoint and the battery state of charge is less than the state of charge threshold, for example, <NUM>%. When the coolant temperature control is enabled, the actual coolant temperature may eventually become equal to the coolant temperature setpoint. Also, it may be observed from the curve <NUM> that, when the coolant temperature control is enabled, the stack current magnitude changes and becomes steady when the actual coolant temperature becomes equal to the coolant temperature setpoint or falls within the coolant temperature threshold of the coolant temperature setpoint.

The various embodiments described above provide variation in stack current request based on state charge of battery and enabling a smart idle function for controlling coolant temperature of the fuel cell when the coolant temperature falls below a coolant temperature setpoint. Additionally, a <NUM>% debouncing may be implemented while switching between different stack current levels. These two control strategies may be combined to facilitate making fuel cell operation more robust, stable, and easier to maintain, in comparison to systems where stack current is changed based on truck power demands and a smart idle is not included.

<FIG> shows a block diagram of a system <NUM> associated with a fuel cell <NUM> (<FIG>) for controlling and/or modulating a stack current, such as a stack current value created by a fuel cell stack <NUM> requested by a stack controller <NUM>, in accordance with one or more embodiments of the present disclosure. The system <NUM> includes an enabler controller <NUM>, a temperature difference controller <NUM>, and a stack controller <NUM>. The enabler controller <NUM> may be configured to command the stack controller <NUM> to control the fuel cell stack <NUM> to create an electrical current. The temperature difference controller <NUM> may be configured to calculate a difference between an actual coolant temperature and a coolant temperature setpoint and create an error value that is input into the stack controller <NUM> as described below. The temperature difference controller <NUM> may also provide coolant temperature and coolant temperature setpoint information to the enabler controller <NUM>. The stack controller <NUM> is configured to cause the fuel cell stack <NUM> to output a requested stack current magnitude based on inputs from the enabler controller <NUM> and the temperature difference controller <NUM> as described below.

A battery state of charge system <NUM>, a fan speed determination system <NUM>, and an ambient temperature sensor <NUM>, which may comprise a thermocouple, thermometer, or other suitable device, are configured to provide inputs into the enabler controller <NUM>.

The coolant temperature setpoint system <NUM> defines a coolant temperature setpoint as is known in the art for efficient operation of a fuel cell. For example, the coolant temperature setpoint system <NUM> may be configured to monitor a chemical reaction inside the fuel cell and output setpoints that are optimal for the chemical reaction. Some of the monitored factors for the chemical reaction may include coolant temperature, coolant temperature difference before entering the fuel cell stack <NUM> and after leaving the fuel cell stack <NUM>, cathode airflow, and the position of hydrogen valves in either on or off positions. The coolant temperature setpoint established by the coolant temperature setpoint system <NUM> may be affected by one or more of a dew point temperature of cathode inlet air, a stack current value, actual coolant temperature, an average stack cell voltage, or other suitable factors.

The coolant temperature sensor <NUM> provides inputs into the temperature difference controller <NUM>. The temperature difference controller <NUM> also receives inputs from the coolant temperature setpoint system <NUM>.

A fuel cell <NUM> may also comprise an air compressor <NUM> and a fan <NUM> (<FIG>). The air compressor <NUM> may blow air into the fuel cell <NUM> for use in the chemical reaction that creates electricity and the fan <NUM> may be configured to cool the fuel cell <NUM>. The fuel cell <NUM> may be used to supply power to charge a battery <NUM>. Energy from the battery <NUM> may be used to power an industrial vehicle, such as a forklift, or other suitable vehicle.

While the components of system <NUM> are illustrated as separate from each other, one skilled in the art will understand that such components may be separate as illustrated, or one or more components can be physically included on the same controller, or otherwise be suitably co-located.

During fuel cell operation, the stack controller <NUM> commands stack current magnitudes from the fuel cell stack <NUM>. The commanded stack current magnitude, typically measured in amperage, from the stack controller <NUM> may be based on the state of charge of a battery <NUM> that is charged by the fuel cell stack <NUM>. As a hypothetic example, if the battery state of charge is relatively low, <NUM>% for example, a relatively high stack current, <NUM> amps for example, may be commanded. Or, if the battery state of charge is relatively high, <NUM>% for example, a relatively low stack current, <NUM> amps for example, may be commanded. Under normal operating conditions, commanded stack current magnitudes vary depending on the state of charge of the battery being charged by the fuel cell <NUM> as described above.

Continuing the hypothetic example, it is possible for a fuel cell to operate in a relatively hot environment. Because electricity, water, and waste heat are typically created during fuel cell operation, operation in a hot environment based on the state of charge of a battery may not be feasible because such operation may exceed the cooling capabilities of the fuel cell <NUM>. In such an instance it may be beneficial to limit the current created by the fuel cell stack <NUM> to inhibit overheating the fuel cell. By limiting the current to a stack current ceiling, a lesser current magnitude may be commanded from the fuel cell stack <NUM> than the current that would otherwise be commanded based on the battery state of charge. Using such a stack current ceiling may charge the battery <NUM> more slowly, but a lesser amount of waste heat may also be generated by the fuel cell stack <NUM> which may facilitate cooling the fuel cell <NUM> to maintain efficient operation.

<FIG> shows a flowchart depicting an example smart ceiling process <NUM> for controlling the stack current magnitude of the fuel cell stack <NUM>, in accordance with one or more embodiments of the present disclosure. The process <NUM> starts at step <NUM> where a battery <NUM> state of charge is transmitted from the battery state of charge indicator <NUM> to the enabler controller <NUM>, a fan speed is transmitted from the fan speed system <NUM> to the enabler controller <NUM>, and a coolant temperature is transmitted from the coolant temperature sensor <NUM> to the enabler controller <NUM>.

Then enabler controller <NUM> assesses the battery state of charge, the fan speed, and the coolant temperature at steps <NUM>, <NUM>, and <NUM>, respectively, to determine whether commanding a stack current under a normal operation should be performed or whether commanding a stack current smart ceiling should be implemented. At step <NUM>, a stack current under a normal operation is determined by the enabler controller <NUM> based on the battery <NUM> state of charge. Normal operation may include step-wise current control with debounce ranges as described above.

At step <NUM>, the enabler controller <NUM> compares the fan speed received from the fan speed system <NUM> against a threshold fan speed. The threshold fan speed may be, for example, <NUM>%, <NUM>%, or other suitable percentage of the full speed of which the fan <NUM> is capable. If the fan speed is below the threshold fan speed the enabler controller <NUM> continues on the "No" branch from step <NUM> and commands the stack controller <NUM> to request the stack current magnitude determined in step <NUM> from the fuel cell stack <NUM>. However, if the enabler controller <NUM> determines that the fan speed is above the threshold fan speed the enabler controller <NUM> then determines whether the fan speed has exceeded the threshold fan speed for a predetermined time-period. For example, the predetermined time-period may be <NUM> seconds, <NUM> seconds, or other suitable amount of time. If the fan speed has been above the threshold fan speed, but for a time that is less than the predetermined time-period, the enabler controller <NUM> continues on the "No" branch from step <NUM> and commands the stack controller <NUM> to request the stack current magnitude determined in step <NUM> in the fuel cell stack <NUM>. If the fan speed has been above the fan speed threshold for an amount of time equal to or greater than the predetermined time-period the enabler controller <NUM> proceeds to step <NUM>.

At step <NUM>, the enabler controller <NUM> compares the coolant temperature received from the coolant temperature sensor <NUM> against the coolant temperature setpoint received from the setpoint setter <NUM>. If the coolant temperature is below the coolant temperature setpoint the enabler controller <NUM> continues on the "No" branch from step <NUM> and commands the stack controller <NUM> to request the stack current magnitude determined in step <NUM> from the fuel cell stack <NUM>. However, if the enabler controller <NUM> determines that the coolant temperature is above the coolant temperature setpoint threshold, for example, <NUM> to <NUM>, inclusive of the endpoints, above the coolant temperature setpoint, the enabler controller <NUM> then determines whether the coolant temperature has exceeded the coolant temperature setpoint threshold for a predetermined time-period. In other embodiments the controller <NUM> may simply determine whether the coolant temperature exceeds the coolant temperature setpoint. For example, the predetermined time-period may be <NUM> seconds, <NUM> seconds, or other suitable amount of time, which may be the same amount of time used at <NUM>. If the coolant temperature has been above the coolant temperature setpoint, but for a time that is less than the predetermined time-period, the enabler controller <NUM> continues on the "No" branch from step <NUM> and commands the stack controller <NUM> to request the stack current magnitude determined in step <NUM> from the fuel cell stack <NUM>. If the coolant temperature has been above the coolant temperature setpoint for an amount of time equal to or greater than the predetermined time-period the enabler controller <NUM> proceeds to step <NUM>.

At step <NUM> a stack current ceiling is established. A stack current ceiling may be beneficial when the fuel cell <NUM> is operating in a relatively high temperature environment, for example, <NUM> or higher, <NUM> or higher, or other suitable temperature, and the battery <NUM> state of charge is relatively low, for example, <NUM>% or less, <NUM>% or less, or other suitable state of charge. Under such conditions, normal operation for the fuel cell <NUM> attempts to implement a relatively high stack current magnitude to charge the battery <NUM> as quickly as possible. However, doing so may overheat the fuel cell <NUM> if the cooling system is not able to cope with both the relatively high ambient temperature and the waste heat generated by implementing a relatively high stack current magnitude. Implementing a stack current magnitude ceiling may generate a lesser amount of waste heat and enable the fuel cell <NUM> to charge the battery <NUM> as quickly as possible without overheating.

At step <NUM> the controller <NUM> accesses a lookup table that contains a list of ambient temperatures and corresponding stack current magnitudes. In some example embodiments, the current values in the lookup table may be populated by test data of thermally stable current magnitudes at various ambient temperatures. Such a look up table may be the same look up table discussed above or may be a separate look up table associated with the controller <NUM> or with another suitable controller. Ambient temperatures may be atmospheric ambient temperature surrounding fuel cell <NUM>, ambient temperature within the fuel cell <NUM>, or other suitable ambient temperature. Each stack current magnitude is designated as a stack current magnitude that is likely to result in the fuel cell <NUM> operating in the corresponding ambient temperature where the fuel cell <NUM> may achieve the coolant temperature reaching the coolant temperature setpoint. Based on the ambient temperature the enabler controller <NUM> uses the lookup table to find, or interpolate, a corresponding stack current magnitude to use as the initial stack current magnitude ceiling. Other suitable methods for selecting or determining an initial stack current magnitude ceiling may be used. Still at step <NUM>, the stack current magnitude is ramped at a predetermined rate, such as <NUM> amp per second, until the stack current ceiling magnitude is reached.

At step <NUM> the controller <NUM> compares the stack current magnitude ceiling against the stack current magnitude determined in step <NUM>. If the stack current magnitude determined in step <NUM> is less than the stack current magnitude ceiling the stack ceiling routine is disabled at step <NUM>, the stack current magnitude is ramped at a predetermined rate, such as <NUM> amp per second, until the stack current magnitude determined in step <NUM> is reached, and processing returns to steps <NUM>, <NUM>, and <NUM>.

At step <NUM>, if the stack current magnitude determined in step <NUM> is greater than the stack current magnitude ceiling processing moves to step <NUM> where the controller <NUM> determines whether the fan speed received from the fan speed system <NUM> is less than a predetermined threshold, for example, <NUM>% of the fan's rated maximum speed. Such predetermined threshold at step <NUM> may be the same as the predetermined threshold used at step <NUM>, or it may be a different predetermined threshold. If the fan speed is greater than the predetermined threshold processing continues at step <NUM> where the magnitude of the stack current ceiling may be lowered before returning to step <NUM>.

However, at step <NUM> if the fan speed is less than the predetermined threshold, the controller <NUM> then determines whether the fan speed has been less than the predetermined threshold for a predetermined time-period, for example, <NUM> seconds or other suitable time. If the fan speed has not been below the predetermined threshold for the predetermined time-period processing continues at step <NUM> where the magnitude of the stack current ceiling may be lowered before returning to step <NUM> as described above. If the fan speed has been below the predetermined threshold for the predetermined time-period processing continues to step <NUM>.

At step <NUM>, the controller <NUM> determines whether the coolant temperature received from the coolant temperature sensor <NUM> is less than the coolant temperature setpoint received from the setpoint setter <NUM>. If the coolant temperature is greater than the coolant temperature setpoint processing continues at step <NUM> where the magnitude of the stack current ceiling may be lowered before returning to step <NUM> as described above. If the coolant temperature is less than the coolant temperature setpoint, the controller <NUM> then determines whether the coolant temperature has been less than the coolant temperature setpoint for a predetermined time-period, for example, <NUM> seconds. The predetermined time-period for the fan speed to be below a predetermined threshold and the predetermined time-period for the coolant temperature to be below the coolant temperature setpoint may be the same amount of time, or different amounts of time. If the coolant temperature has not been below the coolant temperature setpoint for the predetermined time-period processing continues at step <NUM> where the magnitude of the stack current ceiling may be lowered before returning to step <NUM> as described above. If the coolant temperature has been below the coolant temperature setpoint for the predetermined time-period processing continues to step <NUM> where the stack ceiling routine is disabled and the stack current magnitude is ramped at a predetermined rate, such as <NUM> amp per second, until the stack current magnitude determined in step <NUM> is reached, and processing returns to steps <NUM>, <NUM>, and <NUM>.

Consider the following hypothetic example. A forklift truck including a battery charged by a hydrogen fuel cell may be equipped with a system, such as system <NUM>. Under normal operating conditions, the stack controller <NUM> provides a stack current magnitude to request from the fuel cell stack <NUM> where the stack current magnitude is determined based on the state of charge of the battery <NUM>. For example, if the state of charge of the battery <NUM> is <NUM>% the controller <NUM> may set the stack current magnitude to a maximum amount, such as <NUM> amps, using normal operation processes as described above with respect to <FIG> and <FIG>. On the other hand, if the battery <NUM> state of charge is <NUM>% the controller <NUM> may set the stack current magnitude to a minimum amount, such as <NUM> amps. Under normal operating conditions as described above with respect to <FIG> and <FIG>, the cooling system for the fuel cell <NUM> comprising a fan <NUM>, radiator (not illustrated) and other related components, is able to maintain the coolant temperature at or near the coolant temperature setpoint which varies according to operating conditions for the fuel cell <NUM>.

However, if the forklift truck is operating in a relatively high temperature environment, such as <NUM> and the battery <NUM> state of charge is relatively low, for example between <NUM>% to <NUM>% the stack current magnitude desired under normal operating conditions may not be feasible because operating at such a stack current magnitude may produce more waste heat in the hot environment than the fuel cell's cooling system can dissipate.

Continuing the hypothetic example in a <NUM> environment with a <NUM>% state of charge for the battery, the controller <NUM> may provide a stack current magnitude of <NUM> amps to request from the fuel cell stack <NUM>. As the fuel cell stack <NUM> generates the <NUM> amps it also produces waste heat. In response, the cooling fan <NUM> may begin operating at higher fan speeds to dissipate the heat. However, because of the hot environment the cooling system is less efficient than it is when operating in a cooler environment, so the fan speed continues to increase. At the same time, the fuel cell coolant temperature also increases.

At some point, the fan speed crosses a predefined threshold, which may be, for example, a fan speed above <NUM>% of the rated maximum fan speed, a fan speed above <NUM>% of the rated maximum fan speed, a fan speed above <NUM>% of the rated maximum fan speed, or other suitable threshold. Before the fan speed has exceeded the predetermined threshold for a predetermined time-period, for example, <NUM> seconds, <NUM> seconds, <NUM> seconds, <NUM> seconds, or other suitable time-period, the controller <NUM> continues to provide a stack current request of <NUM> amps to the stack <NUM>.

Eventually, the fan speed exceeds the predefined threshold for the predefined time-period and the controller <NUM> assesses the coolant temperature. If the cooling system is not able to keep up with the heat dissipation demands created by operating at <NUM> amps in the <NUM> environment the coolant temperature will exceed the coolant temperature setpoint provided by the setpoint setter <NUM>. With the fan speed exceeding the predetermined threshold for longer than the predetermined time-period, but before the coolant temperature has exceeded the coolant temperature setpoint for a predetermined time-period, for example, <NUM> seconds, <NUM> seconds, <NUM> seconds, <NUM> seconds, or other suitable time-period, the controller <NUM> continues to provide a stack current request of <NUM> amps to the stack <NUM>.

However, once both the fan speed exceeds the predetermined threshold for longer than the predetermined time-period and the coolant temperature exceeds the coolant temperature setpoint, or a coolant temperature setpoint upper threshold, for a predetermined time-period a stack current magnitude ceiling is used to replace the maximum stack current magnitude (assuming that the battery state of charge is now <NUM>% and thus remains in the range where a maximum stack current would be commanded under normal operating conditions).

The controller <NUM> accesses a look-up table to obtain, or interpolate, a stack current magnitude to use as the stack current ceiling based on operating in an ambient temperature of <NUM>. Based on a <NUM> environment the controller <NUM> may set a current value of <NUM> amps as the initial stack current magnitude ceiling. The controller <NUM> then provides the stack current magnitude ceiling of <NUM> amps to the stack the fuel cell stack <NUM> which ramps its current magnitude from <NUM> amps to <NUM> amps at a rate of <NUM> amp per second, or other suitable ramp rate.

Once the fuel cell stack <NUM> is producing a current equal to the stack current magnitude ceiling of <NUM> amps the controller <NUM> compares the stack current magnitude ceiling against the current magnitude that would be commanded if the fuel cell <NUM> were operating under normal conditions. For example, if the battery <NUM> had charged sufficiently such that the maximum current magnitude for the fuel cell stack <NUM> is no longer applicable, for example, a battery state of charge of <NUM>%, and the stack current magnitude based on a <NUM>% state of charge is <NUM> amps, the controller <NUM> would request the current of <NUM> amps from the fuel cell stack <NUM> to ramp its current from <NUM> amps to <NUM> amps at a rate of <NUM> amp per second. Normal operation for the stack current would then ensue, that is, the stack current magnitude provided by the controller <NUM> would be based on the battery state of charge as described above with reference to <FIG> and <FIG>. On the other hand, if the battery state of charge is low enough, <NUM>%-<NUM>% for example, such that a current above <NUM> amps would be commanded under normal operating conditions the controller <NUM> maintains the <NUM> amp request to the stack <NUM> and begins monitoring the fan speed and coolant temperature again.

If the fan speed continues exceeding a predefined threshold for a predefined time-period, which may be a continuation of the previously used predefined threshold and predefined time-period, or may be a separate predefined threshold and/or predefined time-period, the controller <NUM> receives a coolant temperature error from the temperature difference controller <NUM>. Based on this error, the controller <NUM> modifies the stack current magnitude ceiling. For example, if the error indicates that the coolant temperature is above the coolant temperature setpoint, or above a coolant temperature threshold with respect to the setpoint, the controller <NUM> may change the stack current magnitude ceiling from <NUM> amps to <NUM> amps. On the other hand, if the error indicates that the coolant temperature is at or below the coolant temperature setpoint, or a coolant temperature threshold with respect to the setpoint, the controller <NUM> may change the stack current ceiling magnitude from <NUM> amps to <NUM> amps.

The controller <NUM> then compares the new stack current ceiling magnitude against the current magnitude that would be commanded if the fuel cell <NUM> were operating under normal conditions. Assuming that the new stack current magnitude ceiling is <NUM> amps and the battery state of charge is now <NUM>% with a corresponding normal condition stack current of <NUM> amps the controller <NUM> continues this loop until either (<NUM>) the stack current magnitude ceiling becomes a greater value than the normal condition stack current magnitude that would be commanded based on the state of charge of the battery <NUM> as described above, in which case the controller <NUM> returns to normal operation and setting the stack current magnitude based on the battery state of charge, or (<NUM>) the fan speed either does not exceed the predetermined threshold, or exceeds the predetermined threshold, but for a time less than the predetermined time-period.

If condition (<NUM>) in the preceding paragraph is met, the controller <NUM> monitors the coolant temperature as long as condition (<NUM>) continues to be met. If the coolant temperature continues exceeding the coolant temperature setpoint for a predefined time-period, which may be a continuation of the previously used predefined time-period, or may be a separate predefined time-period, the controller <NUM> receives a coolant temperature error from the temperature difference controller <NUM>. Based on this error, the controller <NUM> modifies the stack current magnitude ceiling. For example, if the error indicates that the coolant temperature is above the coolant temperature setpoint the controller <NUM> may change the stack current magnitude ceiling from <NUM> amps to <NUM> amps. On the other hand, if the error indicates that the coolant temperature is at or below the coolant temperature setpoint the controller <NUM> may change the stack current ceiling from <NUM> amps to <NUM> amps.

The controller <NUM> then compares the new stack current magnitude ceiling against the current magnitude that would be commanded if the fuel cell <NUM> were operating under normal conditions. Assuming that the new stack current magnitude ceiling is <NUM> amps and the battery state of charge is now <NUM>% with a corresponding normal condition stack current of <NUM> amps the controller <NUM> continues this loop until either (<NUM>) the stack current magnitude ceiling becomes a greater value than the normal condition stack current magnitude that would be commanded based on the state of charge of the battery <NUM>, in which case the controller <NUM> returns to normal operation and setting the stack current magnitude based on the battery <NUM> state of charge as described above, or (<NUM>) the coolant temperature either does not exceed the coolant temperature setpoint, or exceeds the coolant temperature setpoint, but for a time less than the predetermined time-period.

If condition (<NUM>) in the preceding paragraph is met, the controller <NUM> returns to normal operation and setting the stack current magnitude based on the battery <NUM> state of charge as described above.

<FIG> shows a flowchart of a method <NUM> of controlling the stack current magnitude in accordance with one or more embodiments of the present disclosure. The method <NUM> may be performed by the system <NUM>. At block <NUM>, the method <NUM> includes obtaining the fan speed, and the coolant temperature. Further, at block <NUM>, the method <NUM> includes comparing the fan speed, and the coolant temperature with their respective thresholds. For instance, the comparison is performed to determine if the fan speed is greater than the threshold fan speed value, such as <NUM>% of the fan's rated maximum speed, for a predefined time-period, such as <NUM> seconds, and if the coolant temperature is greater than the coolant temperature setpoint, such as <NUM>, for the predefined time-period, such as <NUM> seconds.

At block <NUM>, the method <NUM> includes initiating controlling the coolant temperature based on the comparison performed at <NUM>. For instance, a stack current ceiling function may be enabled to provide control of the stack current magnitude for the fuel cell stack <NUM> when both the fan speed exceeds the threshold fan speed value and the coolant temperature exceeds the coolant temperature setpoint, for their respective predefined time-periods, which may be the same time-period, or may be different time periods. For example, a stack current ceiling may be established based on a look-up table that correlates thermally stable currents for different ambient temperatures, or other suitable method may be used to establish a stack current ceiling. Further, at block <NUM> the method <NUM> includes controlling the stack current ceiling based on the stack current ceiling value determined at step <NUM>. For example, the error value, i.e., the difference between the coolant temperature and the coolant temperature setpoint may be determined and used to modify the stack current ceiling created at step <NUM>. For instance, an initial stack current ceiling value, such as 120A may be initialized based on an ambient temperature (e.g., <NUM>) and a lookup table that includes the current values corresponding to a variety of ambient temperatures. Then the current commanded from the fuel cell stack <NUM> is ramped down from the operating current magnitude to the stack current ceiling magnitude at a steady rate, for example, <NUM> A/s. When the stack current is ramped down to the stack current ceiling, the error between the coolant temperature setpoint and the actual coolant temperature is used to continuously modify the stack current ceiling, and at the same time fan speed and coolant temperature are monitored to determine whether to resume normal operation for establishing the stack current based on the battery state of charge.

Furthermore, at block <NUM>, the method <NUM> includes abandoning the stack current ceiling and resuming control of the stack current based on the battery state of charge as described above when (<NUM>) the fan speed is below the threshold fan speed value and the coolant temperature is below or at the coolant temperature setpoint for their respective predefined time-periods, or (<NUM>) the stack current that would be commanded based on the battery state of charge is less than the stack current ceiling. Abandoning the stack current ceiling is followed by ramping the stack current up to the normal operation current at a steady rate, for example, <NUM> A/s.

<FIG> shows a hypothetic diagrammatic representation <NUM> of various plots depicting variation of different parameters during the controlling of the stack current magnitude in accordance with one or more embodiments of the stack ceiling control described above. A curve <NUM> represents a variation of a requested stack current magnitude in response to enabling and disabling the stack current smart ceiling function. A curve <NUM> represents a variation of the fan speed in response to enabling and disabling the stack current ceiling function. A curve <NUM> represents a variation of the actual coolant temperature in response to enabling and disabling the stack current ceiling function. A curve <NUM> represents a variation of the coolant temperature setpoint. A curve <NUM> represents enabling and disabling the stack current ceiling function.

It may be observed from the curves <NUM>, <NUM>, <NUM>, <NUM>, and <NUM> shown in <FIG> that the stack current ceiling function may be enabled when both the fan speed is greater than the threshold fan speed value and the actual coolant temperature is greater than the coolant temperature setpoint, for their respective predefined time-periods. When the stack current ceiling function is enabled the stack current magnitude requested is ramped down from an operational stack current magnitude to a stack current ceiling magnitude such that the actual coolant temperature eventually becomes equal to the coolant temperature setpoint. Also, it may be observed from the curve <NUM> that when the stack current ceiling function is enabled the stack current changes and becomes steady when the fan speed is less than the threshold fan speed value and the actual coolant temperature is below or equal to the coolant temperature setpoint for their respective predefined times, for example, <NUM> seconds. Further, from the curves <NUM> and <NUM>, it may be noted that the fan speed decreases when the actual coolant temperature decreases or becomes equal to the coolant temperature setpoint for a predefined time-period. The actual coolant temperature decreases or becomes equal to the coolant temperature setpoint when the fuel cell generates less waste heat while charging the battery. The fuel cell may not require dissipating such lesser amount of waste heat resulting in the fan speed decreasing, as is shown in the curve <NUM>. In this manner, enabling the stack current ceiling function at the right time and right conditions of the fan speed and the coolant temperature may facilitate the battery and the fuel cell attaining a suitable operating condition. The suitable operating condition may be one or more of an ambient temperature inside of the fuel cell, a maximum power output of the fuel cell, a desired operating temperature of the fuel cell, or other suitable condition.

There may be situations where the stack current ceiling function may not be enabled to attain the suitable operating condition. For instance, the battery may be depleted, such as the battery SOC at <NUM>%, and the fuel cell may be heated up, for example, the coolant temperature being significantly above the coolant temperature setpoint, for example by <NUM> to <NUM>. In such instance, an operator (e.g., an automated operator or a manual operator) of a vehicle (e.g., an automated vehicle, a semi-automated vehicle or a manually operated vehicle) may be notified of the drained battery and the heated fuel cell. To that end, some functionalities of the vehicle may be disabled for some time. For instance, the functionalities, such as speed limit of the vehicle, acceleration of the vehicle, and/or hydraulic lift of the vehicle may be disabled for <NUM> minutes to cool down the battery and the fuel cell and attain the suitable operating condition.

The various embodiments described above provide variation in stack current magnitude request based on one or more of state charge of a battery, enabling a smart idle function for controlling coolant temperature of the fuel cell when the coolant temperature falls below a coolant temperature setpoint, and enabling a smart ceiling function for controlling coolant temperature of the fuel cell when the coolant temperature rises above a coolant temperature setpoint, singularly, or in any combination. Additionally, a <NUM>% debouncing may be implemented while switching between different stack current levels during normal operation. These three control strategies may be combined to facilitate making fuel cell operation more robust, stable, and easier to maintain, in comparison to systems where stack current is changed based on truck power demands and/or a smart idle and a smart ceiling are not included.

Claim 1:
A method for requesting a current magnitude from a fuel cell, the method comprising:
based at least on one of a battery state of charge, a coolant temperature, and a fan speed, determining whether to operate under normal processing, smart idle processing, or smart ceiling processing;
if a determination is made for normal processing requesting a current magnitude from the fuel cell, where the current magnitude requested is based at least on the battery state of charge and is performed in a stepwise manner where each current magnitude step includes a debounce range with respect to at least one other current magnitude step and outputting by the fuel cell the requested current magnitude;
if a determination is made for smart idle processing requesting a current magnitude from the fuel cell, where the current magnitude requested is based at least on the battery state of charge and the coolant temperature and the current magnitude requested is sufficiently high to raise the coolant temperature towards a coolant temperature setpoint and outputting by the fuel cell the requested current magnitude; and
if a determination is made for smart ceiling processing requesting a current magnitude from the fuel cell, where the current magnitude requested is based on at least a fan speed and the coolant temperature and the current magnitude requested is sufficiently low to reduce the coolant temperature towards a coolant temperature setpoint and outputting by the fuel cell the requested current magnitude.