Boost circuit outputs a lower voltage than it should
The code:

void loop() {
    digitalWrite(9, HIGH);
    delayMicroseconds(28);
    digitalWrite(9, LOW);
    delayMicroseconds(4);
 }


Isn't going to give a very reliable duty cycle. The resolution of delayMicroseconds is 4µs, but it is going to jitter due to interrupts, for example due to the millis timer (timer1) or from I/O. The jitter may be much bigger than 4µs. The hardware timers, which generate PWM signals directly in the pins, are much more stable.

The default timer setup, used by analogWrite, on an Arduino is for either a 1kHz or 512Hz cycle (depending on the timer), with a prescaler (clock divider) of 64, or 4µs. 

You will have to abandon the Arduino library, and deal with the underlying timer hardware to get any PWM frequency higher than 1kHz.

So you'll have to change the timers set up. This is explained in the ATmega manual about the ATmega48/88/168/328, called 8271.pdf downloadable from Atmel.com.

If you really want 32kHz then use a timer with a programmable upper count, or timer 1.
If you use timer1, which is a 16bit timer, set the pre-scaler to 0, e.g.:

TCCR2B = (0&lt;&lt;CS12) | (0&lt;&lt;CS11) | (1&lt;&lt;CS10);


Then use the 'Fast PWM, 9-bit' mode, or modes which use either ICR1 or OCR1A to set the maximum count. 

You can use any duty cycle by setting the appropriate output compare register OCR1A or OCR1B. At a 9bit count, the duty cycle can be changed in 1/512 increments.