Trường Đại học Cần Thơ Trường Bách khoa _Báo cáo học phần kĩ thuật Vi điều khiển_CN581 Đề tài: Tìm hiểu về Encoder – Thiết kế mạch hiển thị tốc độ động cơ ra LED 7 đoạn. Giảng viên hướng dẫn : Nguyễn Khắc Nguyên Học phần : Kĩ thuật Vi điều khiển_CN581 Nhóm : 08 Sinh viên thực hiện : Nguyễn Nhật Linh_B2012513 Nguyễn Mạnh Hà_B2012497 Trịnh Chí Bằng_B2012486 Trần Văn Khang_B2012507
Trang 1TRƯỜNG ĐẠI HỌC CẦN THƠ
TRƯỜNG BÁCH KHOA
….…
BÀI BÁO CÁO
KĨ THUẬT VI ĐIỀU KHIỂN
Đề tài: Tìm hiểu về Encoder – Thiết kế mạch hiển thị
tốc độ động cơ ra LED 7 đoạn
Giảng viên hướng dẫn : Nguyễn Khắc Nguyên
Sinh viên thực hiện : Nguyễn Nhật Linh_B2012513
Nguyễn Mạnh Hà_B2012497
Trịnh Chí Bằng_B2012486 Trần Văn Khang_B2012507
Trang 2
SVTH: Nhóm 8 Trang 2
LỜI CẢM ƠN
“Để hoàn thành bài báo cáo này, nhóm em xin gửi lời cảm ơn chân thành đến:
Thầy Nguyễn Khắc Nguyên vì đã tận tình hướng dẫn, góp ý kiến để nhóm em hoàn thành bài làm này.
Trong quá trình làm báo cáo chắc chắn sẽ không tránh khỏi những thiếu sót, cũng như hạn chế về kiến thức Rất mong nhận được sự nhận xét, đóng góp ý kiến từ phía Thầy để bài làm của nhóm em được hoàn thiện hơn.
Lời cuối cùng, xin kính chúc thầy nhiều sức khỏe, thành công và hạnh phúc.”
Em xin chân thành cảm ơn!
Sinh viên thực hiện
Nhóm 08
Trang 3MỤC LỤC
Kĩ thuật Vi điều khiển_CN581
I TÌM HIỂU VỀ ENCODER 5
1 Khái niệm về Encoder 5
2 Cấu tạo Encoder: 5
3 Nguyên lí hoạt động của Encoder: 6
4 Phân loại Encoder: 6
5 Ứng dụng của Encoder 7
II ĐỀ XUẤT HƯỚNG GIẢI QUYẾT ĐỀ TÀI 7
1 Mô tả ý tưởng, mục tiêu, chức năng của đề tài: 7
1.1 Mô tả ý tưởng 7
1.2 Mục tiêu 7
1.3 Chức năng 7
2 Mô hình của hệ thống: 7
2.1 Dạng sơ đồ khối 7
2.2 Mô tả sơ đồ dạng khối của hệ thống: 8
3 Thiết kế phần cứng của hệ thống: 8
3.1 Vẽ sơ đồ khối phần cứng của hệ thống 8
3.2 Chọn thiết bị 8
4 Thiết kế phần mềm của hệ thống: 9
4.1 Phát thảo lưu đồ giải thuật: 9
5 Dự kiến kết quả và khả năng ứng dụng thực tế: 10
5.1 Dự kiến kết quả đạt được 10
5.2 Khả năng ứng dụng thực tế 10
6 Dự trù các vật tư thiết bị: 10
III KẾT QUẢ THỰC HIỆN 10
1 Mô hình mô phỏng trên Proteus: 10
2 Mô hình 3D sau khi vẽ PCB 10
3 Mô hình thực tế: 11
4 Đoạn Code cho chương trình: 12
5 Kết quả thực hiện 17
6 Hướng phát triển 17
IV PHỤ LỤC 17
Trang 4SVTH: Nhóm 8 Trang 4
1 Quá trình thực hiện đề tài: 17
2 Nhiệm vụ của các thành viên trong nhóm 18
Trang 5I TÌM HIỂU VỀ ENCODER
1 Khái niệm về Encoder
- Encoder là một bộ cảm biến (còn gọi là bộ mã hóa) chuyển động cơ học
tạo ra tín hiệu kỹ thuật số đáp ứng với chuyển động Là một thiết bị cơ điện
có khả năng làm biến đổi chuyển động thành tín hiệu số hoặc xung
Hình 1: Hình ảnh encoder
2 Cấu tạo Encoder:
- Encoder có cấu tạo gồm 4 phần:
• Một đĩa quay (có lỗ gắn vào trục động cơ)
• Một đèn Led làm nguồn phát sáng
• Một mắt thu quang điện
• Bảng mạch điện (khuếch đại tín hiệu)
Hình 2: Cấu tạo của encoder
Bảng mạch điện
Đĩa quay
Đèn led Housing assembly Mắt thu quang điện
Trang 6SVTH: Nhóm 8 Trang 6
3 Nguyên lí hoạt động của Encoder:
- Khi đĩa quay quanh trục, trên đĩa có các rãnh để tín hiệu quang được chiếu
qua (Led) Chỗ có rãnh thì ánh sáng xuyên qua được, chỗ không có rãnh ánh sáng không xuyên qua được Với các tín hiệu có hoặc không người ta ghi nhận đèn Led có chiếu qua hay không Số xung Encoder được quy ước
là số lần ánh sáng chiếu qua khe
VD: Trên đĩa có 100 khe thì cứ 1 vòng quay, encoder đếm được 100 tín hiệu Đây
là nguyên lý hoạt động của Encoder cơ bản đối với với chủng loại khác thì đĩa quay
sẽ có nhiều lỗ hơn và tín hiệu thu nhận cũng sẽ khác hơn
4 Phân loại Encoder:
- Phân loại theo các phương tiện đầu ra của Encoder gồm 2 loại chính:
Encoder tuyệt đối và Encoder tương đối
+ Encoder tuyệt đối: Tín hiệu ta nhận được từ Encoder cho biết chính xác vị
trí của Encoder mà người sử dụng không phải xử lý thêm gì cả
+ Encoder tương đối: Phát ra tín hiệu tăng dần hoặc theo chu kỳ
Hình 3: encoder tuyệt đối Hình 4: encoder tương đối
- So sánh chi tiết giữa hai loại Encoder này:
➢ Encoder tuyệt đối:
• Sử dụng đĩa theo mã nhị phân hoặc mã Gray
• Kết cấu gồm: bộ phát ánh sáng (LED), đĩa mã hóa, bộ thu ánh sáng
• Đĩa mã hóa ở Encoder được chế tạo từ vật liệu trong suốt, các góc đều nhau cùng các đường tròn đồng tâm
- Ưu điểm: giữ được giá trị tuyệt đối khi Encoder mất nguồn
- Nhược điểm: giá thành cao vì chế tạo phức tạp, đọc tín hiệu khó
➢ Encoder tương đối:
• Đĩa mã hóa bao gồm một dãi băng tạo xung, được chia thành nhiều lỗ bằng nhau và được cách đều nhau
• Chất liệu có thể là trong suốt để giúp ánh sáng chiếu qua
• Là Encoder chỉ có 1,2 hoặc tối đa 3 vòng lỗ, và thường có thêm một
lỗ định vị
- Ưu điểm: giá thành rẻ, chế tạo đơn giản, xử lý tín hiệu trả về dễ dàng
Trang 7- Nhược điểm: dễ bị sai lệch về xung khi trả về Có tích lũy sai số khi hoạt
động lâu dài
5 Ứng dụng của Encoder
- Encoder có rất nhiều ứng dụng trong thực tế, tiêu biểu như:
+ Ứng dụng về biểu thị tốc độ (Đo tốc độ dòng chảy)
+ Ứng dụng về đo lường (Encoder được gắn vào băng tải giúp xác định chiều
dài để cắt sản phẩm)
+ Ứng dụng về đếm số lượng (Đếm sản phẩm trên băng truyền)
+ Ứng dụng trong ngành cơ khí: Giúp xác định chính xác vị trí của trục máy
cũng như vị trí dao cắt để gia công đạt độ chính xác nhất
+ Ứng dụng trong công nghiệp: Trong các lĩnh vực Ô tô, Điện tử tiêu dùng,
Công nghiệp, Y tế, Quân đội v.v…
II ĐỀ XUẤT HƯỚNG GIẢI QUYẾT ĐỀ TÀI
1 Mô tả ý tưởng, mục tiêu, chức năng của đề tài:
1.1 Mô tả ý tưởng
- Dùng Vi điều khiển MSP430G2553 làm vi sử lí chính kết hợp với Encoder
để hiển thị tốc độ động cơ ra thanh led 7 đoạn
1.2 Mục tiêu
- Tốc độ động cơ (số vòng quay) đo được sau khi xử lí sẽ được hiển thị ngõ
ra trên thanh led 7 đoạn
(DC motor)
Trang 8SVTH: Nhóm 8 Trang 8
2.2 Mô tả sơ đồ dạng khối của hệ thống:
❖ Mô tả ngắn ngọn hoạt động của sơ đồ:
- Sau khi cấp nguồn cho hệ thống, động cơ hoạt động Encoder đếm số xung
để cấp cho vi điều khiển MSP430G2553 và giá trị đầu ra được hiển thị trên led 7 đoạn
Trang 10SVTH: Nhóm 8 Trang 10
5 Dự kiến kết quả và khả năng ứng dụng thực tế:
5.1 Dự kiến kết quả đạt được
- Phần chính: Hệ thống có thể đọc và hiển thị ra trên màn hình led 7 đoạn
tốc độ của động cơ đang quay
- Phần phụ: Có thể điều chỉnh độ nhanh, chậm cũng như đảo chiều động cơ
thông qua mạch điều khiển L298N
- Khả năng ứng dụng encoder vào thực tế rất cao có thể linh hoạt ngoài việc
sử dụng đo tốc độ có thể dùng encoder để đếm sản phẩm, đo chiều dài…
- Ứng dụng được trong nhiều lĩnh vực đã nêu ở phần ứng dụng của
Encoder
6 Dự trù các vật tư thiết bị:
- Tính toán hợp lí các thiết bị cần cho đề tài phù hợp với kinh phí đang có
- Tùy vào tình hình chọn được linh kiện phù hợp để thực hiện đề tài, linh
hoạt đưa ra hướng giải quyết để hoàn thành đề tài được giao
III KẾT QUẢ THỰC HIỆN
1 Mô hình mô phỏng trên Proteus:
2 Mô hình 3D sau khi vẽ PCB
Trang 12SVTH: Nhóm 8 Trang 12
4 Đoạn Code cho chương trình:
// khai bao thu vien
// chuong trinh quet led 7seg
Trang 14P1DIR |= BIT6; // cau hinh pwm
P1SEL |= BIT6; // ngo ra pwm P1.6
//set P1.3 INPUT Pulse
P1REN |= BIT3; // dien tro keo len
P1IE |= BIT3; //interrupt enable
P1IES &= ~BIT3; // interrupt low-high
P1IFG &= ~BIT3; // set interrupt flag to 0 in the beginning bis_SR_register(GIE); // cho phep ngat
led_encoder();// goi ham led encoder
while(1){
// chuong trinh doc encoder
val = ReadADC10(0); // doc ADC P1.0
TACCR1 = val; // cho gia tri ADC = TACCR1
Trang 16SVTH: Nhóm 8 Trang 16
{
ADC10CTL0 &=~ ENC;
ADC10CTL0 = SREF_1 + ADC10SHT_2 + ADC10ON + REF2_5V + REFON;
ADC10AE0 |= (BIT0<<chanel);
ADC10CTL1 |= (chanel*0x1000u);
delay_cycles(3000);
ADC10CTL0 |= ENC + ADC10SC;
while(!(ADC10CTL0 & ADC10IFG));
ADC10CTL0 = 0;// ADC10CTL0 &=~ ADC10ON;
return ADC10MEM;
}
//+++++++++++++++++++++++++++++++++++
#pragma vector = PORT1_VECTOR
interrupt void PORT1 (void)
{
counter++;// tang counter len 1 don vi
P1IFG &= ~BIT3;// xoa co ngat
}
// chuong trinh con phuc vu ngat
#pragma vector = TIMER1_A0_VECTOR
interrupt void Timer0(void){
Trang 175 Kết quả thực hiện
- Dùng Vi điều khiển MSP430G2553 làm vi sử lí chính kết hợp với Encoder
để hiển thị tốc độ động cơ ra thanh led 7 đoạn
• Kết quả:
+ Tính năng 1: Mạch hiển thị được tốc độ động cơ ra led 7 đoạn
+Tính năng 2: Có thể điều chỉnh được tốc độ động cơ thông qua biến trở
và hiển thị ra led 7 đoạn
- Đo tốc độ khi đảo chiều quay của động cơ có dấu (-) khi quay nghịch
(Nhóm chưa làm được có thể nghiên cứu và thực hiện sau này.)
- Động cơ có thể bật tắt theo một chu kì thiết lập sẵn
IV PHỤ LỤC
1 Quá trình thực hiện đề tài:
❖ Đề tài thực hiện trong 4 tuần:
- Tuần thứ nhất:
+ Phân công nhiệm vụ, công việc cho các thành viên
+ Tìm hiểu về đề tài nghiêm cứu về Encoder, mạch L298N…
+ Dự trù các linh kiện cần phải có cho đề tài
- Tuần thứ hai:
+ Tìm hiểu về code cho hệ thống
+ Mô phỏng hệ thống trên phần mềm Proteus
+ Viết code chương trình
+ Chọn mua các thiết bị cần thiết cho đề tài
- Tuần thứ ba:
+ Tiếp tục thực hiện việc viết Code hoàn thiện cho hệ thống
+ Bổ sung thiếu sót về phần mềm cũng như phần cứng (Sửa lỗi code, chuẩn bị thêm thiết bị đã thiếu trước đó)
Trang 18SVTH: Nhóm 8 Trang 18
2 Nhiệm vụ của các thành viên trong nhóm
- Nhóm gồm 4 thành viên các nhiệm vụ được phân chia:
- Chuẩn bị thiết bị, linh kiện, nghiên cứu sơ đồ lắp mạch, nghiên cứu công
dụng của các linh kiện có trong đề tài, hỗ trợ phần code
❖ Trần Văn Khang
- Chuẩn bị code cho chương trình, nghiên cứu sơ đồ lắp mạch, tìm hiểu về
mạch L298N
Tài liệu tham khảo:
[1] Bài giảng của thầy Nguyễn Khắc Nguyên_Học phần Kĩ thuật Vi điều khiển_Trường Đại học Cần Thơ
[2] Lập trình hệ thống nhúng sử dụng vi điều khiển MSP430 (Embedded System I)
_Ts Lê Mạnh Hải_Khoa CNTT_11/2013_Đại học Công nghệ TP HCM
[3] Nguồn tìm hiểu về Encoder trên Internet:
❖ Câu hỏi được giao:
1 Vẽ chi tiết sơ đồ kết nối Encoder với MSP430G2553? Chỉ ra đoạn Code đọc
dữ liệu đọc xung và cách tính tốc độ để hiển thị ra Led 7 đoạn? Nguyễn Nhật
Linh
2 Vẽ lại mạch kết nối giữa Led 7 đoạn với MSP430G2553? Cho biết quét led
với chu kì bao nhiêu, chỉ ra đoạn Code cấu hình? Nguyễn Mạnh Hà
3 Chỉ ra mạch điện kết nối biến trở và MSP430G2553? Chỉ ra cấu hình ADC
với cảm biến và đoạn Code? Trịnh Chí Bằng
4 Đo tốc độ quay thuận/nghịch bổ sung nút nhấn để thực hiện chức năng? Mô tả
quá trình thực hiện? Trần Văn Khang
Trả lời:
Trang 191 Vẽ chi tiết sơ đồ kết nối Encoder với MSP430G2553? Chỉ ra đoạn Code đọc
dữ liệu đọc xung và cách tính tốc độ để hiển thị ra Led 7 đoạn? Nguyễn Nhật
Linh
- Vẽ chi tiết sơ đồ kết nối Encoder với MSP430G2553:
Hình 1: Sơ đồ chi tiết kế nối Encoder với MSP430G2553
❖ Mô Tả:
- Tổng số chân của Encoder là 6 (Có 1 chân lấy nguồn 12V từ mạch L298N)
- Còn lại 5 chân của Encoder tương ứng như trên hình:
• 2 Chân kết nối với nguồn 3.3V (Chân 1 và 5 như hình)
• 3 Chân tín hiệu còn lại là chân: 2, 3 và 4
+ Chân 2 kết nối với P1.2 + Chân 3 kết nối với P1.3
+ Chân 4 kết nối với P1.6 (Xung PWM) và với chân IN2 của mạch
Trang 20SVTH: Nhóm 8 Trang 20
2 Vẽ lại mạch kết nối giữa Led 7 đoạn với MSP430G2553? Cho biết quét led với
chu kì bao nhiêu, chỉ ra đoạn Code cấu hình? Nguyễn Mạnh Hà
- Vẽ lại mạch kết nối giữa Led 7 đoạn với MSP430G2553:
Hình 2: Sơ đồ chi tiết kế nối giữa Led 7 đoạn với MSP430G2553
- Chỉ ra đoạn Code cấu hình và chu kì quét led:
Trang 213 Chỉ ra mạch điện kết nối biến trở và MSP430G2553? Chỉ ra cấu hình ADC với
cảm biến và đoạn Code? Trịnh Chí Bằng
- Chỉ ra mạch điện kết nối biến trở và MSP430G2553:
Hình 3: Sơ đồ chính của đồ án
- Cấu hình ADC với cảm biến và đoạn Code:
Mạch điện kết nối biến trở và MSP430G2553
Trang 22SVTH: Nhóm 8 Trang 22
4 Đo tốc độ quay thuận/nghịch bổ sung nút nhấn để thực hiện chức năng? Mô tả
quá trình thực hiện? Trần Văn Khang
- Để đo tốc độ quay thuận/nghịch có bổ sung thêm nút nhấn Thì ta cần
phải sử dụng mạch L298N để đảo chiều động cơ bằng cách sử dụng các chân IN1, IN2, IN3, IN4 nối với các Port của MSP Ta dùng 2 nút nhấn để điều khiển đảo chiều thuận nghịch của động cơ, lắp theo kiểu Input full up dùng 1 chân của mỗi nút nhấn nối vói mỗi chân cuae MSP, chân còn lại ta nối vào GND trên MSP
- Code cho chương trình:
Int trangthainutlen = digitalRead(nutnhanlen);
Int trangthainutxuong = digitalRead(nutnhanxuong);
If(trangthainutlen == 0 && trangthainutxuong !=0)
DigitalWrite (in1 , High);
digitalWrite (in2, Low);
digitalWrite (in3, High);
digitalWrite (in4, Low);
}
Void lui(){
digitalWrite(in1, Low);
digitalWrite (in2, High);
digitalWrite (in3, Low);
digitalWrite (in4, High);
}
val = ReadADC10(0); // doc ADC P1.0
TACCR1 = val; // cho gia tri ADC = TACCR1
for(int k = 0;k<50;k++){
for(int h = 0; h < 10;h++){
L2 = 0;
Trang 23ST_CP = 0;
shiftout(so[tocdo/100]);
ST_CP = 1;