Pytanie:
Wzmacniający sygnał impulsowy (0,1 ... 0,5 V) do wejścia cyfrowego Arduino
jengstro notarealsurname
2018-05-28 23:54:25 UTC
view on stackexchange narkive permalink

Jak to może być takie trudne (dla mnie :-).Przychodzący sygnał czujnika ma wartość bliską 0 V i daje impulsy ~ 0,5 V, które muszą być odczytane przez wejście cyfrowe Arduino (przerwania).

Do tej pory to, co próbowałem:

  • 0,5 wolta jest tuż za transoptorem do działania, to byłoby łatwe.
  • Odczytywanie tego małego sygnału bezpośrednio do wejścia analogowego.OK, ale czas nie jest wystarczająco dokładny.Więc zdecydowanie chcesz użyć cyfrowego przerwania Arduino.

Gdy czujnik wysyła impuls 0,5 V -> 5 V do wejścia cyfrowego arduino stan WYSOKI.Jeśli sygnał czujnika spadnie poniżej 0,2 V -> wejście cyfrowe Arduino do stanu LOW.

OK, może wzmacniacze operacyjne, ale jak?Próbowałem zasymulować, nie robiąc odpowiednich rzeczy przy odpowiednim wzmacniaczu operacyjnym.

  • Mam pojedyncze zasilanie DC + 5 V do napędzania rzeczy.
  • Chciałbym, aby ilość komponentu była mała, malutka.
Dlaczego nie użyć komparatora analogowego z odpowiednim odniesieniem?
Komparator analogowy jest fajny, ale jeśli twoje wejście jest nieco zaszumione, wyzwalacz Schmidta może być ustawiony na wyzwalanie tylko poniżej 0,2 V i powyżej 0,3 V.[EEVblog # 941 - Samouczek dotyczący wyzwalacza Schmitta] (https://www.youtube.com/watch?v=Ht48vv0rQYk)
Cztery odpowiedzi:
Tom Carpenter
2018-05-29 01:26:09 UTC
view on stackexchange narkive permalink

Większość układów scalonych ATMega ma już wbudowany moduł komparatora analogowego (AC), więc nie ma potrzeby korzystania z zewnętrznych obwodów, chyba że chcesz kontrolować histerezę.

W przypadku Arduino Uno, piny AC to PD6 i PD7 (cyfrowy pin 6 i cyfrowy pin 7 w języku „Arduino”). Do PD6 (AIN0) należy podłączyć napięcie odniesienia DC w miejscu, w którym ma być próg (w twoim przypadku ~ 0,3 V), a do PD7 (AIN1) podłączasz sygnał wejściowy.

Jeśli chcesz mieć możliwość pomiaru więcej niż jednego sygnału (aczkolwiek jednego na raz), możesz użyć dowolnego z analogowych pinów wejściowych (A0 do A5) zamiast PD7. Wyjście multipleksera ADC wewnątrz MCU może być skierowane do komparatora analogowego. Należy jednak pamiętać, że ADC nie może być używany jednocześnie z komparatorem analogowym, jeśli jako źródło wejściowe używany jest multiplekser.


W przypadku ATMega32U4 na Pololu Micro, zgodnie z twoim komentarzem, sprawy mają się trochę inaczej. Nadal mają one komparator analogowy, jednak nie mają styku AIN1. Zamiast tego musisz użyć ADC Mux jako źródła sygnału, co oznacza, że ​​możesz podać sygnał impulsowy do dowolnego z pinów A0 do A5 na mikropłytce.

Dla odniesienia DC, AIN0, to znaczy na PE6, co odpowiada cyfrowemu pinowi 7.


W przypadku referencyjnego sygnału DC możesz po prostu użyć pary rezystorów jako dzielnika napięcia i prawdopodobnie także małego (~ 100nF) kondensatora odsprzęgającego, aby wygładzić szum.

Aby odczytać, czy sygnał jest wysoki czy niski, możesz sprawdzić bit ACO rejestru ACSR lub ustawić procedurę obsługi przerwań dla wektor przerwań ANALOG_COMP_vect .

Jeśli jesteś zainteresowany synchronizacją sygnału, bit ACO może być również wewnętrznie kierowany bezpośrednio do rejestru przechwytywania wejścia Timera 1, dzięki czemu możesz oznaczyć czas przejścia sygnału.

O tak.Teraz rozmawiamy.Ale tak się składa, że mam teraz 32U4 micro arduino (pololu).Mam nadzieję, że nie różni się zbytnio od „standardowego” arduino Uno, kiedy uzyskuje się dostęp bezpośrednio do rejestrów.To micro-arduino ma dwa wejścia analogowe (w moim przypadku darmowe).Zdecydowanie najpierw daję temu szansę, zanim zacznę wygłupiać się z półprzewodnikami.
@jengstronotarealsurname W przypadku tej płyty należy użyć D7 dla napięcia odniesienia DC i dowolnego z analogowych pinów A0 do A5 dla sygnału impulsowego.Jednak nie można używać ADC w tym samym czasie, co komparator analogowy dla tego urządzenia.
Transistor
2018-05-29 00:18:54 UTC
view on stackexchange narkive permalink

schematic

symuluj ten obwód - schemat utworzony przy użyciu CircuitLab

Rysunek 1. Ten analogowy komparator z napięciem odniesienia 0,25 V daje sygnał wyjściowy w stanie wysokim, gdy wartość wejściowa przekracza wartość odniesienia.

Co warto obejrzeć:

  • Potrzebujesz komparatora, który będzie działał na zasilaniu 5 V.
  • Upewnij się, że wejścia działają bardzo blisko 0 V.
  • Wiele z nich ma wyjścia typu otwarty kolektor i wymaga podciągania.Możesz użyć wewnętrznego podciągania micro zamiast R3.
  • Nie pokazałem kondensatora odsprzęgającego na zasilaniu 5 V.Potrzebujesz jednego.
Jestem pewien, że „Arduino”, a dokładniej seria atmega mcu ma wbudowany komparator. Nie jest więc potrzebny nawet zewnętrzny.
@Mike Wygląda na to, że myśleliśmy o tym samym w tym samym czasie :).
Michael Karas
2018-05-29 00:32:04 UTC
view on stackexchange narkive permalink

