ตัวอย่างการเชื่อมต่อ ZX-MOTOR2A ร่วมกับบอร์ด i-Duino R4
คุณสมบัติของ ZX-MOTOR2A
- ขับมอเตอร์ได้ตั้งแต่ 6.5V – 45V และสามารถขับมอเตอร์ของ TAMIYA ได้เช่นกัน
- กระแสไฟสูงสุด 2 A
- ขาพอร์ตอินพุตรับเรงดันได้สูงสุด 5.5V และต่ำสุด 3V
- ควบคุมด้วยสัญญาณ PWM
- มีวงจรป้องกันเเรงดันตก
- เมื่อมีเเรงดันไฟฟ้าน้อยจะทำการหยุดทำงาน
- มีวงจรป้องกันเเรงดันไฟฟ้าเกิน
- เมื่ออุณหภูมิของ IC มีความร้อนมากเกินไป บอร์ดจะทำการหยุดทำงานโดยอัตโนมัติ
โดยหลักการใช้งานแผงวงจรนี้คือขับความเร็วด้วยสัญญาณ PWM ในช่องต่อ PWM และบังคับทิศทางด้วยจ่ายสัญญาณดิจิตอลด้วยลอจิก “0” (LOW) และ “1” (HIGH)
การเชื่อมต่อวงจร
- นำหัวด้านหนึ่งซึ่งเป็นหัว IDC สีดำของสาย JST3AI-8 มาเสียบเข้ากับบอร์ด i-Duino R4 ในพอร์ต A0, D12, D7 และ D3
- จากนั้นนำหัวอีกด้านซึ่งเป็นหัว JST สีขาวเชื่อมต่อเข้ากับ ZX-POT พอร์ต A0 แบบแปรผันตรง, ZX-BUTTON พอร์ต D12 และ ZX-MOTOR2A พอร์ต D7 เข้าช่อง DIR เเละพอร์ต D3 เข้าช่อง PWM ตามลำดับ
- นำเเบตเตอรี่มาต่อเข้ากับบอร์ด ZX-MOTOR2A ในช่อง -VM+ ขั้ว GND เสียบเข้ากับฝั่ง – เเละ ขั้ว VIN เสียบเข้ากับ ฝั่ง + ห้ามสลับขั้วโดยเด็ดขาด
- เสียบมอเตอร์เข้ากับบอร์ด 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 ค่อยไปทางซ้าย ความเร็วแกนมอเตอร์ลดลง ตรงข้ามคือ ค่อยไปทางขวา ความเร็วแกนมอเตอร์เพิ่มขึ้น
- ให้แสดงข้อความดังนี้
วิธีการทดสอบหลังจากอัพโหลดโปรแกรม
- ค่อยๆหมุนซ้าย-ขวา ยังไม่ต้องกดสวิตซ์ สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor
- กดสวิตซ์ ZX-BUTTON ค้างไว้จนกระทั่งการนับค่าตัวแปรเกิน 4 ครั้ง สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor
- กดสวิตซ์ค้างไว้ให้ค่านับตัวแปรอยู่ระหว่าง 0 ถึง 4 แล้วปล่อยสวิตซ์ สังเกตการเปลี่ยนแปลงของมอเตอร์ และบน Serial Monitor
วิดีโอตัวอย่าง
Facebook Comments Box