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 ช่อง

MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 1 แสดงบล็อกไดอะแกรมสำหรับไอซีดิจิตอลโพเทนทิโอมิเตอร์
MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 2 แสดงตำแหน่งขาต่างๆ ของไอซีดิจิตอลโพเทนทิโอมิเตอร์

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

MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 3 ลักษณะของสัญญาณเพื่อสื่อสารกับไอซีดิจิตอลโพเทนทิโอมิเตอร์
MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 4 การกำหนดค่ารีจิสเตอร์ (Command Byte Format) ภายในไอซีดิจิตอลโพเทนทิโอมิเตอร์
MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 5 การต่อใช้งานไอซีดิจิตอลโพเทนทิโอมิเตอร์และไมโครคอนโทรลเลอร์

รูปที่ 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 การต่อวงจรสำหรับทดลองการทำงานไอซีดิจิตอลโพเทนทิโอมิเตอร์

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

MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 7 การทดลองที่ 1 เมื่อกำหนดให้ write_digipot(20); และวัดแรงดันเท่ากับ 0.398V
MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 8 การทดลองที่ 2 เมื่อกำหนดให้ write_digipot(120); และวัดแรงดันเท่ากับ 2.460V
MCP41010 Digital Potentiometer with Arduino UNO
รูปที่ 9 การทดลองที่ 3 เมื่อกำหนดให้ write_digipot(200); และวัดแรงดันเท่ากับ 4.91V

ในรูปที่ 7 ถึงรูปที่ 9 เป็นการทดลองเปลี่ยนค่าตัวแปรที่คำสั่ง write_digipot(20);, write_digipot(120); และ write_digipot(200); จากนั้นสังเกตค่าแรงดันที่ขา 6 (PW0) ของไอซีดิจิตอลโพเทนทิโอมิเตอร์ ซึ่งจากการทดลองทั้ง 3 ครั้ง ค่าแรงดันที่วัดได้จะเป็นสัดส่วนกับค่าตัวแปรที่กำหนดในคำสั่งนั้นเอง และสำหรับเนื้อหาในบทความนี้เป็นการแนะนำการใช้งานไอซีดิจิตอลโพเทนทิโอมิเตอร์ของบริษัท Microchip Technology ที่เราสามารถนำมาใช้งานต่างๆ ได้หลากหลาย มีเนื้อหาหรือตัวอย่างการใช้งานให้ค้นหาในเว็บไซต์มากพอควรครับ.

Reference

  1. https://www.microchip.com/en-us/product/MCP41010
  2. https://forum.arduino.cc/t/arduino-uno-interface-with-mcp41010/1161487
  3. https://github.com/sleemanj/MCP41_Simple
  4. https://www.homemade-circuits.com/using-digital-potentiometer-mcp41xx-with-arduino/
  5. https://www.instructables.com/Digital-Potentiometer-MCP41100-and-Arduino/
  6. https://www.edn.com/learn-use-digital-potentiometers/
  7. https://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf