Động cơ encoder được ứng dụng vào nhiều lĩnh vực trong cuộc sống (trong công nghệ chế tạo robot…).mach điều khiển động cơ có ý nghĩa rất quan trọng trong việc điều khiển động cơ theo mục đích của người sử dụng.đặc điểm của mạch điều khiển là động cơ có thể quay thuận hoặc quay nghịch ,tốc độ của động cơ có thể tăng hoặc giảm tùy theo ý thích .mạch sử dụng chíp vi điều khiển của hãng TI .
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ VIỄN THÔNG
Giáo Viên hướng dẫn :
Sinh viên thực hiện MSSV Lớp
Hà Nội 12/2013
Trang 2MỤC LỤC
Trang 3LỜI NÓI ĐẦU
Động cơ encoder được ứng dụng vào nhiều lĩnh vực trong cuộc sống (trong công nghệ chế tạo robot…).mach điều khiển động cơ có ý nghĩa rất quan trọng trong việc điều khiển động cơ theo mục đích của người sử dụng.đặc điểm của mạch điều khiển là động cơ có thể quay thuận hoặc quay nghịch ,tốc độ của động cơ có thể tăng hoặc giảm tùy theo ý thích mạch sử dụng chíp vi điều khiển của hãng TI
Đồ án II chúng em làm lần này giúp chúng em rèn lyện thêm các kỹ năng lập trình cho kit launchpad MSP430, kỹ năng làm mạch in trên orcard hoặc altium vận dụng những kiến thức đã học trên giảng đường vào thực tế và đồng thời rèn luyện được kỹ năng làm việc nhóm
Trang 4CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
I.Tìm hiểu chung về kít launchpad MSP430.
1.Giới thiệu chung
-MSP430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi công ty Texas Instruments
-MSP là chữ viết tắt của “MIXED SIGNAL MICROCONTROLLER” là dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện áp nguồn cấp từ 1.8V – 3.6V MSP430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module ngoại vi
-MSP430 Tích hợp phần mô phỏng trên kit
Nghĩa là bạn có thể nạp chương trình và gỡ lỗi project của bạn mà không cần thêm công cụ nào khác Đặc biệt hơn là bạn có thể dùng Kit để nạp và debug cho tất cả các chip MSP430 nằm trên một mạch khác
-MSP430 Tương thích với các module hỗ trợ
Các chân của MSP430G2 được thiết kế rất thoáng Các chân này giúp cho việc cắm các module hỗ trợ khác rất dễ dàng, để thêm các tính năng như wireless, capacitive touch…
-Hỗ trợ các vi điều khiển MSP430G2xx
Kit MSP430 hỗ trợ các vi điều hiển dòng MSP430G2xx Đây là các vi điều khiển tần số dao động có thể lên đến 16MHZ, bộ nhớ lên đên 16KB Flash, 512B RAM, có tích hợp ADC, timer và các module giao tiếp
Trang 5Hình ảnh của kit launchpad MSP430
Trang 6II.Tìm hiểu về giao tiếp LCD
-MSP430 là loại vi điều khiển tiết kiệm năng lượng dùng nguồn 3V3 trong khi màn hình LCD1602 thông dụng lại dùng 5V Thật ra trong lúc giao tiếp nếu chỉ gửi lệnh mà không cần đọc thì thiết lập phần cứng cũng không quá khó khăn, tuy nhiên trong giao tiếp có cả việc đọc cờ báo bận, nên dĩ nhiên việc giao tiếp trên trở nên không ổn định về lâu dài, nhất là cho MSP430
Thật may mắn cho mình là chip HD44780 (chip điều khiển màn hình LCD, mình giao tiếp với chip này) có hỗ trợ cả nguồn 3V3, và khi tra thêm trong datasheet
có nói về một vấn đề là với nguồn 3V3 thì độ tương phản sẽ không được cao (cụ thể hơn là mức áp phân cực cho chân V0) Như vậy cần có một mức áp cao hơn vào chân này Việc tạo mức áp cao này bạn có thể dùng một mạch boost, rồi so sánh với GND cũng được, riêng cá nhân mình dùng IC7660 tạo mức áp âm khoảng -3V so sánh với 3V3 (rất dễ dùng và cũng rẻ, chỉ cần lắp thêm 2 tụ
ngoài)
-LCD có 3 chân điều khiển là RS, R/W, E Và 8 chân dữ liệu từ D0-D7
tóm tắt bảng đó theo dạng tính năng từng chân như sau:
Chân RS: Chọn thanh ghi Có 2 thanh ghi trong chip LCD Một thanh ghi lệnh (IR) và một thanh ghi dữ liệu (DR) Như vậy khi cần ghi lệnh điều khiển hoạt động LCD thì RS=0 Khi cần ghi dữ liệu thì RS=1
Chân R/W: Gửi hay đọc dữ liệu Khi đọc dữ liệu từ chip LCD gửi về thì R/W=1, khi không ghi dữ liệu thì R/W=0
Chân E (không có trong bảng): đây là chân enable của chip LCD Do giao tiếp
dữ liệu của LCD khá giống giao tiếp song song nên mục đích chân này là: khi ghi dữ liệu, sau khi tín hiệu ngõ ra của các chân dữ liệu đã đúng thì phát một xung tích cực mức cao sẽ làm chip LCD đọc tín hiệu ở các chân dữ liệu; còn khi đọc dữ liệu, phát xung này sẽ làm chip LCD xuất giá trị dữ liệu cần đọc ra chân
dữ liệu
Dựa trên bảng này mình đã define một số lệnh cũng như chi tiết các bit để dễ nhớ hơn Cách sử dụng mình đã có kèm một file main.c để ví dụ
Trang 7Vấn đề tiếp theo khi giao tiếp mà mình nghĩ :chip này hỗ trợ tần số giao tiếp là bao nhiêu? Chân E phát xung như thế nào? Xuất dữ liệu trên các chân tín hiệu ra sao?
Điều đầu tiên như mình đã nói, chip HD44780 có hỗ trợ giao tiếp dữ liệu với vi điều khiển chỉ cần dùng 4 dây thay vì 8 dây (như vậy rõ ràng là khi truyền dữ liệu cũng phải truyền 2 lần thay vì 1 lần cho 1 byte như chế độ 8 dây) Và vì lý
do kinh tế cũng như sự gọn gàng khi đi dây bus, mình chỉ viết thư viện cho chế
độ 4 dây (4bit), các bạn nếu cần có thể viết lại để hỗ trợ chế độ 8bit
Ngoài ra trong thư viện của mình cũng mặc định là bạn dùng 2 dòng của LCD,
và khi ghi không dịch màn hình
Và cũng như 1 quy ước để khỏi nhầm lẫn, mình sẽ chọn BIT4 – BIT7 cho chân D4 – D7, các chân này được define trong file h Các bạn vào define các chân cho các dây dữ liệu và điều khiển
Kế đến là vấn đề chuyển dữ liệu ra sao Về vấn đề này, bạn có thể tham khảo trang 200 của datasheet Từ trang này mình đã viết hàm lcd_check_busy(),
lcd_send_data() và lcd_send_instruction() Mình chỉ làm khác thư viện của C18 một điểm ở chỗ chân E Thư việc C18 sẽ xuất tín hiệu ở chân dữ liệu D4-D7 trước, sau đó mới phát một xung cao ở chân E Mình thì Kéo chân E lên mức cao rồi mới xuất dữ liệu ở chân ra, sau đó kéo chân E về lại mức 0 Kết quả đều như nhau, bạn có thể thử và xem kết quả
Trong quá trình viết code, chỉ có hàm khởi tạo lcd_init() là hơi đặc biệt vì theo như trong datasheet, trong mạch của chip LCD có phần khởi tạo, tuy nhiên
không phải lúc nào cũng thành công Ngoài việc đợi 10ms (code của mình đợi 15ms) cho mức áp LCD đạt mức cần thiết thì để phần khởi tạo thành công 100%.Hàm lcd_init()cần phải định nghĩa 3 khoảng thời gian (trong file h) là 15ms, 5ms và 500us dựa trên MCLK của MSP430 mà các bạn đang dùng (mặc định là 1,1MHZ) Các thông số đưa vào hàm lcd_init() có 3 phần tương ứng 3 thanh ghi: Function, Display, Entry Thông số đầu tiên đưa vào là kiểu font, kế đến là cách hiển thị và thứ ba là chế độ tự động dịch chuyển
Kế đến là các địa chỉ trên màn hình Module LCD có 3 loại bộ nhớ, CGROM, CGRAM và DDRAM CGROM là bộ nhớ ROM (nên bạn không tác động đến
Trang 8nó được) chứa các mảng ký tự theo địa chỉ trên bảng code ASCII Còn DDRAM
dữ liệu trên màn hình LCD Như vậy khi bạn gửi dữ liệu cần hiển thị lên
DDRAM thì địa chỉ DDRAM tại đó sẽ tự động hiển thị dữ liệu tại địa chỉ
CGROM tương ứng Nói tóm lại là dữ liệu hiển thị trên DDRAM và CGROM là giống nhau Còn về bộ nhớ khá đặc biệt CGRAM mình sẽ bàn sau
dùng hàm lcd_set_ddram_add() để chọn ô hiển thị trên LCD Như mình đã nói mỗi hàng trên LCD có 40 ký tự nhưng do giới hạn kích thước màn hình nên bạn chỉ có thể thấy 16 ký tự Nếu muốn thấy những ký tự kia thì cần phải dịch màn hình sang phải hay trái bằng hàm lcd_shift_display() Khi bạn ghi dữ liệu vào một ô địa chỉ DDRAM thì con trỏ tự động chuyển sang địa chỉ kế tiếp, do đó bạn
có thể ghi liên tục mà không cần phải chọn lại địa chỉ nếu như địa chỉ là liên tục với nhau Điều đặc biệt bạn có thể thấy là DDRAM có 128 địa chỉ (7bit) nhưng mỗi hàng chỉ có 40 địa chỉ, nếu ghi vào những địa chỉ còn lại thì sao? Mình đã thử và thấy rằng những ô địa chỉ đó bị chồng lấn lên những ô khác nên tốt nhất bạn nên dùng đúng như khuyến cáo của datasheet: hàng trên từ 0 - 39 ; hàng dưới từ 64 - 103
Như vậy với các dòng lệnh trên bạn đã có thể hiển thị theo ý mình muốn, sau khi dùng lcd_init() để khởi tạo, bạn có thể dùng lệnh lcd_clear_all() để xóa hết màn hình và reset địa chỉ DDRAM thành 0 Sau đó nếu muốn ghi một ký tự bạn dùng hàm lcd_send_data(), nếu muốn ghi một đoạn chữ bạn dùng hàm
lcd_send_string()
Trang 9CHƯƠNG 2: TÌM HIỂU VỀ MACH ĐIỀU KHIỂN
ĐỘNG CƠ
I.Sơ đồ mạch
1.Sơ đồ khối
Khối bàn phím
Khối công suất
Khối hiển
thị
Khối vi sử lý
Trang 102.Sơ đồ nguyên lý
Trang 11II.Tìm hiểu từng linh kiện
1.Màn hình LCD 1602
-LCD có chức năng hiển thị tốc độ của động cơ
LCD 1602 datasheet
Tên các các chân 1->16
Trang 122.IC L298
-Chức năng chính của L298 là dùng để khuếch đại công suất của động cơ
L298 datasheet
Hình ảnh trên thực tế của L298
Trang 13-Sau khi nạp chương trình xong ta lấy chip ra và gắn vào mạch mà ta đã làm.
Sơ đồ chân của msp430g2553
Hình ảnh của chip
Trang 14III.Hình ảnh liên quan đến mạch
1.Hình ảnh mạch in
Trang 152.Hình ảnh của mạch sau khi hoàn thành
Trang 16#define RW P2_out->_bit.b5
#define RS P1_out->_bit.b7
#define EN P2_out->_bit.b4
#define DATA_4 P2_out->_bit.b3
#define DATA_5 P2_out->_bit.b2
#define DATA_6 P2_out->_bit.b1
#define DATA_7 P2_out->_bit.b0
Trang 17void set_data_lsb( unsigned char data){ char convert=0;
convert=data&0x01;
if(convert==0x01)DATA_4=1;
else DATA_4=0;convert=data&0x02;if(convert==0x02)DATA_5=1;
else DATA_5=0;convert=data&0x04;if(convert==0x04)DATA_6=1;
else DATA_6=0;convert=data&0x08;if(convert==0x08)DATA_7=1;
else DATA_5=0;convert=data&0x40;if(convert==0x40)DATA_6=1;
else DATA_6=0;convert=data&0x80;if(convert==0x80)DATA_7=1;
Trang 18void lcd_putchar( char data)
Trang 19if((P1IN & BIT1) == 0){
TA0CCTL1 = OUTMOD_7 + CCIE;
P1DIR |= BIT6 +BIT7 ;
P1DIR |= BIT4+ BIT5 ;
Trang 20P1DIR &= ~(BIT3 + BIT2 +BIT1) ; P1REN |= (BIT3 +BIT2 +BIT1 ); P1SEL |= (BIT6) ;
Trang 21TÀI LIỆU THAM KHẢO
www.diendanti.com
www.alldatasheet.com
www.diedandientuvietanam.net
google.com.vn