Uso dual del pin AVR: Entrada y salida (aparentemente) al mismo tiempo

5

He estado trabajando en algunas versiones diferentes de un circuito de control de luz de bicicleta que lee varios botones y establece varias salidas en consecuencia, como faros, luces traseras, luces intermitentes, etc.

Mi diseño actual se basa en un ATtiny24 ( Hoja de datos ) usando el oscilador interno (8MHz), programado en C utilizando AVR-GCC. Me gustaría mantener al mínimo los componentes externos, como los registros de desplazamiento. Los resistores están bien porque son baratos y pequeños, y estoy usando MOSFETs (NTD4960N: Hoja de datos ) para conducir los bancos de led

Básicamente, lo que estoy buscando es controlar los MOSFET con una señal PWM de 200Hz para controlar el brillo del LED, pero limitar el ciclo de trabajo al 90%. Teniendo esto en cuenta, solo necesitaría un pin para ser una salida durante un máximo del 90% del tiempo. En el 10% restante del tiempo, quiero cambiar el pin a una entrada para leer el estado de un botón.

Probé muchas configuraciones diferentes para permitir que el MOSFET se mantenga APAGADO cuando se supone que está APAGADO, independientemente de la entrada del botón, y esto es lo mejor que puedo encontrar:

Latensióndealimentación(VCC)esde5V,porloquecuandosepresionaelbotón,sevenaproximadamente0,9Venlapuertadeltransistor.Estonoessuficienteparaqueeltransistorcomienceaconducir,peropuedeserleídoporelMCUADCquesehahabilitadoutilizandolareferenciainternade1.1V.

AsíqueelcódigocontrolaelMOSFETconunaseñalPWMde200Hz.ElciclodetrabajovariaráconelbrillodelLEDdeseado,peronoserásuperioral90%.Duranteelúltimo10%delciclodePWM,lospinesdeE/Sseconfigurancomoentradas(pullupsinternosdeshabilitados,búferesdeentradadigitaldeshabilitados)yelADCseusaparaleerelestadodelpin.Laresistenciade10kmantieneelMOSFETapagado,ysisepresionaunbotón,elADClee0.9V.EstevalortodavíanoeslosuficientementealtoparaencenderelMOSFET,porloquelosLEDpermanecenapagados,independientementedelapresióndelbotón.

ComoelADCestáapagadoyencendido,descartolaprimeralecturayguardolasegunda.EstosehacecontiemposuficienteantesdequeelpindebareiniciarsecomosalidaparainiciarelpróximociclodePWM.Yaqueestoyleyendovariosbotones,sololeounoencadaciclodetrabajo,luegoactualizoelmultiplicadordeADCparaleerelsiguientebotónalfinaldelsiguienteciclodetrabajo;porlotanto,cadabotónseleeunavezcada[(númerodebotones)*(200Hz)^-1].LaslecturasdePWMybotonessemanejancompletamentemedianteinterrupciones,mientrasqueMAINdeterminaquéhacerconelestadodecualquierbotónenparticular.

Heconstruidoyprobadoestecircuito,yparecefuncionarperfectamente,peroqueríapresentarladescripciónaquíconlassiguientespreguntas:

  1. Primero,¿esunamalaidea?Siesasí,entonces¿porqué?
  2. ¿Existeunaformaobviamentemejordehacerloademásdelosregistrosdedesplazamiento/desplazamientoGPIO?

Puedopublicaralgunos(otodos)delcódigosilodesea.Simplementepenséqueladescripciónpodríasersuficiente,ynoqueríahacerestopormástiempodeloqueyaera.

ACTUALIZAR

Deberíahaberdichoestolaprimeravez,perolatensióndealimentacióndelaMCU(VCC)esde5V,latensióndelabatería(V_bat)esde12V(podríasermáscomo14enunabateríacompletamentecargada),ylacorrienteLEDtotal(comoenlacantidadquevaatravésdelFET)estarácercade2A.ElbancodeLEDconstarádenumerosascadenasparalelasde3LEDdeserie(blanco,V_LED=3.3V)yunaresistenciadeserieencadacadena.Lacorrientepulsadaesdealrededorde50mAporcuerda.Con40cuerdasmásomenosiguala2Aentotal.

HeprobadoyverificadomiversiónADCdelcircuito,asícomolaversión"digital" presentada por DrFriedParts a continuación con una pequeña corriente (total de 50 mA), pero aún no he probado ninguno de los circuitos con mayor carga de corriente.

