MCP41010 i Arduino to wygodny zestaw do projektów, w których rezystancja ma być regulowana programowo, bez mechanicznej gałki. W potencjometrze cyfrowym pozycję suwaka ustawia mikrokontroler. W tym poradniku omawiamy, czym jest MCP41010, jak działa jego interfejs SPI i jak podłączyć go do Arduino.
1. MCP41010 Arduino - czym jest potencjometr w Arduino?
Potencjometr to element o trzech wyprowadzeniach: dwóch końcach ścieżki rezystancyjnej oraz suwaku. W układzie z Arduino najczęściej pracuje jako dzielnik napięcia. Mikrokontroler odczytuje napięcie z suwaka na wejściu analogowym i wykorzystuje je do sterowania innym parametrem programu.
(Potencjometr cyfrowy połączony z Arduino na płytce drukowanej)
W potencjometrze mechanicznym użytkownik zmienia rezystancję obrotem osi. W potencjometrze cyfrowym suwak przełącza się elektronicznie między dyskretnymi pozycjami. Arduino może więc wysłać komendę i ustawić żądaną wartość, na przykład do kalibracji, regulacji poziomu sygnału albo sterowania diodą LED bez elementów ruchomych.
2. Wprowadzenie do MCP41010
MCP41010 to jedokanałowy, 8-bitowy potencjometr cyfrowy firmy Microchip. Ma rezystancję końcówka-końcówka 10 kΩ, 256 ustawień suwaka i komunikuje się przez SPI. Układ jest ulotny, więc po zaniku zasilania nie pamięta ostatniej pozycji. Zakres zasilania wynosi od 2,7 V do 5,5 V, dlatego pasuje do Arduino 5 V i wielu płytek 3,3 V.
MCP41010 Arduino - opis pinów MCP41010
MCP41010 najczęściej występuje w obudowach 8-pinowych, między innymi PDIP i SOIC. Przed montażem sprawdź oznaczenie pierwszej nóżki, bo błędne obrócenie układu może go uszkodzić.
(Opis wyprowadzeń układu scalonego MCP41010)
Pin 1 - CS (Chip Select). Stan niski wybiera układ na magistrali SPI i pozwala wprowadzić komendę. Po transmisji pin wraca w stan wysoki.
Pin 2 - SCK (Serial Clock). To linia zegara SPI, która synchronizuje przesyłanie bitów do rejestru układu.
Pin 3 - SI (Serial Input). Tą linią MCP41010 odbiera bajt komendy i bajt wartości suwaka.
Piny 4 i 8 - VSS oraz VDD. VSS podłącza się do masy, a VDD do zasilania, najczęściej 5 V lub 3,3 V.
Pin 5 - PA0. To jeden koniec wewnętrznej ścieżki rezystancyjnej potencjometru.
Pin 7 - PB0. Drugi koniec ścieżki rezystancyjnej. Pin 6, PW0, jest suwakiem i zmienia położenie między PA0 i PB0 zgodnie z wartością zapisaną przez SPI.
MCP41010 Arduino - testowanie MCP41010 w Arduino
Potencjometr analogowy i cyfrowy mogą pełnić tę samą funkcję, ale steruje się nimi inaczej. W MCP41010 pozycję suwaka ustawia program, więc układ można włączyć do procedury startowej, pętli regulacji albo testu produkcyjnego.
(Płytka Arduino Uno)
Do komunikacji z MCP41010 Arduino używa SPI, czyli szeregowego interfejsu synchronicznego. Wystarczą trzy linie: CS, SCK oraz MOSI, który odpowiada wejściu SI. MCP41010 nie odsyła danych, więc linia MISO zwykle nie jest potrzebna do ustawiania suwaka.
W Arduino Uno sprzętowe piny SPI są przypisane do konkretnych wyprowadzeń. Warto z nich korzystać, bo biblioteka SPI obsługuje wtedy transmisję bez ręcznego generowania zegara.
Pin D10 - SS/CS. Można użyć innego pinu cyfrowego jako CS, ale D10 jest domyślnym wyborem w Arduino Uno.
Pin D11 - MOSI
MCP41010 Arduino: konfiguracja potencjometru za pomocą mikrokontrolera - pin D12 - MISO
Pin D13 - SCK
Programowanie MCP41010 polega na wysłaniu dwóch bajtów po opuszczeniu linii CS. Pierwszy jest komendą zapisu, a drugi wartością 0-255, czyli pozycją suwaka.
Nie należy mylić tej wartości z rezystancją w omach. Liczba 0 ustawia suwak blisko końcówki B, a 255 blisko końcówki A. Rzeczywista rezystancja zależy od nominalnej wartości 10 kΩ, tolerancji układu oraz rezystancji samego suwaka.
Dane trafiają do rejestru przesuwnego jako 16-bitowa ramka: bajt komendy i bajt danych. Po podniesieniu CS układ aktualizuje pozycję suwaka.
Przed testem trzeba ustawić pin CS jako wyjście, zainicjalizować SPI i dopiero wtedy wysyłać kolejne wartości. Warto zacząć od środka zakresu, aby łatwo sprawdzić dzielnik miernikiem.
3. MCP41010 Arduino - jak podłączyć cyfrowy potencjometr MCP41010 do Arduino
Do prostego testu wystarczy Arduino, MCP41010, płytka stykowa, kilka przewodów i źródło sygnału, którego poziom chcesz regulować. W projekcie produkcyjnym od razu zadbaj o stabilną masę, krótkie ścieżki SPI i kondensator odsprzęgający przy zasilaniu.
(Układ potencjometru cyfrowego podłączony do Arduino)
Krok pierwszy: przygotuj potrzebne materiały
Minimalny zestaw obejmuje Arduino Uno lub zgodną płytkę, MCP41010, przewody, płytkę stykową oraz kondensator 100 nF między VDD i VSS. Do testu przyda się także dioda LED z rezystorem, multimetr albo oscyloskop.
Połączenie wykonuje się przez SPI: CS do wybranego pinu cyfrowego, SCK do zegara SPI, MOSI do SI, VDD do zasilania, a VSS do masy. Końcówki PA0, PB0 i PW0 podłącz zgodnie z rolą potencjometru w obwodzie.
MCP41010 Arduino - krok drugi: obliczanie wartości rezystancji
MCP41010 ma 8-bitową rozdzielczość, czyli 256 pozycji suwaka. Dla wersji 10 kΩ jeden krok odpowiada w przybliżeniu 10 000 Ω / 256, czyli około 39,1 Ω. W praktyce dochodzi tolerancja rezystancji oraz rezystancja suwaka.
W konfiguracji reostatu rezystancję między suwakiem a jednym końcem można oszacować z kodu zapisanego w układzie. Dla PW0-PB0 przybliżony wzór to RWB = D x RAB / 256 + RW, gdzie D jest wartością 0-255, RAB wynosi 10 kΩ, a RW oznacza rezystancję suwaka.
Przykładowo dla D = 222 otrzymujemy około 222 x 10 000 / 256, czyli 8672 Ω, plus rezystancję suwaka.
Dla pomiaru PA0-PW0 zależność jest odwrotna: im większy kod, tym mniejsza rezystancja po stronie A.
MCP41010 nie jest elementem mocy. Prąd przez suwak musi mieścić się w ograniczeniach z dokumentacji, a napięcie na pinach potencjometru nie powinno wykraczać poza zasilanie układu.
MCP41010 Arduino - krok trzeci: narysowanie schematu obwodu
Przed podłączeniem przewodów narysuj prosty schemat. To pomaga uniknąć zamiany PA0 z PW0, braku wspólnej masy, nieustalonego stanu CS albo podania na wejścia napięcia wyższego niż VDD.
(Schemat MCP41010 połączonego z Arduino Leonardo)
Na Arduino Leonardo piny SPI są wyprowadzone inaczej niż w Uno, dlatego najlepiej korzystać z dokumentacji płytki albo złącza ICSP. Sam MCP41010 nadal potrzebuje linii CS, SCK, SI, zasilania, masy oraz trzech wyprowadzeń potencjometru.
Krok czwarty: kod Arduino
(Przykładowy kod programu dla MCP41010 i Arduino)
Program powinien dołączyć bibliotekę SPI, ustawić pin CS jako wyjście i nadać mu stan wysoki. Podczas zapisu Arduino opuszcza CS, wysyła bajt komendy, bajt wartości 0-255, a na końcu ponownie podnosi CS.
MCP41010 Arduino - krok piąty: test MCP41010 i prosta aplikacja
Po wgraniu programu można sprawdzić układ miernikiem. Najprostszy test to połączenie PA0 z VDD, PB0 z masą i pomiar napięcia na PW0. Zmiana wartości przez SPI powinna przesuwać napięcie od okolic masy do napięcia zasilania.
Pierwsze typowe zastosowanie to regulacja wzmocnienia w prostym torze analogowym, na przykład w układzie ze wzmacniaczem operacyjnym.
Drugie zastosowanie to cyfrowe sterowanie głośnością albo poziomem sygnału audio, o ile napięcia i prądy mieszczą się w dopuszczalnym zakresie MCP41010.
Trzecim przykładem jest kalibracja czujników, gdzie mikrokontroler dobiera punkt pracy podczas uruchamiania albo testu serwisowego.
(Niektóre układy mikrofonowe mogą korzystać z cyfrowej regulacji poziomu)
Potencjometr cyfrowy sprawdza się także w regulacji napięcia odniesienia, kompensacji offsetu, strojeniu filtrów i ustawianiu jasności podświetlenia. Nie zastępuje jednak każdego potencjometru mechanicznego: ogranicza go zakres zasilania, prąd suwaka oraz brak pamięci nieulotnej.
Podsumowanie
MCP41010 pozwala sterować rezystancją z poziomu Arduino bez elementów mechanicznych. Wystarczy poprawnie podłączyć SPI, zasilić układ w dopuszczalnym zakresie i wysłać dwa bajty: komendę oraz wartość pozycji suwaka. To potencjometr do regulacji sygnałów, a nie rezystor dużej mocy.
Jeżeli przygotowujesz prototyp lub małą serię urządzenia z potencjometrami cyfrowymi, OurPCB może pomóc w projekcie PCB, montażu komponentów i weryfikacji DFM. Prześlij pliki Gerber oraz BOM; wycena w 12 godzin roboczych.