• Custom heatsink

    Andrew09/16/2017 at 07:14 0 comments

    The heatsink I attached for testing was a bit cumbersome, and was supported by the leads of the TO-220 transistor package and a bit of Blu-Tak.

    To make things a little more sturdy I made a bracket from 3 mm thick aluminium angle.  This will attach to the PCB mounting holes using M2.5 screws.  On the back of the bracket I will attach three small heatsinks to increase the mass and surface area.  On the front the transistor will be attached with a standard isolating kit.  The fan will be attached with screws through the vanes of the small heatsinks.  I drew a sketch on some scrap paper then I decided to make a nice drawing with QCad.

  • First run

    Andrew09/16/2017 at 07:04 0 comments

    Everything seems to be working!  I have to get a more accurate multimeter to check my calibration, but the hardware and software appear to work together after squashing only a couple of minor bugs.

  • PCB assembly

    Andrew05/09/2017 at 00:27 0 comments

    I don't have all the facilities I need yet, but I have started assembling a PCB for testing. I'll assemble a section of the circuit and do some basic tests before assembling the next one. First I'll test the 5V supply, then the relays, then the current drive and finally the DAC.

  • PCBs are delivered

    Andrew04/13/2017 at 21:11 0 comments

    I used hackvana.com to manufacture my PCB design and they arrived yesterday. Excellent service, good price, and very quick. I am travelling right now, so I haven't seen the boards (and I can't assemble one) but I am sure they'll be fine.

  • Nice rendered PCB

    Andrew02/22/2017 at 04:04 0 comments

    I added a rendered image of the final PCB. It is ready to send to dirtypcbs.com for manufacturing. I tweaked things a bit to remove three vias, and thicken some ground traces (most of them are attached to the GND flood fill, so there's plenty of copper there).

    I won't choose expedited shipping as I will be travelling and can't do anything with them for a while.

  • PCB layout

    Andrew02/20/2017 at 06:15 0 comments

    I've had the "final" layout for this project ready for a while. I've been fiddling with it so that it "looks nice" as well as being electrically correct. All component outlines are 0.2mm lines. Text is 1mm high and 0.15mm lines. All component holes are 0.6, 0.8 or 1.4mm. Hi-current traces are 1.5mm wide. Normal traces are 0.3mm wide, except the 5V traces which are 0.5mm wide. That should leave enough headroom for expected currents. I am not including the EEPROM that is required for the complete Pi HAT specification, I am just using the same outline and dimensions.

    I am doing the layout with KiCad, which is a great program, but all of the symbols and footprints came from different places, plus I had to draw some of my own. Next time I will create library specifically for the project and copy all the devices I use into there and normalise the line thicknesses, text, and drill holes as I do it.

    The board has not changed significantly since the first draft, so it's ready to send to dirtypcbs.com for manufacturing. Unfortunately the HAT boards are slightly bigger than the smallest (cheapest) size of 5x5cm. However, the next size up, 10x10cm is still a good price. I could add some smaller boards to fill up the remaining space, but I'm not going to. After submission it will take about 8 weeks to receive the boards, which is fine as I will be travelling. That means I also won't be working on the software either.

  • AutoCycle fixed

    Andrew02/08/2017 at 10:33 0 comments

    This evening I fixed the problem with AutoCycle. In the original code a graph object is created and deleted as required. In my code I created a single graph object and reused it. Since I copied the structure of the rest of the code this caused problems depending on the order in which routines were called. So now I create and delete a graph object at the same points as the original code. Basically the code is done. I can't do any more until I build the hardware, at which point more bugs will surface, but it means everything can be tested fully.

  • All functions implemented

    Andrew02/06/2017 at 12:21 0 comments

    This evening I implemented the charge and discharge functions, and the autocycle function. The autocycle doesn't work yet, but charge and discharge work on their own. I decided not to use TKinter's after() function as it's not quite what I want. Instead I am using update() which does what I want. Its use is frowned-upon however, so I hope it won't bite me in the future. The next step is to build the hardware, which requires making a PCB, assembling it, and testing it in conjunction with the software. I can do a little more software testing without the hardware, but this is a system and really needs both parts for proper testing and verification. I'll be travelling again soon, so probably won't do much for a couple of months. Anyone else who'd like to try- please go ahead. Pull requests are welcome.

  • Another function implemented

    Andrew02/05/2017 at 02:28 0 comments

    The impedance measurement function is implemented. This can be used as a standalone measurement, but it is also a requirement for the charge and discharge functions. It's basically a verbatim copy of the C++ code. It runs, but I don't have the hardware yet to test it with.

    Next will probably be the discharge function, then charge, then autocycle.

  • Alpha code uploaded

    Andrew02/03/2017 at 01:06 0 comments

    I uploaded the first rough draft of the code to GitHub yesterday. It contains the basic framework for everything, but the bulk of the functions in the main core are missing.

    Items present:

    • Main GUI
    • Setup dialog
    • Start dialog
    • Hardware driver
    • Graphing

    One function is implemented, and that is the voltage measurement function. If no hardware is present it will record 0V forever.

    To integrate the long-running data collection tasks with the TKinter main loop I am using after() to schedule the next step of the data collection. In the more complex routines I will implement a state machine, so that each time after() is executed the process will move on to the next state.