I2C Controlled, FOC capable BLDC controller

The Qwiic BLDC is an open source, I2C controlled/programmed, FOC-capable, ESC and BLDC driver. It's based on Allegro's A98301 IC.

Similar projects worth following

That this becomes an actual product on Tindie that can work with hobby BLDCs, but can control them with greater precision and accuracy over I2C. I have prototypes, but I still need to fix some things in the software (fine-tuning the motor parameters) and the hardware (using even beefier MOSFETs)

There are two prototypes currently: a high current (~26A) version using beefier "powerPAIR" MOSFETS, and a lower current version using SOIC-8 dual MOSFETS. The rest of the circuitry is the same on both.

Even though the dual MOSFETs on the high current version say they can handle 30A, I would say the maximum average current input to the ESC should be about 1A. It needs beefier MOSFETs.

Python module for controlling the IC through an MCP2221A (can definitely be ported)

x-python - 8.09 kB - 11/21/2023 at 23:00


PCB_PCB_Qwiic BLDC copy_2023-11-21.json

PCB design for higher power version (import to easyeda)

JavaScript Object Notation (JSON) - 567.71 kB - 11/21/2023 at 22:56


SCH_Qwiic BLDC higher power_2023-11-21.json

Schematic for higher power version (import to easyeda)

JavaScript Object Notation (JSON) - 97.78 kB - 11/21/2023 at 22:55



Gerber for the non-higher-current version

x-zip-compressed - 82.67 kB - 01/20/2023 at 00:04


PCB_PCB_Qwiic BLDC HC_2023-01-19.json

Easy EDA json (import) for the higher current version

JavaScript Object Notation (JSON) - 567.71 kB - 01/20/2023 at 00:02


View all 11 files

  • There are better ways

    YSPACE Labs11/21/2023 at 22:55 0 comments

    There are definitely better ways to do this. The Allegro IC seems to be more suited for driving fans instead of precisely actuating BLDCs. There are also projects like SimpleFOCProject to make FOC controllers with microcontrollers like the RP2040. A microcontroller also gives you more flexibility in how you want to control the motor. So, I'll be retiring the project. Still was cool to work on though.

  • First testing until it blew up

    YSPACE Labs01/17/2023 at 15:34 0 comments

    I got the boards, soldered the components, and fired it up. Nothing blew up then, but the motor did not work. After adjusting some i2c settings (including turning off OCP (which was not the best idea (although that's what made the motor work (although it may have been because of a shoot-through issue rather than a motor issue)))), the motor jerked around. After adding more registers to my code, I was able to make it jerk better, but I wasn't able to get it to rotate for long at all (only intermittently, randomly, and not many more than 5 turns). I though that maybe another bldc would work better since the one I had came with an esc from Amazon for about $20. (It's a hobby outrunner motor). I borrowed a Neo 550 motor, attached it to the driver, and turned it on. It worked for a short time, but the current limit of my power supply started turning on and off rapidly, and the board started clicking. I plugged in the first motor, but it didn't work. The board just made a clicking sound. It turns out the B phase dual mosfet was shorting to PVCC. I replaced it with a spare dual mosfet, but after running the original bldc for a while, the board made the same clicking sound and the A phase shorted to PVCC. I think that a motor like the Neo 550 needs an insane amount of pulsed current that the mosfets cannot handle because of the motor's low resistance and inductance. Turning off OCP may have allowed this to happen. 

View all 2 project logs

Enjoy this project?



ngcolin wrote 03/27/2023 at 17:37 point

A89301 gate drivers limited output current capacity, that likely limit the MOSFET and BLDC motor that it can drive. TI has a LM5106 gate driver IC that has high current drive and dead time.

Dead time is the timing Gap between upper and lower MOSFET activation, to prevent shot thru, and cause destruction.

Plan to look into A89301 demo board, its GUI, and i2c Cable, from Allegro Micro (Manchester, NH).

  Are you sure? yes | no

Samuk wrote 01/15/2023 at 23:58 point

A lower-power version of this would be good IMHO

Perhaps as a shield for beaglebone

With Qwiic for I2C if you don't have/want a Beaglebone

  Are you sure? yes | no

YSPACE Labs wrote 01/16/2023 at 23:02 point

That would be a good idea. Perhaps my next version will change to using an actual microcontroller. RP2040 would be a really good choice (pio might be useful). Those boards are expensive though with 2oz copper on 4 layers. Mine only uses 1 oz copper and 2 layers. Haven't completely power tested it (because I can't get a motor to spin yet), but I think my thick traces and planes are good. The mosfets need to be beefed up because the 70v siz254s blew when I attached it to a neo550 bldc (actually worked for a while, then it blew). (Don't know exactly why, but the top mosfet completely shorted across drain and source)

  Are you sure? yes | no

Samuk wrote 01/17/2023 at 07:52 point

Great, I think the Beagle would be a good size/ form factor.

The SimpleFoc forum would be interested to see your design(s) I think. You may also like some of Valentines work

This one is close to what you're doing

Or this one we did:

  Are you sure? yes | no

Samuk wrote 01/15/2023 at 22:52 point

Will this be running


  Are you sure? yes | no

YSPACE Labs wrote 01/15/2023 at 22:55 point

no, because it uses Allegro's A89301 IC. But I might move to a microcontroller later as it has more flexibility since I've found several disadvantages with the A89301.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates