Tuesday, November 25, 2025

Arrakis 3.0 - A New Sand Table Design

Arrakis 2.0 seems to have found a new, permanent, home, leaving me without a coffee table. You know what that means...

Behold!

Arrakis 3.0

Architecture

Arrakis 2.0 had a 5-layer construction. From top to bottom, it stacked like this:

  1. glass
  2. oak frame
  3. white LED frame
  4. sandbox
  5. mechanism frame

Arrakis 3.0 eliminated the wood frames around the glass and sandbox for a neater, more "modern" look. The corexy mechanism that moves the magnet has its own frame that drops into a support frame. The LED frame is now painted on the underside of the glass table top.

  1. glass with painted LED frame
  2. sandbox
  3. mechanism frame
  4. support frame

CAD render of the Arrakis 3.0 stack-up.


I'll go into some detail about the construction following the above stack-up drawing from top to bottom starting with ...

The Glass


When moving Arrakis 2.0 to its new home, I managed to break the top glass. I had to order a custom piece of tempered glass to replace it and it cost me $330 and took about 2 weeks to get it. I did some research into glass table tops and found that 24 x 48" is a common size for coffee tables and is readily available from many sources for relatively low cost- you can get one from amazon for about $100 delivered in a couple days.

Transporting Arrakis 2.0 was a lot of work. It was too wide to fit through doorways, so had to be turned sideways, necessitating removal of the sand and disassembly of all five layers, followed by multiple trips to my car (it's quite a long way from my condo to the garage), then reassembling the the whole thing inside my car. When I arrived at my destination, the whole process of disassembling and reassembling the table had to be done again. And then twice again to get it back home.

Limiting the size to 24 x 48" means the table can fit through doorways without turning it sideways. That makes transport much easier. All I have to do is take off the glass, and remove the sand. I'll take the glass to the car and wrap it in a blanket, then take the rest of the table to the car.

The smaller size is a better fit in my living room, too.

Arrakis 2.0 has a separate LED cover frame that fits inside the sandbox. I decided that for Arrakis 3.0 I'd try something a little different. I painted a LED cover on the underside of the glass using 1-shot oil based sign paint. I used two coats of paint. It is very heavily pigmented and blocks the light from the LED strips completely. Time will tell if the paint holds up to handling and transport.

The paint border is masked off using clear packing tape and the blue masking tape just extends that inward a bit to prevent oopsies. Inside corners of the masking tape were rounded by using a small jar lid as a cutting template.

I think I should have made the border maybe 5-10 mm wider as the LEDs are visible when sitting on the couch.


The Sandbox 


The Arrakis 2.0 sandbox had a glass bottom framed by 4040 t-slot aluminum with heavy wood side panels bolted on. Every time I transported it I was afraid it would get broken. In Arrakis 3.0, the sandbox is now a light weight 2040 v-slot frame around a nearly indestructible 3/16" G10 epoxy/fiberglass bottom plate. There are no wood sides, and the glass top just sits on top of the box. The mechanism is hidden from view by light weight side panels that fit into the slots in the t-slot support frame. The space between the glass and the sand has been reduced from 75 mm in Arrakis 2.0 to just 28 mm in Arrakis 3.0.


Sandbox with greenish G10 fiberglass bottom sitting on the frame. The G10 will be covered with white, fake-leather vinyl cloth. Black plastic end caps cover the exposed aluminum at the ends of the long side pieces. You can see a couple of them on the table near the screwdriver. 


The sandbox rests on the support frame with pins at the corners to keep it in place. If I need to increase the air gap between the magnet and the bottom of the sandbox I can add spacers at the corners of the frame where the sandbox sits on the corner posts. If I want to decrease the air gap I can add spacers under the magnet to lift it a little closer to the bottom of the sandbox. If I need to access the mechanism or electronics, I take off the glass, disconnect the LEDs, and lift the sandbox off. 

I had to decide how thick the G10 sandbox bottom needed to be to ensure it wouldn't sag too much. I did some research and found a formula for estimating the amount a plate supported at its edges will sag. It's a classic mechanical engineering problem- we have a rectangular plate of limited rigidity supported only by its edges. This website gives some insight into the calculation required. The website uses a formula from a book- I found it here, with the important materials being in chapter 11.



This calculation has some limitations- the main one being that it is a good estimate up to a deflection value that's about 1/2 the thickness of the material. It also assumes the plate is perfectly flat to start with. 

Density of G10 is 0.065-0.067 lbs/in^3 (sorry for the units- most of the available info uses imperial units, so that's what I used, converting the final deflection value to metric). Actual dimensions of the edges of the sandbox are (b x a) 22.25" x 46.25". a/b = 46.25/22/25=2.08. Young's modulus (E) for G10 is 2.2-2.7e06 lbs/in^2, so I used 2.4e06 in my calculations. 

I wrote a spreadsheet that I can just plug the thickness into and it spits out the deflection at the center.

Here is the result for 1/8" G10:

density0.065lb/in^3
long dimensiona46.25inches
short dimensionb22.25inches
area1029.06in^2
volume128.63in^3
weight8.36lbs
from tablealpha0.111
load per unit areaq0.008125lbs/in^2
short dimension of plateb22.25in
young's modulusE2.40E+06lbs/in^2
thicknesst0.125in
max deflection at center-4.72E-02inches
-1.20E+00mm


Are here is the result for 3/16" G10


density0.065lb/in^3
long dimensiona46.25inches
short dimensionb22.25inches
area1029.06in^2
volume193.46in^3
weight12.58lbs
from tablealpha0.111
load per unit areaq0.01222lbs/in^2
short dimension of plateb22.25in
young's modulusE2.40E+06lbs/in^2
thicknesst0.188in
max deflection at center-2.08E-02inches
-5.29E-01mm

I assumed the actual sag will probably be a little worse than these numbers -the 2040 v-slot is going to sag a bit, the X axis rail will flex, and the magnet will pull on the ball-  so I went with the 3/16" material. I designed the table with a 3mm air gap between the magnet and the sandbox bottom surface, so some sag is tolerable. The magnet is easily strong enough to control the ball, even with the air gap.

One disadvantage of using fiberglass board is that it's a PITA to cut. I used an a cut off wheel on a grinder to cut it to size. Cutting fiberglass produces all sorts of nasty glass and epoxy dust that you really don't want to breathe or get on your skin or in your eyes, so I used a lot of PPE and hosed the board down after cutting it.

The G10 is covered with white, fake leather cloth (chosen because it comes rolled up, not folded and wrinkled), glued on using spray adhesive. I sprayed adhesive on the G10 first, set it aside, then rolled out the cloth, sprayed it, then set the G10 down on it so there would be no wrinkles. The white cloth hides the greenish color of the G10 when the ball rolls over the same spot repeatedly, and quiets the sound of the ball rolling. The G10 fits into the lower slots in the 2040 frame.

LED strips of the same type that were used in Arrakis 2.0 are fitted into the upper slots in the 2040 sandbox frame. I drilled a couple holes in the G10 to pass the LED cables to the underside of the sandbox where Wago lever nuts are used to splice the cables into a single 4 conductor cable with an Amp connector. The Wagos allow me to play with the connections so I can set the desired colors on the LED strips.


Underside of the sandbox showing the fake leather cloth wrapped under the pale green G10 board and the Wago lever nuts that are used to combine the cables from the two LED strips on the top side of the sandbox.


The LED strips cables run to the center of the short side of the sandbox and go through holes drilled in the G10 sandbox bottom. The cables are held in place with a few printed TPU clips that insert into the slot in the sandbox frame. 

Detail of sandbox corner. You can see the fake leather cloth that covers the G10 board fitted into the lower slot, the LED strip fitted into the upper slot, and the brown EPDM weather strip that helps to protect the sandbox from spilled drinks.

EPDM rubber weather stripping stuck to the top of the sandbox helps keep the sand in and spilled drinks out. It also protects the painted LED frame on the underside of the glass from getting scratched by the aluminum sandbox frame.

Arrakis 2.0 had a drawing size of 590 x 980 mm. Arrakis 3.0 is 465 x 1005 mm. I spent hundreds of hours generating interesting patterns for Arrakis 2.0 but I can't use them on Arrakis 3.0 because of the difference in sizes. I am going to write a Perl program to scale the Arrakis 2.0 drawings to fit Arrakis 3.0.


The Mechanism Frame

The mechanism is built on its own subframe made from black 2040 v-slot aluminum extrusions. It is designed to just drop into the support frame.


Here's the mechanism frame with the X axis installed. This frame drops into the support frame. Motors and pulleys will still have to be mounted to complete the mechanism. Note the blue printed plastic Y=0 flag. I later discovered that that plastic is transparent to IR light so it wouldn't trip the optical endstop. I reprinted it in black PETG and it worked fine.


This is one of the four identical corners of the mechanism frame. The overhanging part fits on a printed TPU spacer that assures the mechanism sits within the support frame in the proper place. It allows the mechanism frame to be lifted out of the support frame for service.


The mechanism is a stacked belt corexy type, with pulleys at all four corners of the frame and at the ends of the X axis on the Y axis carriages. Each pulley is made from two stacked F625 bearings and 3D printed concave flanges. The pulleys were printed in two parts, and solvent welded at assembly. I tried concave pulleys at the suggestion of a man in Switzerland (thanks Vincent!) who makes really nice tables. It looks like only the belt's edges contact the pulleys. Time will tell if the convex surfaces lead to excessive pulley or belt wear.

Arrakis 2.0 had motors mounted in the corners of the frame with twists in the belts along the Y axis. In Arrakis 3.0, the motors are mounted at one short end of the mechanism frame with additional pulleys at the corners, so I put twists in the belt between the motors and the pulleys. The twists in the belt ensure that the belt teeth touch only the drive pulleys. That helps keep the noise level down, especially when running table at high speeds. I'll know in a few months if it causes excessive wear on the belt.


One of the motors with the belt twisted. The motor mount is designed so the belt doesn't touch it. Note- the screw and spacer on the post are not used in the final design.

The Y axis, parallel to the long dimension of the frame, uses wheeled carriages that run the length of the frame. I started by buying some ready-made wheeled carriages, but found some problems with the way they were assembled. They didn't use any washers, so the screws galled the plate, and were so short they barely engaged the nylon inserts in the nylock nuts they used. Do 30mm screws and a few washers really cost that much more than using 25 mm screws? I replaced the screws and added washers where needed, but ultimately decided that the holes in the carriages weren't positioned where I needed them to be, so I made my own carriage plates out of 1/8" aluminum plate.

The belt tension is causing the Y axis wheeled carriages to try to tilt inward. This may lead to the wheels wearing out quickly. We'll have to wait and see if it becomes a problem.


CAD render of one of the wheeled carriages. They are identical except this one has the 3D printed Y=0 flag mounted on it. The slot is where the X axis linear guide rail attaches.



One of the two wheeled carriages that ride on the 2040 V-slot frame, carrying the X axis linear guide rail. There is only one screw holding the X axis guide rail on the carriage, and the carriage is slotted to allow it to slide in case the rails aren't perfectly parallel. The plastic spacer under the pulleys holds the end of the guide rail to restrict its movement


The homing sensors are optical type with LM393 comparators on 3D printed mounts. There is a printed flag that attaches to one of the Y axis carriages. The Y axis homing parts (the flag and sensor) fit below the X axis homing flag on the magnet carriage.


Y=0 flag in its sensor. The X=0 flag on the magnet carriage passes over with plenty of clearance. The magnet carriage also clears the Y=0 flag.

CAD render of the magnet carriage. The lower part has the flag for the X=0 sensor. I printed it extra long then trimmed it to size after it was mounted in the mechanism.




The magnet carriage with the magnet in place. The belt clamps and magnet holder are two printed parts. The X=0 flag was printed extra long, then trimmed after moving the X axis to the Y=0 position. The upper part holds the magnet with a zip tie for extra security. The belt entry points are spaced to match the diameter of the pulleys on the ends of the X axis ensuring that the belts stay parallel to the X axis rail regardless of the magnet carriage position along the guide rail. I can close the air gap between the magnet and the sandbox bottom by inserting spacers (pennies) under the magnet.


Underside of the lower belt clamp. The ends of the belt fold over and fit tightly into the slots. The upper belt clamps are done the same way.


Mounting the magnet on the linear guide so close to the bearing block and guide rail may prove to be a maintenance issue. The magnet will attract ferrous metallic particles from the environment to the rail which might then interfere with smooth motion of the carriage and cause excessive wear. I'll have to check and clean it periodically.


X=0 flag (part of the magnet carriage) in its sensor. Like Arrakis 2.0, the Y axis is homed first, then the X axis. This configuration allows both sensors to be mounted on the mechanism frame without having to run any wires to the magnet carriage. I had to move the connector pins on the opto sensor to the underside of its PCB to prevent the X=0 flag from banging into the connector.


I needed a way to keep the wires neat, especially the long wires to the endstops, so I braided them and routed them through printed TPU clips that insert into the slots in the v-slot mechanism frame. The same clips also fit nicely into the slots in the 2020 t-slot support frame.


One of several 3D printed TPU wire clips the fit into the v-slots in the frame. I know it doesn't look like a very good print- I printed these on UMMD with a 1 mm nozzle and this is about the smallest thing that printer can print with that big nozzle.


CAD render of the cable clips. The center hole is 7mm in diameter. Printed with TPU, it can expand to accommodate larger wire bundles. This clip fits both the 2040 v-slot and the 2020 t-slot extrusions.


The X=0 sensor and the cable clips holding the wires that run from the endstops back to the controller board. The clips are inserted into the lower slots of the mechanism frame and allow the wheeled carriages that run the length of the frame to pass over without interference.

The fully assembled mechanism frame with electronics weighs about 8 kg (17.8 lbs).


Electronics


All the electronics, except the motors, endstops, and LED strips, fit on an aluminum plate screwed to the bottom of the mechanism frame. I mounted the controller board at the edge of the metal plate so I can remove and reinstall the uSD card that stores the patterns by reaching under the table. I also added toggle switches for main power and LED power.

Main power is provided by a Mean Well LRS-350-24 switching supply. The main controller is a Duet3D Duet2 WiFi board with an expansion board to provide easy connection for step, direction, and enable signals for the servomotors. Power for the motors is routed through two ReDump protection circuits. The LED power supply is a 24V to 12V buck converter good for 10A at 12V. I used the same type LED strips and controller used in Arrakis 2.0, but I removed the power and LED output cables from the controller and replaced them with my own twisted pair for 12V power input and a 4 wire cable and proper Amp connector to connect to the LEDs (the connectors on the LED strips and the LED controller were the most - and only- unreliable parts in Arrakis 2.0).

The LED controller output wires go to Wago lever nuts mounted on the electronics plate. I added LED strips to the underside of the mechanism frame with a power switch in case I don't want the floor around the table to be lit. The floor lighting strips are connected to the controller so that the colors are the same. In Arrakis 2.0, the LED connection to the controller was always "iffy" because of the awful, cheesy connectors used on the LED strips. In Arrakis 3.0 I used some 20 gauge 4-conductor cable and proper Amp connectors to connect the LED strips to their controller. I drilled a couple holes in the G10 sandbox bottom to let the cables get to the underside where 4 Wago lever nuts are used to make the connections.


Electronics mounted on 1/8" aluminum plate screwed to the bottom of the mechanism frame. The X axis passes over with plenty of clearance.


Here's the wiring diagram from Arrakis 2.0. The only real difference is that there are two more LED strips to light the floor, and no foot switch - I used a toggle switch for power in Arrakis 3.0. Note: the LED strips don't connect to the controller. Colors are selected using the LED strip's remote control.


The Support Frame

is made using blue anodized 2020 t-slot aluminum, with the pieces screwed directly together with M6 screws. It's thin, light, and the finish looks very nice. The frame is designed so the sandbox will sit on top of it, held in place by threaded pins that screw into the support frame. The mechanism frame, with all the electronics, drops in, fully assembled. 

I designed the table to have a 3mm gap between the magnet and the bottom of the sandbox, but the gap can be adjusted. If I put spacers (pennies fit well) under the magnet, it lifts the magnet closer to the bottom of the sandbox.


The support frame made from blue anodized 2020 t-slot aluminum extrusions. The vertical members at the middle of each side keep the horizontal members from rotating. The printed orange parts at the inside corners are used to position the removeable mechanism frame that rests on them. Furniture pins will be screwed into the tops of the posts.


One of four 3D printed TPU mechanism frame locators that fit on the support frame. 


Arrakis 2.0 had heavy, 3/4" thick, unfinished pine boards bolted to the sides of the 45 mm t-slot sandbox bottom frame to conceal the mechanism. That added a lot of weight and didn't really look very nice. The side and end panels of Arrakis 3.0 are made of 1/8" mirrored blue acrylic, cut to fit into the slots in the main frame. I added small pieces of silicone edge protectors to fill the space in the v-slots so the panels wouldn't rattle, and trimmed the edges with a razor knife so they wouldn't show (much).


Side panels installed. I used silicone edging at the ends of each panel with a couple small pieces along the bottom edges to center the panels in the slots and prevent rattling. There's about 5 mm clearance between the belts, pulleys, and the panels.


Corner pin screwed into the support frame. There's one at each corner of the table. The pins fit into holes in the corners of the sandbox frame to position the sandbox accurately on the support frame and prevent it from sliding off. You can also see the silicone edging that centers and holds the acrylic side panels in the slots of the support frame.


Corner of sandbox and support frame showing alignment pin in the hole in the sandbox frame. The pins are 6mm in diameter and the holes in the sandbox frame are 1/4" (6.35 mm) so there's a little wiggle room for easy fit.


Operation


The Duet2 WiFi controller has a web server that puts a web page on my web browser. I can upload pattern files to the controller's uSD card that way, or I can pull the uSD card out of the board and plug it into my computer. 

The patterns are created using Sandify by starting with a basic shape (or even text), and applying modifiers. Sandify provides a preview image that approximates the pattern that will be drawn in the sand. Once I have an interesting pattern in Sandify, I export it which downloads it to my PC. Pattern file sizes range from a few tens of kB to 20 MB. The pattern files are just text full of gcode G1 statements with coordinates of each point in the pattern. Curved lines are always approximations using short line segments. The table has 25 steps per mm resolution, so curved lines come out very smooth.

;
; File name: 'sandify example'
; File type: gcode
;
; BEGIN PRE
G28 X
G1 F6000
; END PRE

; BEGIN LAYER: 0 heart
G1 X232.500 Y526.078
G1 X232.506 Y526.278
G1 X232.547 Y526.785
G1 X232.659 Y527.585
.
.
.
G1 X231.203 Y593.189
G1 X231.948 Y589.683
G1 X232.335 Y587.115
G1 X231.420 Y1005.000
G1 X0.000 Y1005.000
G1 X0.000 Y0.000
; END LAYER: 0 heart

; BEGIN POST
M18
; END POST

The "G1 F6000" statement assigns the speed 6000 mm/minute to all the moves in the pattern file.

Next, I run a Perl post processor that assigns two speeds to the patterns, usually a slower speed for the drawing (150-300 mm/sec) and a high speed (500-1000 mm/sec) for motion along the edges of the drawing. I use a low speed for very detailed drawings because at high speed the ball tends to throw the sand, obscuring details previously drawn.

.
.
.G1 X233.548 Y1005.000 F9000 
G1 X231.931 Y1005.000 F60000 
G1 X232.500 Y997.631 F9000 
G1 X232.624 Y1000.912 F9000 
G1 X232.990 Y1005.000 F9000 
G1 X232.386 Y1005.000 F60000 
G1 X232.500 Y1003.526 F9000 
G1 X232.556 Y1005.000 F9000 
G1 X232.562 Y1005.000 F60000 
G1 X0.000 Y1005.000 F60000 
G1 X0.000 Y0.000 F60000 
; END LAYER: 0 heart 
 
; BEGIN POST 
; File modified by dual_speedify_v2.pl 
M18 
; END POST 

In the example above, the F9000 and F60000 commands set the speed at 9000 and 60000 mm/minute (150 and 1000 mm/sec) on a line by line basis.

I have generated some patterns for erasing the table, typically spirals that draw lines very close together at high speed. The erase patterns typically clear the table in about 90 seconds.

The Duet controller can operate in two modes. I can manually select patterns and erase files to run via its web server, which I do when I'm generating new patterns at home, or I can compose macros that consist of a sequence of erase and pattern files, a mode I typically use either at home or at a public showing when I don't want to mess with the 3D printer oriented web interface. The controller's gcode interpreter allows randomization of the sequences so that it runs a different sequence every time the table is powered up.

I will be writing another Perl post processor to scale pattern files generated for Arrakis 2.0 to fit Arrakis 3.0. 






That's about it! Leave comments/questions below. If I make any changes or find reliability issues I'll update this post. I'll write another post on the program to scale the patterns when it is finished and working.




Thursday, October 2, 2025

A Wiim Amp Pro for the bedroom system

I like to listen to music or recordings of tree frogs and crickets when I'm going to sleep so I've had a stereo system set up in the bedroom for years. The system consisted of an old (1983) Luxman RX-103 receiver, a SqueezeBox Touch to stream music from my server, and a pair of 20 YO Canton Ergo 22 DC speakers. The receiver was too big for the nightstands, so it sat on the dresser near the wall opposite the bed. Running speaker wires all over the bedroom wasn't an option, so the speakers were on the dresser, too. Unfortunately, that required turning the volume relatively high which might disturb my neighbors late at night because the walls/floors/ceilings are a little thin in this building.

An ideal system would fit on the nightstands near the bed so the volume could be kept to a reasonable, late-night level, but there was already too much junk on the nightstands, including table lamps. I started by getting rid of the lamps and replaced them with a couple PS 2014 hanging lamps from Ikea. It turns out that besides not taking up any space on the nightstands, they throw very nice patterns on the walls! They don't provide a whole lot of light, even when open, but that's OK for me.


The new system in place. You can just see the new amp in the left corner beside the speaker.


This is what it looks like with the lamps open.


A lot of the other stuff was disposed of or put in drawers and the result is that one nightstand has a speaker and my phone charger, and an alarm clock, and the other has a speaker, the new amplifier, and a CPAP machine. It looks a lot nicer, and is easier to keep dusted.


WAP!

When I was looking for amplifiers, I initially thought I'd continue using the SB Touch streamer. So I looked at the small class D amps by Fosi, Wiim, Marantz, Eversolo, and a few others. It occurred to me that the Wiim Pro Plus streamer in my living room system plays music from my Lyrion Music Server just fine, so maybe I could buy an amp with a built in streamer that would replace both the Luxman receiver and the SB Touch. Some of the amps I looked at had built in streaming with touchscreens on the front panel, but I decided I didn't need that as I'd be using my phone to control it anyway. I almost never used the touchscreen on the SB Touch.

After much digging through reviews and specs, I settled on the Wiim Amp Pro (WAP). It's small, has more than enough power for my purpose, and has a built in streamer that works with my server and Tidal Connect, just like the WPP in the living room. Both players can be synchronized so they play the same music at the same time (nice when I'm cleaning the condo). 

The WAP has toslink, USB, HDMI, and line inputs. It also has BlueTooth in and out but doesn't support high quality codecs (yet). There is no phono preamp. It has built-in graphic and parametric EQ with room correction(!) called RoomFit, and real bass management that can apply high pass to the audio in the WAP, and low pass to the subwoofer output. The Wi-Fi antenna is built into the case so there's no ugly antenna sticking up from it.


Front panel- just a few LEDs and the volume knob with play/pause button.


Back side of the WAP. Yes, power supply is built in!







Speaker connections are solid! The speaker binding posts grip banana plugs securely.



The side holes easily allow 12 gauge wire, if you feel you must.


Bottom of the WAP. The holes along the sides and bottom are all they need to ventilate this thing thanks to the efficient class D amplifiers.

When I got the amp, I connected it to my Wi-Fi network via the Wiim Home app on my phone (already there for the WPP in the living room system), and it immediately started updating its firmware. After a few minutes it was ready to go. Lyrion Music Server saw it as a player without any messing around. Everything just worked exactly as it should, unlike so many other things these days. It's been in the system for about two weeks and I haven't had even the slightest trouble with it.

The amp can be controlled via Wi-Fi (phone or tablet) or its own Bluetooth remote control, so I don't need to access the front panel of the amp at all, and it may end up under the bed, out of sight, if it can get a decent Wi-Fi signal down there.


Technical stuff

The WAP uses TI TPA3255 class D amplifiers to drive the speakers. They are very efficient compared to class A or AB amplifiers. That efficiency is achieved by switching the output transistors on (very low resistance) and off (very high resistance) at hundreds of kHz, so they spend very little time between those states generating heat. That efficiency means they don't need large heatsinks which minimizes the size and cost of the amplifier. The PWM output from the transistors is run through a low pass filter to create a smooth analog output waveform that drives the speaker. 

Unlike class A and AB amplifiers, class D amps don't normally provide a lot of dynamic headroom. This amp is rated for 60W at 8 Ohms (and 100W into 4), and that's all you'll get from it. That means if you're driving inefficient speakers and/or your room is large, it may not play as loudly as you'd like before it distorts audibly. Neither of these are problems in my situation.

I was curious about the switching frequency used so I connected the amp to an 8 Ohm dummy load and my Siglent digital oscilloscope to see what the output looked like when there was no music playing. Here's what I found:



This is the output of the amp with no music playing- about 600 mVpp at about 595 kHz. It's far beyond audible frequency range, even if you have golden ears, but could pose a problem if you're trying to listen to MW or SW radio anywhere near this amp. This signal could be the output switching clock leaking through, or it could be from the power supply that is also a switching circuit.



I used the scopes FFT to look at the spectrum of the output and found plenty of harmonics of the 595 kHz output. 

That output looks ugly, but there's no audible component of it coming from my speakers, even with my ear close to the tweeter.


Here's noise in the audio band from 10 Hz to 20 kHz. It looks very quiet except for a little 60 Hz from the power line.

My scope's FFT is OK, but it's not an audio analyzer. I suggest that if you want to see a real detailed technical review, you check out Audio Science Review.

I have read online that some people complain of a whining sound coming from the amplifier. If I press my ear against the top cover of the amp I can hear a very faint whine, but there's nothing audible (to my 67 YO ears) otherwise.


Using it

It seems to pick up 5 GHz Wi-Fi very well (plays 24 bit, 48 ksps music via Tidal without buffering), so I haven't had to use the ethernet port to connect to my network like I did with the SB Touch. The front panel has only a status LED that changes colors to indicate different things, a few more LEDs to indicate the relative volume level, and a single encoder knob with a built in push button to control volume and play/pause music.

The volume control has an odd feel to it, almost like turning the knob in a soft piece of rubber. There are no detents. I have noticed that changing volume by any of the available means seems to react a little slowly- it takes a fraction of a second for the volume to change when I start turning the knob, so I tend to turn it a little further than needed for the change I want to make.

The unit has a BT remote control with a mic built in for doing  the "hey Google" or "Alexa" thing. I don't use either, so I can't comment on the performance. You can put the amp out of sight - under the bed, in my case- or in a cabinet or drawer because it doesn't use IR for the remote control. The remote control's mic can't be used for RoomFit equalization tests.

The RoomFit function is a nice extra that you may or may not want to use depending on how picky you are about the sound. What it does is send a swept tone through the speakers, measuring the response in your listening position with a mic (usually in your phone or tablet running the Wiim Home app), and then it generates an equalization curve that alters the frequency response of the amp to achieve optimal sound quality. An uncalibrated mic's frequency response or directivity patterns are unknown so results of RoomFit using the mic in your phone or tablet will be questionable at best. For better results, you can get a calibrated mic (like my UMIK-1 that I used to check resonance when I was rebuilding the Quads) that plugs into a phone or tablet, and RoomFit can use the mic's calibration file when it does its magic. 

The amp sounds great with the Cantons, as expected. I haven't tried driving the Quads with it yet to see if it sounds any different from the A12 amp that's in the living room system, but soon. I expect it will sound the same/fine until it starts to distort (if I can run it that loud without freaking out the neighbors).

The Quads can't play very loudly compared to "normal" speakers, mostly because the narrow spacing between the stators in the drivers limits the diaphragm excursion when playing low frequencies. The WAP's bass management could be used to set up a biamped system in which the low frequencies are sent to a subwoofer (keeping them out of the Quads) which would allow the Quads to play much louder than they could otherwise. More experiments to follow.