Oto prosty obwód, który może osiągnąć to, co chcesz, za pomocą zaledwie kilku tanich komponentów.Sygnał wejściowy z czujnika zostanie podłączony do zacisku emitera tranzystora NPN.Wyjście na kolektorze połączy się z wejściem cyfrowym płyty MCU.5 V do zasilania obwodu może również pochodzić z płyty MCU.

enter image description here

Wygląda to tak interesująco, trzeba to wypróbować z jakimś oprogramowaniem do symulacji elektroniki.„Wypychanie” sygnału w górę do nadajnika i jakoś przezwyciężenie problemu z emiterem podstawowym poniżej 0,7 V :-) Czy ten obwód w jakiś sposób wpływa na źródło wejściowe.Sygnał wejściowy jest „skradziony / równoległy” z oryginalnej aplikacji czujnika.
Obwód ten wymaga, aby sygnał źródła czujnika pochłonął prąd emitera NPN, gdy wyjście czujnika jest niskie.Zgodnie z projektem ten prąd jest dość niski.
Jeśli jest to zbyt aktualne, musisz skorzystać z comp
Obwód typu Ator.
jengstro notarealsurname
2018-06-06 22:33:26 UTC
view on stackexchange narkive permalink

Prawie gotowe ... ale nie.Znalazłem tę bibliotekę, więc nie muszę zaczynać bitowego maskowania tych rejestrów (leniwy, rzeczywiście)

  #include "analogComp.h"
// Pololu ASTAR a32u4
void setup () {
  // umieść tutaj swój kod instalacyjny, aby uruchomić go raz:
  analogComparator.setOn (AIN0, A1);// AIN0 jest na D7.Jako napięcie odniesienia
  analogComparator.enableInterrupt (speedSensorInterrupt);
  Serial.begin (9600);
}

void loop ()
{
   opóźnienie (1000);
   Serial.println (".");
}

void speedSensorInterrupt ()
{
   Serial.println ("Przerwanie komparatora między A1<->D7!");
}
 

Zatem D7 ma rację (AIN0), przynajmniej daje efekt.Z tego powodu przerwanie jest podnoszone, gdy na tym wejściu przekracza ~ 0,8 V.Jednak poziom napięcia A1 (wejście sygnału) nie ma żadnego wpływu, gdy zostanie podniesione przerwanie.Hmm, co może być problemem?

Przeniesiono to do bardziej poprawnego forum, po stronie Arduino (sw).https://arduino.stackexchange.com/questions/53399/a32u4-pololu-astar-trying-to-use-analog-comparator-interrupt


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...