MCP41010 Digital Potentiometer with Arduino UNO

บทความนี้เป็นการทดลองใช้งานไอซีดิจิตอลโพเทนทิโอมิเตอร์ (Digital Potentiometer) ของบริษัท Microchip Technology กับบอร์ดควบคุม Arduino UNO ด้วยการสื่อสารแบบ SPI Interface ทั้งนี้เราสามารถนำไอซีดิจิตอลโพเทนทิโอมิเตอร์ไปใช้ในวงจรอิเล็กทรอนิกส์ได้หลายอย่าง เช่น การนำไปต่อร่วมกับกับออปแอมป์สำหรับปรับเปลี่ยนอัตราการขยายสัญญาณ การสร้างแรงดันอ้างอิงและปรับชดเชยการทำงานของระบบควบคุมต่างๆ เป็นต้น ทั้งนี้ไอซีดิจิตอลโพเทนทิโอมิเตอร์ที่นำมาใช้ในการทดลองจะเป็นเบอร์ MCP41010 และอยู่ในกลุ่ม MCP41XXX/42XXX ที่สามารถเลือกค่าความต้านได้คือ 10 kΩ, 50 kΩ และ 100 kΩ และจำนวน Potentiometer ที่ต้องการใช้งานจำนวน 1 หรือ 2 ช่อง


ในรูปที่ 1 แสดงโครงสร้างภายในไอซีดิจิตอลโพเทนทิโอมิเตอร์ในลักษณะของบล็อกไดอะแกรม และในรูปที่ 2 แสดงตำแหน่งขาต่างๆ ของไอซีดิจิตอลโพเทนทิโอมิเตอร์แบบมี 1 ช่อง (MCP41XXX) และแบบมี 2 ช่อง (MCP42XXX) [!!! คลิก ดาวน์โหลด Datasheet MCP41XXX/42XXX]



รูปที่ 5 เป็นลักษณะของการต่อใช้งานไอซีดิจิตอลโพเทนทิโอมิเตอร์กับไมโครคอนโทรลเลอร์ โดยจะใช้สำหรับสื่อสารข้อมูลเพียง 3 เส้นคือ DATA, CLK และ CS (ที่ตำแหน่ง Data Line) ที่ตำแหน่งขา B, W และ A สามารถต่อใช้งานกับอุปกรณ์ภายนอกได้ อย่างเช่น ออปแอมป์ นอกจากนี้แนะนำให้ใช้ตัวเก็บประจุุ 0.1uF เพื่อทำหน้าที่ฟิลเตอร์ให้กับไอซีดิจิตอลโพเทนทิโอมิเตอร์และไมโครคอนโทรลเลอร์
/* Arduino Code by : https://forum.arduino.cc/t/arduino-uno-interface-with-mcp41010/1161487 */ #include <SPI.h> // Pins for SPI comms #define DATA 11 // SPI Data pin number #define CLK 13 // SPI Clock pin number #define CS_DIGIPOT 9 // MCP41010 chip select - digital potentiometer. void write_digipot(int val) { // take the CS pin low to select the chip: digitalWrite(CS_DIGIPOT,LOW); // send in the address and value via SPI: SPI.transfer(B00010001); // write out the value SPI.transfer(val); // take the CS pin high to de-select the chip: digitalWrite(CS_DIGIPOT,HIGH); SPI.endTransaction(); } void setup() { pinMode(CS_DIGIPOT,OUTPUT); SPI.begin(); // Set pins as outputs for SPI hardware. write_digipot(20); // Set MCP41010 to low point. // write_digipot(120); // Set MCP41010 to mid point. // write_digipot(200); // Set MCP41010 to high point. } void loop(void) { }
สำหรับโปรแกรม Arduino ที่ใช้ในการทดลองการทำงานของไอซีดิจิตอลโพเทนทิโอมิเตอร์ดังแสดงข้างบน ซึ่งจะแบ่งออกเป็น 3 กลุ่มคือ กลุ่มแรกจะเรียกใช้งานไลบารี่ SPI.h และการกำหนดขาใช้งานให้กับบอร์ด Arduino UNO กลุ่มที่สองจะเป็นฟังก์ชันของการนำค่าตัวแปร (void write_digipot(int val)) ไปปรับเปลี่ยนค่าความต้านทานภายในไอซีตามที่กำหนด ในกลุ่มที่สามจะเป็นคำสั่งกำหนดขาใช้งานของการสื่อสารแบบ SPI (SPI.begin();) จากนั้นจะทำการส่งค่าตัวแปรด้วยคำสั่ง (write_digipot(120);) ไปยังฟังก์ชั่นปรับเปลี่ยนค่าความต้านทานภายในไอซีตามที่กล่าวมาในกลุ่มที่สอง

ในรูปที่ 6 เป็นการต่อวงจรระหว่างบอร์ด Arduino UNO และไอซีดิจิตอลโพเทนทิโอมิเตอร์ สำหรับทดลองการทำงานโดยที่ขา PA0 จะต่อกับไฟเลี้ยง 5V และขา PB0 จะต่อกับ GND จากนั้นจะนำดิจิตอลมัลติมิเตอร์วัดค่าแรงดันที่ขา PW0 เทียบกราวด์ เมื่อเปลี่ยนค่าตัวแปรต่างๆ ที่คำสั่ง write_digipot(20);



ในรูปที่ 7 ถึงรูปที่ 9 เป็นการทดลองเปลี่ยนค่าตัวแปรที่คำสั่ง write_digipot(20);, write_digipot(120); และ write_digipot(200); จากนั้นสังเกตค่าแรงดันที่ขา 6 (PW0) ของไอซีดิจิตอลโพเทนทิโอมิเตอร์ ซึ่งจากการทดลองทั้ง 3 ครั้ง ค่าแรงดันที่วัดได้จะเป็นสัดส่วนกับค่าตัวแปรที่กำหนดในคำสั่งนั้นเอง และสำหรับเนื้อหาในบทความนี้เป็นการแนะนำการใช้งานไอซีดิจิตอลโพเทนทิโอมิเตอร์ของบริษัท Microchip Technology ที่เราสามารถนำมาใช้งานต่างๆ ได้หลากหลาย มีเนื้อหาหรือตัวอย่างการใช้งานให้ค้นหาในเว็บไซต์มากพอควรครับ.
Reference
- https://www.microchip.com/en-us/product/MCP41010
- https://forum.arduino.cc/t/arduino-uno-interface-with-mcp41010/1161487
- https://github.com/sleemanj/MCP41_Simple
- https://www.homemade-circuits.com/using-digital-potentiometer-mcp41xx-with-arduino/
- https://www.instructables.com/Digital-Potentiometer-MCP41100-and-Arduino/
- https://www.edn.com/learn-use-digital-potentiometers/
- https://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf