สารบัญ:

Atmega128A Proportional Motor Driving - ATMEL ICE AVR Timer UART PWM ควบคุม: 4 ขั้นตอน
Atmega128A Proportional Motor Driving - ATMEL ICE AVR Timer UART PWM ควบคุม: 4 ขั้นตอน

วีดีโอ: Atmega128A Proportional Motor Driving - ATMEL ICE AVR Timer UART PWM ควบคุม: 4 ขั้นตอน

วีดีโอ: Atmega128A Proportional Motor Driving - ATMEL ICE AVR Timer UART PWM ควบคุม: 4 ขั้นตอน
วีดีโอ: PID Speed Control of DC Motor with ATMEGA128 2024, พฤศจิกายน
Anonim
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control
Atmega128A การขับขี่ตามสัดส่วน - ATMEL ICE AVR Timer UART PWM Control

ในคำแนะนำนี้ ฉันจะอธิบายวิธีการ

  • ควบคุมมอเตอร์กระแสตรงด้วย PWM
  • สื่อสารผ่าน UART
  • จัดการตัวจับเวลาขัดจังหวะ

ก่อนอื่น เราจะใช้บอร์ดพัฒนาระบบ AVR Core ซึ่งคุณสามารถหาได้ใน Aliexpress ประมาณ 4 USD ลิงก์ของบอร์ดพัฒนาอยู่ที่นี่ นอกจากนี้ เราจะใช้ Atmel ICE Debugger และ Atmel Studio เพื่อตั้งโปรแกรม&ดีบักซอฟต์แวร์ของเรา

ขั้นตอนที่ 1: เจาะลึกลงในแผ่นข้อมูล & ซอร์สโค้ด - ความเร็วสัญญาณนาฬิกา

เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed
เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed
เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed
เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed
เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed
เจาะลึกลงไปในแผ่นข้อมูล & ซอร์สโค้ด - Clock Speed

ใน 1. สัญลักษณ์แสดงหัวข้อย่อย เรากำหนดความถี่คริสตัลของเรา ซึ่งเราสามารถเห็นบนกระดานพัฒนา

ขั้นตอนที่ 2: การตั้งค่าการลงทะเบียน UART

การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART
การตั้งค่าการลงทะเบียน UART

ในการสื่อสารกับ UART คุณต้องตั้งค่า USART Baud Rate Registers – URRnL และ UBRRnH อย่างถูกต้อง คุณสามารถคำนวณได้เองหรือคุณสามารถใช้เครื่องคิดเลขออนไลน์เพื่อรับค่าที่ถูกต้องได้อย่างง่ายดาย

เครื่องคิดเลขออนไลน์

ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…

ดังนั้น จึงคำนวณค่า MYUBBR ในรีจิสเตอร์ UCSR0B เราเปิดใช้งาน RXEN0 (เปิดใช้งาน Recv) TXEN0 (เปิดใช้งานการส่ง) และ RXCIE0 (RX สำหรับการขัดจังหวะ) ในการลงทะเบียน UCSR0C เราเลือกขนาดถ่าน 8 บิต

หลังจากที่เราตั้งค่าบิตขัดจังหวะ RX เราควรเพิ่มฟังก์ชัน ISR สำหรับ USART0_RX_vect

ISR (USART0_RX_vect) { ถ่าน rcvChar = UDR0; if(rcvChar != '\n') { buffer [bufferIndex] = rcvChar; bufferIndex++; } }

คุณไม่ควรทำตรรกะทางธุรกิจใด ๆ ในรูทีนบริการขัดจังหวะของคุณ คุณต้องทำให้ฟังก์ชันกลับมาโดยเร็วที่สุด

ขั้นตอนที่ 3: การตั้งค่า PWM

การตั้งค่า PWM
การตั้งค่า PWM

ในฟังก์ชัน initPWM เราตั้งค่า CPU clock scaler, Timer/Counter mode เป็น Fast PWM และตั้งค่าพฤติกรรมด้วย COM bits

เราควรเชื่อมต่อมอเตอร์กระแสตรงกับพิน OC2 ซึ่งระบุไว้ในตารางที่ 66 เปรียบเทียบโหมดเอาต์พุต, โหมด Fast PWM ในเอกสารข้อมูลของเรา คุณจะเห็นว่าพิน OC2 คือ (OC2/OC1C) PB7

ขั้นตอนที่ 4: ผลลัพธ์

ผลลัพธ์
ผลลัพธ์
ผลลัพธ์
ผลลัพธ์

เมื่อคุณอัปโหลดซอร์สโค้ดในไฟล์แนบ

คุณสามารถป้อนค่า PWM ใหม่ (0-255) จาก UART (คุณสามารถใช้เทอร์มินัลพอร์ตอนุกรมของ Arduino) เพื่อตั้งค่าความเร็ว DC Motor

แนะนำ: