What was the maximum pwm frequency you could use with the power board?
I think it is not a big problem. I have an Odrive Board, it can not work well when the required speed is smaller than 0.5rad/s.
I used the odrive with a hoverboard motor and in torque controll mode and my usecase was 0rmp as a force feedback device. And I didnāt see any problems.
Use velocity mode and set vel=0.05
And tell me the result.
Usually, 0 rpm is easier than 0.5rpm.
Little problem with that, the odrive let the smoke out thatās why Iām back at simplefoc.
Hey guys,
Thatās great to hear, the version v0.3 is in the dev branch and Iāll do some minor modifications and release version v1 which will be stackable.
So if youāre interested you can test it as well.
But I am not going to be selling this board as a product
have you tried using the current sensing?
The nature of the problem is the same, if you use ordrive at low velocity and have a bit of choppy signal, then you either have a too low sensor resolution or your pid parameters need a bit of tuning.
And in the case of the powershield it is the hardware limitation of the driver, and it introduces a lot of inherent problems.
So the max pwm frequency they advertise is 25khz. But in the BLDC mode with three of them, for a decent result youād need to go under 5kHz.
According to Infineonās engineers this chip can be safely driven at about 1kHz. This is what the engineer said, below is the thermal simulation.
Since we have protection feature integrated into IFX007T, we won't have any cross current caused by the delay variations. But due to the variation the output duty cycle might be a bit different from the input duty cycle.
I did some thermal simulation based on your mission profile and some other assumptions:
Load to Vs
Vs = 24V
I = 20A
PWM-Freq=16KHz
Duty cycle: 50%
slew-rate: as fast as possible
PCB: 2s2p
The temperature increase is roughly 90°C after 10s. The switching loss is the main contributor to it. If the application keeps running afterwards, the temperature will keep increase and the device might be turned off by over temperature protection feature.
I did thermal simulation for the new mission profile below:
Load to Vs
Vs = 24V
I = 20A
PWM-Freq=1KHz
Duty cycle: 50%
slew-rate: as fast as possible
ambient temperature: 25°C
PCB: 2s2p
In this case, the temperature increase is only 59°C after 500 seconds, and the temperature curve is going flat afterwards.
What about Power Shield ? Is anyone currently working with this? Is current sensing will be implement on this board?
Hey @German_io,
At the moment the developement of this board is on hold. The current sensing is integrated on it from the version 0.2 and the version 0.3 is stackable (but not yet released - I would not suggest you to fabricate it yet).
The boqrd has two problems:
- BTN8982 is hard to obatain these days, they are supposed to be started shipping next year probabbly
- BTN8982 does not have a good performance for high frequency PWM signals as it was discussed in this topic earlier
Both of these contributed to the fact that Iāve decided not to continue the dev for it.
But it has some very good features as well:
- Inline current sensing up to 50 amps
- Tested up to 35Amps (10+sec)
- Stackable ( two of them on a single arduino uno headered device )
- relatively small layout
So the onlly way to get one at this moment is to fabricate it yourself. All the files necessary are in the git repo.
So, OK. But what is the way to control power bldc with simplefoc? In far future is it plannig to develop new power shield?
Hi @Antun_Skuric ,
First off, I just want to say this work youāre doing is fantastic and really important. Really excited to find Simple FOC and your progress on this Power Shield is really exciting.
Iāve been reading through this thread though and Iām unclear if the PowerShield in itās current version (0.2) is suitable for closed position control? We operate several BLDC motors in a farming robotics application using gear reduction of 20:1 or more so we operate at high speed but require precise position control for landing on targets and holding position. Could you clarify if given the limitations of the current board if it is still feasible to use in closed loop position control in our use case?
We were able to find a supplier for BTN8982 and are waiting for parts to arrive to build up a couple Power Shields for testing. I had a couple of questions if you have time to answer as well:
-
Implementing current sensing in SimpleFOC: The board calls for the INA240, after closer inspection on the photos I could see that it is the INA240A2 with a gain of 50v/v. Iām assuming we would instantiate with the
InlineCurrentSense
, but above you mentioned the board did not do bi-directional current sensing so will current sense still work with the FOC library in closed loop control? -
PWM Frequency: I noticed you mentioned PWM and the engineering note from Infineon which they recommended to run at ~1KHz. We operate at high speeds with 15:1 or greater gear reduction in position control mode. What are the effects of running at a lower PWM frequency?
-
The ODrive uses a 8 x 470uf caps in parallel on the DC bus side that appear to correspond to each output channel: 6 caps for two 3phase motors and 2 caps for the brake resistor. Is there a reason you chose one cap and/or any drawbacks to use more?
-
Back current: Do you know what the current behavior is for the board if it experiences back current from braking of holding position? We use a large battery 1kwh battery pack and use the regen features of ODrive but Iām fairly sure they just dump everything back to the battery and only redirect energy to the brake resistor if a certain limit is set.
Iām not sure if anyone else is interested in BTN8982
Infineon-Motor_Control_Shield_with_BTN8982TA_for_Arduino-UserManual-v02_00-EN.pdf
In this document, it is introduced that " Capable of high frequency PWM, e.g. 30 kHz"
For this driver, the word ācapableā is like saying a 100 kilos dumbbell is āportableā because itās got a big handle on it.
Hi guys, I am new to this forum and simpleFOC. I have been working with a cloned PowerShield circuit, a 24V battery, the ODrive D6374-150V motor controlled by an esp32. I followed the example code and got it working in a low power setting with the motor āvoltage_limitā set to 1.5V since I donāt want to over stress anything. The motor turns well but is weak and can be stopped by hand. I wanted to increase itās power and believed that that is done by increasing the motor āvoltage_limitā. Just in case I have a 5A fuse after the battery. As a first step I set āvoltage_limitā to 8 thinking out of the 24V supply voltage that should be Ok. Unfortunately that configuration blew the 5A fuse on the battery and also the āAā mosfet. I am at a loss and donāt know what I did wrong. Any help is much appreciated.
Sorry to hear that. D6374-150V ODrive motor is 70A. Setting the voltage at 8V out of 24V, you pushed 70/(24/8)~=23A which explains the blown 5A fuse. Since you also blew a mosfet your fuse was probably slowblow and didnt blow fast enough to protect the board, so you need to toss the whole thing into the trash.
The good news is that you lived to post here so say a prayer, thank the power electronic gods for protecting your life, limbs and eyes and buy yourself another board. You are very lucky.
Cheers,
Valentine
P.S. You probably also set a very high unrealistic PWM frequency which overstressed the mosfets and killed them. Again better kill a cheap Chinese board than yourself. Lucky, lucky you. Play the lotto.
Hi Valentine, thanks for your quick reply, that explains a bit. I checked the default PWM frequency and it is set at 25kHz. I am still not sure why that blows the mosfet. Should I lower the frequency? How should one approach this? Bit difficult if a value that is picked too high blows the board (mosfet). Many thanks again for your help.
These mosfets cannot run at more than 10kHz. Ideally they can run best at 5kHz or lower. Some people even suggest 1kHz. Please read first the entire thread above from the beginning.
Hi Martin,
Ouch! This motor only has 39mΩ phase resistance, see:
Itās just a āroughā estimation, but at 8V and 39mĪ©, the DC current would rise to 205A. At 24V, it would be 615A⦠dynamic currents would presumably be lower, but still much too high for the driver. no wonder the MOSFET blew. In theory, your fuse should have protected it, but different fuses have different speeds, and I guess this one wasnāt quite fast enoughā¦
1.5V was probably still a bit high, but apparently not enough to damage anything.
For this type of motor you want to:
- lower your PSU voltage so you donāt rely only on software voltage limits.
- ideally use current sensing and current control to directly limit the current rather than the voltage
For the Powershield MOSFETs, Valentine has already pointed out that the PWM speed should not be too fast. the FETs canāt handle it.
Hi Valentine and Runger, thanks for your help! When I get a new board I shall lower the PWM frequency and set the voltage back to 1.5V. What shall I change to increase the power/torque of the motor? What other settings would you recommend I try without risking another blowup?
- Please, work with full protection. Eyes, and hands (goggles and gloves).
- As @runger mentioned, work with low voltages. Very gradually increase voltage and current limits.
- Increasing torque, you need current sensing and closed angle sensor loop (halls or even better, absolute). Iām assuming you just ran open loop velocity?
- Use heatsinks on the mosfets. Large heatsink, and a fan to cool the heatsink down.
- Do not exceed PWM 5kHz. It will make a loud very high pitched noise, thatās the capacitors, itās normal.
- On this motor, the power shield is not nearly sufficient to saturate it and develop full torque. You need a driver with current sensing and high power discrete mosfets, which you can easily pump 20kHz and higher, and Iām talking 300A mosfets (peak current 1200A) like those
Unfortunately those are custom, you cant find then anywhere and they are out of stock. For example, the ODrive board cannot drive that motor, it will blow up. As @runger noted, the peak current at 24V will hit over 600A.
- Use very thick wires. To give you an idea how thick, your motor requires at least 5mm thick wires. With the headroom, Iād go for 7mm thick wires. Thatās a copper wire as thick as a pencil. Also your motor will probably need cooling at max current.
- Please, work with full protection. Eyes, and hands (goggles and gloves).
Anything over 30A is a completely different game and you tried to play in the major league. You need to start a lot smaller to just get some experience, else you may literally kill yourself. Baby steps.
Cheers,
Valentine