Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO

โครงงงานการป้องกันกระแสเกินให้กับมอเตอร์กระแสตรง (DC motor) โดยใช้โมดูลเปรียบเทียบสัญญาณอะนาลอก (Analog comparator Module) ในตัวชิฟ ATmega328P ของบอร์ดควบคุม Arduino UNO เป็นการตรวจจับกระแสอีกรูปแบบหนึ่งนอกจากการใช้โมดูลรับสัญญาณอะนาลอก A0-A5 ทั่วไป ทั้งนี้ การใช้โมดูลเปรียบเทียบสัญญาณอะนาลอก จะช่วยให้การประมวลผลโปรแกรมคำสั่งของบอร์ดควบคุมได้เร็วยิ่งขึ้น

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 1 ลักษณะการต่อวงจรกับบอร์ดควบคุม Arduino UNO

ในรูปที่ 1 แสดงลักษณะการต่อวงจรต้นแบบกับบอร์ดควบคุม Arduino UNO สำหรับใช้ในการควบคุมความเร็วมอเตอร์กระแสตรง โดยต่อบนเบรดบอร์ดเพื่อให้ง่ายและรวดเร็วในการทดลอง ทั้งนี้จะใช้การตรวจจับกระแสเข้ามายังขา D7 ของบอร์ดควบคุม Arduino UNO

รูปที่ 2 บล็อกไดอะแกรมของ Analog Comparator [Picture by Ref.7]

รูปที่ 2 แสดงตำแหน่งขาใช้งาน AIN0 และ AIN1 ของบอร์ด Arduino UNO ซึ่งจะตรงกับขา PD6 = AIN0 และ PD7 = AIN1 ตามลำดับ และในรูปที่ 2 จะเป็นบล็อกไดอะแกรมภายในของ Analog Comparator รวมทั้ง ฺBit ควบคุมการทำงานที่สำคัญในแต่ละตำแหน่งให้เข้าใจการทำงานได้ง่ายขึ้น [อ่านรายละเอียดเพิ่ม คลิก]

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 3 การต่อวงจรทั้งหมดสำหรับทดลอง

สำหรับรูปที่ 3 เป็นการต่อวงจรทั้งหมดสำหรับการทดลอง โดยจะใช้มอเตอร์กระแสตรงขนาดเล็ก และใช้แรงดันไฟเลี้ยง 12V จากนั้นจะใช้ดิจิตอลออสซิลซิลโลสโคปวัดสัญญาณพัลซ์วิดธ์มอดูเลตชั่น (PWM Signal) ที่ตำแหน่ง CH1 และที่ตำแหน่ง CH2 จะวัดสัญญาณแรงดันกระแสเกินเมื่อกระแสไหลผ่านตัวมอเตอร์ที่เกิดขึ้นตลอดเวลา

  #include "analogComp.h"
  #include <PWM.h>

  int PinPWM = 9;              
  int Output_PWM = 0;  
  int32_t frequency = 2000;     // frequency (in Hz)

  void setup() {
  analogComparator.setOn(AIN0,AIN1); // AIN0 is on D7. As a reference voltage
  analogComparator.enableInterrupt(Overcurrent);
  Serial.begin(9600);
  pinMode(9,OUTPUT); 
 
  InitTimersSafe();   
  bool success = SetPinFrequencySafe(PinPWM,frequency);   
  if(success) {       
  }
}

void loop() 
{  
       int Vpwm = analogRead(A3);        
       Output_PWM = (Vpwm/4);  
       pwmWrite(PinPWM,Output_PWM);   
       delay(10);      
}

void Overcurrent()
{
       Serial.println("Comparator Interrupt");
       Output_PWM=0;
       pwmWrite(PinPWM,Output_PWM);   
       delay(1000); 
}

Download Library ——> PWM.h

