Torque Ripple reduction BLDC

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Torque Ripple reduction BLDC

2,473 Views
manishsangram
Contributor IV

Hi,

 

We are using the S12ZVMC128 MCU and a BLDC motor and running it at 150 to 8000 RPM

We are presently using six step BLDC software with BEMF zero crossing.

The big problem is this is causing a lot of torque ripple which in turn is causing lot of acoustic and vibration problems. 

We want to know if we can use any techniques to reduce the torque ripple. 

We have already tried tuning various aspects like PWM frequency, ad. angle, etc. but the noise due to torque ripple is extremely high for our requirements.

What can we do to dramatically reduce this. 

One option we came across are suggest use of Sinusoidal scalar control for PMSM which we have no idea how to implement for BLDC. However any other simpler suggestion etc. would be highly appreciated.

Our hardware is single shunt due to BLDC implementation. So we need a single shunt solution.

Basically we need the easiest single shunt solution with lowest vibration. If it works for BLDC thats perfect, otherwise PMSM is also okay (we have custom motor winding which we can change). SPWM, SVPWM, Sinosoidal, FOC all okay but ordered in descending order of complexity!

RadekS

0 Kudos
9 Replies

1,614 Views
pachamatej
NXP Employee
NXP Employee

Hello,

I believe you have listed most of the methods which should help. Let me comment on the methods a bit:

  • Trapezoidal (6-step) control: it is very good method for purely trapezoidal back-EMF shaped motors (pure BLDCs). The complexity of the algorithm is very low and it can fit in less than 10us of the S12ZVM @ 100MHz. However, audible noise might be the issue here, even bigger if the motor is "more sinusoidal" back-EMF shaped.
  • Sinusoidal/Space vector PWM: In sensorless control, the commutation is controlled based on the back-EMF zero-crossing as in the previous case. However, the PWM needs to be driven to "open" the back-EMF measuring window. So far I have seen either simply masking the PWM for a short time when the zero-crossing is expected, or using dead-time of the MOSFETs to sense the back-EMF. But please keep in mind that those methods might be protected by patents. Currently our NXP solution does not use the sinusoidal nor the SVPWM.
  • Scalar control: I would say this is not a "control" since you don't know the rotor position. In this mode, the rotor position is given by it's actual mechanichal load. If not loaded, the motor will consume a huge current, trying to magnetize itself, but the permanet magnets would prevent this (the core is already almost saturated). This is not very efficient solution.
  • FOC: The algorithm is very complex and for the single-shunt sensorless control, it may take more than 60us on S12ZVM @ 100 MHz (the example code at MTRCKTSPNZVM128|Development Kit S12 MagniV|NXP is taking 75 to 80 us, but it is more educational code rather than production version). It requires very good DC-link current sensing circuitry and in contrast to the 6-step control, the current sensor have to be scaled to both polarities, positive and negative currents (the reference point of the operational amplifier shall be 2.5 V). The AN5327 algorithm uses "double-switching" to reconstruct the motor phase currents. This introduces some higher switching losses, however it is much less audible-noise in comparison to "phase-shifting" methods used in devkits of other companies. If you have our MTRCKTSPNZVM128 devkit, you can easily compare the 6-step and the FOC algorithm noise (flashing the examples for MTRCKTSBNZVM128 and MTRCKTSPNZVM128).

Nowdays, the worldwide trend is more in the FOC direction thanks to higher efficiency of the system. However, the motor manufacturers are trying to save some materials, making the electrical response very fast, thus 100us sampling time is no longer enough and the FOC control algorithm is turning into a big challenge for S12ZVM. The same situation is also for OEM requirements, where at least 40% of the algorithm shall be left void for safety reasons. In response to that, we are working on constant optimizations of our AMMCLib to reduce the CPU load (60us is already possible with the latest AMMCLib v1.1.13). An alternative would be to proceed with less robust algorithms (e.g. flux observer), or remove the D-Q current controllers. Another alternative is the SVPWM, but also the 12-step communtation (some articles can be found at IEEE Xplore).

