Do you prototype a new software algorithm, or do you just charge ahead and work on the actual design? Which is the best approach? Now, before you say: "It depends," let's set the stage with an example design and then you can chime in.
The discussion so far
Much of the discussion I have read about prototyping has been related to the use of evaluation and development boards to help prototype embedded systems. We try and leverage example code, drivers, application programming interfaces (APIs), and even third-party operating Systems that come with the board. These are all useful pieces of a potential design. In fact, most starter kits -- like the Renesas RX220 Kit shown below -- include a significant amount of example code. This allows you to get a feeling for the development flow, MCU interfaces, and some of the key functions of the device.
The Renesas RX220 Starter Kit.
Many more advanced kits also include sample code for specific applications. As an example, the Renesas RX600 Motor Control Evaluation Kit, shown below, includes a complete motor control demo and all the code required to implement it. It even includes the motor!
Renesas RX600 Motor Control Evaluation Kit.
The vector control algorithms used in the demo (actually three different versions: 3-shunt sensor-less vector control, 1-shunt sensor-less vector control, and a position control algorithm using an encoder) can provide a good starting point for your own design. Furthermore, the schematic and bill of materials (BOM) is included for the hardware-inclined -- this can give you a significant head start on your design.
The reason we are seeing more and more of these application-specific types of kits is because the software is becoming the main decision point for many applications and development efforts. Thus, microcontroller providers will continue to offer additional advanced kits with more of the software included.
This is clearly a good thing, but let's use a motor control design as our example design -- one we want to prototype -- and see what happens. Let's say we can get the example code via an evaluation kit. We could use this as the basis for our design, but then so could everyone else, which means it will be difficult for us to differentiate our design from the competition. If we want to implement a new motor control algorithm, we might not be able to use the existing code, so how do we prototype our algorithm?
It seems to me that, in a case like this, it would be great to have a prototyping platform for algorithms. For this type of prototype, I don't need to worry about execution performance, code size, or power consumption -- it's just a "proof of concept" for a new motor control algorithm. Perhaps I just want to see if I can get better torque control at low revolution speeds, for example.
What would you do?
So, what would you do to prototype this type of design? Would you use the MCU evaluation platform and code in assembly language or C? Would you use a numerical computing environment like MATLAB? Do you have a standard algorithm development platform for a simple language like Visual Basic, Java, or Python that you use to prove out key elements of the algorithm prior to targeting the final application? Maybe you use these opportunities to learn a new language or environment in order to create a prototype.
Let me know what you would do. What has worked well for you in the past? What was a disaster (we all want to learn from others mistakes)? Leave your experiences, thoughts, or questions below, and maybe together we can figure out some new approaches that will save us lots of time on our next design.