Patent Description:
In one aspect, the present invention provides a method as defined in claim <NUM>.

A method can further include one or more of the following features: the interpolated data comprises linear interpolated data, the curve transformer controls motor speed, the curve transformer for controls motor torque, the curve transformer controls motor power, the curve transformer controls motor control demand, the output of the curve transformer is not monotonic, and/or the curve transformer uses polar FOC in a motor controller IC package.

In another aspect, the invention providesa motor controller IC package as defined in claim <NUM>.

A motor controller IC package can further include one or more of the following features: the interpolated data comprises linear interpolated data, the curve transformer is configured to control motor speed, the curve transformer is configured to control motor torque, the curve transformer is configured to control motor power, the curve transformer is configured to control motor control demand, the output of the curve transformer is not monotonic, and/or the curve transformer is configured for polar FOC motor control.

The foregoing features of this invention, as well as the invention itself, may be more fully understood from the following description of the drawings in which:.

<FIG> shows an example system <NUM> for controlling a motor in accordance with illustrative embodiments of the invention. The control system <NUM> controls a three-phase BLDC. An exemplary motor control circuit <NUM> is coupled to drive an electric motor <NUM>, which has three windings 104a, 104b, 104c, that can each be depicted as a respective equivalent circuit having an inductor in series with a resistor and in series with a back EMF voltage source. For example, the winding A 104a is shown to include an inductor <NUM> in series with a resistor <NUM> and in series with a back EMF voltage source VA <NUM>. The voltage of the back EMF voltage source VA <NUM> is not directly observable when a current is flowing in an associated motor winding, but it can be estimated by looking at the phase current and phase voltage.

In general, the voltage across a motor winding, for example, across the winding A 140a, is governed by the following equation: <MAT> where:.

Thus, it can be seen that, if the current through the winding 104a is zero, then VoutA - Vcommon=VA + LdI/dt. The ideal case is VoutA - Vcommon = LdI/dt, so that the back-EMF VA is in phase with the phase current.

In the illustrated embodiment, the motor control circuit <NUM> includes a speed demand generator <NUM> coupled to receive an external speed demand signal <NUM> from outside of the motor control circuit <NUM>. The external speed demand signal <NUM> can be provided in a variety of formats. In general, the external speed demand signal <NUM> is indicative of a speed of the motor <NUM> that is requested from outside of the motor control circuit <NUM>.

In embodiments, the speed demand signal 107a is determined not only by the external speed demand signal, but also the motor current requirement measured or calculated in signal processing module. If the event of over current limit (OCL) happens, the speed demand signal 107a will be clamped and might be less than the external speed demand signal <NUM>.

The speed demand generator <NUM> is configured to generate a speed demand signal 107a. A pulse width modulation (PWM) generator <NUM> is coupled to receive the speed demand signal 107a and configured to generate PWM signals 108a, a duty cycle of which is controlled by the speed demand signal 107a. The PWM generator <NUM> is also coupled to receive modulation waveforms from a modulation signal generation module <NUM>. The PWM signals 108a are generated with a modulation characteristic (i.e., a relative time-varying duty cycle) in accordance with the modulation waveforms from the modulation signal generation module <NUM>.

In one embodiment, the motor control circuit <NUM> also includes a gate driver circuit <NUM> coupled to receive the PWM signals 108a and configured to generate PWM gate drive signals 110a, 110b, 110c, 110d, 110e, 110f to drive six transistors <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> arranged as three half-bridge circuits <NUM>/<NUM>, <NUM>/<NUM>, <NUM>/<NUM>. The six transistors <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> may operate in saturation to provide three motor drive signals VoutA, VoutB, VoutC, <NUM>, <NUM>, <NUM>, respectively, at nodes 102d, 102c, 102b, respectively.

It is understood that any practical number of switching elements coupled in various suitable configurations can be used to meet the needs of a particular application. It is further understood that any suitable signal generator can be used to generate control signals for the switching elements that provide signals to energize the three-phase BLDC motor.