I hope it helps to make your decission. Anyway, feel free to comment on this.

Best regards,

Matej

1,614 Views
manishsangram
Contributor IV

Hello Matej,

Your reply was very informative but it is not good news and does not solve our problem.

We need max 7000 (can settle for 6000) RPM with 7pp. We have single shunt hardware.  From your reply the only solution available seems to be FOC and then again it won't work because CPU it too limited for computation

1) Is there any way to boost/overclock CPU for short periods above 100Mhz (like 1-2 second) to accommodate FOC?

2) We have additional code which has logic and needs to run while motor is running so we need spare computing power. Using Codewarior IDE, how can we find the time a function consumes (profile)

3) It seems to me that Sinusoidal/Space vector PWM may be more efficient and probably the right solution for us. Are there any notes from NXP on it on any MCU? and software on any MCU?

4) Are you saying that if we have 2 shunts then the FOC algorithm and it's implementation for S12Z would become much more efficient?

5) Can you provide Altium designer files for schematics and board design for such as two shunt implementation? 

6) Is there any notes or guidelines or details which can help us make sure that the present BLDC form of our motor matches the BLDC of the PWM being generated by the our software... meaning anything we can check on oscilloscope or Freemaster which can help reduce the problem with the existing BLDC itself?

0 Kudos

1,614 Views
pachamatej
NXP Employee
NXP Employee

Hello again,

Let me comment on your questions:

I see your motor is 7pp and running at 6000 to 7000 RPM. It seems like a big stator frequency would be needed (816 Hz), which means only approx. 12 samples per one sinus wave @ 10 kHz sampling rate. The torque ripple from the electric part depends on the electrical response of the motor. The torque ripple from the magnetic part would require some software compensation, which would be of a poor quality if only12 samples per sinus wave are used. However, it is still possible and it highly depends on the shape of the back-EMF under different load conditions.

The S12ZVM is capable of running a PMSM FOC sensorless algorithm in 60 - 70us (dual or single-shunt), thus ok to run along with 10 to 20 kHz PWM. If you need shorter computation time, it is still possible, but only with a different set of functions (e.g. a flux observer instead of the back-EMF observer, look-up table based functions instead of polynomial versions, etc.).

Ad 1) There is no possibility to overclock the device. Sure, you can do it on your own risk, but it is out of specification.

Ad 2) The performance data may be very different for different usage (depending on the data transfer, function calls, translation, optimization, etc.). We know the number of CPU clocks for each AMMCLib function, but I believe the information is integral part of licensed version of the library (thus can be shared over the official channel only). The easiest way for engineers is to set an output pin before and clear that pin after a certain set of functions is called. This pin is than measured using an oscilloscope as a pulse width.

Ad 3) We provide examples of the FOC, which include SVPWM from the AMMCLib library. It is available for many platforms. For more info, please visit Automotive Math and Motor Control Library Set|NXP 

Ad 4) The single shunt solution along with the FOC algorithm requires the motor phase current reconstruction algorithm to have all 3 phases currents available. This algorithm a) takes some time and b) requires special techniques to make at least two phase currents "visible" to the DC-link current sensor (e.g. double switching). Using two phase shunts eliminates that additional payload.

Ad 5) I have no design data available and it would require a special request. However, our devKit designs (schematics) are available at Automotive Motor Control Development Solutions|NXP  and for S12ZVM especially at MTRCKTSPNZVM128|Development Kit S12 MagniV|NXP 

Ad 6) I would recommend to follow some literature available for 3-phase motor control. My first step would be to measure all the motor properties (resistance, inductances, back-EMF shape, motor constants, etc.) e.g. using https://www.nxp.com/doc/AN4680. Please keep in mind that our solution and guides don't fit to all the possible motors you may have. It is a concept only for mainstream problems.

Please let me know if it helps.

Best regards,

Matej 

0 Kudos

