Mua linh kiện điện tử tại Điện tử Nhật Tùng
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>> Kích vào hình để được biết thêm chi tiếtTable of Contents
Tải File bài giải
Pass giải nén: Huynhnhattung.com
===>>> Nếu bạn chưa có phần mềm giải nén:
Video Động cơ Servo, Điều khiển góc quay bằng Timer0
Blog Động cơ Servo, Điều khiển góc quay bằng Timer0
Đề bài động cơ Servo:
Bài giải động cơ Servo:
Phần cứng chương trình động cơ Servo:
- Đề yêu cầu tạo xung bằng timer0 vì vậy phải sử dụng và tính toán timer0 để tạo ra xung chính xác nhất điều khiển động cơ Servo quay góc mong muốn.
- Động cơ Servo được kết nối vào chân RB0, động cơ chỉ cần kết nối tín hiệu và tạo sóng theo yêu cầu sẽ cho phép tạo góc.
- Sử dụng dao động ngoài thạch anh 20M gắn vào chân OSC1 OSC2.
- Các linh kiện chính cần sử dụng tham khảo tại.
Thông số kỹ thuật Mua Linh kiện Pic16F887 Pic16F877 Led đơn Led đơn Điện trở Điện trở Nút nhấn Nút nhấn Thạch anh Thạch anh
Phần mềm động cơ Servo:
Khai báo thư viện tiền sử lý của đếm thời gian Timer0:
- Vi điều khiển hiện tại mình đan dùng là Pic16F877A
- Hiện đan dùng thạch anh ngoài và thạch anh ngoài 20M bằng lệnh #Fuses hs và #delay(clock=20M).
- Khi sử dụng timer0 phải biết được địa chỉ thanh ghi của biến cờ tràn. Với timer0 thì địa chỉ là 0x0b.2 tên thanh ghi vị trí tương ứng là TMR0IF, ở đây khai báo trước để dễ nhớ nếu các bạn ngại định nghĩa thì có thể sử dụng trực tiếp hoặc đặt một tên khác để dễ nhớ hơn.
- Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
- Vì đây là bài thi nên việc định nghĩa chân phụ thuộc rất lớn vào nội dung đề bài.
- Tên khai báo biến thì cái này tùy thuộc vào chức năng để khai báo cho phù hợp.
- Khi không biết giá trị cụ thể là bao nhiêu thì chỉ cần khai báo signed int32 đây là biến 32bit có dấu vì vậy giá trị rất rộng không sợ sai yêu cầu của đề bài đưa ra.
Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng động cơ Servo
- Bắt đầu chương trình chính phải khỏi rạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port B kết nối vào động cơ Servo điều khiển góc nên xuất dữ liệu nên khởi tạo là 0x00.
- Sử dụng timer0 để đếm chu kỳ tạo xung 0.1ms nên khai báo t0_internal và sử dụng bộ chia timer0 là 2. từ đó suy ra cách tính: 20M/4=5M sử dụng bộ chia 4 là chia của phần cứng do nhà sản xuất quy định. 5M/4=1.25M sử dụng bộ chia 2 của timer0, từ đó suy ra f = 1.25M => T = 0.8uS. Timer0 đếm 8bit => 2^8 = 256 xung => t0 max = 0.8uS x 256 = 0.2048ms. Chọn thời gian tràn timer0 là 0.1ms => bắt đầu đếm từ 6.
Gán giá trị ban đầu bằng 0 chuẩn bị cho chu kỳ đếm, nếu không gán giá trị sẽ Random trong dãy khai báo của các biến.
- Kiểm tra nếu biến cờ tràn TMR0IF=1 tức timer0 đã đếm đến ngưỡng 255 thì xóa cờ tràn cho TMR0IF=0 chuẩn bị cho chu kỳ mới, đồng thời khởi tạo giá trị ban đầu là 6 để đếm chu kỳ tiếp theo bằng 0.1ms. Sau 0.1ms thì biến tg tăng lên một đơn vị, khi giá trị tràn đạt ngưỡng 20 tức được 2ms thì tạo xung mức cao cho động cơ ngược lại nếu đạt ngưỡng 200 tức đếm được 17.9ms tức 17.9ms tiếp theo tạo xung mức thấp, và một lần tràn tiếp theo cũng tắt xung sẽ tạo đủ 18ms đủ chu kỳ xung là 20ms, cho tg=0 chuẩn bị cho chu kỳ mới.
Chúc các bạn có một kỳ thi thành công…!!!