Este es el proyecto original que estoy rediseñando. La primera vez que construí este controlador de luz para bicicletas, era nuevo para los microcontroladores, por lo que fue más una experiencia de aprendizaje que cualquier otra cosa.

    
pregunta Kurt E. Clothier

1 respuesta

4

Eso está perfectamente bien ...

La respuesta corta es que no hay nada de malo en este enfoque. Se supone, por supuesto, que tienes tiempo para cambiar y hacer una conversión de ADC (que a 200 Hz) lo haces.

Es posible que desee una serie de resistencias limitadoras de corriente en línea con la compuerta para proteger su controlador MCU (si la carga total de la compuerta del N-FET está en las decenas de nC, no leyó la hoja de datos).

Si desea una solución completamente "digital":

simular este circuito : esquema creado usando CircuitLab

Las opciones de componentes son (los valores predeterminados de CircuitLab) se aproximan, funcionará una amplia gama de partes, pero es un acto de equilibrio entre R3 y R4.

  • Debe hacer que la relación R3 / R4 sea lo suficientemente grande como para que V (R4) < Vth de M1
  • Debe hacer que la relación R3 / R4 sea lo suficientemente pequeña como para que Vsrc-V (R3) > MCU V_IH

... para SW1 "on", MCU Hi-Z

Tuning

Aquí hay una configuración específica que debería funcionar (fuente de 5V):

Materiales:

Consulte "documentos" en estos enlaces:

Objetivos:

Procedimiento:

Comience con el caso (GPIO: Hi-Z; SW1: cerrado):

  1. Vsrc - > R3 - > D3 - > R4 - > GND, debe producir V (R4) < Vth, M1, min = 2V
  2. Necesitamos V (gpio) > V_IH = 2.6V
  3. Esta propagación determina el Vf mínimo, diodo (Vfd) que necesitamos

Ahora, observe el caso (GPIO: Logic-1; SW1: Open):

  1. Necesitamos V (R4) > Vth, M1, min = 1.8V (idealmente con un margen cómodo)
  2. Esto determina el límite superior del Vfd requerido

Ahora, observe el caso (GPIO: Logic-1; SW1: Closed):

  1. Necesitamos I (R3) < I (OH), max
  2. Esto determina el tamaño mínimo de R3 (aumentar la confiabilidad)

Ejemplo:

  • R3 = 15k
  • D3 = 1.6V (adelante) = aprox. 3x 1N4148 en serie
  • R4 = 10k

Controlar el FET / LED:

V (gpio) = 5V; V (g) = 3.4V

  • PASAR: 3.4 V > 2V - FET se enciende "

Lee el estado de un interruptor "on":

V (gpio) = 2.9V; V (g) = 1.4V

  • PASAR: 1.4 V < 1.8V - FET se apaga "
  • PASAR: 2.9V > 2.6V - MCU lee la lógica 1

Evita contiendas perjudiciales:

El interruptor está "encendido" Y MCU está conduciendo el GPIO "bajo"

  • PASAR: 5V / R3 = 500uA

Disipación de potencia en el FET

El problema de la disipación de poder en el FET ha sido planteado por algunos comentaristas. No es un problema en este circuito debido al comportamiento altamente no lineal del LED.

Ignoremos el LED para limitar el problema, considerando un D4 imposible en el peor de los casos con I (D4) = 20mA pero Vled = 0 y R5 = 0 (¡imposible!). Ahora toda la disipación de poder ocurre en el FET.

En estas condiciones, la disipación de potencia en el FET puede ser como máximo 100mW o ~ 1/5 de la potencia máxima tolerable de la parte sugerida. Así que estamos a salvo.

Sin embargo, no verás la disipación cerca de ese nivel durante un período de tiempo apreciable. El tiempo de transición desde R4 = 10k es aproximadamente (RQV) = 10k * 1.1n * 3.4 = 37uS en general, pero como solo necesitamos pasar de 3.4V a menos de 1.8V, podemos terminar en menos de la mitad de ese tiempo.

A 200Hz, eso se traduce en un mero ciclo de trabajo de 0.75% a 1.5% o menos de 1 mW en total.

... y recuerde que ignoramos a los consumidores reales de energía en la ruta: el LED y la resistencia limitadora de corriente (R5). En la práctica, es imposible entregar Vds = 5V al FET, mientras que Iled = 20mA, y la disipación de potencia en el FET será despreciable.

    
respondido por el DrFriedParts

Lea otras preguntas en las etiquetas