การใช้งาน ZX-MOTOR2A ร่วมกับบอร์ด i-Duino R4

ตัวอย่างการเชื่อมต่อ ZX-MOTOR2A ร่วมกับบอร์ด i-Duino R4

คุณสมบัติของ  ZX-MOTOR2A

  • ขับมอเตอร์ได้ตั้งแต่ 6.5V – 45V และสามารถขับมอเตอร์ของ TAMIYA ได้เช่นกัน
  • กระแสไฟสูงสุด 2 A
  • ขาพอร์ตอินพุตรับเรงดันได้สูงสุด 5.5V และต่ำสุด 3V
  • ควบคุมด้วยสัญญาณ PWM
  • มีวงจรป้องกันเเรงดันตก
  • เมื่อมีเเรงดันไฟฟ้าน้อยจะทำการหยุดทำงาน
  • มีวงจรป้องกันเเรงดันไฟฟ้าเกิน
  • เมื่ออุณหภูมิของ IC มีความร้อนมากเกินไป บอร์ดจะทำการหยุดทำงานโดยอัตโนมัติ

โดยหลักการใช้งานแผงวงจรนี้คือขับความเร็วด้วยสัญญาณ PWM ในช่องต่อ PWM และบังคับทิศทางด้วยจ่ายสัญญาณดิจิตอลด้วยลอจิก “0” (LOW) และ “1” (HIGH)

การเชื่อมต่อวงจร

  1. นำหัวด้านหนึ่งซึ่งเป็นหัว IDC สีดำของสาย JST3AI-8 มาเสียบเข้ากับบอร์ด i-Duino R4 ในพอร์ต A0, D12, D7 และ D3
  2. จากนั้นนำหัวอีกด้านซึ่งเป็นหัว JST สีขาวเชื่อมต่อเข้ากับ ZX-POT พอร์ต A0 แบบแปรผันตรง, ZX-BUTTON พอร์ต D12 และ ZX-MOTOR2A พอร์ต D7 เข้าช่อง DIR เเละพอร์ต D3 เข้าช่อง PWM ตามลำดับ
  3. นำเเบตเตอรี่มาต่อเข้ากับบอร์ด ZX-MOTOR2A ในช่อง -VM+ ขั้ว GND เสียบเข้ากับฝั่ง – เเละ ขั้ว VIN เสียบเข้ากับ ฝั่ง + ห้ามสลับขั้วโดยเด็ดขาด
  4. เสียบมอเตอร์เข้ากับบอร์ด ZX-MOTOR2A ในคอนเน็กเตอร์ OUT จ่ายไฟเลี้ยงด้วยแจ็กอะแดปเตอร์ 6 V (หรือไม่เกิน 24 V) เข้าบอร์ด i-Duino R4

โปรแกรมตัวอย่างในการทดสอบ

#define POTV_PIN A0 // ZX-POTV pin.
#define BUTTON_PIN 12 // ZX-BUTTON pin.
#define DIR_PIN 7  // Direction pin for ZX-MOTOR2A.
#define PWM_PIN 3  // PWM pin for ZX-MOTOR2A.
int cnt = 0;  // For count value while you’re holding button.
int dir = 0;  // For motor direction driver state.
void setup() {
  pinMode(DIR_PIN, OUTPUT); // Set Direction pin to OUTPUT DIGITAL MODE
  pinMode(BUTTON_PIN, INPUT); // Set ZX-BUTTON pin pin to INPUT DIGITAL MODE
  pinMode(LED_BUILTIN, OUTPUT); // Set LED on i-Duino R4 pin to OUTPUT DIGITAL MODE
  analogWriteResolution(12);  // Write at Value Range 0-4095.
  analogReadResolution(14);   // Read at Value Range 0-16383.
  Serial.begin(9600); // Set baud rate 9600 bps.
  while (!Serial) { delay(100); }  // Wait for native USB.
  Serial.println(F(“ZX-MOTOR2A Speed and Direction Control”)); // Greeting Message.
}
void loop() {
  if (digitalRead(BUTTON_PIN) == 0) { // If hold button.
    cnt++;  // Increase value
    if (cnt >= 5) { // If value is more than or equal to 5
      dir ^= 1;  // Change state for motor direction driver by XOR (Exclusive OR) method.
      cnt = 0; // Reset value
    }
  }
  else{  // Unless hold button.
    cnt = 0; // Reset value
  }
  // Print count value section
  Serial.print(“Count: “);  
  Serial.println(cnt, DEC);
  // Input section
  int input_raw = analogRead(POTV_PIN); // Read POTV raw value (Range 0-16383)
  float input_voltage = ((float)input_raw * 5.0f) / 16383.0f;
// Convert from range 0.0-16383.0 to 0.0-5.0 into float and save in variable.
  Serial.print(“Input Raw: “); // Print input raw.
  Serial.print(input_raw, DEC); // Show input raw value.
  Serial.print(“, Read Voltage: “);  // Print input voltage.
  // Since input_voltage is float, so the second argument must be showed the amount of decimals.
  // This example will be show only 2 decimals.
  Serial.println(input_voltage, 2);
  int output_raw = map(input_raw, 0, 16383, 0, 4095);  // Convert raw range value
  digitalWrite(DIR_PIN, dir); // Drive motor direction current state.
  digitalWrite(LED_BUILTIN, dir); // Drive LED to show motor direction current state.
  analogWrite(PWM_PIN, output_raw); // Write PWM with output raw
  float output_voltage = ((float)output_raw * 5.0f) / 4095.0f;
// Convert from range 0.0-4095.0 to 0.0-5.0 into float and save in variable.
  Serial.print(“Output Raw: “); // Print output raw.
  Serial.print(output_raw, DEC); // Show output raw value.
  Serial.print(“, Write Voltage: “); // Print output voltage.
  // Since output_voltage is float, so the second argument must be shows the amount of decimals.
  // This example will be show only 2 decimals.
  Serial.print(output_voltage, 2);
  Serial.print(“, Direction: “); // Print motor direction current state.
  Serial.println(dir, DEC); // Show motor direction current state.
  Serial.println();
  delay(100);
}