1,614 Views
manishsangram
Contributor IV

Hi Matej,

Thanks for a detailed answer once again!

1) What is the 'optimal' sampling frequency for 200 RPM and 7000 RPM per sine wave? 

2) Refer to Minibrd for ~2.5V ADC reference. Can we only use a voltage divider? What is the need to have the LM4041? We ask this because we have space constraint as well as BOM cost limitation. Presently we have removed this reference as BLDC does not require -ev voltage. since there is no current flowing a VD should be okay?

3) Refer to Minibrd How critical is L2 for VDDA if we are only using it for ADC and nothing else. Again we have removed it and wondering if we should add it back.

4) For Sin calculation we would use lookup table only, why would we calculate the value? Is there any advantage? We can spare 2-3Kb of Flash for this.

5. Is BOOST circuit required for FOC or is it optional? 

6. We can make special request through our NXP (India) office. However we need to be specific. We already have an NDA signed with NXP/Freescale.

7. Referring to AMM, how can we get the production ready code? Does it support Sine/Cosine LUT or does it always calculate? 

0 Kudos

1,614 Views
pachamatej
NXP Employee
NXP Employee

Hi again,

Ad 1) Unfortunately, there is no a simple answer to this. You would need to specify the requirements on the performance quality very precisely, considering the motor parameters and properties. If you don't have any specification, then it would be just up to your feeling from the tests you would perform.

Ad 2) The LM4041 is the 2.5V voltage reference, however, you can use a voltage divider with a capacitor connected in parallel to the bottom resistor. The divider resistors should be a double of the opamp feedback resistor (e.g. the feedback is 20kOhm, then the dividers would be both 40kOhms), the capacitor of 220nF would do the filtering.

Ad 3) The L2 inductance is just a filter for the cases of using a ballast transistors or boost converter. I believe you can just follow the instructions of the datasheet, pg. 77 or Figure 1-18 and to skip the L2.

Ad 4) Look-up tables are usually less accurate than the polynomial approximation. However, the look-up tables may be faster in terms of CPU load. Our AMMCLib provides only the polynomial form of sin/cos calculation.

Ad 5) The boost circuitry has nothing to do with the motor control. It is an optional circuitry for the cases when the device is supposed to operate below 10 Volts (please see the datasheet).

Ad 6) Yes, please, use the official channel/contact person to get the AMMCLib information.

Ad 7) The AMMCLib library (licensed version) is provided in production-ready quality with all the documentation needed for the certification of your application. Please refer to the AMMCLib site Automotive Math and Motor Control Library Set|NXP  There is also the fact sheet that contains the basic information. The library is included in our Automotive Motor Control DevKits in evaluation version, where the datasheets are attached Automotive Motor Control Development Solutions|NXP 

Best regards

Matej

0 Kudos

1,614 Views
manishsangram
Contributor IV

Hi Matej,

2) With reference to MiniBrd(S12ZVML-MINIBRD_UM.pdf), the feedback resistor is R17 (40K), so we would need 80K each on the VD? Do any other resistors have any impact (like R18,R19) ?

3) We are using ballast transistor for VDDX. Under what circumstances would L2 really help?  

4) Okay, Can you point out which functions of AMMCLib would we have to replace in code if we need to use LUT ?

5) Sorry, I meant to write Charge pump VCP pin and CP pin are disconnected and relevant circuit The D2, D3, C3, C4 charge pump removed. Will this effect FOC?

6) Moreover,  for 7pp x 6 steps, can we say that each electrical step (7x6=42) leads to 8.57 degrees of movement (360/42 = 8.57), which may be quite high and that with FOC we could reduce dramatically? So if we wanted to reduce this to 1 degree what PWM frequency would we need?

7) Is it possible that if we move away from zero crossing + time logic to integration based commutation, the motor would run smoother with less torque ripple?

0 Kudos

1,614 Views
pachamatej
NXP Employee
NXP Employee

Hi,