The motor control circuit <NUM> can also include a signal processing module <NUM> to receive a bus current measurement signal <NUM> and one or more of the motor drive signals VoutA, VoutB, VoutC, <NUM>, <NUM>, <NUM>, respectively. In embodiments, these signals can be used for phase A, B, and/or C phase zero current detection (ZCD). The bus current <NUM> and motor drive signals VoutA,B,C can be used to control motor speed, as discussed more fully below.

The control circuit <NUM> can be coupled to receive a motor voltage VMOT, or simply VM, at a node 102a, which is supplied to the motor through the transistors <NUM>, <NUM>, <NUM> during times when the upper transistors <NUM>, <NUM>, <NUM> are turned on. It will be understood that there can be a small voltage drop (for example, <NUM> volts) through the transistors <NUM>, <NUM>, <NUM> when they are turned on and supplying current to the motor <NUM>.

<FIG> shows a BLDC control system <NUM> in accordance with example embodiments of the invention showing further detail for the system of <FIG>. An inverter/motor module <NUM> receives control signals U(ABC) to control the three-phase motor. The inverter/motor module <NUM> generates an I_bus signal <NUM> corresponding to bus current to an I_bus command module <NUM> and phase current signals I(ABC) to a zero current detection module <NUM>, which provides three-phase current direction information to a sample/calculate module <NUM>. The I_bus/command (e.g., I_bus divided by speed command) module <NUM> generates an I_driving signal or driving current, as described more fully below.

The sample/calculate module <NUM> receives a motor driving angle signal θ, which can be sampled as θs when zero current is detected, and outputs difference angle θe, which corresponds to the difference between the motor phase current and phase voltage, as described more fully below. A phase advance angle θ0, which can be provided as an input signal, can be input to a summer <NUM>, which outputs a difference angle Δθ for adjusting the speed ω of the motor. In an embodiment, the difference angle Δθ and an I_driving signal (driving current) generated by the I_bus/command module <NUM> are provided as inputs to a combiner <NUM>, e.g., a multiplier, the output of which is provided to a proportional-integral-derivative (PID) controller <NUM>. The PID <NUM> generates an output value ω for motor speed as the difference between the θe and θ0 attempts to minimize the motor speed error over time. The PID <NUM> output is integrated <NUM> and provided to a conversion mechanism <NUM>, e.g., a look-up table, for controlling the motor, as well as to the sample/calculator module <NUM> to enable sampling θs of motor speed angle signal θ.

It is understood that Kp and Ki represent coefficients for the proportional and integral derivative terms. A derivative coefficient Kd can also be used. P accounts for present values of the error between θe and θ0, I accounts for past values of the error, and D accounts for possible future values of the error, based on a current rate of change. By tuning the coefficients, the PID controller <NUM> can perform in accordance with specific process requirements.

The I_bus command module <NUM> I_driving output signal is provided to a power control module <NUM>, which provides an output to an amplitude command module <NUM>. A combiner <NUM> receives an output from the amplitude command module <NUM>, the conversion mechanism <NUM>, and a signal <NUM>, such as VBB which can correspond to the motor voltage VM. The combiner <NUM> output is provided to the inverter/motor module <NUM> to generate gate signals for the switching elements and thereby control the speed of the motor. In example embodiments, the combiner <NUM> multiples input signals to generate the output.

<FIG> shows illustrative locations to measure the bus current <NUM> and phase A, B, C zero current detection <NUM>. First, second, and third switching device pairs may each be coupled to a respective phase A, B, C of the motor M. The sensed signals enable phase A, B, C zero current detection.

<FIG> shows illustrative waveforms that can be used for BLDC motor control. A voltage driving angle <NUM> for a three phase BLDC is shown from <NUM> to <NUM> degrees. A sinusoidal phase current signal <NUM> is shown having a falling zero crossing <NUM> that corresponds to the sampled voltage driving angle θs, which can be used to derive the angle θe between the phase current <NUM> and a phase voltage <NUM>. In the illustrated example, θe = <NUM> - θs.

In some examples, difference angle θe should be equal to θ0 (<FIG>) at steady state conditions. <FIG> shows angle θe in a polar coordinate system defined by angle between phase voltage <NUM> and the driving current <NUM> (<FIG> output from <NUM>).

