Conduciría la válvula por PWM con un interruptor lateral bajo. Todo lo que necesita es el transistor y el diodo de captura de retorno. La bobina solenoide tiene una inductancia significativa, por lo que suavizará la corriente por sí sola. Me mantendría por encima del rango audible, pero lo más probable es que el solenoide "vea" solo el promedio muy por debajo de esa frecuencia. A una frecuencia PWM de 25 kHz, por ejemplo, obtiene 40 µS por pulso. Este es un tiempo bastante largo para un microcontrolador moderno, por lo que tendrá mucha resolución y muchos ciclos para calcular cuánto tiempo debe durar el próximo pulso.
A su voltaje y corriente, puede usar algo como el IRLML0030 como interruptor de lado bajo y conducirlo directamente desde una salida PWM digital del microcontrolador. No olvide el diodo inverso a través de la bobina. Un Shottky sería bueno. Los paquetes de 30 V 1 A Shottkys en SMA son abundantes y baratos.
Usted dice que quiere controlar la corriente, pero ¿es realmente solo un parámetro interno de un sistema de control más grande? Por ejemplo, ¿está realmente tratando de controlar la presión, el caudal o algo más? Si la unidad del solenoide está dentro de un bucle de realimentación mayor, entonces puede hacer que el ciclo de trabajo PWM sea proporcional a la señal. No será completamente lineal, pero lo suficientemente cerca como para que el bucle de realimentación externo funcione y finalmente controle correctamente el parámetro deseado.
En realidad, hice exactamente eso una vez en un producto comercial real que controlaba la presión en la salida de la válvula. Compensé el ciclo de trabajo basado en el voltaje de potencia medido, ya que en mi caso podría variar ampliamente. Eso significa que el bucle de control externo calcula el nivel de activación del solenoide deseado, y el código de bajo nivel calcula el ciclo de trabajo PWM a partir del nivel de activación deseado y la tensión de suministro real.