Giter VIP home page Giter VIP logo

ifx007t-motor-control's Introduction

IFX007T-Motor-Control

IFX007T NovalithIC™ based DC motor control

Build Status

Library of Infineon's BLDC motor control shield for Arduino IDE. Refer also to the Board manual.

Summary

The (Brushless) DC motor control shield from Infineon technologies is a high current motor control board compatible with Arduino and Infineon’s XMC4700 Boot Kit. It is equipped with three smart IFX007T half-bridges. The BLDC motor control shield is capable to drive one BLDC motor. Alternatively, it can be used to drive one or two bi-directional DC motors (H-Bridge configuration, cascaded to support second motor) or up to three uni-directional DC motors (half-bridge configuration).The implemented integrated IFX007T NovalithIC™ half-bridges can be controlled by a PWM via the IN Pin. Interfacing to a microcontroller is made easy by the integrated driver IC which features logic level inputs, diagnosis with current sense, slew rate adjustment, and dead time generation. The three IFX007T half-bridges are also fully protected against over-temperature, under-voltage, overcurrent and short circuit events.

Key Features and Benefits

  • Compatible with Arduino Uno R3
  • Capable of high frequency PWM e.g. 30kHz
  • Adjustable slew rates for optimized EMI by changing external resistor
  • Driver circuit with logic level inputs
  • Diagnosis with current sense
  • Protection e.g. against over-temperature and overcurrent
  • Brushed and brushless DC motor control up to 300W continuous load
    • 8–40V nominal input voltage (optimized for 24V)
    • Average motor current 30A restricted due to PCB (IFX007T current limitation @ 55A min.)

Supported Microcontroller Boards

Half bridge H-bridge BLDC BEMF BLDC Hall
Arduino UNO yes yes yes yes
Aruino Mega2560 yes yes yes yes
XMC4700 yes yes no yes

Usage

Please follow the example sketches in the /examples directory in this library to learn more about the usage of the library.

PCB Design Data

In case you want to change the design or reuse it for your own projects, please find the board design for EAGLE under the following link:

BLDC Motor Control Shield Design Data

ifx007t-motor-control's People

Contributors

brixinmotion avatar djaumann avatar ederjc avatar jaenrig-ifx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ifx007t-motor-control's Issues

IFX007T-Motor-Control.h

Hello,
the library "IFX007T-Motor-Control.h" runs perfectly with the Arduino UNO.
Since I need more free pins I have to use the Arduino MEGA2560.
Is there already a library for this, or when is an update of the "IFX007T-Motor-Control.h" planned?
I only found one as of October 6, 2020. However, this is only for the UNO.
I would be very happy about a positive answer.

Best regards
Klaus

BLDC_HALL not compatible with XMC7400 Relax Kit?

I am trying to use BLDC_HALL.ino with XMC7400 Relax kit and IFX007T Shield using a 16 pole BLDC with the sensor. The motor just gives jerk movements and isn't fluent. Is the firmware provided really compatible with Relax kit(read in the doc that it is)?
If not, what modifications can I go with?

Reference voltage calculation

Hello,
nice library. I used it to control a BLDC motor with an arduino Duemilanove using BEMF measurements and it works nicely.

I have a question though : In "void IFX007TMotorControl::DoBEMFCommutation(bool direction)" of the Cpp file, the reference voltage calculation formula is :

V_neutral = (uint16_t) (analogRead(_PinAssignment[REFVOLTAGE][0]) * (_CurrentDutyCycle/255.0)+0.5)-_V_NeutralOffset;

The question is : what "+0.5" stands for? Why add a constant and why 0.5?

Great thanks for your work.

Marc

Phase delay calculation

Hello,
In the function "void IFX007TMotorControl::DoBEMFCommutation(bool direction)", shouldn't the line

if(phasedelay > MotorParam.Phasedelay[1]) phasedelay = 120;

rather be

if(phasedelay > MotorParam.Phasedelay[1]) phasedelay = MotorParam.Phasedelay[1];

so the phase delay would be set equal to the predefined value at high duty cycle ?

Best regards.

No LED?

Since there is no LED light on the shield, how do you know that the shield is up and running?

Keyboard Input not working.

Uncommented
//======= Very important ========
#define DEBUG_IFX007T //Uncomment, if you wish debug output or tune the motor (Disables automatic V_neutralOffset)
//===============================

Used bldc pole find Sketch, all working, counts correctly ( i have 6 pole pairs)_**

Modified BEMF sketch for 6 pole pairs
bool direction = 1; // 0 or 1
uint8_t in;

//Create an instance of 'IFX007TMotorControl' called 'MyMotor'
IFX007TMotorControl MyMotor = IFX007TMotorControl();

