ใช้ Digital Potentiometer MCP41xx กับ Arduino

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโครงการนี้เราจะเชื่อมต่อโพเทนชิออมิเตอร์แบบดิจิทัลกับ arduino ในโพเทนชิออมิเตอร์สาธิตนี้ใช้ MCP41010 แต่คุณสามารถใช้โพเทนชิออมิเตอร์แบบดิจิตอลของซีรีส์ MC41 ** ได้

โดย Ankit Negi



บทนำสู่ MC41010

โพเทนชิโอมิเตอร์แบบดิจิตอลก็เหมือนกับโพเทนชิออมิเตอร์แบบอนาล็อกที่มีขั้วสามขั้วโดยมีความแตกต่างเพียงหนึ่งเดียว ในขณะที่ในระบบอะนาล็อกคุณต้องเปลี่ยนตำแหน่งที่ปัดน้ำฝนด้วยตนเองในกรณีของตำแหน่งที่ปัดน้ำฝนแบบดิจิตอลโพเทนชิออมิเตอร์ถูกตั้งค่าตามสัญญาณที่ให้กับโพเทนชิออมิเตอร์โดยใช้ไมโครคอนโทรลเลอร์หรือไมโครโปรเซสเซอร์ใด ๆ

รูปที่. MC41010 IC pinout

รูปที่. MC41010 IC pinout



MC41010 เป็นไอซีแพคเกจสายคู่ 8 พิน เช่นเดียวกับโพเทนชิออมิเตอร์แบบอะนาล็อก IC นี้มาใน 5k, 10k, 50k และ 100k ในวงจรนี้ใช้โพเทนชิออมิเตอร์ 10k
MC4131 มี 8 ขั้วต่อไปนี้:

หมายเลขพิน ชื่อพินคำอธิบายเล็กน้อย

1 CS พินนี้ใช้เพื่อเลือกทาสหรืออุปกรณ์ต่อพ่วงที่เชื่อมต่อกับ arduino หากเป็นเช่นนี้
ต่ำจากนั้นเลือก MC41010 และถ้าสูงก็จะยกเลิกการเลือก MC41010

2 SCLK Shared / Serial Clock, arduino ให้นาฬิกาสำหรับการเริ่มต้นการถ่ายโอนข้อมูลจาก
Arduino เป็น IC และในทางกลับกัน

3 SDI / SDO Serial data ถูกถ่ายโอนระหว่าง arduino และ IC ผ่านพินนี้
4 VSS Ground terminal ของ arduino เชื่อมต่อกับพินของ IC นี้

5 PA0 นี่คือขั้วเดียวของโพเทนชิออมิเตอร์

6 PW0 ขั้วนี้เป็นขั้วปัดน้ำฝนของโพเทนชิออมิเตอร์ (เพื่อเปลี่ยนความต้านทาน)
7 PB0 นี่คืออีกขั้วหนึ่งของโพเทนชิออมิเตอร์

8 VCC Power to IC มอบให้ผ่านพินนี้

IC นี้มีโพเทนชิออมิเตอร์เพียงตัวเดียว IC บางตัวมีโพเทนชิออมิเตอร์มากที่สุดสองตัวในตัว นี้
ค่าความต้านทานระหว่างที่ปัดน้ำฝนและขั้วอื่น ๆ มีการเปลี่ยนแปลงใน 256 ขั้นตอนจาก 0 ถึง 255 เนื่องจากเราใช้ค่าตัวต้านทาน 10k ของตัวต้านทานจึงเปลี่ยนแปลงในขั้นตอนของ:
10k / 256 = 39 โอห์มต่อขั้นตอนระหว่าง 0 ถึง 255

ส่วนประกอบ

เราต้องการส่วนประกอบต่อไปนี้สำหรับโครงการนี้

1. ARDUINO
2. MC41010 ไอซี
3. ตัวต้านทาน 220 โอห์ม
4. LED
5. การเชื่อมต่อสายไฟ

ทำการเชื่อมต่อดังแสดงในรูป

1. เชื่อมต่อพิน cs กับพินดิจิทัล 10
2. เชื่อมต่อพิน SCK เข้ากับพินดิจิทัล 13.
3. เชื่อมต่อพิน SDI / SDO กับพินดิจิทัล 11
4. VSS กับพินกราวด์ของ arduino
5. PA0 ถึง 5v พินของ arduino
6. PB0 กับกราวด์ของ arduino
7. PWO ไปยังขาอะนาล็อก A0 ของ arduino
8. VCC ถึง 5 v ของ arduino

รหัสโปรแกรม 1

รหัสนี้จะพิมพ์การเปลี่ยนแปลงแรงดันไฟฟ้าที่ขั้วปัดน้ำฝนและกราวด์บน Serial Monitor ของ 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)

อธิบายรหัส 1:

ในการใช้โพเทนชิออมิเตอร์ดิจิทัลกับ arduino คุณต้องรวมไลบรารี SPI ก่อนซึ่งมีให้ใน arduino IDE เอง เพียงเรียกไลบรารีด้วยคำสั่งนี้:
# รวม

