Paggamit ng Digital Potentiometer MCP41xx Sa Arduino

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Sa proyektong ito pupunta kami sa isang digital potentiometer na may arduino. Sa demonstrasyong ito potentiometer MCP41010 ay ginagamit ngunit maaari mong gamitin ang anumang digital potentiometer ng serye ng MC41 **.

Ni Ankit Negi



PANIMULA SA MC41010

Ang mga digital potentiometers ay tulad ng anumang analog potentiometer na may tatlong mga terminal na may isang pagkakaiba lamang. Sapagkat sa isang analog kailangan mong manu-manong baguhin ang posisyon ng wiper, Sa kaso ng digital potentiometer wiper na posisyon ay nakatakda alinsunod sa signal na ibinigay sa potentiometer gamit ang anumang microcontroller o microprocessor.

FIG. MC41010 IC pinout

FIG. MC41010 IC pinout



Ang MC41010 ay isang 8 pin na dalawahan sa linya ng package IC. Tulad ng anumang analog potentiometer ng IC na ito ay nasa 5k, 10k, 50k, at 100k. Sa circuit na ito 10k potentiometer ay ginagamit
Ang MC4131 ay sumusunod sa 8 mga terminal:

Pin no. Pangalan ng Pin Maliit na paglalarawan

1 CS Ang pin na ito ay ginagamit upang piliin ang alipin o paligid na konektado sa arduino. Kung ito ay
Mababa pagkatapos ay ang MC41010 ay napili at kung ito ay mataas sa gayon ang MC41010 ay naalis sa pagkakapili.

2 SCLK Shared / Serial Clock, ang arduino ay nagbibigay ng orasan para sa pagsisimula ng paglipat ng data mula sa
Arduino sa IC at kabaliktaran.

3 SDI / SDO Ang serial data ay inililipat sa pagitan ng arduino at IC sa pamamagitan ng pin na ito
Ang 4 VSS Ground terminal ng arduino ay konektado sa pin ng IC na ito.

5 PA0 Ito ay isang terminal ng potensyomiter.

6 PW0 Ang terminal na ito ay wiper terminal ng potentiometer (upang baguhin ang paglaban)
7 PB0 Ito ay isa pang terminal ng potentiometer.

Ang 8 VCC Power to IC ay ibinibigay sa pamamagitan ng pin na ito.

Naglalaman lamang ang IC na ito ng isang potensyomiter. Ang ilang mga IC ay may higit sa dalawang potentiometer na inbuilt. Ito
Ang halaga ng paglaban sa pagitan ng wiper at anumang iba pang terminal ay binago sa 256 na mga hakbang, mula 0 hanggang 255. Dahil gumagamit kami ng isang 10k na halaga ng risistor ng risistor ay binago sa mga hakbang ng:
10k / 256 = 39 ohms bawat hakbang sa pagitan ng 0 at 255

Mga Kumpanya

Kailangan namin ng mga sumusunod na sangkap para sa proyektong ito.

1. ARDUINO
2. MC41010 IC
3. 220 OHM RESISTOR
4. LED
5. Kumokonekta sa mga WIRES

Gumawa ng mga koneksyon tulad ng ipinakita sa fig.

1. Ikonekta ang cs pin sa digital pin 10.
2. Ikonekta ang SCK pin sa digital pin 13.
3. Ikonekta ang SDI / SDO pin sa digital pin 11.
4. VSS sa ground pin ng arduino
5. PA0 hanggang 5v na pin ng arduino
6. PB0 sa lupa ng arduino
7. PWO sa analog pin A0 ng arduino.
8. VCC sa 5 v ng arduino.

PROGRAM CODE 1

Ang code na ito ay naglilimbag ng pagbabago ng boltahe sa wiper terminal at ground sa Serial Monitor ng Arduino IDE.

#include
int CS = 10 // initialising variable CS pin as pin 10 of arduino
int x // initialising variable x
float Voltage // initialising variable voltage
int I // this is the variable which changes in steps and hence changes resistance accordingly.
void setup()
{
pinMode (CS , OUTPUT) // initialising 10 pin as output pin
pinMode (A0, INPUT) // initialising pin A0 as input pin
SPI.begin() // this begins Serial peripheral interfece
Serial.begin(9600) // this begins serial communications between arduino and ic.
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i) // this writes level i to ic which determines resistance of ic
delay(10)
x = analogRead(A0) // read analog values from pin A0
Voltage = (x * 5.0 )/ 1024.0// this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
delay(500)
for (int i = 255 i >= 0 i--) // this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
x = analogRead(A0)
Voltage = (x * 5.0 )/ 1024.0 // this converts the analog value to corresponding voltage level
Serial.print('Level i = ' ) // these serial commands print value of i or level and voltage across wiper
Serial.print(i) // and gnd on Serial monitor of arduino IDE
Serial.print(' Voltage = ')
Serial.println(Voltage,3)
}
}
int digitalPotWrite(int value) // this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)

