Podrías hacer un traductor de nivel usando discretos. Aquí hay algo simple que puedo sugerir (asumiendo niveles lógicos de 3.3V en la entrada):
archivo LTSpice
Aquí hay algunas explicaciones: La entrada se alimenta a un par de BJT complementario Q3-Q4. Los emisores de ambos de estos transistores están polarizados con un voltaje que se establece en algún lugar cerca del punto medio del rango de voltaje de entrada (pero debido a que se establece mediante un simple divisor de resistencia, los transistores están realmente en una configuración emisor-seguidor). Entonces, cuando la entrada es alta, Q3 está conduciendo, y esto hace que Q5 se encienda. Cuando la entrada es baja, Q4 conduce y, como consecuencia, Q6 también. Por lo tanto, tiene un push-pull en la salida que puede oscilar el rango de salida requerido. El condensador C1 está allí para ayudar a los dos transistores de salida a conmutar al mismo tiempo, lo que limita el disparo a través de las transistiones y reduce la energía desperdiciada.
La simulación muestra que se comporta bien a 1MHz, con un tiempo de subida / caída de ~ 80ns para oscilar todo el rango de voltaje de salida cuando la entrada tiene un tiempo de subida / caída de 20ns, y con una carga de 1k. La simetría de la forma de onda tampoco se distorsiona mucho, por lo que debería estar bien para hacer PWM. Sin embargo, tan pronto como agregue algo de capacitancia a la carga, experimentará problemas. Unos pocos nF están bien, pero no más.
Nota: este circuito necesita una potencia significativa, por sí mismo: entre 1 y 1.5W, y la mayor parte de la energía se desperdicia en Q5 y Q6 (0.5W cada uno, a 1MHz). Podría hacer algo más eficiente con mosfets, pero son más difíciles de conducir correctamente en los tiempos requeridos. El circuito probablemente no sería tan simple (al menos los pocos intentos que hice no mostraron buenos resultados).