Tạo tín hiệu servo trong atmega2560


7

Tôi mới biết đến AtmelStudio. Tôi cần biết cách tạo tín hiệu điều khiển servo bằng các mô-đun hẹn giờ của atmega2560. Tôi đang sử dụng bảng Arduino Mega . (vui lòng tham khảo các đoạn cuối của trang này để biết thêm thông tin về các tín hiệu điều khiển servo).

nhập mô tả hình ảnh ở đây

Tôi không chắc chắn về cách làm thời gian chính xác. Phần chọn đồng hồ hơi khó hiểu với tôi luôn.

Làm cách nào để định cấu hình mô-đun hẹn giờ (thanh ghi TCCR) và cách thực hiện thời gian? Sẽ tốt hơn nếu có một ví dụ mã làm việc.

(Tôi đã thử sử dụng bộ đếm thời gian 0 ở chế độ PWM nhanh. Nó cho xung phù hợp nhưng tôi không biết cách tính toán tỷ lệ trước đúng thời gian. Tôi nghi ngờ về đồng hồ chính được sử dụng. Đây có phải là tinh thể 16 MHz trên bo mạch Arduino hoặc có một số nguồn đồng hồ sẵn có khác bên trong atmega2560 để chúng tôi phải đề cập rõ ràng về việc sử dụng đồng hồ nào ??)


2
Có các cài đặt cầu chì mà bạn có thể 'flash' để xác định nguồn đồng hồ mà vi điều khiển của bạn sử dụng (bạn đoán đúng là có một bộ dao động bên trong có thể được sử dụng thay cho tinh thể 16 MHz). Để bắt đầu, bạn có thể tải xuống IDE arduino và sau đó mở các tệp nguồn cho thư viện servo.
NickHalden

2
Cầu chì trên Arduino hiếm khi được chạm vào. Nó có thể giết chết bộ nạp khởi động. Như @NickHalden đề cập, tại sao không sử dụng các thư viện servo tiêu chuẩn?
jippie

@NickHalden yeah, tôi đã sử dụng Arduino IDE và tôi ổn với nó. Tôi cần chuyển sang AtmelStudio để bạn có thể thực hiện một số mã hóa thực sự. Nhưng tôi đang thử mọi thứ chỉ với sự trợ giúp của bảng dữ liệu atmega2560. Tôi sẽ thực sự tốt nếu tôi có thể tìm thấy một số hướng dẫn tốt với một số ví dụ hoạt độnghoàn chỉnh , ít nhất là chỉ để lái một servo ..
Anubis

@jippie vui lòng tham khảo bình luận ở trên .. (không được phép giới thiệu hai người trong một bình luận duy nhất: D)
Anubis

Câu trả lời:


3

Vì câu hỏi yêu cầu mã AVR hoạt động để điều khiển servo, bài viết này , mặc dù được viết cho vi điều khiển ATmega32, sẽ là một tài nguyên tuyệt vời.

Trên bảng Arduino, đồng hồ chính thường được sử dụng cho Bộ đếm thời gian / Bộ đếm 0..n là tinh thể trên bảng, thường là 16 MHz, mặc dù một số bảng Arduinos / clone cũng sử dụng tinh thể 8 MHz hoặc 20 MHz. Mục 18 của biểu dữ liệu địa chỉ lựa chọn nguồn / bộ đếm xung nhịp từ đồng hồ bên ngoài hoặc bên trong.

Bạn có tùy chọn sử dụng "bộ dao động nội bộ hiệu chuẩn" ATmega2560, về cơ bản là bộ hẹn giờ RC sẵn có, nhưng thiếu độ chính xác / ổn định, như có thể cần cho tín hiệu servo, tùy thuộc vào ứng dụng. Để sử dụng bộ tạo dao động nội, đặt CKSEL3: 0 đến 0010. Từ Mục 10.3.1 của biểu dữ liệu :

The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed, resulting in 1.0MHz system clock. The startup time is set to maximum and time-out period enabled. (CKSEL = "0010", SUT = "10", CKDIV8 = "0").


Một đề xuất bổ sung:
Nếu mong muốn độ chính xác của điều khiển servo, thì thay vì sử dụng Timer0 là Timer / Counter 8 bit, một trong các bộ đếm thời gian 16 bit (1, 3, 4 và 5) sẽ là một tùy chọn ưu tiên .


1

Một vài năm trước, tôi đã viết một số mã servo PWM cho ATMega168 và ATTiny2313 xử lý 64 kênh (servo). Mã và sơ đồ có thể được tìm thấy trên www.lhexapod.com

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.