Salida estable de un potenciómetro [cerrado]

1

Un problema recurrente con los potenciómetros analógicos es obtener una salida estable que solo cambia cuando el potenciómetro se mueve realmente (es decir, no genera muchos valores extremadamente similares debido al ruido o al jitter) . ¿Cuál es el mejor enfoque para tener en cuenta esto?

Puedo pensar en un par de enfoques:

  1. Tiempo de espera: habilite una zona muerta después de uno o dos segundos si la perilla no se mueve una cierta cantidad.
  2. Zona muerta en movimiento: cada vez que el valor de lectura abandone la zona muerta, hágalo más reciente con el nuevo valor.

Tenga en cuenta que el filtrado puro no resuelve el problema: cuando cuantifica el valor filtrado, siempre puede estar a medio camino entre dos niveles de cuantificación y el aleteo entre ellos.

¿Alguien tiene más soluciones?

Editar: Para ser claros, esta es la razón por la que el promedio, el filtrado, un mejor potenciómetro, ignorar el LSB, etc. no funcionará:

Supongamos que tenemos este voltaje después de filtrar / promediar lo que sea:

Entoncessupongamosquecuantificamosal0.1máscercano.Obtendremosunasalidaquetiembla:

Esperamosquepuedaverquenoimportaquétanbuenoseasufiltrado,ocuánbastasucuantización,siemprehabrálaposibilidaddefluctuar.Esporesoquenecesitaalgomásqueunfiltrorealmentebuenoounacuantificaciónrealmenteaproximada.

Edición2:Paraserdoblementeclaro,porqueparecequealgunaspersonasnoloentienden.Megustaríaalgúnmétodoparaeliminarporcompletoestetipodefluctuación(queescausadaporunruidoinevitableenelsistema),mientrassiguerespondiendo"bien" a un usuario que gira físicamente el potenciómetro (es por un botón de brillo).

Edición 3: Para ser triplicamente claro (vamos muchachos), Solo quiero que el valor cambie cuando el pozo se haya movido físicamente porque actuar sobre estos cambios es costoso (la pantalla parpadea cuando se cambia el brillo; no quiero que parpadee continuamente).

    
pregunta Timmmm

5 respuestas

3

Puedes hacerlo pegajoso electrónicamente.

Tome muchas lecturas filtradas (analógicas y de dominio digital) y luego simule la adherencia mecánica. Algo así como deslizamiento en el que se requiere mucho movimiento (en términos relativos) para que se mueva desde una posición determinada una vez que se haya asentado.

    
respondido por el Spehro Pefhany
1

Si esto es para el control de brillo, estás pensando demasiado en el problema. Coloca un condensador en el limpiaparabrisas de la olla y continúa con tu vida.

    
respondido por el Richard Crowley
1

Ignore el jitter y escale el efecto de girar la perilla apropiadamente. No puedo imaginar que esto tendría un efecto real en un control de brillo si un LSB es 1/2 ^ 10 de escala completa. Si lo hace, su error está en su método de escala, posiblemente un paso en falso numérico. Quizás esté dividiendo antes de multiplicarse y amplifique el error de redondeo. Muestre su código, en lugar de describir su problema, ya que probablemente tenga problemas con XY.

Si muestra el código, redúzcalo a una porción mínima que demuestre su problema.

Ahora que ha explicado un poco más su problema, aún necesita probar el pozo con algún nivel de servicio. Mantenga un registro del último valor que causó un ajuste. Solo llame a su API cuando se haya desviado tal vez un 10% de ese valor, y cada vez que llame a la API, almacene el nuevo valor. Si no puedes tolerar eso, entonces recomiendo cambiar el potenciómetro a un codificador y el problema podría desaparecer.

    
respondido por el Scott Seidman
0

La solución general es hacer el filtrado en el lugar correcto y usar la resolución A / D adecuada.

Estás filtrando en analógico, luego cuantizando. Un poco de filtrado en analógico es bueno, pero la mayor parte del filtrado debe estar en las muestras digitales. Eso también filtra el ruido de cuantización, que es su problema, aunque no lo haya dicho directamente.

Ejecute el A / D tan rápido como pueda sin ser una carga para el resto del sistema, luego aplique un par de:

FILT < - FILT + FF (NUEVO - FILT)

Esto es fácil de calcular en un microcontrolador, especialmente cuando FF es 1/2 N . La multiplicación por FF es entonces un cambio a la derecha por N bits. Para no perder ninguna información, FILT debe mantenerse con N bits de fracción adicionales en comparación con las muestras entrantes (los valores NUEVOS en este algoritmo).

Por ejemplo, dos de estos filtros con FF = 1/16 y manteniendo un byte de bits de fracción produce un tiempo de establecimiento del 90% en 60 iteraciones. Esta es la ventaja de ejecutar el A / D más rápido en segundo plano que los valores que necesita el resto del sistema.

Si este es un bote destinado a ser ajustado por un humano, entonces tienes mucho tiempo. Digamos que ejecuta el A / D a 2 kHz, que es bastante lento incluso para un modesto microcontrolador. 50 ms es aproximadamente el límite de lo que los humanos consideran instantáneo. En ese momento, procesa 100 muestras y llega al 98,9% de ajuste, no es que realmente necesite establecerse en ese nivel en 50 ms para la intervención humana.

La otra parte de esto es asegurarse de que el A / D tenga suficiente resolución para comenzar. El filtrado de paso bajo le dará un poco o dos de resolución adicional aparente, pero no es algo en lo que deba confiar. Digamos que esto es un control de volumen, y desea que tenga un rango de 60 dB. Incluso solo un A / D de 8 bits le da 0.24 dB por conteo. Eso es tan poco que nadie se dará cuenta si el volumen fluctúa hacia arriba y hacia abajo en esa cantidad, suponiendo que tenga cuidado de no romper la señal entrante, por ejemplo, cambiando la ganancia en los cruces por cero o similares. Incluso las muestras de 8 bits con filtrado, como se describe anteriormente, parecerán suaves para un humano que ajusta un control de volumen.

Tendrías que trabajar en ello para encontrar un micro moderno que no tenga al menos una A / D de 10 bits. Eso significa que puede detectar 1/1000 del rango de rotación. Piensa al respecto. Si realmente importa 1/1000 del rango de rotación, debe volver al diseño a nivel del sistema y replantearse todo el problema en un nivel superior. Usted podría, por ejemplo, tener dos macetas. Uno es un ajuste del curso y el otro un ajuste fino. O utilice un codificador digital y permita varios giros. Existen varias soluciones a nivel de sistema, pero leer una perilla normal a 1/1000 de vuelta debería ser lo suficientemente bueno, ya sea que esté nervioso entre lecturas adyacentes o no.

    
respondido por el Olin Lathrop
-1

Si su ruido es mayor que la resolución deseada, corrija el problema de sensibilidad con valores de R fijos en serie o corrija el problema de ruido.

De lo contrario, ignore como sugirió o trate el jitter promediando.

  • el rango de jitter se reduce en sq.rt. de N muestras promediadas solo al azar

Puede simplemente agregar histéresis al comparar el valor absoluto de la diferencia entre la nueva lectura de la lectura "almacenada" previamente para ignorar las lecturas que no excedan un rango definido de ruido. '. Puede establecer este umbral tan grande como desee en el software para que pueda ser mayor que el LSB.

    
respondido por el Tony EE rocketscientist

Lea otras preguntas en las etiquetas