การทำงานโปรแกรม

  • ส่วนการทำงานเริ่มต้น
    • เมื่อเปิด Serial Monitor ตั้งค่าความเร็วส่งข้อมูลบิตตรงตามที่กำหนด (ในทีนี้คือ 9600 บิตต่อวินาที) ให้แสดงข้อความเริ่มต้นว่า “ZX-MOTOR2A Speed and Direction Control” เพื่อให้ทราบว่าบอร์ด i-Duino R4 มีตัวตนและสามารถสื่อสารระหว่างตัวบอร์ดกับคอมพิวเตอร์ได้
  • ส่วนการทำงานวนซ้ำไม่รู้จบ
    •  ให้แสดงข้อความดังนี้
      • อ่านค่าอะนาล็อกเป็นดิจิตอลด้วยความละเอียดสูงสุด 14 บิต แบบข้อมูลดิบมีค่า 0-16383 จากโมดูลตัวต้านทานปรับค่าได้ ZX-POTV
      • แปลงค่าช่วงข้อมูลดิบให้เป็นข้อมูลแรงดันจาก 0 ถึง 16383 ให้เป็น 0 ถึง 5 โดยการแปลงให้เป็นทศนิยมซึ่งใช้สูตรการแปลงธรรมดา เนื่องจากคำสั่ง map สามารถใช้ได้กับจำนวนเต็มเท่านั้น
      • แปลงค่าช่วง 0 ถึง 16383 ให้เป็น 0 ถึง 5 เนื่องจากความละเอียดในการขับ PWM มีความละเอียดสูงสุด 12 บิต
      • แปลงค่าช่วงข้อมูลดิบให้เป็นข้อมูลแรงดันจาก 0 ถึง 4095 ให้เป็น 0 ถึง 5 โดยการแปลงให้เป็นทศนิยมซึ่งใช้สูตรการแปลงธรรมดา เนื่องจากคำสั่ง map สามารถใช้ได้กับจำนวนเต็มเท่านั้น
      • แสดงค่าทิศทางแกนหมุนมอเตอร์ มี 0 กับ 1 ค่านี้ได้จากการกดสวิตซ์ค้างไว้นานจนตัวแปรนับเกิน 4 ครั้ง และระหว่างแสดงข้อความบน Serial Monitor พร้อมกับเมื่อกดสวิตซ์ค้างไว้ ค่าตัวแปร count เพิ่มขึ้นทีละ 1 ค่า จนกระทั่งเกิน 4 ให้ทำการสลับทิศทาง
    • กรณีมีการกดสวิตซ์ค้างไว้จนตัวแปรค่านับเพิ่มนานเกิน 4 ครั้ง ให้สลับทิศทางการขับมอเตอร์โดยใช้หลักการ XOR  (Exclusive OR) แล้วทำการนับค่าใหม่ แต่กดแล้วตัวแปรนับไม่ถึง 5 ครั้ง หรือไม่มีการกด ให้ทำการนับค่าใหม่เช่นกัน
    • เมื่อค่าทิศทางเป็น 1 ให้ LED บน i-Duino R4 ติดเพื่อแสดงสถานะกลับทิศทางแกนหมุนมอเตอร์ได้ และเมื่อค่าทิศทางเป็น 0 ให้ LED บน i-Duino R4 ดับ และสถานะทิศทางแกนหมุนมอเตอร์กลับมาเหมือนเดิม
    • เมื่อปรับหมุน ZX-POTV ค่อยไปทางซ้าย ความเร็วแกนมอเตอร์ลดลง ตรงข้ามคือ ค่อยไปทางขวา ความเร็วแกนมอเตอร์เพิ่มขึ้น

วิธีการทดสอบหลังจากอัพโหลดโปรแกรม

  1. ค่อยๆหมุนซ้าย-ขวา ยังไม่ต้องกดสวิตซ์ สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor
  2. กดสวิตซ์ ZX-BUTTON ค้างไว้จนกระทั่งการนับค่าตัวแปรเกิน 4 ครั้ง สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor
  3. กดสวิตซ์ค้างไว้ให้ค่านับตัวแปรอยู่ระหว่าง 0 ถึง 4 แล้วปล่อยสวิตซ์ สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor

วิดีโอตัวอย่าง

Facebook Comments Box