TEC Drive in enclosure

The TEC drive I have been working on is now mounted as a plug-in card in a 3U 19" rack enclosure like this:

tec_drive_rack_mounted

The card next to the TEC drive holds an 80 mm fan which helps cool the heatsinked linear regulators and the linear H-bridge that drives the TEC.

tec_drive_rack_backpanel

The back of the 19" rack enclosure holds two TRACO POWER PSUs that produce +/-5 V at max 4 A and +/-15 V at max 667 mA. An IEC power-entry module containing the IEC-connector, a fuse, and a power switch is visible far right. Far left is a small PCB for distributing +/-15 V to other cards in the same enclosure.

Added cooling allows testing the drive at the max input level of +/-10 V, which should produce (roughly) an output of +/-2 A.

tec_drive_test_2013sep23

The output current follows 179 mA/V * Vin + 1.8 mA with a maximum nonlinearity of about 6 mA (0.3% of full-scale). Despite the fan-cooling the transistors still get quite hot and staying below 1 A output in continuous operation is probably a good idea.

Iltarastit, Pirttibacka

2013_09_15_iltarastit_pirttibacka

Quite tired legs today...
#1-#2-#3 OK with a bit conservative route to #3
#4 the plan was to run west until I see the blue wet area and then turn left for the control. But the swamp never appeared and this required some re-location + searching.
#5-#6 OK
#7 difficult control in a very detailed area.
#8 probably distracted by the extra time spent at #7 I also made a mess out of #8...
#9-#10-#11-#12-#13-F OK but not great.

Octree simplification by QEFs

dual_contouring_QEF_simplification_2013sep14

Dual contouring uses a quadratic-error-function (QEF) to position a vertex inside each octree-node (cube) where the implicit distance-field that defines our geometry changes sign. The vertex is positioned so that the QEF is minimized. This allows for an octree simplification strategy where we combine all the QEFs of the eight child-nodes, and see if we can replace the eight vertices they define with with a single vertex one level up in the octree.

This image shows the dual contouring code run on the same input data with various levels of simplification. Even a small threshold value of 0.001 reduces the number of triangles more than ten-fold. Too large a threshold produces jagged edges. Note that dual contouring of the original dataset where each leaf-node is at the same (maximal) depth of the tree produces only quad polygon output. When we simplify and collapse some nodes to non-maximal depth the algorithm also produces triangles - where a collapsed node is adjacent to nodes deeper in the tree.

Dual Contouring

Here's an image from the CNC-milling simulator I am working on. It stores a signed distance field in an adaptively subdivided octree. To render a surface of the stock we then run an isosurface extraction algorithm. The most well-known of these is the Marching Cubes (MC) algorithm, used here also. One problem with MC is that it doesn't preserve fine detail (like sharp edges) very well, and many times there are also gaps or cracks in the surface. Both of these problems are visible below.

marching_cubes

From about 2000 onward there are a number of papers that try to improve on MC. The most promising seems to be Dual Contouring, by Tao Ju. There is both c++ and Java LGPL code for DC on sourceforge, and I made some slight changes to make it compile with cmake on Ubuntu: https://github.com/aewallin/dualcontouring

The output PLY file can be viewed with meshlab:
dualcountour_example

So far so good. Now the task is to either rewrite my octree + boolean CSG operations code to use the data structure used in the DC code, or vice versa, change the DC code to use my datastructure.