OpenMarine
What is the simplest way to implement a IBT-2 BTS7960 motor controller - Printable Version

+- OpenMarine (https://forum.openmarine.net)
+-- Forum: Pypilot (https://forum.openmarine.net/forumdisplay.php?fid=17)
+--- Forum: General discussion (https://forum.openmarine.net/forumdisplay.php?fid=18)
+--- Thread: What is the simplest way to implement a IBT-2 BTS7960 motor controller (/showthread.php?tid=3388)

Pages: 1 2


RE: What is the simplest way to implement a IBT-2 BTS7960 motor controller - seandepagnier - 2021-04-23

also there are counterfeit parts that have the right part number printed but generate much more heat.


The pwm for clutch is planned now 2 people asked about it....


RE: What is the simplest way to implement a IBT-2 BTS7960 motor controller - damien - 2021-04-23

Just few words to add to Sean and IronMan comments.

The IBT2 may be a frustrating experience with bad parts, incomplete soldering, missing components (I have one with missing resistors). On my side, I wanted to test the concept, code compatibility and the drivers behaviors with an oscilloscope. My main concern after these tests is heat dissipation :
 - I am not certain that the board design follows the BTS7960 manufacturer recommendations in term of heat transfer (lateral heat transfer through PCB tracks)
 - The implementation of the radiator on the back of the PCB is by no means enough to transfer heat properly and thermal conductive paste might not be sufficient either at high/continuous current. The reason, at least for the boards I have tested, is the lack of heat transfer through the PCB. A possibility is to increase the amount of solder of the through holes ; I have undertaken the mod for the sake of understanding but it is not very satisfactory in term of design. I may be able to complete observations with IR camera during next weeks but I suspect it will not pass the tests.

I have no ideas about long term reliability (especially with thermal stressing).

Regarding safety, the BTS7960 has a thermal safety control and will shutdown if temperature is too high. The datasheet is rather explicit on the consequence in term of component lifetime reduction should repetitive thermal shutdown occurs. It may advisable to apply the controller thermal sensor (ADC pin 2) directly on one of the BTS7960 rather than on the radiator...

All in all, it may be acceptable as a low cost solution for modest currents (I have tested up to 6A continuous so far) and with some understanding of the necessary checks and modifications to the board and peripherals. Having spare will certainly make sense...

Best regards,

Xavier.


RE: What is the simplest way to implement a IBT-2 BTS7960 motor controller - seandepagnier - 2021-04-24

I agree, 6 amps is ok, but 43 amp rating is in doubt


RE: What is the simplest way to implement a IBT-2 BTS7960 motor controller - Munz - 2021-12-05

(2021-04-13, 07:17 PM)damien Wrote: I am currently testing an IBT-2 with the latest motor.ino available on github repository with almost no code modifications. It works fine (after the usual dismantling of the radiator to ensure electrical isolation and apply thermal conductive paste before reassembling).

As Sean exposed, uncommenting #define VNH2SP30 is enough. Here are some notes taken:

   * IBT2 is supported but may require some adjustments for current image accuracy
   * Motor current is given by formula Il=Is*Kilis with Kilis=[3000,14000] centered on 8500.
   * This is a quite wide range and require calibration thanks to a potentiometer to avoid code modification
   * The current signal is at PWM frequency and may require a low pass filter (to be tested)
      IBT2 <-> arduino
       1. RPWM         D2
       2. LPWM       D3
       3. R_EN        D9
       4. L_EN         D9
       5. R_IS          R_IS & L_IS are connected together and linked to GND by 200ohm+1k potentiometer
       6. L_IS          A low pass RC filter based on 1uF and 1K resistor may be needed
       7. VCC         5V
       8. GND         GND

The sole modification required is the computation of the current image to match the output given by the IS resistor to GND.
if(pwm_style == 2) // VNH2SP30
       return v * 9 / 34 / 16;
The last line need to be updated.

I have chosen to keep the PWM frequency low to enable low velocities and limit BTS7960 dissipation.

Independently of the value of Kilis, I still have to check the accuracy of the current image vs PWM cycle (ie, at various velocities). This is on the list as well as a PWM on the Clutch to limit the power drawn by solenoids such as the ones of hydraulic pilots (the solenoid need to be energized full rate just a few seconds and then a PWM cycle between 50-70% is enough).

All in all and should Sean agree, I can propose some (very minor) mods to the code to support explicitly the IBT-2 based on #define options and Clutch PWM. It would be nice to have a hold-on and pwm as parameters through the various interfaces such as pypilot, web and opencpn but I have not looked at these codes yet.

Regards,

Xavier.

Hi, apologies for the noob question: I've followed your instructions (thanks Xavier, Sean and everyone else who has contributed! Smile ) with this motor controller and finally managed to get tiny pilot to drive my motor forwards or in reverse. The only thing is that I don't have a 1k potentiometer, so I just connected L_IS and R_IS to ground via a 680 ohm resistor which seems to work. Can anyone tell me what the resistance here is controlling, (motor noise pitch? Or something more critical?) and if the 680 ohms seems like a reasonable value? Or would a (lower?) value be better?

Thanks,

Manu


RE: What is the simplest way to implement a IBT-2 BTS7960 motor controller - damien - 2021-12-11

(2021-12-05, 04:53 PM)Munz Wrote: Hi, apologies for the noob question: I've followed your instructions (thanks Xavier, Sean and everyone else who has contributed! Smile ) with this motor controller and finally managed to get tiny pilot to drive my motor forwards or in reverse. The only thing is that I don't have a 1k potentiometer, so I just connected L_IS and R_IS to ground via a 680 ohm resistor which seems to work. Can anyone tell me what the resistance here is controlling, (motor noise pitch? Or something more critical?) and if the 680 ohms seems like a reasonable value? Or would a (lower?) value be better?

Thanks,

Manu
Hello,

Sorry for the late reply. Good to hear that you have started to implement Pypilot.

Regarding IBT-2 and L_IS&R_IS, these outputs are mirroring the current delivered by power stages of the two BTS7960 (Il=Is*Kilis with Kilis=[3000,14000] centered on 8500) . These outputs deliver a current and not a potential (voltage) hence the need for a resistor on the output to get a potential that can be handled by the arduino analog inputs. The reasonning behind the 200ohm+1k potentiometer mentionned is the relative large dispersion of the multiplier Kilis that has to be used to obtain the value of the current which means that calibration will be required. Such calibration can be implemented either in hard (using the 1K potentiometer) or in soft (modification of the code). I choose for simplification and possibility to swap between IBT-2 modules to stay with a hard calibration.
It is worth mentionning that these outputs deliver a signal modulated at PWM frequency. The pilot code is not designed to sync the analog reading with the operation of the FET bridges which means that values obtained by the ADC will be subject to caution. The code implement a simple averaging filter which takes care of some of this part but it may make sense to implement a low passs RC filter on the L_IS&R_IS output for further accuracy.


I would advise to look at the BTS7960 datasheet (https://www.digikey.com/htmldatasheets/production/70497/0/0/1/bts7960.html) to get a better understanding of how these drivers operate. This may help for future aspects of the implementation of this module for your pilot.

Best,

Xavier.