ในการตั้งค่าเป็นโมฆะพินจะถูกกำหนดให้เป็นเอาต์พุตหรืออินพุต และคำสั่งเพื่อเริ่ม SPI และการสื่อสารแบบอนุกรมระหว่าง arduino และ ic ยังได้รับซึ่ง ได้แก่ :

#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)
}

ใน void loop ใช้สำหรับ loop เพื่อเปลี่ยนความต้านทานของ digital pot ในทั้งหมด 256 ขั้นตอน เริ่มจาก 0 ถึง 255 แล้วกลับไปที่ 0 อีกครั้งโดยมีความล่าช้า 10 มิลลิวินาทีระหว่างแต่ละขั้นตอน:

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

ฟังก์ชัน digitalPotWrite (i) เขียนค่าทีสเพื่อเปลี่ยนความต้านทานที่แอดเดรสเฉพาะของ ic

ความต้านทานระหว่างที่ปัดน้ำฝนและขั้วปลายสามารถคำนวณได้โดยใช้สูตรเหล่านี้:

R1 = 10k * (256 ระดับ) / 256 + Rw
และ
R2 = 10k * ระดับ / 256 + Rw

ที่นี่ R1 = ความต้านทานระหว่างที่ปัดน้ำฝนและขั้วเดียว
R2 = ความต้านทานระหว่างที่ปัดน้ำฝนและขั้วอื่น ๆ
ระดับ = ขั้นตอนในทันที (ตัวแปร“ I” ที่ใช้ในการวนซ้ำ)
Rw = ความต้านทานของขั้วปัดน้ำฝน (ดูได้จากเอกสารข้อมูลของ IC)
การใช้ฟังก์ชัน digitalPotWrite () ชิปโพเทนชิออมิเตอร์ดิจิทัลจะถูกเลือกโดยการกำหนดแรงดันไฟฟ้าต่ำให้กับขา CS ตอนนี้เมื่อเลือก ic แล้วจะต้องเรียกที่อยู่ที่จะเขียนข้อมูล ในส่วนสุดท้ายของโค้ด:

SPI โอน (B00010001)

ที่อยู่ถูกเรียกซึ่งคือ B00010001 เพื่อเลือกขั้วปัดน้ำฝนของ ic ที่จะเขียนข้อมูล และด้วยเหตุนี้สำหรับค่าของลูปเช่น i ถูกเขียนขึ้นเพื่อเปลี่ยนความต้านทาน

การทำงานของวงจร:

ตราบใดที่ค่าของฉันยังคงเปลี่ยนอินพุตเป็นขา A0 ของ arduino ก็ยังคงเปลี่ยนระหว่าง 0 ถึง 1023 สิ่งนี้เกิดขึ้นเนื่องจากขั้วปัดน้ำฝนเชื่อมต่อโดยตรงกับขา A0 และขั้วอื่นของโพเทนชิออมิเตอร์เชื่อมต่อกับ 5 โวลต์และกราวด์ตามลำดับ ตอนนี้เมื่อความต้านทานเปลี่ยนไปให้ทำแรงดันไฟฟ้าข้ามซึ่ง arduino รับโดยตรงเป็นอินพุตและทำให้เราได้ค่าแรงดันไฟฟ้าบนมอนิเตอร์แบบอนุกรมสำหรับค่าความต้านทานเฉพาะ

การจำลอง 1:

นี่คือภาพจำลองสำหรับวงจรนี้ที่ค่าต่างๆของ i:

ตอนนี้เพียงแค่เชื่อมต่อ led ในซีรีส์ที่มีตัวต้านทาน 220ohm เข้ากับขั้วปัดน้ำฝนของ IC ดังแสดงในรูป

รหัส 2:

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

อธิบายรหัส 2:

รหัสนี้คล้ายกับรหัส 1 ยกเว้นว่าไม่มีคำสั่งอนุกรมในรหัสนี้ ดังนั้นจะไม่มีการพิมพ์ค่าบนจอภาพแบบอนุกรม

คำอธิบายการทำงาน

เนื่องจากไฟ led เชื่อมต่อระหว่างขั้วปัดน้ำฝนและกราวด์เนื่องจากความต้านทานเปลี่ยนไปดังนั้นแรงดันไฟฟ้าข้าม led และด้วยเหตุนี้ความต้านทานที่เชื่อมต่อกับ led จึงเพิ่มขึ้นจาก 0ohm ถึงสูงสุดดังนั้นความสว่างของ led ซึ่งค่อยๆจางหายไปอีกครั้งเนื่องจากความต้านทานลดลงจากสูงสุดเป็น 0v

จำลองสถานการณ์ 2

จำลอง 3




คู่ของ: วิธีควบคุมเซอร์โวมอเตอร์โดยใช้จอยสติ๊ก ถัดไป: สร้างแอมป์มิเตอร์ดิจิตอลขั้นสูงโดยใช้ Arduino