<FIG> shows a representation of driving current for which three-phase AC currents can be replaced with an equivalent rotational DC current. As can be seen, a sinusoidal current can be supplied to each of phase A, B, C of a motor. A magnet includes a north N pole and a south S pole from which position is determined. Angle θ refers to the voltage driving angle, which is the input of the sinusoidal function of the phase voltage. In some examples, the angle θ can provide an index of the sinusoidal look up table.

As noted above, the I_bus/command module <NUM> (<FIG>) can generate the I_driving signal for the PID controller <NUM>. In some examples, the I_driving = I_bus divided by the speed command. The relationship between the I_driving and the phase current is described below:.

The three phase currents can be defined as: <MAT> where ω corresponds to motor speed <MAT> <MAT>.

The phase torques can be defined as: <MAT> <MAT> <MAT> <MAT>.

For a DC driving current Idrive = <NUM>*Ipeak, which rotates with speed ω counterclockwise, then Tdrive = <NUM>*Ipeak*FluxPeak*(ωt+θ +<NUM>°)=Tsum.

It can be seen that, by applying Idrive, which is <NUM> times of the Ipeak DC current, rotated together with the magnet of the BLDC, the BLDC motor is driven by the equivalent torque Tdrive = Tsum. So, for analysis, the <NUM> phase current IA,IB and IC are replaced by Idrive. Idriving is the amplitude of Idrive, and can be measured by the I_bus/command module <NUM> (<FIG>).

<FIG> shows an example process for BLDC motor control. In step <NUM>, phase current direction can be detected using a suitable zero current detection (ZCD) technique, such as that shown and described in <CIT>. In step <NUM>, an angle θe between phase current <NUM> (see, e.g., <FIG>) and phase voltage <NUM> can be calculated from the sampled voltage driving angle θs when zero current is detected. The voltage driving angle θ can be an index from <NUM> to <NUM> degree, which determines the sinusoidal wave output. The angle θe can correspond to the angular position of the current in the polar coordinate system, as shown in <FIG>. In step <NUM>, a phase advance angle θ<NUM> is received as an input, calculated from motor inductance, or the like. In general, the angle θe should be equal to θ<NUM> at steady state. In step <NUM>, the difference angle Δθ (e.g., θ0 - θe) provides a feedback signal to the control loop, e.g., PID controller <NUM> (<FIG>) for adjusting motor speed ω.

In step <NUM>, the system (e.g., I_bus/command module <NUM> <FIG>) measures the average value of the bus current <NUM> (<FIG> and <FIG>) and converts this value to the driving current (I_driving), which is the effective rotational current that creates the driving torque for the motor. It is understood that any suitable method to measure and/or estimate the driving current can be used. In the three-phase BLDC motor driven by sinusoidal waveform, as noted above, the three phase AC currents can be replaced with an equivalent rotational DC current that can be referred to as the driving current, which is proportional to the bus current divided by the amplitude command. In one example, I_driving
=Ibus*<NUM>/amplitude_command. The driving current is the radial portion <NUM> in the polar coordinate system of <FIG>.

In step <NUM>, the driving current is multiplied by the difference angle Δθ and the product is fed into a PI controller <NUM> (<FIG>). The proportional gain (Kp) and the integral gain (Ki) of the PI control loop can be determined by motor parameters, for example. The driving current can also be used for power control which controls the system acceleration and deceleration.

In accordance with the invention, BLDC motor control processing includes a data curve transformer that can be useful for speed, torque, power, control demand data, and the like. In embodiments, a curve transformer can be provided as part of a signal processor, such as the signal processing module <NUM> of <FIG>.

<FIG> shows an example curve transformer module <NUM> having M (M:<NUM>) input bits and N (N:<NUM>) output bits. In example embodiments, N=M so that the number of input bits and output bits is the same. It is understood that N and M can be provided as any practical integer to meet the needs of a particular application.

