11/19/09

I have been working on my 64 motor driver board as a "monolithic" board, putting all electronics for controlling all 64 motors on a single board. My initial thought was to do 8 separate slave boards, each controlling 8 motors. However, at some point, I thought that was too many boards: 8 boards plus a master board to control the modular slave boards. However, I'm having second thoughts about that decision. The big board is really awkward to work with, physically. And I think in wiring up the second motor block, I may have interfered with the first motor block. Scott Norr suggested that I go with the monolithic board because otherwise, I have to fool with inter-MCU communciation (e.g., I2C). However, in another project, I have been having good success with I2C communication. In related thoughts, I'm wondering if I could simplify the amplifier design for each of the motors. Presently, I'm using Op Amps, and this is resulting in a great deal of wiring per motor block. Since I am hand wiring (wire wrapping) all of the boards, this is amounting to a great deal of work.

What if I could use a single transistor to amplify the output of an analog pin of an MCU to drive a motor? It seems that one has to bias the transistor to have it applify the input signal starting at 0V and not at something higher (e.g., 0.6V).

What if I could use the analog output of the MCU as inputs to the Op Amps? The 18f4550 has 12 analog inputs. It does not have much in the way of analog outputs.

12/3/09

Ok, I've now switched gears to working on the real modular motor driver. I'm going to make 8 slave boards, and use my existing I2C master board. I'll use I2C communication to control the slaves, and use USB to command the master. My slave schematic is here (this is the flipped version of the slave schematic). I've got my first slave board in progress. I've glued on sockets, and connectors, and have a LED test working, and have also got a master/slave I2C test working. Here is the modular master and here is the modular slave code.

Before wiring up the DAC and Op Amps on Slave #1, I'm going to get the I2C communication going for Slave #2. I've never gotten two slaves working on I2C, so I'd like to make sure that works.

12/5/09

I now have a working test of the I2C on both Slave #1 and #2!! The test is working with and without USB. I can repeatedly address the I2C devices and turn on and off the LED on the board. All is good for finishing the wiring (op amps and DAC) on each of these two boards.

I did run into an I2C addressing issue. Not all I2C addresses can be used. It seems there are sufficient addresses above address 8, so I'm going to start numbering the slave boards at I2C address 8. See also this I2C address reference.

Here is the non-USB modular master and modular slave code.

Here is the USB master (works with the slave above), and the Windows USB code.

Here is a picture of the three boards together:

The slave boards are at address 4 and 8 for now. In the Windows USB testing code, a "strength" of 0 turns the LED off and 1 turns the LED on. Motor number on the Windows USB testing code is not used presently.

12/10/09

I now have Slave #1 wired up for all connections into the DAC, and one connection to one Op Amp. And here's a second test code that runs with USB turning on/off the slave led.

Here's testing code that sends individual motor value and strength values from master to slave.

Here's testing code that works to turn on motor 1 and 2 of Slave #1. That is, the DAC and Op Amp wiring so far is working!!

1/26/10

Here are the I2C slave addresses for the slave boards:

Slave Board I2C Address
1 8
2 10
3  
4  
5  
6  
7  
8  

I couldn't get address 9 to work, so I'm going to avoid that address. I now have slave board #2 tested! I was using with the "working 10am 12-10" version of the software.

3/17/11

Documentation for Final Fan Motor Sleeves.

Here are some images of the final system.

Hardware specifics:

Voltage input (at the box leads): +5 and GND. Additional current will come from the USB inputs. Currently I'm using a power supply rated at: 5V and 1A with the box leads.

Schematic of master board. The master is using an 18f4550 MCU. Slave schematic is here (this is the flipped version of the slave schematic). The slave is using an 18f4553 MCU.

6/27/11: I've updated the master schematics now. I forgot to put in the pull-up resistors. This has caused me ALOT of grief!!!

The fans being used are: Sunon MagLev GM0503PFV1-8, F8340S, 5VDC. They draw 0.14A (I'm assuming this is a maximum current draw).

The circuit is fused (at the box positive input lead) with a 250V, 1/2 A fuse.

The voltage divider, providing the reference voltage to the D/A converter, has an 18K (17.7 K measured) resistor on the GND lead and a 33K (32.5K measured) resistor on the +5 lead. This should provide a Vout for the voltage divider of 1.73V. Given that the D/A converter output is doubled, this should give a maximum output voltage of the D/A converter of 3.46V. I limited the voltage to less than 5V because "the recommended analog full-scale output [of the D/A converter] is 3.5V". See my writeup on this from the earlier version of the modular driver.

Software specifics:

Here is the software being used for this system.

The I2C address for the slave board is: 8. Motor numbers for sleeve 1 are 0 through 3. Sleeve 2 motor numbers are 4 through 7. Power range for the motors is 0 through 255.

6/27/11: If I rebuild the slave with current MPLAB IDE and C18 compiler, and reflash the firmware onto the slave, the slave does not work. I'm still looking into this. Flashing the slave with the hex file provided in the .zip file above works just fine.

For the pager motor sleeves, I'm planning to use a modified design that has (a) one slave-master, and (b) slave(s). The final circuit for the Fan Motor Sleeves (above) has two boards (one microcontroller each) both for the Sleeves, but only driving a total of eight motors. It seemed overkill to have two microcontrollers for this, so for finishing up the final Pager Motor Sleeves, I'm planning two boards, but with 16 motors total. One board will be a slave-master, and one slave. The slave-master will have both a USB connection and the D/A converter and op amps. Here is the schematic for the slave-master (PDF, flipped PDF).

6/27/11: I've now updated the slave-master schematic with the pull-up resistors as noted above.

6/29/11: To help in debugging the above I2C problem, I've created a simplified master (this contains the slave above that has rebuilding problems too).

9/15/11

I now have the hardware for the revised fan motor sleeves tested as working! Tests so far are with my LED test output board. The slave-master schematic is as above (schematic for the slave-master, PDF, flipped PDF). The slave schematic is as above too (Slave schematic; flipped version of the slave schematic).The software for the slave-master and the slave is here. I am still working from the old (fan motor sleeves) hex file code for the slave. The slave-master is modified from that though. I2C address 8 is used for the slave, and access to address 0 is routed to the DAC/opamps on the slave-master.

10/13/11

Apparently, I have fried all of the motors on the Left pager motor sleeve. They are not working when I test them, I get infinite resistance across all motors. I should be getting about 40 Ohm's. I'm not sure how this happened, and it's more than a little traumatic. I thought I was just about done, but perhaps this will make things better in the end. The sleeves are not well-designed for access to each motor to replace one if it fails. I'd like to redesign the left sleeve in a number of ways:

Note that the motors are: