TLC5945 timing for hdd POV clock

I'm trying to make a 2.5in hard drive POV clock where the LEDs are stationary and the spinning disk has cut-outs for each digit, such as this: Stuff and Nonsense: Digital POV clock working! mostly

I'm using a surface mount TLC5945 chip and 1 RGB LED per digit for 5 digits, so 15 outputs. I've attached the image that I used to etch the board so you can get an idea of the schematic. The TLC is at the bottom, 15 of the 16 outputs wrap around the center to the 5 RGB leds. The outer ring is ground, next one in is power. The data, clock, etc lines are going to my Arduino Uno R3.

The chip and board is working with the Tlc5940 library, the fade and other examples are working and I can write code to address individual LEDs, things seem to be working on that level. Where I have problems is when I try to pulse one or multiple LEDs quickly and adjust the timing to see a single digit visible on the platter. When I started this project I did a simple proof of concept with an LED attached to one output pin on the arduino. I essentially did manual PWM like so:

digitalWrite(pin, HIGH);
delayMicroseconds(onTime);
digitalWrite(pin,LOW);
delayMicroseconds(offTime);
// and loop...

Then I manually adjusted the onTime and offTime variables over serial until it was strobing properly to display a single digit. I could see a digit start to appear and slow down until nearly static. This happened at around 11,000 microSeconds for offTime which makes sense because it is a 5400 rpm drive, thus 90 rotations/s, thus about 11ms per revolution.

I've been unable to replicate that effect with the TLC5945 design. I've tried many different ways of coding a simple test, trying to understand how the Tlc5940 library works. Everything I come up with doesn't seem to be following consistent timing, no individual characters ever become visible on the platter, and for some attempts the LED flickers in a way that's visibly inconsistent, so something is obviously wrong in those cases although some of those past observations could have been coding errors.

I've added .1uf, 1uf, and a couple 10uf ceramic smd capacitors in parallel close to the power input to the chip. The current selecting resistor is set modestly, I think the LEDs are being driven under 10ma each for now. I finally added a sync trigger with a hall effect sensor, this is very reliable and has helped as a sanity check to confirm rotation speed. Here is my current iteration of some test code:

#include <avr/interrupt.h>
#include "Tlc5940.h"

//int count = 0;
//int time;
//int lastTime = millis();
void setup() {
//  Serial.begin(115200);
  Tlc.init();
  pinMode(2, INPUT);
  attachInterrupt(0, tick, FALLING);
}

void loop() {
  Tlc.clear();
  Tlc.update();
/*  time = millis();
  if (time - lastTime >= 1000) {
    Serial.println(count);
    count = 0;
    lastTime = time; 
  } */
}

void tick() {
//  count++;
  Tlc.set(6,4095);
  Tlc.set(7,4095);
  Tlc.set(9,4095);
  Tlc.update();
//  Tlc.clear(); // removed these two lines because I noticed it doesn't clear properly
//  Tlc.update(); // when done immediately following the last update
}

The code that is commented out right now gives a very reliable confirmation of rotation speed, it spits out 90 or 91 every second to the serial line.
The uncommented code right now is very simple... As soon as it receives a trigger, it sets the RGB of just one digit to full, then updates. The loop keeps the LEDs otherwise off. In this mode I figure I should see something static on the platter if it triggers exactly the same way for every rotation. The concept is sort of confirmed if I manually rotate the platter with my finger at 2 or 3 rotations / s, I see the "3" repeatedly light as I pass the magnet by the trigger. But when rotating on its own you can see nothing.

I figured if 5400rpm was too fast I could always flash every other or every third rotation for a less bright but still stable display, but I don't think this should be an issue, especially with the very basic testing done so far such as the code above.

I'm hoping somebody has some insight into the particulars of these chips, and if I'm doing something wrong with the library. Any advice on how to get something visible out of this?

Your problem is that you need to synchronise the TLC5940 output to your spinning disc. There is no way to do this using the standard library. You will have to hack into it and add hooks to allow you to do this.

I did something vaguely similar when I hacked an early version of the library to allow me to use this chip to multiplex the outputs for driving an RGB matrix:-
http://www.thebox.myzen.co.uk/Hardware/Mini_Monome.html