<FIG> shows an illustrative example in which N=M=<NUM> where input and output data values can range from <NUM> to <NUM>. The curve transformer <NUM> (<FIG>) converts an input data value to an output data value. In the illustrated example, each input data value, which is between <NUM> and <NUM> is converted to an output value, which is between <NUM> and <NUM>. In some examples, data look up values can be stored in EEPROM or other storage. The <NUM> and <NUM> 'corner points' are stored and values in between are calculated by linear interpolation, for example. It is understood that any suitable interpolation technique can be used to meet the needs of a particular application. Transform data can be stored in a particular memory address to cover some number of corner points. In one particular example, each data point contains <NUM> bit input data and <NUM> bit output data.

In the illustrated example of <FIG>, address <NUM> stores the first point (index <NUM>), input data is <NUM>, output data is <NUM>, and address <NUM> stores the second point (index <NUM>), input data is <NUM>, output data is <NUM>. The curve is a linear curve from <NUM> to <NUM>. In the second row, the input data is <NUM> which indicates the last corner point of the curve. In examples, data beyond this row is ignored.

<FIG> shows a further example of input data {<NUM>, <NUM>, <NUM>, <NUM>, <NUM>} transformed to output data {<NUM>, <NUM>, <NUM>, <NUM>, <NUM>} using index values {<NUM>, <NUM>, <NUM>, <NUM>, <NUM>} in address locations {<NUM>, <NUM>, <NUM>, <NUM>, <NUM>} in memory. The input and output values are shown in the curve on the right side of the figure. Corner points are shown with a linear extrapolation from <NUM> to <NUM>. Input data below <NUM> will be converted to a <NUM> output value. Input data above <NUM> will be converted to an output value of <NUM>.

In an example speed demand implementation using a curve transformer, a motor will not start with less than about <NUM>% (≈<NUM>/<NUM>) of speed demand and motor speed will be saturated if the input demand is higher than about <NUM>% (≈<NUM>/<NUM>).

<FIG> shows another example using ten points to provide a step curve with hysteresis, in accordance with the invention. As can be seen, various input data values correspond to output data values that form a plateau for a specified range of input values. If the input data of the next point (index N + <NUM>) is less than the input data of the current point (index N), there will be a hysteresis. For example, index <NUM> is <NUM>, and index <NUM> is <NUM>, which generates a hysteresis of <NUM>. Similar hysteresis is provided in index <NUM> and <NUM>, index <NUM> and <NUM>, and index <NUM> and <NUM>.

<FIG> shows another example in which the output does not need to be monotonic, as in this example in which the output goes back to zero when the input is <NUM> for index <NUM>. In the illustrated embodiment, the curve has linear extrapolation from <NUM> to <NUM> and various corner points.

<FIG> shows another example with a curve that can be considered bi-directional in motor applications. In the illustrated example, for input demand between <NUM> and <NUM>, the output is <NUM>. If the bi-directional curve is selected, this translates to zero speed. An input demand of <NUM> means the maximum speed in the reverse direction, and the input demand of <NUM> also translates to maximum speed but in the forward direction. As can be seen the curve is linear between <NUM> and <NUM> and from <NUM> to <NUM>.

As shown and described above, example embodiments include polar field oriented control (FOC) for BLDC motors where processing is performed in the polar coordinate domain. Referring again to <FIG>, <FIG>, and <FIG> for any vector in the BLDC motor control system, the voltage, the current, and the back BEMF can be characterized by the direct axis factor and quadrature axis factor. It can also be characterized by the amplitude and the angle, which structure is called polar coordinate. The amplitude of the current can be measured from the bus current, and the angle measured by ZCD (zero current cross detect) circuitry (see, e.g., <FIG>).

When the phase current crosses zero, the circuitry can sample the pointer value which is the angle theta that generates the three-phase voltage output. Note that if the current cross is a falling edge, the sampled theta (theta _s), should subtract <NUM> degrees to get the error angle (theta_e). Also note there are three phase currents so that if the zero current occurs in phase B or C, <NUM> or <NUM> degrees need to be added.