PAGLALARO NG CODE 1:

Upang magamit ang digital potentiometer na may arduino kailangan mong isama muna ang SPI library na ibinibigay sa arduino IDE mismo. Tumawag lamang sa library gamit ang utos na ito:
# isama

Sa walang bisa na pag-set up, ang mga pin ay itinalaga bilang output o input. At ang mga utos na simulan ang SPI at serial na komunikasyon sa pagitan ng arduino at ic ay ibinibigay din na:

#include
int CS = 10
int x
float Voltage
int i
void setup()
{
pinMode (CS , OUTPUT)
pinMode (A0, INPUT)
SPI.begin()// this begins Serial peripheral interfece
}
void loop()
{
for (int i = 0 i <= 255 i++)// this run loops from 0 to 255 step with 10 ms delay between each step
{
digitalPotWrite(i)// this writes level i to ic which determines resistance of ic
delay(10)
}
delay(500)
for (int i = 255 i >= 0 i--)// this run loops from 255 to 0 step with 10 ms delay between each step
{
digitalPotWrite(i)
delay(10)
}
}
int digitalPotWrite(int value)// this block is explained in coding section
{
digitalWrite(CS, LOW)
SPI.transfer(B00010001)
SPI.transfer(value)
digitalWrite(CS, HIGH)
}

Sa void loop, para sa loop ay ginagamit upang baguhin ang paglaban ng digital pot sa kabuuang 256 na mga hakbang. Una mula 0 hanggang 255 at pagkatapos ay bumalik muli sa 0 na may pagkaantalang 10 milliseconds sa pagitan ng bawat hakbang:

SPI.begin() and Serial.begin(9600)

digitalPotWrite (i) function magsusulat theese halaga upang baguhin ang paglaban sa partikular na address ng ic.

Ang paglaban sa pagitan ng wiper at end terminal ay maaaring kalkulahin gamit ang mga formula na ito:

R1 = 10k * (256-level) / 256 + Rw
At
R2 = 10k * antas / 256 + Rw

Narito ang R1 = paglaban sa pagitan ng wiper at isang terminal
R2 = paglaban sa pagitan ng wiper at iba pang terminal
Antas = hakbang sa isang partikular na instant (variable na 'I' na ginamit para sa loop)
Rw = paglaban ng wiper terminal (maaaring matagpuan sa datasheet ng ic)
Gamit ang pagpapaandar ng digitalPotWrite () ang digital potentiometer chip ay napili sa pamamagitan ng pagtatalaga ng LOW voltage sa CS pin. Ngayon dahil napili ang ic, dapat tawagan ang isang address kung aling data ang isusulat. Sa huling bahagi ng code:

SPI.transfer (B00010001)

Tinawag ang address na kung saan ay B00010001 upang piliin ang wiper terminal ng ic kung saan isusulat ang data. At samakatuwid para sa halaga ng loop ibig sabihin, nakasulat ako upang baguhin ang paglaban.

TRABAHO NG CIRCUIT:

Hangga't ang halaga ng i ay nagpapanatili ng pagbabago ng input sa A0 pin ng arduino ay patuloy ding nagbabago sa pagitan ng 0 at 1023. Nangyayari ito dahil ang wiper terminal ay direktang konektado sa A0 pin, at iba pang mga terminal ng potentiometer ay konektado sa 5volt at ground ayon sa pagkakabanggit. Ngayon kapag nagbago ang pagtutol ay ginagawa din ang boltahe sa kabuuan nito na direktang kinuha ng arduino bilang input at sa gayon nakakakuha kami ng isang halaga ng boltahe sa serial monitor para sa isang partikular na halaga ng paglaban.

SIMULASYON 1:

Ito ang ilang mga larawan ng simulation para sa circuit na ito sa iba't ibang mga halaga ng i:

Ngayon lamang ikonekta ang isang humantong sa serye na may 220ohm risistor sa wiper terminal ng IC tulad ng ipinakita sa pigura.

CODE 2:

for (int i = 0 i <= 255 i++) and for (int i = 255 i>= 0 i--)

Paliwanag sa CODE 2:

Ang code na ito ay katulad ng code 1 maliban sa walang mga serial command sa code na ito. Kaya't walang mga halaga ang mai-print sa serial monitor.

TRABAHONG PAGLALAHAD

Dahil ang led ay konektado sa pagitan ng wiper terminal at ground bilang mga pagbabago sa paglaban kaya't ginagawa ang boltahe sa led. At samakatuwid bilang paglaban sa kabuuan ng kung saan humantong ay konektado tumaas mula sa 0ohm sa maximum kaya gawin ang ningning ng led. Aling muli dahan-dahang kumawala dahil sa pagbawas ng paglaban mula maximum hanggang 0v.

Kunwa2

Simulation3




Nakaraan: Paano Makokontrol ang Servo Motor Gamit ang Joystick Susunod: Gawin itong Advanced Digital Ammeter gamit ang Arduino