Eso que pides es un oxímoron. Es como el color blanconegro o ir a la derechaizquierda.
Por definición PWM significa que no varía la frecuencia y si el reparto, por ende con un fecuencimetro medirás siempre lo mismo. Tú pides que varíe la frecuencia y no el reparto que es exactamente lo contrario.
Respecto a que chip usar para tu noPWM pues depende del chip y de tu habilidad programando.
¿Lo quieres hacer por software o empleando los timers? Si es por hardware, normalmente no se dispone de cualquier frecuencia, hay que estudiar el timer, sus preescalers y su configuración.
Para esas frecuencias se puede llegar pero con programación "habilidosa" o "refinada" a base de delays y programación descuidada no.
Yo he llegado a modular a 400kHz para el control de tiras de leds inteligentes sin recurrir al código máquina como hacen las librerías oficiales. Quería hacer un aporte pero un día por otro lo he ido dejando...
Con digitalWrite no vas a llegar a 250kHz, si no recuerdo mal se queda en 50kHz o así. Hay una librería de fastDigitalWrite o algo así, que no he probado que probablemente llegue.
Para los 400kHz usé acceso al port directo que entonces sobra tiempo y hay que ralentizar el código.
Bueno, hay más arduinos no AVR, por ejemplo el ESP32 llega a 4MHz con digitalWrite. El Arduino DUE no recuerdo pero era bastante más rápido que los AVR, creo que no llegaba a los 400kHz. Me imagino que lo habría usado.
Mira, aquí está muy bien explicado en perfecto
español técnico.
Learn how to write a fast digitalWrite() function in Arduino, using direct port manipulation. Complete explanations so you can understand what you're doing.
roboticsbackend.com
La librería creo que es esta:
Arduino library for faster digitalWrite using port manipulation and macro for ease in pin assignments. - GitHub - NicksonYap/digitalWriteFast: Arduino library for faster digitalWrite using port ma...
github.com