Referring again to <FIG>, the current going through the motor winding is referred to as the phase current, and the current going through the power supply is called the bus current. Phase current is a sinusoidal waveform, and bus current is ripple waveform with average DC value of I_bus. In example embodiments, the driving current (or I_drive) refers to the equivalent DC rotational current. The wire carrying the driving current rotates synchronously with the motor magnet which is based on the same torque effect.

In some examples, the driving current has the amplitude of <NUM> times the peak of the phase current. An example motor driver controller IC package will only measure the bus current and calculate the driving current as follows: <MAT>.

Because the theta is usually a relatively small angle, and cos(theta) is approximately equal to <NUM>, one can ignore the cos(theta) factor in the above equation. In other examples, cos(theta) is not ignored.

Referring again to <FIG>, current zero crossing is detected by the ZCD circuit <NUM>, the sample and calculate block <NUM> generates the angle between voltage and current (theta_e). Theta_0 is calculated based on the motor inductance, current, and motor speed (w I L). Higher current, higher speed and higher inductance may require a higher theta_0. In some examples, a user can program the theta_0 directly.

In some examples, it is desirable to control the difference of theta_e and theta_0 which is the feedback that should be zero. Going through the PID module <NUM>, the output adjusts the driving speed. The motor physical speed is determined by the driving torque, the load torque and the inertia. The driving speed should be equal to motor speed in steady state. If driving speed is higher or lower than the motor speed for a certain time, the motor will go 'out of phase', and the control loop may fail. So the driving speed should be adjusted continuously based on the feedback of the theta.

Bus current can be measured by an op-amp and an ADC in the I_bus/command module <NUM>. I_bus divided by the amplitude command can generate the I_drive (ignoring the cos theta). The I_drive signal may be limited between the rated current and zero by regulating the amplitude command <NUM>, which may also affect the I_drive calculation.

In some examples, the I_drive signal multiplies the delta_theta into <NUM> before feeding into the PID module <NUM>. With higher current (I_drive), a small angle error (delta theta) may require higher adjustment. Driving speed may be integrated to generate the pointer (theta), and the sin table may read the pointer to generate the <NUM> phase output voltage.

As described above, in some examples, the bus current is divided by duty cycle (bus current/duty) to represent the phase current (peak value), which assumes that phase current and phase voltage has a small angle, e.g. cos(θ) = <NUM>. In some examples, θ can be relatively large, such as <NUM> degrees, so cos(θ) may be involved in the calculation.

In some examples, the Idrive current, the gain, and the delta theta are multiplied together and provided to the integral proportional loop, as shown in <FIG>. In other examples, only the gain and the delta theta are multiplied together and provided to the integral proportional loop, as shown in <FIG>.

In some examples, the feedback loop contains delta theta, which is the error between theta and theta <NUM>, and Idrive, as shown in <FIG>. Theta <NUM> is calculated by w * I * L. In other examples, a block "IR+wIL / BEMF" can be implemented for these calculations. In some examples, a field weakening input can be added into the calculations.

In one example, a IR+wIL / BEMF block can be implemented as: <MAT> <MAT> where theta refers to the Phase current angle, w refers to Motor driving angle velocity [rad/s], Idrive refers to the Phase peak current[A], R refers to the Winding resistance [ohm], L refers to Winding inductance [H], Kt refers to Motor Torque constant [Nm/A], and error refers to Phase Advance[rad].

In example examples, a motor controller has four modes of operation: open loop, constant speed, constant current (torque), and constant power. The three operational modes constant speed, constant current (torque) and constant power are closed loop modes. <FIG> shows an example control loop having speed loop, power loop, current loop, and amplitude control with the various modes of operation.

The driving torque of a BLDC motor is generated by the driving current (phase current) attracted by the permanent magnet. Controlling constant torque is equal to controlling constant current. The name constant torque and constant current may be used interchangeably. The control demand, which is either from the analog input, the PWM input or the i2c input, is applied to the four different blocks depending on the operation mode selection.

If the open loop is selected, the control demand will be applied to the amplitude control directly, higher control demand will cause higher average output voltage amplitude and most of the time will increase the current and motor speed. The current loop, speed loop and the power loop are not active in the open loop mode.

