US 20030011332 A1
A fan module includes integral fan control circuitry which independently implements a self-contained start and run motor control loop and also includes a communications port to accept commands from a host processor and to provide status and other data in response to queries from the host processor. In one embodiment, the fan module interfaces with a two-wire serial bus, such as an 12C bus or SMbus, and accepts commands and provides status and data in a serial digital format. A variety of commands such as on/off, and various speed control settings may be received from the host system. The actual speed of the fan may be reported back when queried by the host system. In some embodiments the temperature of the fan or of the air flow through the fan may be reported bark when queried. The entire fan control circuit may be incorporated within the fan housing and a simple serial two-wire interface may be provided in addition to the two power terminals for the fan, resulting in a compact four-wire interface for the fan module.
1. A cooling module comprising:
a cooling device;
a cooling module circuit comprising:
a cooling device control circuit;
at least one communications port;
wherein each communications port is adapted to receive at least one command; and
wherein said cooling device control circuit is adapted to control the cooling device's operation at least partially responsively to received commands.
2. The module of
3. The module of
4. The module of
at least one power supply voltage terminal;
at least one reference voltage terminal; and
at least one communications port terminal.
5. The module of
6. The module of
7. The module of
8. The module of
9. The module of
10. The module of
11. The module of
12. The module of
13. The module of
14. The module of
15. The module of
16. The module of
17. The module of
18. The module of
19. A computing device comprising at least one cooling module of
20. A network comprising at least one computing device of claim 19.
 This application claims the benefit of and is a continuation of U.S. Nonprovisional application Ser. No. 09/540,291, entitled, “Brushless DC Fan Module Incorporating Integral Fan Control Circuit With a Communication Port For Receiving Digital Commands to Control Fan.”
 The benefit of 35 U.S.C. §120 is claimed for all of the above referenced commonly owned applications. The contents of the applications referenced in the tables above are not necessarily identical to the contents of this application.
 Any references cited hereafter are incorporated by reference to the maximum extent allowable by law. To the extent a reference may not be fully incorporated herein, it is incorporated by reference for background purposes and indicative of the knowledge of one of ordinary skill in the art.
 1. Field of the Invention
 The present invention relates to the control of brushless DC motors, and particularly relates to the control of brushless DC motors within fan modules of a type suitable for use in personal computers and similar electronic equipment.
 2. Description of Related Art
 Brushless DC fans have found wide use in cooling electronic equipment such as personal computers. Such fans incorporate a brushless DC motor (BLDC motor) which includes a stationary armature. At least two winding stages are configured around an armature core to provide a predetermined number of poles, and permanent magnets are mounted on the rotor of the fan. Frequently such fans incorporate two winding stages which are arranged to generate four magnetic poles in the armature, although greater numbers are possible. A traditional two-terminal BLDC fan motor usually incorporates circuitry to electronically commutate the winding stages to operate the motor at its full speed for the particular power supply voltage applied. Such circuitry frequently incorporates a rotor sensor to determine when the rotor has rotated sufficiently for the next winding stage to be energized. BLDC motors are also frequently known as electronically commutated motors.
 BLDC fans have significant advantages over other kinds of fans. There is no rotating commutator or brush assembly as with traditional DC motors. Consequently, much fewer dust particles are generated which, if shed, may contaminate the equipment. There are fewer parts to wear out, and there is much less ignition noise than with a brush assembly. Furthermore, the magnetic coils of a BLDC motor are mounted on a rigid frame which improves the thermal dissipation of the motor and provides for greater structural integrity of the motor. BLDC fan motors are also much more electrically quiet than other kinds of motors previously used.
 Despite all of these advantages, BLDC motors typically still wear out faster than the electronic systems they are included to protect. Mainly, such wear-out is caused by a failure of the bearings supporting the rotor assembly. Also, any fan generates acoustic noise which may be ergonomically displeasing to an operator of equipment incorporating such a fan. Likewise the all fans, the fan may become blocked by foreign matter, or filters included in the air flow path generated by the fan may become increasingly clogged with particulate matter which results in a higher strain on the motor driving the fan, and ultimately, an inability of the fan to provide the air flow for which the system was designed.
 To reduce the detrimental aspects of using BLDC fans, fan-speed management has proven useful to drive such fans only when needed and only at a speed sufficiently useful to cool the system within which the fan is incorporated. Such fan-speed management results in less acoustic noise either, because the fan is totally off at certain times or is throttled to a much lower speed for a typical operation than its maximum speed which is only driven in a worst-case cooling demand. By throttling back the power of a BLDC fan, significant power dissipation is also saved, which is particularly important in battery-powered systems.
 There are a variety of ways that BLDC motors, and particularly BLDC fans, have been controlled in attempt to provide fan-speed management. In its simplest implementation, such fans may be turned fully on or fully off. In a system incorporating such an on/off technique, the fan is turned on typically when a measured temperature somewhere in the system exceeds a first threshold limit, and the fan is turned off when that same temperature is below a second threshold limit (usually lower than the first threshold limit to provide hysteresis). This technique is effective when the fan is unnecessary for most operating conditions and may, therefore, be left off except in the most unusual circumstances. Nonetheless, such control has its drawbacks. For example, when the fan is on, it usually runs at full speed, in which case the acoustic noise is at its worst. Furthermore, if the temperature of the system hovers near the threshold temperatures, a displeasing frequent cycling of the fan may occur as the temperature is driven below the second threshold and allowed to rise above the first threshold with frequent cycling of the power to the fan.
 In many systems, a temperature proportional cooling method has been devised to variably increase the speed of a cooling fan as a function of the heat generation or the temperature of the system to be protected. One method of controlling the speed of a brushless DC motor is to regulate the voltage powering the motor to a lower voltage than the nominal operating voltage that the motor is normally specified to require. Referring now to FIG. 1, a standard brushless BLDC motor 40 is shown having one power terminal tied to ground, and the other power terminal connected to a triple darlington transistor circuit (i.e., transistors 41, 42 and 43) to a 12-volt positive power supply voltage. A variable control voltage, indicated in the figure as a variable voltage 44, is applied to the control terminal of transistor 41 and the current is amplified by transistor 42, and yet again, by transistor 43, to provide on the power terminal 45 of the BLDC motor 40 a substantially fixed voltage which is a function of the control voltage 44. Raising the control voltage 44 similarly raises the voltage applied to terminal 45, which is usually about 1.5 volts below the control voltage 44. The current drawn through BLDC motor 40 is generally proportional to the voltage applied across the motor. For example, if the current drawn by BLDC motor 40 at 12 volts is 300 milliamps, the current drawn through the BLDC motor 40 will usually be approximately 150 milliamps if terminal 45 is instead controlled to a 6-volt level. The linear voltage regulator circuit shown in FIG. 1 has several advantages, not the least of which it is extremely easy to design. It provides for a fan speed decrease which is almost linear with decreasing voltage. However, the power dissipation in the voltage regulator itself is substantial. At low fan speeds, the power dissipation of the regulator circuit may actually exceed the power consumed by the fan. This suggests large transistors may be necessary, and external heat sinks may need to be provided to dissipate the heat generated by such a large amount of current flowing through a circuit with a large voltage drop across the same circuit. Generating all of this additional heat seems counter-productive to the purpose of having the fan incorporated within the system in the first place. Consequently, such a linear voltage regulator fan-speed control has found decreasing use in recent years. Nonetheless, such a circuit does extend fan life if the system is designed to rarely require the fan to operate at full speed. Likewise, controlling the fan in this fashion may reduce acoustic noise typically generated by the system.
 Another method of controlling the speed of a brushless DC motor involves chopping the power to intermittently apply full power to the motor at certain times, and applying no power to the motor at other times. This is usually accomplished with a relatively low-frequency (30-250 Hz) pulse-width-modulated (PWM) signal. One terminal of the BLDC motor may be connected to one power supply, and the other terminal may be connected to ground through a power switching device which is driven appropriately by the PWM signal.
 Referring now to FIG. 2A, the brushless DC motor 40 discussed previously is here shown with one terminal connected to a +12 volt source of voltage and a second terminal 54 coupled through an MOS transistor 50 to ground. The gate of transistor 50 is generated by a pulse-width-modulated signal generator 51, which is responding to a control signal for controlling the speed of the BLDC motor 40. By using the pulse-width-modulated signal coupled to the gate of driver transistor 50, and assuming that transistor 50 is sized appropriately large, the average power consumed by transistor 50 is much lower than in the linear voltage regulator circuit described in FIG. 1. This occurs because driver transistor 50 is either fully turned on or fully turned off. When it is turned on by the pulse-width-modulated signal coupled to its gate terminal, the drain to source voltage is quite low (e.g., 0.5 volts) because the fan motor terminal 54 is pulled nearly to ground. While there may be significant amount of current flowing through driver transistor 50, there is not a large voltage drop across driver transistor 50, and so the instantaneous power during this portion of a cycle is very low. When driver transistor 50 is off, of course, no current flows, and there is no power dissipated instantaneously by driver transistor 50. Such a pulse-width-modulated speed control of a brushless DC motor, such as for a fan, has found wide use because of the much lower power dissipation compared to linear voltage regulator schemes, and due to the fact that a pulse-width- modulated signal at a 30 to 250 Hz rate is easily generated in either hardware or software and at very low cost.
 Refining now to FIG. 2B a similar circuit is shown incorporating a bipolar driver transistor 52, having a current limiting base resistor 53 connecting the output of the pulse-width-modulated signal generator 51 to the base terminal of transistor 52 to set the drive current into the base terminal and, consequently, provide for sufficient collector to emitter current through driver transistor 52 to fully support the current flow necessary through brushless DC motor 40.
 A great many commercially available integrated circuits have been developed to generate useful pulse-width-modulated signals for controlling, in configurations similar to those shown in FIG. 2A and FIG. 2B, the speed of a brushless DC motor. Some of these circuits include temperature sensors which may be configured in a closed loop fashion to automatically control the speed of such a connected fan as a function of the locally measured temperature. Others of these integrated circuits include provisions for communicating with the whole system. Some generate the PWM signal to drive (either directly or through a buffering circuit) one of the power terminals of a standard two-terminal BLDC fan. Others generate a simple on/off control which may be used to control current through a BLDC fan.
 Some types of brushless DC fans include a brushless DC motor which provides a tachometer output terminal. A pulse signal is generated on the tachometer terminal by the fan as a function of the internal self-commutation of the winding stages occurring internal to the fan. By sensing the various pulses generated on the tachometer output, the rotational speed of the fan may be determined, and an RPM (revolutions per minute) indication may be computed, or a fault condition, such as a stuck or looked rotor, may also be detected. Other commercial devices have been developed which provide a similar tachometer output or tachometer capability when using standard two-terminal brushless DC motors without a built-in tachometer output. Most such circuits generate the tachometer indication by including a low-valued resistor in the current path powering the fan motor. A voltage pulse across the resistor is generated when the commutation internal to the fan occurs because of the brief interruption of current flow through the winding stages within the fan motor.
 Many commercial devices, particularly those incorporating temperature sensing capability, include provisions for sensing the speed of a fan, but lack any ability to control the speed of a fan. These are mostly used to sense alarm conditions, such as a clogged filter or an actually stuck rotor. One device, available from National Semiconductor Corporation, is known as the LM75. This device includes a serial interface compatible with the I2CJ interface standard (initially developed by, and a trademark of Philips Corporation) for communicating with a host system, and includes a temperature sensor and an on/off ouput for a fan control. The I2C interface, which is also similar to, largely compatible with, and known by many as the SMBus interface (popularized by Intel Corporation, Santa Clara, Calif., and widely supported by many other companies), is a popular two-wire serial interface, originally developed to provide power management control in battery-powered systems.
 Other devices incorporate such an I2C interface and include a digital to analog converter (DAC) for generating on an output pin an analog voltage which can be used to control the speed of a brushless DC fan. For example, the THMC50, available from Texas Instruments, Inc., can be used to provide a controllable analog voltage on an output pin, which voltage may be used either in a linear voltage regulator, as described in relation to FIG. 1, or to modulate the pulse width of a PWM signal for controlling fan speed, as described in relation to FIG. 2.
 One industry specification known as NLX calls for a zero to 10.5-volt analog signal which is used to set the fan speed. Controller integrated circuits are available to take this variable voltage signal and generate the pulse-width-modulated signal necessary to drive the power terminal of a fan motor. Such an analog control voltage may also be provided by a DAC output of a microcontroller or other device which may be incorporated within the system. And yet another standard, known as the EISCA standard, provides for the sensing of a variety of system voltages and system temperatures measured at several locations within the system, provides for a fan speed indication, and includes an I2C interface to communicate with the host processor. A great many industry-available devices provide for local and remote temperature sensing with an I2C bus interface. In another device available from Tracewell Systems, a Chassis Management Module product includes an I2C interface for communication with the host processor and a PWM channel output for each of two fans, for controlling each fan in a fashion as described in FIG. 2A and FIG. 2B. Yet another device, the LM78, available from National Semiconductor Corp., monitors temperature, voltage and fan speed, and includes an I2C interface.
 In spite of these seemingly highly-specialized commercial solutions for various temperature voltage sensing and fan speed sensing and/or control, a variety of problems remain. Most notably, the internal commutation of the winding stages within the BLDC motor is asynchronous to the external power modulation (i.e., the “power chopping”) of the fan power by the PWM signal driving the motor. The electrical noise is consequently worse. Also the tachometer output may only be generated when the motor is energized by the PWM signal. This makes RPM determinations more difficult, particularly when the fan speed is much slower than full rate. Worse, the tachometer signal may have spurious noise spikes associated with the beginning and the end of the power switching due to the PWM signal applied to the power terminals of the fan motor. This may result in erroneous determination of the actual fan rotational speed and RPM. Moreover, all of these solutions require additional integrated circuits and other discrete components in addition to the fan itself to provide the cooling solution sought to be achieved.
 Consequently, there is still a need for a better solution where thermal management, power control, sound level, and reliability are paramount.
 An improved fan module includes integral fan control circuitry which independently implements a self-contained start and run motor control loop and also includes a communications port to accept digital commands from a host processor and to optionally provide status and other data in response to queries from the host processor. In one embodiment, the fan module interfaces with an internal system management bus, such as the SMbus or I2C bus, and accepts commands and provides status and data in a serial digital format. A variety of commands such as on/off, and speed control settings may be received from the host system. The actual speed of the fan may be reported back when queried by the host system. In some embodiments the temperature of the fan or of the air flow through the fan may be reported back when queried.
 Such an improved fan module is highly useful for personal computers, workstations, servers, embedded systems, and other electronic systems incorporating fans for cooling. The entire fan control circuit may be incorporated within or attached to the fan housing and a simple serial two-wire interface may be provided in addition to the two power terminals for the fan, resulting in a compact four-wire interface for the fan module. In one embodiment of the invention, the power coupled to the BLDC motor is not regulated to lower voltages, nor is it chopped in a PWM fashion, but is maintained at the fixed power supply voltage provided to the fan module. The power supply voltage may be chosen from, for example, 7 volts to 30 volts. All speed control, as well as on/off control, is communicated to the fan via the serial interface, and the speed is controlled independently of the particular power supply voltage chosen.
 A fan module in accordance with the present invention affords all of the benefits previously achieved by varying the speed of brushless DC fans, such as enhanced ergonomics and enhanced reliability due to operating the fan speed, at least for a significant percentage of the time, at less than its full rated speed. In addition, however, system reliability is further enhanced by eliminating the requirement of additional integrated circuits and discrete components otherwise necessary to achieve the previously discussed forms of speed control. Moreover, by directly converting a digital speed command to appropriate signals driving the internal winding stages of the BLDC motor within the fan module, much less electrical noise is generated compared to that generated if chopping the power to a standard brushless DC fan motor. The digital command may include, for example, an eight-bit control word to indicate the desired speed, and consequently a much greater degree of control over the fan speed may be achieved than with other methods.
 Provision for responding to a variety of different commands may be designed into such a fan module and other capabilities included within its design. For example, the fan module my be designed to initially provide a default speed when first powered up (e.g,, full-rated speed) to ensure adequate cooling without requiring any digital commands communicated to the fan module. After reaching a run state at the default speed, the fan module may then be commanded to a different speed as required by the system. Other queries which may be incorporated within such a fan module include responding to a manufacture and model number request, responding to actual angular velocity or RPM of the fan providing the delta between the commanded speed and the actual speed, and others. This capability allows a host system to determine when the fan is unable to achieve the speed commanded, indicating a possible clogged filter or high bearing wear, and would further allow such a system to alert a maintenance provider to schedule periodic maintenance of the fan before an outright failure of the fan. The fan module may also be designed to respond to a command to operate in an automatic mode which increases fan speed appropriately as ambient airflow temperature or other self-determined temperature increases without requiring supervision by the host system.
 The present invention may be better understood, and its numerous objects, features, and advantages made apparent to those skilled in the art by referencing the accompanying drawings.
