Espaçamento no pwm (cut off - Mark Space)

Olá pessoal, estou em um projeto de pesquisa pessoal onde preciso de um espaçamento no pulso do pwm.
Estou pesquisando a dias, mais meu conhecimento é limitado fiz um curso de c# a uns 6 aos atrás mas acabei não praticando então restaram apenas noções, ehehe.
Bom, vamos aos fatos:
1- Preciso controlar o dut cycle ( Tranquilo, n formas de fazer isto, sem problemas.)

2- Preciso controlar a frequência.
Consegui controla de 2 maneiras
a- Manipulando o temporizador

int LedpinB=9;
int analogpin=A1;
int value=0;
int x;

void setup()
{
Serial.begin(9600);
pinMode(LedpinB, OUTPUT);


TCCR1B = TCCR1B & 0b11111000 | 0X02; //temporizador 1 (PWM pinos 9 & 10) 8       3906.25 Hz (3,906KHz)
//TCCR1B = TCCR1B & 0b11111000 | 0X03; //temporizador 1 (PWM pinos 9 & 10) 64      488.28 Hz (0,48KHz)
//TCCR1B = TCCR1B & 0b11111000 | 0X04; //temporizador 1 (PWM pinos 9 & 10) 256      122.07 Hz (0,12KHz)
//TCCR1B = TCCR1B & 0b11111000 | 0X05; //temporizador 1 (PWM pinos 9 & 10) 1024      30.52 Hz (0,03KHz)

}

void loop()
{
value=analogRead(analogpin);
x=map(value,0,1023,0,255);
analogWrite(LedpinB,x);
Serial.println(x);
delay(100);
}

b- Através da biblioteca TimerOne.h (Meu preferido controlo a frequência até 1Mhz)

#include <TimerOne.h>

void setup()
{
 Serial.begin(9600);

  pinMode(9, OUTPUT);
 
Timer1.initialize(1000); // valor 1000 = 1khz
//Timer1.setPeriod(500);
Timer1.pwm(9,512);// Dut Cycle 512=50%  - 1023=100%
//Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
}

// void callback()
//{
// digitalWrite(9, digitalRead(9) ^ 1);
//}

void loop()

{

  
}

3- Criar um Cut off no pwm com controle de tempo deste período em milissegundos.
Preciso que fique assim conforme a imagem, porém na frequência q eu quiser.

Fiz esta imagem através do básico conforme o código abaixo, porém fica bem longe do que eu preciso em frequência.

int i=0;

void setup()
{
 Serial.begin(9600);

  pinMode(9, OUTPUT);
 }
 
void loop()

{

  if (i < 30)
  {
  digitalWrite(9, digitalRead(9) ^ 1);
  }
  if (i >= 30)
  {
  digitalWrite(9, digitalRead(9) ^ 0);
 
  }
  if (i > 38)
  {
  digitalWrite(9, digitalRead(9) ^ 1);
  i=0;
  }
  i++;
  Serial.println(i);
}

Com o timerOne seria o ideal para mim, porém me falta conhecimento para manipula-lo como preciso.

Desde ja agradeço qualquer ajuda que possam me orientar.

Obrigado!

Lembro de ter lido certa vez que para criar os pulsos do controle remote, a biblioteca ir remote do ken shirrif, deixa o pwm rodando direto e com outro timer ou por sofware mesmo fica ligando e desligando o pino do pwm, colocando o pino como input.
Creio eu que funciona, mas a alta frequencia talvez complique as coisas, já que na lib a frequencia usada é geralmente de 35 a 40 KHz.