If the constant torque mode is selected, the control demand is applied to the reference input of the current loop. The speed loop and the power loop are bypassed. If the motor operation current (I_drive) is less than the torque demand, which is the control demand signal from either analog, PWM or I2C, the PI loop will increase the amplitude demand, and regulate the I_drive eventually. The time constant of the current loop is about <NUM> in some examples. Adjusting the integral and proportional parameters keeps the current loop stable. It will be appreciated that higher inductance motors require slower PI parameters.

If the constant speed mode is selected, the control demand is applied to the reference input of the speed loop. The power loop is bypassed. The current loop is operated after the speed loop. If the motor operation speed is less than the speed demand, which is the control demand signal from either analog, PWM, I2C, or the CLOCK (frequency) mode input, the PI loop will increase the current reference. Because the current loop is at least <NUM> time faster than the speed loop, the current can be treated as adjusting the target immediately where system regulates the motor speed eventually. The time constant of the speed loop is longer than <NUM> in some examples. Adjusting the integral and proportional parameters keeps the speed loop stable.

If the constant power mode is selected, the control demand is applied to the reference input of the power loop. The speed loop is bypassed. The current loop is operated after the power loop. If the motor operation power is less than the power demand, which is the control demand signal from either analog, PWM, or I2C input, the PI loop will increase the current reference. Because the current loop is at least <NUM> time faster than the power loop, the current can be treated as adjusted to the target immediately, system regulates the supply power eventually. The time constant of the power loop is longer than <NUM>, for example.

In some examples, the rated speed and rated current can be programmed independently regardless of which operation mode is selected; they are mainly used to determine the motor parameters. The rated current can be used to clamp the current reference signal from the speed loop or power loop.

In other arrangements, examples of a motor controller have a phase-locked loop scheme for increased accuracy. A motor controller IC package may have an internal RC oscillator with a given accuracy/error, such as + - <NUM>%. In some applications, an external crystal accurate clock reference can be received. The motor controller can take the accurate clock reference and lock the internal PLL frequency to the accurate clock.

<FIG> shows an example implementation in which a <NUM>-bit EEPROM is used to program the clock frequency. The value in the EEPROM (N), multiplied by <NUM> ns, is the input clock period. For example, input clock frequency is <NUM>, which has a <NUM> period. So, N = <NUM> / 320ns = <NUM>. We should program <NUM> in the EEPROM.

The external clock can be fed in from any suitable source, such as a PWM pin, a DIR pin, a BRAKE pin, etc. The external clock is measured by the <NUM> internal clock, and if the internal clock is accurate, the measured period should be equal to the EEPROM parameter. If the internal clock is slower, the measured period will be less than the EEPRM parameter, so the internal oscillator should run faster, then adjUp pulse is generated. If the internal clock is faster, the measured period will be higher than the EEPROM parameter, so the internal oscillator should run slower, then adjDown pulse is generated. If the error is more than <NUM>%, either higher than reference by <NUM>% or lower than <NUM>%, it is treated as an invalid adjustment requirement. Neither adjUp nor adjDown will be generated. If the function is not enabled, adjUp and adjDown will be zero, and adj_none will be <NUM>. The adjUp, adjDown and adj_none signal will control the analog circuit to adjust the oscillator frequency.

<FIG> shows one example implementation in which an adjUp pulse will charge a capacitor, and the adjDown pulse will discharge the capacitor. If the function is disabled, adjNone is on, and the voltage is forced to a reference voltage (Vdd/<NUM> for example). The voltage on the capacitor will control a current source which adds extra current from the VCO circuit. The range of the adjustment is 2LSBs of the trim bits. It may be desirable to trim the oscillator as close as possible to the <NUM>, and the error will be compensated on the fly if this function is enabled.

The clock speed control mode works with the closed loop speed. It may not work with open loop, constant torque mode or constant power mode. Higher frequency on the SPD pin will drive a higher motor speed as follows: <MAT> where the speed_ctrl_ratio can be programmed in the EEPROM. For example, if the ratio is <NUM> and the clock input frequency is <NUM>, the motor will operate at 240rpm. Note the number of motor pole pairs must be set properly in the programming application for the rated speed (RPM) setting to be accurate.

