PRE POST WARING: This post contains the wishes and dreams of someone who is by all account not technically informed/trained/experienced enough (yet!) to make said wishes and have said dreams, specifically when talking about PCB design and writing software, and the technical challenges that come with it. This post, unless spun off (probable to happen, and I won’t stop it if it does), is targeting a lot more of the on-paper design that comes before hand.
With the advent of more and more brushless motor options coming to FIRST, it’s only a matter of time before we end up with a general motor ecosystem like we had before brushless, multiple motor options and multiple options to drive said motors, with general interchangeability between vendors. This begs the question, are there things the FIRST community is asking for in a brushless motor controller that is not yet available. Would these features need circuitry on the board, or does it only need software?
I ask this because, for better or for worse, I’m in the beginning research stages to develop my own brushless motor controller to emulate FRC style controllers. This project is a step down the line in a general wish to learn some more specific skills to add to my resume, specifically in the context of this project, PCB design and software/“firmware” development. Because this project is specifically aimed at emulating an FRC style motor controller, I figured I’d ask the community for a punch list of items they wish to see in a controller.
My background and degree is in mechatronics, industrial automation engineering, so I’ve got a lot of the general background knowledge one needs to take a crack at a project like this, specifically electrical theory and multiple classes and labs focusing on machine control and the safety that comes with designing control circuits and software. I’m currently gaining knowledge in PCB design during my internship.
I’ve been looking into the brushless motor driver ICs out on the market. Specifically TIs MCT8316Z, which on the face of the features list sounds like a driver meant for FRC applications, and from reading the data sheet, should be fairly easy to control from a micro controller (my current plan will make use of a COTS controller that plugs into board with the driver, I’m thinking a RPI-Pico/similar). The micro controller would then also be the vehicle in which to program/communicate with over CAN and handle inputs and outputs from a general data port for external control schemes (external limit switches/sensors/etc). In this way, a micro controller and this IC to me is no different (take that with a grain of salt) from a PLC and a VFD.
Then there’s the challenge of writing software to control the driver chip. When it comes to my own integration of this project, the firmware will most likely not be as finished as REV’s or CTRE’s software, nor the desktop apps as finished as REV’s hardware client or Phoenix Tuner. I understand that current FRC controllers can use the CAN bus or a simple PWM from the RIO to actually capture data needed to control the motor, and that any configuration is programmed into the controller beforehand and generally not changed during a match. All of that essentially to create a truth table in code that looks out the data stream coming in and determines high/low outputs to the pins on the driver IC.
On the actual “usability of the hardware” side, seems wago style lever connectors are becoming more popular in FRC in general, so I intended to design this board with those connectors for main power in from the PDP and out to the motor, and for CAN/PWM. I wish to have the final package similar in fit/function to the SPARK MAX. In fact a NEO/NEO550 will probably be the motor I end up using to test the board, so the encoder port will match NEO standard pin outs.
Other than reading through the data sheets for the both the mentioned IC above the the RPI-Pico, there isn’t much yet on paper, and most definitely nothing in stone. If it’s not obvious, the reason I’m even starting this thread so early on in the design process is that I wish for this project to be somewhat open source. I am not designing this controller for use on an FRC bot, or as anything I’d go to FIRST with the goal of developing a product for use in competition. I am designing this controller and documenting the process as a general resource to anyone who even thinks of doing this, especially because it’s technically totally possible for a team to develop their own controller, seeing as how PCB design software is included in the KOP now a days. (Maybe REV or CTRE would like to provide insight from their own products?)
So, just in case you forgot what my initial question was. What am I missing from my general understanding of FRC style controllers, and what features would you like to see in a controller that’s missing from currently available controllers?