- Thành phần bắt buộc
- Mô tả chân của Động cơ Servo
- Sơ đồ mạch
- Điều khiển động cơ Servo với AVR ATmega16
- Lập trình Atmega16 bằng USBasp
Động cơ servo được sử dụng rộng rãi ở những nơi cần điều khiển chính xác như rô bốt, Máy móc tự động, cánh tay rô bốt, v.v. Tuy nhiên, phạm vi của động cơ servo không giới hạn ở mức này và có thể được sử dụng trong nhiều ứng dụng. Để biết thêm về cơ bản, lý thuyết và nguyên lý làm việc của động cơ servo theo liên kết.
Trước đây chúng tôi đã giao tiếp Động cơ Servo với nhiều Bộ vi điều khiển:
- Giao tiếp động cơ Servo với ARM7-LPC2148
- Giao tiếp động cơ Servo với MSP430G2
- Giao diện động cơ Servo với STM32F103C8
- Giao diện động cơ Servo với Vi điều khiển PIC sử dụng MPLAB và XC8
- Giao tiếp động cơ Servo với Arduino Uno
- Giao diện động cơ servo với vi điều khiển 8051
Trong hướng dẫn này, chúng tôi sẽ giao diện Micro Servo Motor với Vi điều khiển AVR Atmega16 bằng Atmel Studio 7.0. Động cơ servo được đánh giá là hoạt động trong 4,8-6V. Chúng ta có thể kiểm soát góc quay và hướng của nó bằng cách áp dụng tín hiệu tàu xung hoặc PWM. Lưu ý rằng động cơ servo không thể di chuyển để quay đủ 360 độ, vì vậy chúng được sử dụng khi không cần quay liên tục. Góc quay là 0 -180 độ hoặc (-90) - (+90) độ.
Thành phần bắt buộc
- SG90 Tower Pro Động cơ Servo Micro
- IC vi điều khiển Atmega16
- Bộ dao động tinh thể 16Mhz
- Hai tụ điện 100nF
- Hai tụ điện 22pF
- Nút ấn
- Dây nhảy
- Breadboard
- USBASP v2.0
- Led (Bất kỳ màu nào)
Mô tả chân của Động cơ Servo
- Màu đỏ = Nguồn điện tích cực (4,8V đến 6V)
- Brown = Đất
- Màu cam = Tín hiệu điều khiển (PWM Pin)
Sơ đồ mạch
Kết nối tất cả các thành phần như thể hiện trong sơ đồ bên dưới để quay động cơ Servo bằng Vi điều khiển AVR. Có bốn chân PWM, chúng ta có thể sử dụng bất kỳ chân PWM nào của Atmega16. Trong hướng dẫn này, chúng tôi sử dụng Pin PD5 (OC1A) để tạo PWM. PD5 được kết nối trực tiếp với dây màu cam của động cơ servo là chân tín hiệu đầu vào. Kết nối bất kỳ đèn led màu nào cho đèn báo nguồn. Ngoài ra, kết nối một nút nhấn trong chân Đặt lại để đặt lại Atmega16 bất cứ khi nào được yêu cầu. Kết nối Atmega16 với mạch dao động tinh thể thích hợp. Tất cả hệ thống sẽ được cấp nguồn bởi nguồn 5V.
Thiết lập hoàn chỉnh sẽ giống như bên dưới:
Điều khiển động cơ Servo với AVR ATmega16
Giống như Động cơ bước, động cơ Servo không cần bất kỳ trình điều khiển bên ngoài nào, chẳng hạn như trình điều khiển động cơ ULN2003 hoặc L293D. Chỉ cần PWM là đủ để điều khiển động cơ servo và rất dễ dàng tạo PWM từ vi điều khiển. Mô-men xoắn của động cơ servo này là 2,5kg / cm, vì vậy nếu bạn yêu cầu mô-men xoắn lớn hơn thì servo này không phù hợp.
Như chúng ta biết rằng động cơ servo tìm kiếm một xung sau mỗi 20ms và độ dài của xung dương sẽ xác định góc quay của động cơ servo.
Tần số cần thiết để có được xung 20ms là 50Hz (f = 1 / T). Vì vậy, đối với động cơ servo này, thông số kỹ thuật nói rằng đối với 0 độ chúng ta cần 0,388ms, đối với 90 độ chúng ta cần 1,264ms và đối với 180 độ, chúng ta cần xung 2,14ms.
Để tạo ra các xung được chỉ định, chúng ta sẽ sử dụng Timer1 của Atmega16. Tần số CPU là 16Mz nhưng chúng tôi sẽ chỉ sử dụng 1Mhz vì chúng tôi không có nhiều thiết bị ngoại vi kết nối với vi điều khiển và không có nhiều tải trên vi điều khiển, vì vậy 1Mhz sẽ thực hiện công việc. Prescaler được đặt thành 1. Vì vậy, đồng hồ được chia là 1Mhz / 1 = 1Mhz (1uS) là rất tốt. Timer1 sẽ được sử dụng như Fast PWM Mode tức là Mode 14. Bạn có thể sử dụng các chế độ khác nhau của bộ định thời để tạo xung mong muốn. Tham khảo được đưa ra bên dưới và bạn có thể tìm thêm mô tả trong Biểu dữ liệu chính thức của Atmega16.
Để sử dụng Timer1 làm chế độ PWM nhanh, chúng ta sẽ cần giá trị TOP của ICR1 (Thanh ghi ghi hình đầu vào1). Để tìm công thức sử dụng giá trị TOP dưới đây:
f pwm = f cpu / nx (1 + TOP)
Điều này có thể được đơn giản hóa thành, TOP = ( f cpu / ( f pwm xn)) - 1
Trong đó, N = Giá trị của bộ Prescaler
f cpu = Tần suất CPU
f pwm = Độ rộng xung động cơ servo là 50Hz
Bây giờ hãy tính giá trị ICR1 vì chúng ta có tất cả giá trị cần thiết, N = 1, f cpu = 1MHz, f pwm = 50Hz
Chỉ cần đặt các giá trị trong công thức trên và chúng tôi sẽ nhận được
ICR1 = 1999
Điều này có nghĩa là để đạt được mức tối đa tức là 180 0 thì ICR1 phải là 1999.
Đối với tinh thể 16MHz và Prescaler được đặt thành 16, chúng tôi sẽ có
ICR1 = 4999
Bây giờ chúng ta hãy chuyển sang thảo luận về bản phác thảo.
Lập trình Atmega16 bằng USBasp
Mã AVR hoàn chỉnh để điều khiển Động cơ Servo được đưa ra bên dưới. Mã rất đơn giản và có thể hiểu một cách dễ dàng.
Ở đây chúng tôi đã mã hóa Atmega16 để xoay mô tơ servo từ 0 0 đến 180 0 và quay lại từ 180 0 đến 0 0. Quá trình chuyển đổi này sẽ hoàn tất trong 9 bước, tức là 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Đối với sự chậm trễ, chúng tôi sẽ sử dụng thư viện nội bộ của Atmel Studio tức là
Kết nối USBASP v2.0 của bạn và làm theo hướng dẫn trong liên kết này để lập trình Vi điều khiển AVR Atmega16 bằng USBASP và Atmel Studio 7.0. Chỉ cần tạo bản phác thảo và tải lên bằng chuỗi công cụ bên ngoài.
Mã hoàn chỉnh với Video trình diễn được đưa ra bên dưới. Ngoài ra, hãy tìm hiểu thêm về động cơ servo bằng cách biết tầm quan trọng của chúng trong Robotics.