<FIG> shows an example implementation in which a counter goes up and down based on the input CLOCK signal and the motor FG signal (or multiply of the FG signal depends on the speed_ctrl_ratio. The counter controls the amplitude command.

In some examples, the current loop is implemented after the speed loop and there is a requirement of independently controlling the speed loop time constant and speed_ctrl_ratio. In other examples, it is desirable to extract the CLOCK frequency, such as by 'borrowing' from PWM demodulation, as shown in <FIG>.

<FIG> shows an example hybrid implementation of CLOCK mode. The clock signal may be <NUM>% duty cycle. We take the rising edge of the CLOCK signal and go through a 'monostable trigger circuit' to generate a CLK_PWM signal, which has the same frequency and where the 'on' period Ton is fixed. So the duty cycle is changed with the frequency of CLOCK changed. This signal is fed into the PWM demodulation processing and the output represents the CLOCK frequency. The Ton time is determined by the maximum speed of the system, (not rated speed but the <NUM>% target speed). Higher speeds will have a smaller Ton, so that it takes higher CLOCK frequency to reach the target speed. The converted PWM duty cycle, or the CLOCK frequency, is used for the PI speed loop comparing with real speed and followed by the current loop. Because the digital implementation may have quantization error, there may be a fraction error between the real speed and the CLOCK reference speed. The PLL circuit works at the same time as a complementary method to compensate the fraction error after the PI speed loop. Because it only takes the fraction of the error, this block may have only a few bits.

<FIG> shows an exemplary computer <NUM> that can perform at least part of the processing described herein. The computer <NUM> includes a processor <NUM>, a volatile memory <NUM>, a non-volatile memory <NUM> (e.g., hard disk), an output device <NUM> and a graphical user interface (GUI) <NUM> (e.g., a mouse, a keyboard, a display, for example). The non-volatile memory <NUM> stores computer instructions <NUM>, an operating system <NUM> and data <NUM>. In one example, the computer instructions <NUM> are executed by the processor <NUM> out of volatile memory <NUM>. In one embodiment, an article <NUM> comprises non-transitory computer-readable instructions.

Processing may be implemented in hardware, software, or a combination of the two. Processing may be implemented in computer programs executed on programmable computers/machines that each includes a processor, a storage medium or other article of manufacture that is readable by the processor (including volatile and non-volatile memory and/or storage elements), at least one input device, and one or more output devices. Program code may be applied to data entered using an input device to perform processing and to generate output information.

The system can perform processing, at least in part, via a computer program product, (e.g., in a machine-readable storage device), for execution by, or to control the operation of, data processing apparatus (e.g., a programmable processor, a computer, or multiple computers). Each such program may be implemented in a high level procedural or object-oriented programming language to communicate with a computer system. However, the programs may be implemented in assembly or machine language. The language may be a compiled or an interpreted language and it may be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program may be deployed to be executed on one computer or on multiple computers at one site or distributed across multiple sites and interconnected by a communication network. A computer program may be stored on a storage medium or device (e.g., CD-ROM, hard disk, or magnetic diskette) that is readable by a general or special purpose programmable computer for configuring and operating the computer when the storage medium or device is read by the computer. Processing may also be implemented as a machine-readable storage medium, configured with a computer program, where upon execution, instructions in the computer program cause the computer to operate.

Claim 1:
A method, comprising:
employing a curve transformer (<NUM>) for controlling a three-phase BLDC motor (<NUM>), the curve transformer having index values and a respective stored input value and output value corresponding to each index value for providing stored corner points for outputs of the curve transformer, wherein:
the curve transformer outputs interpolated data (<NUM>) for input data values (<NUM>) falling between adjacent ones of the stored input values when the adjacent stored input values are different;
the corner points defined by the index values, the input values and the output values provide steps in the output of the curve transformer (<NUM>); characterised in that
the stored corner points include a corner point where the stored input value for a given index value N+<NUM> is less than the stored input value for the preceding adjacent index value N, whereby the output (<NUM>) of the curve transformer includes hysteresis.