ในส่วนของโปรแกรมการทำงานที่แสดงข้างบนจะแบ่งออกเป็น 3 กลุ่มคือ กลุ่มแรกจะเป็นการประกาศใช้ตัวแปรและเรียกไลบารี่ analogComp.h และ PWM.h ซึ่งจะกำหนดการใช้งานโมดูลเปรียบเทียบสัญญาณอะนาลอก (Analog comparator Module), การสร้างสัญญาณพัลซ์วิดธ์มอดูเลชั่นและการกำหนดค่าความถี่ของสัญญาณ ในกลุ่มที่สองในจะเป็นการกำหนดค่าใน void setup() ซึ่งจะกำหนดการเรียกใช้งานอินเตอร์รัพท์ให้กับโมดูลเปรียบเทียบสัญญาณอะนาลอก กำหนกความเร็วในการสื่อสารข้อมูลพอร์ตอนุกรมและการสร้างสัญญาณพัลซ์วิดธ์มอดูเลชั่น ต่อมากลุ่มสุดท้ายที่สาม void loop() เป็นการรับค่าสัญญาณอะนาลอก A3 เพื่อนำมากำหนดขนาดความกว้างของสัญญาณพัลซ์วิดธ์มอดูเลชั่นและการแสดงข้อความ Comparator Interrupt เมื่ออยู่ในสถานะกระแสเกินขึ้น void Overcurrent()

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 4 สัญญาณขับขาเกตเมื่ออยู่ในสถานะการทำงานปกติ

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

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 5 สัญญาณขับขาเกตเมื่ออยู่ในสถานะกระแสเกินขึ้น

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

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 6 แอลอีดีจะติดสว่างเมื่ออยู่ในสถานะกระแสเกินกระแสเกินขึ้น

รูปที่ 6 ในส่วนของการแสดงผลด้วยแอลอีดีก็จะติดสว่างเมื่ออยู่ในสถานะกระแสเกินกระแสเกิน ทั้งนี้เราสามารถนำสัญญาณที่เกิดขึ้นนี้ไปใช้ในการควบคุมวงจรส่วนอื่นๆ ได้อีกหลายรูปแบบ ซึ่งในการทดลองนี้จะให้วงจรโมดูลเปรียบเทียบสัญญาณอะนาลอก (Analog comparator Module) ในตัวชิฟ ATmega328P ตรวจจะบแรงดันที่เกิดขึ้นไปยังขา D7 ในบอร์ดควบคุม Arduino UNO

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 7 การแสดงข้อความที่พอร์ตอนุกรมเมื่อกระแสเกิน

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

Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 8 วงจรการทำงานสำหรับทดลองโครงงาน
Overcurrent protection for DC motor using Analog comparator Module of Arduino UNO
รูปที่ 9 ลักษณะการทดลองโครงงานทั้งหมด

สำหรับในรูปสุดท้ายที่ 9 แสดงลักษณะของการทดลองโครงงานทั้งหมด ซึ่งโครงงานนี้เนื้อต่อเนื่องจากบทความ Analog comparator of ATMEGA328P with Library AnalogComp.h ที่เคยนำเสนอก่อนหน้านี้ แต่ในตอนนี้จะเป็นการประยุกต์ใช้งานโมดูลเปรียบเทียบสัญญาณอะนาลอก (Analog comparator Module) กับการควบคุมกระแสให้กับมอเตอร์กระแสตรง ซึ่งคงจะเป็นแนวทางให้ผู้อ่านนำไปประยุกต์ใช้งานในรูปแบบอื่นได้ง่ายขึ้น.

Reference

  1. https://microcontrollerslab.com/arduino-comparator-tutorial/
  2. https://github.com/leomil72/analogComp/blob/master/examples/analogComp_enableInterrupt/analogComp_enableInterrupt.ino
  3. https://forum.arduino.cc/t/analog-comparator-and-hardware-pwm/877417/7
  4. https://www.ee-diary.com/2021/07/arduino-analog-comparator-with-interrupt.html
  5. https://www.hackster.io/yeshvanth_muniraj/analog-comparator-module-in-atmega328p-migrating-to-c-7502ea
  6. https://electronics.stackexchange.com/questions/376906/amplifying-pulse-signal-0-1-0-5v-to-arduino-digital-input
  7. https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
  8. https://forum.arduino.cc/t/arduino-uno-pinout-diagram/142856
  9. https://www.electronicsdna.com/analog-comparator-of-atmega328p-with-library-analogcomp-h/