FIG. 1, labeled Prior Art is a schematic drawing illustrating a linear voltage regulation method of controlling the speed of a brushless DC motor.
FIG. 2A, labeled Prior Art, is a schematic drawing illustrating a pulse□width-modulated technique for chopping the power applied to a brushless DC motor to achieve speed control of the motor.
FIG. 2B, labeled Prior Art, is a schematic drawing illustrating another embodiment of a pulse-width-modulated technique similar to that shown in FIG. 2A.
FIG. 3 is a three-dimensional drawing illustrating a fan module in accordance with the present invention.
FIG. 4 is a block diagram illustrating major functional components of the fan module depicted in FIG. 3.
FIG. 5 is a schematic diagram illustrating one embodiment of fan control circuitry useful for the present invention.
FIG. 6 is a flowchart diagram illustrating, for an exemplary embodiment, a portion of the software incorporated within a microcontroller depicted in FIG. 5.
FIG. 7 is a flowchart diagram illustrating, for an exemplary embodiment, the processing of an interrupt by the microcontroller depicted in FIG. 5, and is a companion flowchart to that shown in FIG. 6.
FIG. 8 is a flowchart diagram illustrating, for an exemplary embodiment, various steps performed to adjust the speed of the brushless DC motor.
FIG. 9 is a flowchart diagram illustrating, for an exemplary embodiment, the steps performed to respond to a command received by the microcontroller depicted in FIG. 5.
FIG. 10 is a flowchart diagram illustrating, for an exemplary embodiment, various steps performed to service an interrupt request within the microcontroller depicted in FIG. 5.
FIG. 11 is a schematic diagram for a portion of a motor control block which includes additional capability to detect current flow through each winding stage within the brushless DC motor.
FIG. 12 is a schematic diagram for a portion of a motor control block which includes another circuit for detecting current flow through the winding stages within the brushless DC motor.
FIG. 13 is a functional block diagram illustrating major functional components of a fan module which includes an integral communications port and a power control circuit for a brushless DC motor.
 The use of the same reference symbols in different drawings indicates similar or identical items.
 Referring now to FIG. 3, a fan module 100 in accordance with the present invention is depicted. A fan housing 102 is shown and provides the traditional frame for the fan assembly. A rotor 104 is shown with a plurality of fan blades (one of which is labeled as 106) connected radially around the circumference of the rotor 104. Such a fan may include greater or lesser numbers of fan blades than depicted in FIG. 3. A stationary armature (not shown) is located in the center of fan housing 102, and in FIG. 3 is located below the rotor 104. The fan control circuitry, including a communications port for receiving digital commands, is integral to the fan module 100 and may be located within or attached to the fan housing 102, or may be wholly or partially located within the stationary armature in the center of the fan housing 102. A cable 110 is shown which provides a connection to terminal pins 112 (shown here with five terminal pins 112) which are connected to a connector 108. This connector 108 is plugged into a receiving socket to provide power to the fan module and to provide connections to the communication port as well. Other numbers of terminal pins 112 may also be advantageously implemented. All of the necessary control circuitry is preferably wholly contained within the fan module, and no external components are necessary to provide any direct control of the speed of the fan, nor for the actual control loop of the winding stages themselves. Alternatively, rather than a cable 110, a connector may be integrated within the fan housing 102 to receive a cabled connector.
 Referring now to FIG. 4, a functional block diagram is shown corresponding to the fan module 100 depicted in FIG. 3. A fan control circuit 121 includes a communication port 124 and a motor control circuit 127. Power for the fan control circuit 121 is provided on terminal 112 a and the reference potential, ground, is provided on terminal 112 b. The communications port 124, for this embodiment, provides for a two-wire serial interface. A serial clock is provided to the fan control circuit on terminal 112 c and a bi-directional serial data signal is communicated to and from the fan control circuit 121 on terminal 112 d. The serial clock and serial data signals are communicated directly to a serial interface 125 which communicates with a command interpreter 126, both of which are included within the communication port 124. An optional temperature sensor 134 may be included within the fan control circuit 121 to provide the capability of ascertaining a localized temperature within the fan module 100. Examples of various particularly useful commands include a Set□Desired-Fan-Speed command (indicating a desired speed setting which is chosen from a plurality of available speed settings), a Query-Actual-Fan-Speed command, a Pan□Off command, a Query-Actual-Temperature command, and others.
 The motor control circuit 127 includes a commutation control 128 which generates pulse-width-modulated signals on its outputs 129 a and 129 b, which are buffered by a driver 130 and coupled to energize the BLDC motor winding stages 122 by way of outputs 131 a and 131 b of the driver 130. Proper commutation of the motor winding stages 122 results in rotor movement which is sensed by a rotor position sensor 132 and communicated via node 133 to the commutation control 128. Consequently the commutation control 128, the driver 130 and the rotor position sensor 132, along with the motor winding stages 122, form a closed loop motor control. A FAULT signal may optionally be generated by the commutation control 128 to directly provide at an optional terminal pin 112 e an indication of a fault condition such as a stuck rotor or a rotor whose actual rotational speed differs significantly from that commanded.
 One of many potential implementations of the functional block diagram shown in FIG. 4 is illustrated in FIG. 5. In this circuit, many of the functional blocks are implemented within a single integrated circuit programmable microcontroller 146. In particular the serial interface 125 and the command interpreter 126 of the communication port 124, and the communication control 128 of the motor control circuit 127 are all implemented within the microcontroller 146. Suitable microcontrollers are well known in the art. One such device is an 8-bit microcontroller known as the PIC16C62B, available from Microchip Technology, Inc., located in Chandler, Ariz. This particular microcontroller includes 2048 words (each 14 bits wide) of one-time programmable program memory, 128 bytes of random access read/write memory (RAM), several programmable timers, and a serial I/O interface compatible with the I2C interface. The SMBus interface was based upon the earlier I2C interface, and the use of each is widely known in the art. The SMBus specification revision 1.1, dated Dec. 11, 1998, is incorporated herein by reference in its entirety. Other microcontrollers having fewer bytes of RAM and/or having factory programmed read-only memory instead of one-time programmable memory may easily be utilized instead, particularly to provide for lower production costs when manufactured with high unit volumes.
 The rotor position sensor 132, previously shown in FIG. 4, may be implemented using a hall sensor 148. Suitable Hall-effect devices are well known in the art. One especially suitable device is the TLE4935G Hall-effect sensor, available from Infineon Technologies Corp, located in Cupertino, Calif. A pull-up resistor 150 is included on the open collector output 170 of the hall sensor 148, which output is communicated to an interrupt pin of the microcontroller 146. A transition on the output of the hall sensor 170 (in response to movement of the rotor) generates an interrupt request within the microcontroller 146, which is described in greater detail below.
 A positive power supply voltage is conveyed to the fan control circuit 121 using terminal 112 a. Nominally, this may be a 12-volt power supply, although voltages ranging from, for example, 7 volts to 30 volts may be easily accommodated. The voltage regulator 142 is provided which receives the input voltage and generates a regulated output of 5 volts (for this embodiment) on output node 144. Suitable voltage regulators are well known in the art. One especially suitable device is the LM78LO5M voltage regulator, available from Fairchild Semiconductor Corp, located in Santa Clara, Calif. This 5-volt internal “power supply” voltage on node 144 is used to power both the integrated microcontroller 146 and the hall sensor 148.
 A crystal 152 and two capacitors 154, 156 are provided to form a parallel resonant circuit between nodes 172, 174 for an internal oscillator within the microcontroller 146, which provides a timing reference for the internal clock generator contained within microcontroller 146. An 8 MHz crystal may be advantageously selected, along with 22 pF capacitors, to provide an 8 MHz clock rate. This clock rate provides adequate cycle times to implement the algorithms described herein. As before, the serial clock and serial data signals are communicated by way of terminals 112 c and 112 d, respectively, to nodes 176, 178 and communicated directly to the microcontroller 146, which implements the serial interface internally. An output of the microcontroller 146 or a configurable input/output pin is appropriately configured to generate the FAULT output which is communicated via node 180 to terminal 112 e. The driver 130 is implemented with a pair of MOS driver transistors 15 a, 15 b. These driver transistors 15 a, 15 b receive on their respective gate terminals 182 a, 182 b respective pulse-width-modulated signals generated by the microcontroller 146. Each of these signals, when active, causes a low impedance path to ground through the respective driver transistor 15 a, 15 b, which provides a current path for energizing a respective winding stage 122 a, 122 b of the BLDC motor. The two driver transistors 15 a, 15 b are preferably implemented using an integrated pair of driver transistors, indicated by dashed line 158. Many suitable devices are available, including the Si4936DY Dual N-Channel 30-volt power MOSFET pair, available from Vishay Siliconix, located in Santa Clara, Calif. Alternatively, two individual discrete transistors (e.g., MOSFETs or bipolar) could be implemented. In other cases, a microcontroller may be utilized which can directly drive the winding stages without using an external buffer.
 Zener diodes 160 a and 160 b are provided to swallow the inductive voltage kick otherwise generated by the winding stages 122 a, 122 b when the respective driver transistor 15 a, 15 b suddenly shuts off during normal commutation of the winding stages 122 a, 122 b. Zener diodes with 20-volt zener voltages may be advantageously used to provide adequate over-voltage protection for the outputs of the power transistors (which, for this embodiment, are 30-volt MOSFETs). Diode 162 is provided to ensure that current does not flow back into the positive 12-volt power supply node (connected to terminal 112 a) when the winding stages 122 a, 122 b are commutated. Capacitor 164 is a filtering capacitor to help stabilize the voltage on node 166 when the various winding stages 122 a, 122 b are energized and de-energized during normal commutation. The movement of the rotor is indicated y dashed line 190 and the rotor position is sensed by the hall sensor 148. A transition on the output node 170 of the hall sensor is generated every time the rotor rotates 90 degrees. This transition then generates an interrupt request within the microcontroller 146, which when serviced, commutates the winding stages by energizing the next winding stage to keep the rotor rotating.
 Referring now to FIG. 6, a flowchart diagram is shown which illustrates the initialization and main control loop of exemplary firmware programmed into the microcontroller 146 shown in FIG. 5. This flowchart is but one of many possible flowcharts which could be implemented to carry out the functions required within the microcontroller 146. During power up, the microcontroller 146 is automatically reset (flowchart step 200). Control then proceeds to step 202, which is the start of the main control portion of this firmware. Control first passes to step 204 where the controller is initialized. Examples of such initialization include setting internal timer configuration and default/preload values, configuring timer prescalers and watchdog timers, configuring I/O ports to select one of several modes of operation and particular I/O characteristics, initializing programming variables, and similar operations depending upon the particular microcontroller chosen and other implementation decisions. Control then passes to step 205 which sets the default fan speed. This is provided so that, in the absence of any communication via the communication port, the fan module will power up to a default speed rather than awaiting a command me rely to turn the fan on. After setting the default fan speed, control passes to step 216 which checks the rotor position. This is done by interrogating the output of hall sensor 148. In the circuit shown in FIG. 5, the interrupt (INT) pin on the microcontroller 146 to which the hall sensor 148 is connected operates as a traditional interrupt (generating the interrupt on a transition of the input signal), but the input signal can also be sampled using a level-sensitive input buffer. The appropriate winding stage is then energized in step 208 to initiate movement of the rotor and, optionally, a watchdog timer is set. A control loop is then entered in step 210 which checks for each of two specific flags being set. Each of these flags is set, for example, by an interrupt service routine as described below. At step 210 the ROTATION flag is checked; if it is set, control passes to flowchart A, labeled as 212. If not set, control passes to step 214 which interrogates the COMMAND flag. If set, control passes to flowchart B, labeled as 216. If not, control returns to step 210. Each of these flowcharts A and B execute and return to the main control loop at step 218, which returns control to step 210 to repeat the flag interrogations.
 Referring now to FIG. 7, the basic interrupt service processing is depicted in this flowchart at step 230. Whenever an interrupt occurs, indicated in this flowchart at step 230 as a test for such an interrupt occurring, control passes to an interrupt service routine ISR, labeled as 232, which ascertains the nature of the interrupt and processes the interrupt accordingly. Control then returns at step 234 from the interrupt service routine 232, and passes back to step 230 to await further interrupts. The flowchart depicted in FIG. 7 for most microcontrollers is not explicitly programmed (other than an interrupt service routine address or vector), but represents the typical functionality of microcontrollers that support interrupts and which may be configured to vector to a particular interrupt service routine whenever the interrupt occurs.
 Referring now to FIG. 8, a flowchart diagram is shown which is executed whenever the ROTATION flag is detected at earlier step 210 as being set. In the exemplary embodiment, the ROTATION flag is set by an interrupt service routine which responds to a rotation interrupt which is generated whenever the hall sensor 148 senses that the rotor has rotated 90 degrees (i.e., one-quarter of the rotation period), as described in greater detail below. After entering at step 212, control first passes to step 240 which compares the “measured quarter-period” with the “desired quarter-period” (which variable is set based upon a received fan speed command). If the measured quarter- period is greater than the desired, control passes to step 242 which decreases the value of a pulse width variable. This variable controls the duration of both pulse-width-modulated signals generated on the two outputs of the commutation control 128, which thus controls the volt-ampere (V-A) product of an energized winding stage. Control then returns at step 218 to the main control loop shown in FIG. 6. If at step 240 the test fails, control passes to step 244, and if the measured quarter-period is less than the desired quarter-period, control passes to step 246 which increases the pulse width of the pulse-width-modulated output signals, Again, control returns at step 218 to the main control loop. If the measured quarter-period is equal to the desired quarter-period, which is tested at step 248, then no adjustment is necessary to the timing of the pulse-width-modulated commutation output signals (i.e., neither the pulse width (duty cycle) nor the period), and control immediately returns at step 218. If all three tests fail, namely, the test performed at steps 240, 244 and 248, then control passes to step 250 which may be configured to report a fault, either by a dedicated fault pin, such as terminal 112 e, or through the communication of a fault indication by way of the communication port to an external system connected thereto.
 Referring now to FIG. 9, a flowchart diagram is shown which is executed whenever the COMMAND flag is detected at step 210 as being set. Control enters at step B, labeled 216, and proceeds to step 260 to validate the command received. At step 262 the command is tested and, if determined to be a command to adjust the fan speed, control passes to step 264 which updates the “desired quarter-period” variable used to set the timing of the pulse-width-modulated commutation signals used to drive the motor winding stages within the fan. Otherwise the command is tested again at step 266 and, if determined to be a REPORT STATUS (i.e., QUERY) command, control passes to step 268 which writes the appropriate status data to the host by way of the communication port 124. If not a report status command, then control passes to step 270 to report a fault, again, either by way of a hard-wired pin and/or by a status word communicated to the host processor by way of the communication port.
 Referring now to FIG. 10, an exemplary embodiment of a suitable interrupt service routine 232 is depicted. Upon entering at step 232, the nature of the interrupt is determined by steps 280, 284 and 292. There are at least three types of interrupts explicitly processed by this routine: a duty cycle interrupt, a rotation interrupt, and a command interrupt. Additionally, other types, such as a watchdog timer interrupt, may also be processed, as described below.
 Regarding a duty-cycle interrupt, each of the pulse-width-modulated commutation signals is controlled by an internal variable which sets the duty cycle (i.e., pulse width) of the signal. When each PWM signal is driven active, an internal timer is loaded with a value corresponding to the present pulse width setting. When the timer “times out,” an interrupt request is generated to indicate that the PWM signal should be driven inactive (thereby de-energizing the winding stage). This internal timer-generated interrupt request is herein referred to as a duty-cycle interrupt. Initially at step 280, if the interrupt is determined to be a duty-cycle interrupt, then control passes to step 282 which de-energizes the currently-driven winding stage, and control then returns at step 218 to await further interrupts. During startup of the fan, the duty cycle of the PWM signals is set for maximum speed to provide maximum torque to ensure that the fan begins rotation and spins up. For example, a value of 30 ms per winding stage may be set for the PWM signals. Such a long value ensures that, at startup, a winding stage will stay energized until the rotation of the rotor causes the next winding stage to be energized.
 The second type of interrupt is a rotation interrupt. For every 90 degrees of rotor rotation, the hall sensor 148 generates a transition on its output node 170 which, being coupled to an external interrupt pin of the microcontroller 146, generates an interrupt request within the microcontroller 146. This type of interrupt indicates when the next winding stage should be driven to continue proper commutation of the motor. If the interrupt is determined, at step 284, to be a rotation interrupt, then control passes to step 286 which captures the measured quarter-period by storing the elapsed time since the previously-driven winding stage was earlier energized. This may be done in a variety of ways, including using programmable timers, software timing loops, or specialized hardware. At step 288, the currently-driven winding stage is de□energized if still found to be energized (as would typically occur at a full-speed setting or during fan startup), and the opposite winding stage is energized. The ROTATION flag is set at step 290, a watchdog timer used for detecting, if timed-out, a stuck rotor is reset, and control returns at step 218 to await further interrupts.
 Lastly, if the interrupt is a command interrupt (caused by, for example, the serial interface detecting a received command), control passes from step 292 to step 294 which sets the COMMAND flag and then control returns at step 218 to await further interrupts. If the interrupt is other than one of these three types, control passes to step 296, which reports a fault condition. An example of such a fault is a stuck rotor. A watchdog timer may be configured to time out well after (e.g., 500 ms) a winding stage is energized unless reset by a rotation interrupt. Consequently, if the rotor does not begin to rotate and start generating rotation interrupts, the fan may detect its stuck rotor and alert a host system to take necessary action.
 The microcontroller 146 may be configured with a variety of registers. Some of these registers hold variables which may either be written by a host system or read by the host system. In the I2C bus protocol, a pointer register selects which register is read from or written to. At power-up, the default value of the pointer register is set to reference the Command Speed (CS) register. The CS register is preferably a write-only register, and is used to dictate the desired speed of the fan. Another register is the Reported Speed (RS) register, a preferably read-only register used to report the actual speed of the fan. Under normal operating conditions, the two are identical. In the event that the fan motor cannot operate at the commanded speed, the RS register indicates the actual speed. In a system that commands and reads fan speed, a mismatch of the CS and RS registers may indicate a blocked fan or clogged filter, thus causing an alert condition in the system logic.
 For an exemplary embodiment compatible with the I2C interface, a write by the system host to the fan module 100 includes the address byte and the pointer byte to set the desired Pointer Register contents, as follows:
 If the pointer register contents are correct, then a read or a write is performed by the host system issuing the correct address byte followed by a data byte (for a write) or alternatively for a read, by the host system issuing the correct address byte followed by the retrieval of the data byte. Other pointer byte values may be used to access additional registers, such as a localized temperature within the fan module 100, and other possible features. By setting the pointer register once, sequential read or write commands to the same register may be executed over the I2C bus without re-transmitting an “address” of the register for each access, thus reducing bus traffic.
 As described above, the speed of the fan may be controlled by the value written into the CS register. In an exemplary embodiment, there are 255 valid speed values that may be written to the CS register. The speed of the fan is linearly proportional to the value contained in the CS register as described in the table below:
 Currently, the value 0×00 may be used as a FAN OFF command. Reported speed values may be arranged to correspond to the commanded speed values one to one, making system comparison logic very simple.
 As described above, the fan module 100 provides a communications port having a two-wire serial interface. Commands received are converted directly into a plurality of commutation signals which energize the winding stages of the BLDC motor to achieve variable speed control of the fan without varying the voltage across the winding stages when energized. The total parts count is very low, and facilitates incorporating the entire fan control circuit integrally with the fan module. A fan module in accordance with the present invention is well-suited for use in a microprocessor-based system, such as a personal computer, workstation, embedded system, etc.
 Referring now to FIG. 11, low-valued series resistors may be included between the driver transistors 15 a, 15 b and the respective winding stages 122 a, 122 b so the magnitude of the current flow through each of the winding stages may be ascertained. For example, resistors 200 a, 200 b are respectively included between winding stages 122 a, 122 b and driver transistors 15 a, 15 b. The voltage drop across each of these resistors 200 a, 200 b may be measured by a respective differential analog-to-digital (ADC) circuit 204 a, 204 b, which may be incorporated within certain available integrated circuit microcontrollers (as shown here within microcontroller 146) or may be implemented externally to a microcontroller. In particular, to sense the current flowing through winding stage 122 a, one input of the differential ADC circuit 204 a (shown here as the positive input) is connected to node 16 a, and the other input (shown here as the negative input) is connected to node 202 a. Likewise, the current flowing through winding stage 122 b may be determined by connecting the positive input of differential ADC circuit 204 b to node 16 b, and the negative input to node 202 b. By including a capability such as this, the magnitude of the current flow through the winding stages may be determined, and if excessive, or alternatively if non-existent, an appropriate status or fault indication may be communicated.
 Referring now to FIG. 12, a single low-valued series resistor may be included between the driver transistors 15 a, 15 b and their respective source terminal connections to ground so that the magnitude of the current flow through either winding stage may be ascertained. For example, resistor 206 is included between node 208 and ground. The source terminal of each driver transistor 15 a, 15 b is connected to node 208 rather than directly to ground so that the current flowing through an energized winding stage also flows through resistor 206. The voltage drop across this resistor 206 (and inferentially, the current flow through the winding stages) may be measured by a single analog-to-digital (ADC) circuit 210, which preferably may be incorporated as shown here within the integrated circuit microcontroller 146 (using, for example, an internally generated reference voltage, VREF, as is found in several commercially available microcontrollers) or may be implemented externally to a microcontroller. By including a capability such as this, the magnitude of the current flow through the winding stages may be determined in a manner which requires fewer circuit resources than that shown in FIG. 11. As before, if the current is either excessive or non-existent, an appropriate status or fault indication may be generated and/or communicated to a host.
 Referring now to FIG. 13, a functional block diagram of another fan module is shown. A communication port 124 includes a serial interface 125 coupled to a command interpreter 126, as before. In this particular fan module, a motor control circuit 226 is more typical of the type utilized in a stand-alone two-terminal industry□standard brushless DC fan motor. It includes a commutation control circuit 228 for generating at least two commutation signals which are buffered by driver 230 to drive the motor winding stages 122. A position sensor 232 detects the position of the rotor, and provides an input to the commutation control circuit 228 for commutating the winding stages and for energizing the next winding stage. The speed of the motor driven by the motor control circuit 226 may be controlled by controlling the power applied to the entire motor control circuit 226. This is done by power control circuit 222, which is controlled by speed control circuit 220. The power control circuit 222 may include a linear voltage regulator circuit which is used to vary the voltage impressed across the motor control circuit 226 as a function of tho desired rotational speed of the rotor. Alternatively, the power control circuit may include a pulse-width□modulating circuit to chop the power impressed across motor control circuit 226. In either case, the fan module, includes, as shown, a communication port integrated with the fan module for directly responding to fan control commands. Moreover, the voltage coupled to the fan module by a system into which the fan module is incorporated is a constant voltage. By incorporating the power control circuit 222 into the fan module, the user is relieved of the burden of providing additional external components for controlling a separate fan module. Moreover, system reliability is improved.
 While the invention has been largely described with respect to the embodiments set forth above, the invention is not necessarily limited to these embodiments, which are given by way of example only. Variations and modifications of the embodiments disclosed herein may be made based on the description set forth herein, without departing from the scope and spirit of the invention as set forth in the following claims. For example, suitable implementations may be fashioned in hardware or software, or a combination thereof. Portions may be implemented using a programmable microcontroller, a general purpose microprocessor, dedicated hardware, a microcontroller core mapped into a custom integrated circuit, gate array, standard cell array, an ASIC, or any of several widely available circuit forms which can be chosen which meet the necessary performance requirements. Software timing loops may be used rather than or in combination with hardware interrupts. A serial interface may be provided in some commercially available microcontrollers, may be fashioned using hardware, or may even be implemented using largely software methods executing on relatively general purpose hardware. A variety of well-known serial interfaces may be chosen, including an SMBus or I2C interface, an RS-232 interface (or its military or ITU equivalent), a 3-wire SPI interface, a Universal Serial Bus (USB) interface, or others. A power supply voltage other than +12 volts may be chosen according to system availability and designer choice. Rotation sensors other than hall sensors may be chosen such as, for example, optical sensors. Accordingly, other embodiments, variations, and improvements not described herein are not necessarily excluded from the scope of the invention, which is defined by the following appended claims.