I'm sorry for the delays, but since I'm not a technical support, I have only limited time to answer.

Ad 2) With reference to the MINIBR and in order to do the voltage reference using resistors, you would need to replace R23 with 80k, R24 with 80k and remove R26, R27 and D7. You can use whatever R17, R23, R24 combination with respect to the input impedance and respecting R23 = R24 = 2*R17. Resistors R18=R21 and R19=R22 are basically just the input resistors in T-filter configuration and it also helps you to adjust the gain using a combination of two resistors. The gain/attenuation is A = R17 / (R18 + R19).

Ad 3) I have seen some designs using a ballast transistor and not using the L2 configuration. But I believe it is not only about the schematics, but also about the layout of the PCB. Please follow the HW design guidelines https://www.nxp.com/docs/en/application-note/AN5207.pdf. I believe you can still evaluate the MINIBRD performance with and without the L2. If you are interested in more details about the ballast transistor and L2 usage, please start another thread to allow the tech support to join you.

Ad 4) There is no need for replacement. If you find the algorithm to be too CPU consuming, then you can optimize the code, especially eliminate various function calls (which are provided to make the code more clear and understandable). The FOC algorithm with single shunt current reconstruction can be shrunk in 65 to 75 us @ 100MHz. Usage of Lookup tables is more or less limited to these functions like sine, cosine or square-root. It could help with the algorithm speed, but it would introduce some precision issues (depends on the size of the LUT).

Ad 5) I'm afraid that without the charge pump, you would face several switching issues even with the BLDC 6-step algorithm. For the FOC, I would strongly recommend to implement the charge pump.

Ad 6) Let's consider 7000 RPM and 7pp motor. The sine wave frequency would be speed * 60 / pp = 816.67 Hz. You would have 10,000 / 816.67 = 12.25 samples per sine wave @ 10 kHz sampling frequency. For electrical position resolution, it means 29.4 degrees, which makes 4.2 degrees mechanical. However, the commutation is very different in 6-step vs. FOC: the 6-step is hard-commutated (switched from one phase to another), while the FOC is sinusoidal (the commutation is smooth).

Ad 7) I don't have any personal experience with the integration method, but as far as I know, the integration method is just a method to find the time of commutation. The result is, the sensorless algorithm may be more robust at low speeds, but it requires more CPU load, since you would need to do the integration and evaluation within each PWM period. For high speeds, the zero-crossing detection is less CPU consuming. There is no positive impact on the torque ripple at all.

Best regards,

Matej

0 Kudos

1,614 Views
manishsangram
Contributor IV

Hi Matej, MatejPacha

It would really help to get our inputs faster as we are really trying to finalise our updates and truly appreciate your detailed replies.

1) If we remove R26 R27 and D7, R23 and R24 do not seem to form a voltage divider even if we connect the other end of R24 to GND. Can you confirm what you said will provided VDDA/2 reference?

2) We are getting perfect BLDC without charge pump even if we drive at 99.9% duty cycle. For FOC however we are not aware. Adding charge pump at this time is very tough.

3) Just want to know what would be an ideal frequency for 7000 RPM 7pp motor. Considering we can tolerate some amount of coarseness. 

4) The various 0E resistors eg. R4, R7, R11, R14 (for each phase) Can they be removed or do they have any subtle purpose?

5) With respect to RC filter we want to replace R7 from 0E to 10E and add a 3.3 Cap to GND. Would that be okay because the suggested RC filter in one of the documents had a 10E in series and another 10E going to shunt Cap 3.3nF  (so 1 10E series to HS0 and another going to a cap.) 

6) Can we run PMSM logic on MiniBrd ?

 

0 Kudos

1,614 Views
pachamatej
NXP Employee
NXP Employee

Hi, let me come back to you one week from now. I'm on vacation. Anyway, I see no obstacle for S12ZVM to run the FOC. It can be done in 60 - 70 us. It depends on implementation...

Best regards,

Matej 

0 Kudos