This board is to drive a 12v 5A motor using a microcontroller.
I updated the BOM to reflect our use, currently we have to have six dedicated and three auxilary, making 9 total motor controllers coming in at just over $100 (not including shipping for the boards and parts). I think that this is pretty good because the closest equivalent circuit that I can think of is using four solid state relays per motor which would cost significantly more, and there would still be the same hurdles to overcome. Even with two solid state relays and the transistors it would have been more expensive.
This seems to have done the trick.
For the CRC8 I adapted the python code to the arduino/stellaris (same thing) but the link was interesting too.
Using the analog pins was a horrible idea. Got reliable communications just the same.
Yesterday, I thought that I had all of the kinks worked out. I had three boards working off of one arduino and everything seemed to be going well, but then the problems started again.
I am pretty sure that the problem that I am having is the timing for the serial communication. Sometimes the string will get messed up, and I had come up with several ways to make sure that I got a good data stream, but it was at the cost of update time. Ensuring that I got good data put considerable lag in the system. So for some applications the serial comms will work fine, but for this it won't. As of yesterday I thought I was beat, but there may be one more option.
The stellaris launchpad that is communicating with the arduino seems to be getting the data and getting it correctly every time, so what I am going to do is use it to pwm some pins on the stellaris launchpad and hook those pins to the analog pins on the arduino.
What I am hoping to accomplish is that the arduino only has to poll it's analog inputs and then produce a pwm on the appropriate pin. One consideration is that because the update will be faster and cleaner I will have to create a longer delay before changing the motor speed so that I don't keep popping the transistors.
More to follow...
I blew up 5 tip102's and 3 arduino's trying to figure out where I went wrong. The problem was that I did not have a delay before changing the rate of pwn to the transistor. The problem is fixed and 90ms was as low as I dared to go. Unless you want to remove the package of a transistor very quickly I would not recommend using the code on github. I will update it in the next couple of days as it now seems to be working.
I used the autorouter tool in eaglecad for the control board, and for this it seemed to work ok. I had tried it on a more complicated board and there were horrible results ( in my uneducated opinion). I think this is the extent of the autorouter capabilities.
I tied the power from the lm317 to vcc instead of raw. I corrected it by clipping the pin off of the header for the arduino and jumping a wire from the vcc hole to the raw pin.
I also corrected the drawing, so there are no versions of the drawing with the mistake.
It may also be advantageous to add a jumper to the board for addressing so that only one program is needed for the arduino's.
It is also good to know that the pins on the stellaris launchpad are tolerant of ~8v.
Control boards arrived.
Stack of three. The control boards are populated with an arduino, but the 'slave' boards are not.
It worked better than I thought, without the heatsink. Building and running them without until I find a reason not to.