void setup()
{
Serial.begin(115200);
Serial.println(" Infineon BLDC motor test! ");

MyMotor.begin();
// Adapt the following values according to the README if necessary
MyMotor.MotorParam.MotorPolepairs = 6; // Amount of polepairs. If your motor has 8 poles, it has 4 pole PAIRS)

Got this on Serial Monitor:
Infineon BLDC motor test!
Debug mode is active.
Sensorless BEMF mode
Started up sensorless BLDC motor.

Using t, g ,r,f,e,d keys ... nothing happens. Motor does 1 comutation stop, 1 comutation stop .... Any thoghts?

TY

V_neutral_Offset

Hello,
it is not clear to me where the V_Neutral_Offset used to calculate V_Neutral for BEMF zero-crossing detection comes from (electrically, I mean).
Also, how did you measure the raw V_Neutral_Offset values in the "explanation_parameters" graph shown in the readme file ? In other words, how could I measure it at various duty cycles in order to find the V_neutral[n] parameters with my own setup ?

Thanks a lot for your help.

Incomplete PCB design data!

Hi,
Thanks for providing design files and all supporting libraries for IFX007T motor shield.

But, in the PCB Design Data, the .brd Eagle file is incomplete and layout is cluttered. I had a requirement for it to do some analysis and test and it would be helpful if it was fixed. Kindly look into this issue.

Screenshot (1025)

IFX007_BLDC_BEMF.ino

Hi, great Lib.

One query: It is not clear whether this code is compatible with 32bit arduinos such as the Zero SAMD.

Will all of the timer code work?

Are you able to confirm this please.

Regards

is an FOC implementation possible

Hello,

Has anyone tried to implement an FOC algorithm using the Arduino IDE but maybe something more powerfull than an Uno, like a Due ?

Best regards

IFX007T & BLDCSHIELDIFX007T won't drive sensorless motor

We have reviewed all available documentation including the sample code from the Arduino website (https://www.arduino.cc/reference/en/libraries/ifx007t-motor-control/). Version 1.1.0 drives our motor, while the Github Version 1.0.0 does nothing to the motor, even though the "find poles" program does work properly. (https://github.com/Infineon/IFX007T-Motor-Control/)

With some added debugging statements and an ammeter in the circuit, we can marginally run the sensorless BLDC motor that is rated at max 10A at 12V, but only with no load so far. However, it is very rough and pulls excessive current on start-up (13A) for about 2 seconds, then settles down to 5.5A. This is using Version 1.1.0 code available on the Arduino website. Version 1.0.0 from Github doesn't run the motor at all.

The sample code was put into folder MyMotor as described in the documentation:
MyMotor.ino
IFX007T-Motor-Control.h
IFX007T-Motor-Control.cpp
Documentation referenced:
https://www.infineon.com/cms/en/product/evaluation-boards/bldc-shield_ifx007t/#!documents
https://www.infineon.com/dgdl/Infineon-IFX007T-DS-v01_00-EN.pdf?fileId=5546d46265f064ff0166433484070b75
https://www.mouser.com/datasheet/2/196/Infineon-Motor_Control_Shield_with_IFX007T_for_Ard-1551136.pdf
https://community.infineon.com/t5/forums/searchpage/tab/message?advanced=false&allow_punctuation=false&q=IFX007T

The only code changes were:

  • the number of pole pairs to 2 based on running "Find_polepairs.ino"
  • debug statement uncommented
  • SensingMode = 0 for the sensorless motor
  • added 2 Serial.print() statements in "loop"

The electrolytic capacitor heats up very quickly; faster and hotter than the MOSFETs, to the extent that we won't run the ESC for more than 30 seconds for fear the capacitor will explode.

Varying the parameters with the Arduino IDE "Serial Monitor" has little effect on the 5.5A current draw or the RPM.

A most curious observation is the effect that 2 Serial.print() statements have on the way the motor runs. With two print statements in the Arduino MyMotor.ino "loop", the motor runs at 5.5A, but with these two print statements commented out, the motor doesn't run. It just pulls 13A @ 4V (because it draws down the 10A 13V power supply) and never stabilizes at 5.5A as it does when the print statements are included. It also only runs IF there is an ammeter in series with the power supply. Remove either the Serial.print statements or the ammeter, and the motor struggles to start, dragging down the power supply voltage, and hard stops after about 3 seconds, still pulling 13A.

Questions:
Is there any tool to exercise the motor that determines what the various parameters should be?
Is there a Windows GUI to change the parameters and RPM/duty cycle?
Can you suggest how we can properly run the motor?
Is there a document that explains the function of the various parameters?
e.g. 0.01 has no meaning and there is no explanation how to set these values
PI_Reg_P = 0.01; // P value for the PI-RPM regulator
PI_Reg_I = 0.01; // I value for the PI-RPM regulator

Environment: Windows 10, Arduino IDE Version 1.8.16, Arduino UNO (and 2560 - same results), low resistance (0.05ohms) & low inductance pump motor rated at 12V, 10A and 10,000 RPM.

Thank you for any help you can provide,
David Cyr

formula for V_neutral

Hello,

Is the formula for v_neutral correct?
_V_neutral = (uint16_t) (analogRead(_PinAssignment[RefVoltage][0]) * (_CurrentDutyCycle/255.0)+0.5)-_V_NeutralOffset;

should it be *0.5 instead of +0.5, given that v_neutral is half of the reference voltage?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.