Điều khiển động cơ servo bằng ATmega8

Thảo luận trong 'Sản Phẩm Mới' bắt đầu bởi an.dxuan, 10 Tháng chín 2014.

Users Viewing Thread (Users: 0, Guests: 0)

Lượt xem: 2,543

  1. an.dxuan

    an.dxuan Admin

    Chào các bạn !
    Hôm nay mình viết bài giới thiệu cho các bạn biết về cách điều khiển động cơ Servo MG995 bằng ATmega8 trên KIT AVRV2
    1- Sơ đồ đấu nối động cơ với MCU
    [​IMG]

    - Động cơ MG995
    + Thông số kĩ thuật .Các bạn có thể tham khảo tại đây
    + Chân và chức năng
    Chân GND (Nâu ) : Chân cấp mass .Được nối chung mass với MCU
    Chân VCC (Đỏ) : Chân cấp nguồn .Hoạt động ở dải 3.5 - 8.4V
    Chân tín hiệu (Vàng) : Chân điều khiển góc của động cơ .Nối với chân cấp tín hiệu PWM của MCU
    + Cấu tạo
    Một động cơ RC Servo thường có cấu tạo gồm 3 phần gồm : Một động cơ DC nhỏ ,hộp giảm tốc và bộ điều khiển góc quay .Các đông cơ servo này đã tích hợp mạch điều khiển góc quay bên trong nên chúng ta không cần bất cứ giải thuật nào để điều khiển mà chỉ cần cấp tín hiệu PWM vào chân điều khiển là có thể điều khiển góc quay như mong muốn
    Lưu ý : Điều khiển động cơ servo là điều khiển góc quay chứ không phải điều khiển tốc độ quay .Động cơ servo MG995 chỉ quay được nửa vòng ,tức là quay được các góc quay từ 0 - 180 độ
    - Điều khiển động cơ
    Như đã trình bày ở trên .Mình sẽ điều khiển góc quay của động cơ servo bằng cách cấp tín hiệu PWM vào chân điều khiển
    Tín hiệu cấp vào tương ứng với các góc được biểu diễn như sau
    [​IMG]
    Theo đó ,chúng ta có thể tính và cấp tín hiệu tương ứng với góc quay
    Dưới đây mình có đính kèm code điều khiển động cơ Servo MG995 bằng 2 nút nhấn trên KIT AVR V2 .nhấn KEY1 động cơ quay 180 độ và nhấn KEY 2 thì động cơ quay 90 độ .Các bạn có thể down về tham khảo
    Video Điều khiển góc quay động cơ RC Servo.

    Chúc các bạn thành công !

    Các file đính kèm:

    Last edited by a moderator: 16 Tháng chín 2014
    phamtuananh thích bài này.
  2. pro9x

    pro9x Member

    Chào bạn!
    Mình dùng với SG90 có cần phải thay đổi lại Code không ạ?
  3. Hong Quan

    Hong Quan Member

    chỉ cần tạo tần số 50Hz là quất thôi bạn.
  4. buiphuochuy55

    buiphuochuy55 New Member

    Servo này cần dòng bao nhiêu vậy bạn, mình thấy bạn ghim trực tiếp dây tín hiệu vào chân PB2 luôn. Cho mình hỏi bạn cấp nguồn gì cho cái Kit này vậy? (điện áp, dòng điện)
  5. Đinh Hường

    Đinh Hường New Member

    bạn ơi cho mình xin mạch nguyên lý đc k?
  6. an.dxuan

    an.dxuan Admin

    Chào bạn!
    Cái này mình làm trên KIT ATmega8 nên các kết nối mình up lên theo ảnh bên trên bạn nhé .Vì vậy mình không có nguyên lí
  7. Đinh Hường

    Đinh Hường New Member

  8. Anh Bao 130294

    Anh Bao 130294 New Member

    có thể dùng timer0 hoặc timer2 để đk đc ko bạn
  9. quang.dt7bk

    quang.dt7bk Admin

    Chào bạn!
    - Nếu bạn sử dụng kênh PWM cứng thì trên Atmega8 chỉ hỗ trợ trên TIMER1 ha.
    - Nếu bạn sử dụng TIMER0 và TIMER2 thì bạn phải tạo PWM mềm, khi tạo được PWM mềm thì bạn điều khiển tương tự như bài hướng dẫn của AD nhé.
  10. avr_vodoi

    avr_vodoi New Member

  11. Myhdp

    Myhdp New Member

    bạn cho mình hỏi là độ rộng xung nằm giữa 0,7ms và 1,5ms thì sao? có phải khi đó động cơ sẽ quay theo tỷ lệ không? ví dụ như nếu ở mức giữa là 1,1 ms thì động cơ sẽ quay 1 góc là 45 độ?
  12. thanh nhat

    thanh nhat New Member

    bạn cho mình hỏi là: mình dựa vào cơ sở lý thuyết nào để tính ra 0.7ms là ở 0 độ và 2.3ms là 180 ạ
  13. quang.dt7bk

    quang.dt7bk Admin

    Chào bạn!
    Ở trên AD sử dụng động cơ servo MG995, bạn đọc qua thông số kỹ thuật của động cơ trong link sau nhé:
  14. vutritu

    vutritu New Member

    ad cho e hỏi chút là atmega16 e dùng 2 kenh bam xung (0c1a và oc1b trên timer1)
    giờ e dùng timer0 để điều khiển góc quay được không ak.
  15. quang.dt7bk

    quang.dt7bk Admin

    Chào bạn!
    Để thay đổi góc quay cho động cơ Servo bạn phải thay đổi Duty của xung cấp cho động cơ vì vậy bạn phải sử dụng TIMER1 để thay đổi Duty luôn nhé, không dùng thêm được TIMER0 đâu bạn ha ^^
  16. vutritu

    vutritu New Member

    vg.hiện thì e dùng 1 con atmega16 để điều khiển servo.nhưng e tạo như code của atmega8 thì không ra xung 20ms.
    hiện muốn điều khiển servo e phải chọn tốc độ chip 2mhz
    vậy ad có cách nào không hướng dẫn e với
  17. Huân Phạm

    Huân Phạm New Member

    cho em hỏi nếu dùng các chân I/O bình thường mà ko cần đếu hai chân OC1A vs OC1B thì có đk được ko ạ?
  18. quang.dt7bk

    quang.dt7bk Admin

    Chào bạn!
    Bạn sử dụng chân IO bình thường cũng được bạn nhé, tuy nhiên khi đấy bạn sẽ không được linh động trong việc xử lý điều khiển góc quay cho động cơ và khó khăn trong việc kết hợp điều khiển các tác vụ khác. Còn sử dụng bộ TIMER có sẵn thì bạn chỉ cần SET các giá trị cần thiết rồi để nó tự chạy thôi :)

Chia sẻ trang này

Lên trên