LỜI NÓI ĐẦU
Lời đầu tiên nhóm thực hiện đề tài xin cảm ơn thầy cô giáo chuyên ngành điện tử,
cảm ơn thầy Trương Ngọc Sơn đã hướng dẫn tận tình nhóm thực hiện đề tài trong quá trình
thực hiện đồ án này.
Trong mấy chục năm qua , khoa học máy tính và xử lý thông tin có những bước tiến
vược bậc và ngày càng có những đóng góp to lớn vào cuộc cách mạng khoa học kỹ thuật
hiện đại.
Đặc biệt sự ra đời và phát triển nhanh chóng của kỹ thuật số làm cho ngành điện tử
trở nên phong phú và đa dạng hơn Nó góp phần rất lớn trong việc đưa kỹ thuật hiện đại
thâm nhập rộng rãi vào mọi lĩnh vực của hoạt động sản xuất ,kinh tế và đời sống xã hội
Từ những hệ thống máy tính lớn đến nhứng hệ thống máy tính cá nhân , từ những
việc điều khiển các máy công nghiệp đến các thiết bị phục vụ đời sống hằng ngày của con
người.
Với mong muốn tìm hiểu , ứng dụng những tiến bộ của khoa học kỹ thuật hiện đại
vào phục vụ sản xuất và phục vụ đời sống con người, nhóm đã thực hiện đề tài : “ĐIỀU
KHIỂN ĐỘNG CƠ DC GIAO TIẾP MÁY TÍNH”. Do trình độ hiểu biết còn hạn chế , nên
dù cố gắng hết sức trong việc thực hiện đề tài nhưng cũng không tránh khỏi thiếu sót .
Mong thầy cô và bạn chỉ bảo thêm để nhóm hiểu vấn đề được sâu sắc hơn
Phần A Giới Thiệu . Trang
Lời nói đầu 3
Mục lục .4
Liệt kê bảng .5
Liệt kê hình 5
Phần B . Nội Dung
Chương 1: Cơ sở lý thuyết
1.1 Giới thiệu vi điều khiển ATMEGA32 8
1.2 Giới thiệu LCD 27
1.3 Giới thiệu động cơ điện 1 chiều và điều khiển bẳng PWM 34
1.4 Giới thiệu Encoder 36
Chương 2: Thiết kế và thi công mạch
2.1 Thiết kế mạch 39
2.1.1 Thiết kế sơ đồ nguyên lý 40
2.1.2 Thiết kế sơ đồ mạch in .42
2.2 Viết chương trình cho vi điều khiển 43
Chương 3: Thiết kế chương trình điều khiển trên máy tính
3.1 Chương trình điều khiển trên máy tính 46
Chương 4: Kết luận
4.1 Kết quả đạt được 49
4.2 Nhận xét sản phẩm 49
4.3 Hướng phát triển 50
4.4 Phụ lục và Tài liệu tham khảo 50
62 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2694 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Điều khiển động cơ DC giao tiếp máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phần A
GIỚI THIỆU
Điều khiển động cơ dc giao tiếp máy tính Trang 2
Đồ án môn học 2
LỜI NÓI ĐẦU
Lời đầu tiên nhóm thực hiện đề tài xin cảm ơn thầy cô giáo chuyên ngành điện tử,
cảm ơn thầy Trương Ngọc Sơn đã hướng dẫn tận tình nhóm thực hiện đề tài trong quá trình
thực hiện đồ án này.
Trong mấy chục năm qua , khoa học máy tính và xử lý thông tin có những bước tiến
vược bậc và ngày càng có những đóng góp to lớn vào cuộc cách mạng khoa học kỹ thuật
hiện đại.
Đặc biệt sự ra đời và phát triển nhanh chóng của kỹ thuật số làm cho ngành điện tử
trở nên phong phú và đa dạng hơn Nó góp phần rất lớn trong việc đưa kỹ thuật hiện đại
thâm nhập rộng rãi vào mọi lĩnh vực của hoạt động sản xuất ,kinh tế và đời sống xã hội
Từ những hệ thống máy tính lớn đến nhứng hệ thống máy tính cá nhân , từ những
việc điều khiển các máy công nghiệp đến các thiết bị phục vụ đời sống hằng ngày của con
người.
Với mong muốn tìm hiểu , ứng dụng những tiến bộ của khoa học kỹ thuật hiện đại
vào phục vụ sản xuất và phục vụ đời sống con người, nhóm đã thực hiện đề tài : “ĐIỀU
KHIỂN ĐỘNG CƠ DC GIAO TIẾP MÁY TÍNH”. Do trình độ hiểu biết còn hạn chế , nên
dù cố gắng hết sức trong việc thực hiện đề tài nhưng cũng không tránh khỏi thiếu sót .
Mong thầy cô và bạn chỉ bảo thêm để nhóm hiểu vấn đề được sâu sắc hơn
TP.HCM, Tháng 11 năm 2011
Điều khiển động cơ dc giao tiếp máy tính Trang 3
Đồ án môn học 2
MỤC LỤC
************&&&***********
Phần A …..……………Giới Thiệu ................... … Trang
Lời nói đầu ………………………………………………………………… 3
Mục lục ……………………………………………………………………...4
Liệt kê bảng………………………………………………………………….5
Liệt kê hình…………………………………………………………………..5
Phần B ………………... Nội Dung
Chương 1: Cơ sở lý thuyết
1.1 Giới thiệu vi điều khiển ATMEGA32 ………………………………..8
1.2 Giới thiệu LCD………………………………………………………..27
1.3 Giới thiệu động cơ điện 1 chiều và điều khiển bẳng PWM …………..34
1.4 Giới thiệu Encoder……………………………………………………..36
Chương 2: Thiết kế và thi công mạch
2.1 Thiết kế mạch ……………………………………………..…………..39
2.1.1 Thiết kế sơ đồ nguyên lý ………………………………………40
2.1.2 Thiết kế sơ đồ mạch in ………………………………………...42
2.2 Viết chương trình cho vi điều khiển ……………………………..…….. 43
Chương 3: Thiết kế chương trình điều khiển trên máy tính
3.1 Chương trình điều khiển trên máy tính …………………………………46
Chương 4: Kết luận
4.1 Kết quả đạt được ……………………………………………………….. 49
4.2 Nhận xét sản phẩm …………………………………………………….. 49
4.3 Hướng phát triển ……………………………………………………….. 50
4.4 Phụ lục và Tài liệu tham khảo…………………………………………50
Điều khiển động cơ dc giao tiếp máy tính Trang 4
Đồ án môn học 2
Liệt kê bảng
Bảng 1.1 - Chức năng các chân PORTA
Bảng 1.2 - Chức năng các chân PORTB
Bảng 1.3 - Chức năng các chân PORTC
Bảng 1.4 - Chức năng các chân PORTD
Bảng 1.5 – Lựa chọn nguồn xung
Bảng 1.6 – Chức năng các chân LCD
Bảng 1.7 – RS – R/W LCD
Bảng 1.8 – Tập lệnh LCD
Bảng 1.9 – Phạm vi hoạt động của LCD
Bảng 1.10 – Miền làm việc bình thường của LCD
Liệt kê hình
Hình 1.1 – Sơ đồ cấu trúc bên trong Atnega32
Hình 1.2 – Sơ đồ chân của ATmega32
Hình 1.3 – Sơ đồ khối hệ thống xung nhịp
Hình 1.4 – Sơ đồ khối của Timer/Counter0
Hình 1.5 - Giản đồ thời gian của chế độ PWM
Hình 1.6 - Sơ đồ khối của timer/counter1
Hình 1.7 - Sơ đồ khối của timer/counter2
Hình 1.8 - Giản đồ thời gian của chế độ CTC
Hình 1.9 - Sơ đồ khối USART
Hình 1.10 – Hình dạng LCD
Hình 1.11 – Sơ đồ chân LCD
Hình 1.12 – Các khối cơ bản của LCD
Hình 1.13 – Nguyên tắc hoạt động của động cơ điện 1 chiều
Hình 1.14 - Điều chỉnh độ rộng xung PWM.
Hình 1.15 - Dạng sóng dòng và áp trên động cơ.
Hình 1.16 - Encoder
Điều khiển động cơ dc giao tiếp máy tính Trang 5
Đồ án môn học 2
Hình 1.17- Cấu tạo Encoder
Hình 1.18 -Tín hiệu thu được từ Encoder 2 kênh
Hình 2.1-Sơ đồ nguyên lý mạch vi điều khiển
Hình 2.2-Sơ đồ nguyên lý mạch động lực
Hình 2.3-Sơ đồ mạch in mạch vi điều khiển
Hình 2.4 - Sơ đồ mạch in động lực
Hình 2.5 – Giao diện chương trình điều khiển
Hình 2.6– Mạch đang hoạt động
Điều khiển động cơ dc giao tiếp máy tính Trang 6
Đồ án môn học 2
Phần B
NỘI DUNG
Điều khiển động cơ dc giao tiếp máy tính Trang 7
Đồ án môn học 2
Chương 1: Cơ Sở Lý Thuyết
1.1. Giới thiệu về vi điều khiển ATmega32
ATmega32 là vi điều khiển chuẩn CMOS 8 bit tiết kiệm năng lượng, được chế tạo dựa
trên cấu trúc AVR RISC (Reduced Instruction Set Computer), đây là cấu trúc có tốc độ xử
lý cao hơn nhiều so với cấu trúc CISC (Complex Instruction Set Computer). Tần số hoạt
động của vi điều khiển AVR bằng với tần số của thạch anh, trong khi với họ vi điều khiển
theo cấu trúc CISC như họ 8051 thì tần số hoạt động bằng tần số thạch anh chia cho 12.
Hầu hết các lệnh được thực thi trong một chu kỳ xung nhịp, do đó ATmega32 có thể đạt
được tốc độ xử lý đến một triệu lệnh mỗi giây (với tần số 1MHz). Đặc điểm này cho phép
người thiết kế có thể tiết kiệm tối đa mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử
lý.
Sau đây là các đặc tính của ATmega32:
- Hiệu năng cao, tiêu thụ ít năng lượng.
- Kiến trúc RISC:
o 131 lệnh – hầu hết các lệnh thực thi trong một chu kỳ máy.
o 32 thanh ghi 8 bit đa năng.
o Tốc độ thực hiện lên tới 16 triệu lệnh trong 1 giây (tần số 16MHz).
- Các bộ nhớ chương trình và bộ nhớ dữ liệu:
o 32Kbyte bộ nhớ Flash có khả năng tự lập trình trong hệ thống.
Có thể thực hiện được 10.000 lần ghi xóa.
o Vùng mã Boot tùy chọn với những bit khóa độc lập.
o Lập trình trong hệ thống bởi chương trình on-chip boot.
o Thao tác đọc ghi trong khi nghỉ.
o 1024 Byte EEPROM.
Có thể thực hiện 100.000 lần ghi xóa.
o 2Kbyte SRAM nội.
o Lập trình khóa an toàn phần mềm.
- Ghép nối ngoại vi:
o 2 bộ định thời/bộ đếm 8 bit với bộ chia tần số độc lập và chế độ so sánh.
Điều khiển động cơ dc giao tiếp máy tính Trang 8
Đồ án môn học 2
o 1 bộ định thời/bộ đếm 16 bit với bộ chia tần số, chế độ so sánh và chế độ bắt
mẫu (Capture).
o Bộ đếm thời gian thực với bộ dao động độc lập.
o Bốn kênh PWM.
o Bộ ADC 8 kênh 10 bit.
o Bộ truyền dữ liệu đồng bộ/bất đồng bộ USART.
o Bộ truyền dữ liệu chuẩn SPI.
o Watchdog timer khả trình với bộ dao động nội riêng biệt.
o Bộ so sánh Analog.
- Các đặc điểm khác:
o Power-on Reset và phát hiện Brown-out khả trình.
o Bộ tạo dao động nội.
o Nguồn ngắt nội và ngoại.
o 6 chế độ ngủ: Idle, ADC noise reduction, Power-save, Power-down, Standby
và Extended Standby.
- Ngõ vào/ra: có 32 ngõ vào ra.
- Điện áp hoạt động:
o 2.7V – 5.5V đối với ATmega32L.
o 4.5V – 5.5V đối với ATmega32.
- Tần số hoạt động:
o 0 – 8MHz đối với ATmega32L.
o 0 – 16MHz đối với ATmega32.
Điều khiển động cơ dc giao tiếp máy tính Trang 9
Đồ án môn học 2
1.1.1. Cấu trúc bên trong ATmega32
Hình 1.1 – Sơ đồ cấu trúc bên trong Atnega32
Điều khiển động cơ dc giao tiếp máy tính Trang 10
Đồ án môn học 2
1.1.2. Sơ đồ chân của ATmega32
Hình 1.2 – Sơ đồ chân của ATmega32
- GND: chân nối mass.
- VCC: điện áp nguồn.
- Port A (PA0…PA7): ngõ vào/ra Port A.
Các chân Port A cũng là ngõ vào analog của bộ chuyển đổi A/D
Chân Chức năng
PA7 ADC7 (Ngõ vào ADC 7)
PA6 ADC6 (Ngõ vào ADC 6)
PA5 ADC5 (Ngõ vào ADC 5)
PA4 ADC4 (Ngõ vào ADC 4)
PA3 ADC3 (Ngõ vào ADC 3)
PA2 ADC2 (Ngõ vào ADC 2)
PA1 ADC1 (Ngõ vào ADC 1)
Điều khiển động cơ dc giao tiếp máy tính Trang 11
Đồ án môn học 2
PA0 ADC0 (Ngõ vào ADC 0)
Bảng 1.1 Chức năng các chân PORTA
- Port B (PB0…PB7): ngõ vào/ra Port B.
Các chức năng khác của Port B:
Chân Chức năng
PB7 SCK (Chân Clock của SPI)
PB6 MISO (Master Input / Slave Output của SPI)
PB5 MOSI (Master Output / Slave Input của SPI)
PB4 SS (Ngõ vào chọn Slave của SPI)
PB3 AIN1 (Ngõ vào Negative của bộ so sánh analog).
OC0 (Ngõ ra so sánh của Timer/Counter 0).
PB2 AIN0 (Ngõ vào Possitive của bộ so sánh analog).
INT2 (Ngõ vào ngắt ngoài 2)
PB1 T1 (Ngõ vào của bộ đếm ngoài counter 1)
PB0 T0 (Ngõ vào của bộ đếm ngoài counter 0)
XCK (Chân I/O Clock của USART)
Bảng 1.2 Chức năng các chân PORTB
- Port C (PC0…PC7): ngõ vào/ra Port C.
Các chức năng khác của Port C:
Chân Chức năng
PC7 TOSC2 (Chân 2 bộ dao động của Timer)
PC6 TOSC1 (Chân 1 bộ dao động của Timer)
PC5 TDI (Chân data in Test JTAG)
PC4 TDO (Chân data out Test JTAG)
Điều khiển động cơ dc giao tiếp máy tính Trang 12
Đồ án môn học 2
PC3 TMS (Chân chọn Mode Test JTAG)
PC2 TCK (Chân Clock Test JTAG)
PC1 SDA (Chân data I/O của giao thức Two-wire)
PC0 SCL (Chân clock của giao thức Two-wire)
Bảng 1.3 Chức năng các chân PORTC
- Port D (PD0…PD7): ngõ vào/ra Port D.
Các chức năng khác của Port D:
Chân Chức năng
PD7 OC2 (Ngõ ra so sánh của Timer/Counter2)
PD6 ICP1 (Chân bắt mẫu của Timer/Counter1)
PD5 OC1A (Ngõ ra so sánh A của Timer/Counter1)
PD4 OC1B (Ngõ ra so sánh B của Timer/Counter1)
PD3 INT1 (Ngõ vào ngắt ngoài 1)
PD2 INT0 (Ngõ vào ngắt ngoài 0)
PD1 TXD (Ngõ ra USART)
PD0 RXD (Ngõ vào USART)
Bảng 1.4 Chức năng các chân PORTD
- Reset: Chân ngõ vào. Khi đặt vào chân này điện áp mức thấp trong thời gian xác
định (xem trong datasheet) thì sẽ reset chương trình. Nếu thời gian ngắn hơn thì việc
reset không thành công.
- XTAL1: ngõ vào khuếch đại dao động đảo và cũng là ngõ vào mạch tạo xung nội.
- XTAL2: ngõ ra của mạch khuếch đại dao động đảo.
- AVCC: là chân nguồn cấp cho Port A và bộ chuyển đổi A/D. Nên nối chân này với
chân VCC ngay cả khi không sử dụng ADC. Nếu dùng ADC thì nên nối chân này
với chân VCC qua 1 tụ lọc thông thấp.
Điều khiển động cơ dc giao tiếp máy tính Trang 13
Đồ án môn học 2
- AREF: chân tham chiếu điện áp analog của bộ chuyển đổi A/D.
1.1.3. Xung nhịp của hệ thống và việc lựa chọn xung nhịp
Vi điều khiển ATmega32 có nhiều lựa chọn trong việc thiết lập xung nhịp cho hệ
thống. Xung nhịp có thể do mạch tạo dao động bên trong vi điều khiển, cũng có thể do
mạch dao động bên ngoài.
Hình 1.3 – Sơ đồ khối hệ thống xung nhịp
Việc lựa chọn nguồn xung nhịp được thực hiện thông qua quá trình thiết lập các bit
CKSEL3…0 (lựa chọn nguồn xung cũng như cả tần số của nguồn xung).
Các nguồn xung CKSEL3…0
Extenal Crystal / Ceramic Resonator 1111 – 1010
Điều khiển động cơ dc giao tiếp máy tính Trang 14
Đồ án môn học 2
External Low-frequency Crystal 1001
External RC Oscillator 1000 – 0101
Calibrated Internal RC Oscillator 0100 – 0001
External Clock 0000
Bảng 1.5 Lựa chọn nguồn xung
1.1.4. Giới thiệu về Timer/Counter của ATmega32
1.1.4.1. Timer/Counter0
Các chức năng chính:
- Kênh đếm so sánh đơn.
- Xóa giá trị timer khi đạt tới giá trị so sánh (Auto Reload).
- Chế độ PWM.
- Đếm sự kiện bên ngoài.
- Bộ chia tần số 10bit.
- Ngắt khi tràn hoặc tại giá trị so sánh.
Hình 1.4 – Sơ đồ khối của Timer/Counter0
Điều khiển động cơ dc giao tiếp máy tính Trang 15
Đồ án môn học 2
Các chế độ hoạt động của Timer/Counter0:
- Chế độ bình thường.
- Chế độ xóa giá trị Timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM.
Trong đề tài này, Timer/Counter0 được dùng để tạo xung PWM. Vì thế, phần này chỉ
đề cập đến chế độ hiệu chỉnh PWM của Timer/Counter0.
Chế độ hiệu chỉnh xung PWM giúp tạo ra dạng xung PWM với độ phân giải cao. Chế
độ này dựa trên hoạt động dual-slope (dạng hai sườn lên xuống theo giá trị thanh ghi). Bộ
đếm đếm liên tục từ giá trị BOTTOM đến MAX rồi đếm từ MAX xuống BOTTOM. Nếu
chọn ngõ ra dạng không đảo (non-inverting), chân OC0 ở mức 0 tại giá trị so sánh giữa
OCR0 với TCNT0 khi đếm lên, và ở mức 1 tại giá trị so sánh khi đếm xuống. Nếu chọn
ngõ ra dạng đảo (inverting), chân OC0 sẽ hoạt động ngược lại. Chế độ hoạt động dual-
slope có tần số thấp hơn so với chế độ single-slope. Tuy nhiên, do đặc tính đối xứng nên
kiểu dual-slope thích hợp hơn cho các ứng dụng điều khiển động cơ.
Độ phân giải của chế độ PWM này là 8bit. Bộ đếm sẽ tăng dần đến giá trị MAX. Khi
đạt tới MAX, bộ đếm sẽ đảo chiều và đếm xuống tới BOTTOM. Như vậy, một chu kỳ của
timer bằng thời gian giữa hai lần giá trị TCNT0 đạt MAX.
Hình 1.5 - Giản đồ thời gian của chế độ PWM
Điều khiển động cơ dc giao tiếp máy tính Trang 16
Đồ án môn học 2
Cờ tràn TOV0 được set mỗi lần bộ đếm đạt tới giá trị BOTTOM. Khi timer đạt tới giá
trị này, ta có thể sử dụng để kích hoạt chương trình ngắt qua cờ báo ngắt.
Xung PWM được đưa ra trên chân OC0. Việc thiết lập ngõ ra dạng đảo (inverting) hay
không đảo (non-inverting) được thực hiện qua hai bit COM01 và COM00. Giá trị thực sự
của OC0 chỉ có thể thấy được khi ta đặt OC0 là ngõ ra.
Tần số của xung PWM được tính toán dựa vào công thức sau:
Trong đó, N là giá trị của bộ chia tần số (1, 8, 64, 256,1024).
Thanh ghi OCR0 sẽ đạt tới cực trị (cực đại hoặc cực tiểu) thay cho các trường hợp đặc
biệt khi phát ra dạng xung PWM. Trong chế độ không đảo, nếu OCR0 được đặt giá trị
BOTTOM, ngõ ra luôn ở mức thấp và nếu OCR0 được đặt giá trị MAX thì ngõ ra luôn ở
mức cao. Đối với chế độ đảo thì hoạt động ngược lại.
1.1.4.2. Timer/Counter1
Các chức năng chính:
- Thiết kế 16bit thực sự (cho phép tạo ra xung PWM 16bit).
- 2 bộ so sánh ngõ ra độc lập.
- 1 bộ bắt mẫu từ ngõ vào.
- 1 bộ giảm nhiễu ngõ vào.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Tạo tần số.
- Tạo xung PWM có thể thay đổi giá trị.
- Đếm sự kiện ngoài.
- 4 nguồn ngắt độc lập (TOV1, OCF1A, OCF1B và ICF1).
Điều khiển động cơ dc giao tiếp máy tính Trang 17
Đồ án môn học 2
Hình 1.6 - Sơ đồ khối của timer/counter1
Các chế độ hoạt động:
- Chế độ bình thường.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM (Phase Correct PWM).
- Chế độ Phase and Frequency Correct PWM.
- Giới thiệu về chế độ đếm sự kiện ngoài:
- Chân ngõ vào T1: tác động cạnh lên hoặc xuống (tùy lựa chọn).
Trong chế độ này, bộ đếm luôn đếm lên, khi đạt tới giá trị MAX (0xFFFF) thì tự động
reset về BOTTOM (0x0000).
1.1.4.3. Giới thiệu timer/counter2
Các chức năng chính:
Điều khiển động cơ dc giao tiếp máy tính Trang 18
Đồ án môn học 2
- Kênh đếm so sánh đơn.
- Xóa timer khi đạt tới giá trị so sánh (Auto Reload).
- Chế độ PWM.
- Đếm sự kiện bên ngoài.
- Bộ chia tần số 10bit.
- Ngắt khi tràn hoặc tại giá trị so sánh.
Hình 1.7 - Sơ đồ khối của timer/counter2
Các chế độ hoạt động của Timer/Counter2:
- Chế độ bình thường.
- Chế độ xóa timer khi đạt tới giá trị so sánh.
- Chế độ Fast PWM.
- Chế độ PWM.
Giới thiệu chế độ xóa giá trị Timer khi đạt tới giá trị so sánh (CTC):
Trong chế độ này, thanh ghi OCR2 được dùng để thiết lập độ phân giải cho bộ đếm.
Khi TCNT đạt tới giá trị bằng với OCR2, bộ đếm được xóa về 0. Thanh ghi OCR2 xác
định giá trị lớn nhất và cũng là độ phân giải của Timer2.
Điều khiển động cơ dc giao tiếp máy tính Trang 19
Đồ án môn học 2
Hình 1.8 - Giản đồ thời gian của chế độ CTC
Khi bộ đếm đạt tới giá trị TOP, cờ OCF2 kích hoạt chương trình ngắt. Khi đã được kích
hoạt, chương trình ngắt có thể được sử dụng để cập nhật giá trị TOP.
Chu kỳ của Timer trong chế độ CTC có thể tính như sau:
Với công thức trên, ta có thể tính thời gian lấy mẫu như sau: Timer 8bit, giá trị MaxVal
đặt trong OCR = 155, nguồn xung clock 16MHz, chia tần số 1024 thì thời gian lấy mẫu là
10ms.
1.1.5. Bộ truyền nhận dữ liệu USART
USART (The Universal Synchronous and Asynchronous serial Receiver and
Transmitter – Bộ truyền nhận nối tiếp tổng hợp đồng bộ và bất đồng bộ)
Đặc điểm:
- Hoạt động song công.
- Cho phép làm việc ở các chế độ : đồng bộ hay bất đồng bộ.
- Bộ phát tốc độ baud (BAUD RATE) với độ phân giải cao.
- Hỗ trợ Format khung truyền nối tiếp : 5,6,7,8, hay 9 Data Bits và 1 hoặc 2 bit Stop.
- Hỗ trợ kiểm tra bit chẵn , lẻ bằng phần cứng.
- Có thể phát hiện Data bị tràn , khung truyền bị lỗi.
- Có 3 cờ báo ngắt : TX complete, TX Data Register Empty và RX complete.
- Có chế độ truyền thông đa xử lý.
- Double speed (chỉ áp dụng cho chế độ truyền thông bất đồng bộ).
Điều khiển động cơ dc giao tiếp máy tính Trang 20
Đồ án môn học 2
Hình 1.9 - Sơ đồ khối USART
Trong sơ đồ trên, có ba khối nằm trong phần khung vuông là ba phần chính của
USART: bộ phát xung, bộ truyền và bộ nhận. Thanh ghi điều khiển được sử dụng chung
cho các thành phần. Bộ phát xung tạo ra xung nhịp cho bộ phát tốc độ baud (khi truyền
nhận bất đồng bộ), hoặc điều khiển để nhận xung clock bên ngoài khi truyền nhận đồng bộ.
Bộ truyền bao gồm một bộ đệm ghi đơn (single write buffer), thanh ghi dịch nối tiếp (serial
Shift Register), bộ phát parity và bit điều khiển sử dụng cho nhiều khung truyền khác nhau.
Bộ nhận phức tạp hơn do có phần phục hồi xung và dữ liệu (clock and data recovery).
Thành phần phục hồi này sử dụng trong khi nhận dữ liệu bất đồng bộ. Ngoài hai phần phục
hồi, bộ nhận còn có phần kiểm tra parity, bit điều khiển, thanh ghi dịch và bộ đệm nhận hai
Điều khiển động cơ dc giao tiếp máy tính Trang 21
Đồ án môn học 2
mức thấp (UDR). Bộ nhận hỗ trợ các chuẩn khung truyền giống như bộ phát, và có thể phát
hiện lỗi khung truyền, tràn dữ liệu hoặc lỗi parity.
Các thanh ghi của USART:
- USART I/O Data Register –UDR
UDR là thanh ghi bộ đệm truyền(TXB) và nhận(RXB) (chúng có cùng 1 địa chỉ
vật lý) có chức năng lưu trữ Data.
o TXB: Thanh ghi bộ đệm truyền. Khi ta muốn send data đến PC thì trước hết
data đó phải được nạp vào TXB.
Muốn ghi DATA vào TXB thì bit UDRE trong thanh ghi UCSRA phải được
set (UDRE=[1]: cho phép ghi vào TXB). Data đó được ghi vào UDR cho đến khi
UDRE=[0]. Khi Data đang được vào TXB, và Transmitter được phép thì
Transmitter sẽ Load Data đó vào thanh ghi dịch khi thanh ghi dịch bị trống
(rỗng). Sau đó Data được truyền nối tiếp trên chân TxD (PD0) của MCU.
o RXB: Thanh ghi bộ đệm nhận. Khi PC send 1 gói Data đến MCU thì gói
Data đó nằm trong RXB do đó cần phải chuyển Data trong RXB vào 1 thanh
R (vd: R16).
RXB gồm có 2 mức FIFO. FIFO sẽ thay đổi trạng thái của nó bất cứ khi nào
RXB được truy xuất. Vì trạng thái này của RXD mà không được dùng những
lệnh (SBI, CBI) ở đây. Cẩn thận với các lệnh kiểm tra (SBIC và SBIS), vì chúng
cũng sẽ làm thay đổi trạng thái của FIFO.
- USART Control and Status Register A – UCSRA
(Thanh ghi điều khiển và trạng thái A)
o Bit 7 – RXC: USART Receive Complete
Cờ RXC =[1] khi có data chưa được đọc trong RXB và RXC =[0] khi
RXB rỗng (không còn bất kì data nào trong RXB chưa đọc).
Điều khiển động cơ dc giao tiếp máy tính Trang 22
Đồ án môn học 2
Cờ RXC có thể được dùng để tạo ra ngắt khi nhận xong (kết hợp với bit
RXCIE).
o Bit 6-TXC: USART Transmit Complete
Cờ TXC =[1] khi toàn bộ data trong thanh ghi dịch truyền đã dược dịch
ra ngoài và không còn data mới nào xuất hiện trong TXB (UDR). TXC tự
động được xóa nếu có 1 ngắt khi truyền xong được thực thi hay nó cũng có
thể được xóa bằng cách ghi vào vị trí bit của nó.
Cờ TXC có thể được dùng để tạo ra ngắt khi truyền xong (kết hợp với bit
RXCIE).
o Bit 5-UDRE: USART Data Register Empty
Cờ UDRE chỉ thị nếu TXR (UDR) sẵn sàng để nhận dữ liệu mới. Nếu
UDRE=[1] thì bộ đệm trống, vì thế mà bộ đệm sẵn sàng nhận dữ liệu mới.
Cờ UDRE có thể tạo ra 1 ngắt khi data trong thanh ghi trống rỗng (kết hợp
với bit UDRIE).
UDRE = [1] sau khi reset để chỉ thị rằng bộ truyền đã sẵn sàng.
o Bit 4-FE: Frame Error
FE =[1] nếu có lỗi khung truyền khi nhận.
o Bit3-DOR: Data OverRun
DOR=[1] nếu dữ liệu bị tràn.
o Bit 2-PE: Parity Error
PE=[1] nếu có lỗi kiểm tra chẵn, lẻ.
o Bit 1-U2X: Double the USART Transmission Speed
Chú ý : U2X chỉ có tác dụng đối với chế độ truyền bất đồng bộ.
U2X=[0] khi sử dụng chế độ truyền đồng bộ.
U2X=[1] sẽ làm giảm ước số của bộ chia tốc độ baud từ 16 xuống còn 8
có tác dụng tăng tốc độ truyền đối với hoạt động bất đồng bộ.
o Bit 0-MPCM: Multi-processor Communication Mode
Bit này cho phép chế độ truyền thông đa xử lý.
Khi MPCM=[1] thì tất cả các dữ liệu được nhận vào bởi bộ nhận USART
mà không có địa chỉ sẽ được bỏ qua. Việc set bit MPCM không ảnh hưởng
đến bộ truyền.
- USART Control and Status Register B – UCSRB
Điều khiển động cơ dc giao tiếp máy tính Trang 23
Đồ án môn học 2
o Bit 7-RXCIE: RX complete Interrupt Enable
RXCIE=[1] cho phép nhận xảy ra ngắt (bằng cờ RXC). USART nhận
hoàn tất sẽ tạo ra 1 ngắt khi chỉ khi RXCIE=[1], ngắt toàn cục được phép và
RXC =[1] (trong UCSRA).
o Bit 6-TXCIE: TX complete Interrupt Enable
TXCIE=[1] cho phép truyền xảy ra ngắt (bằng cờ TXC). USART truyền
hoàn tất sẽ tạo ra 1 ngắt khi chỉ khi TXCIE=[1], ngắt toàn cục được phép và
TXC =[1] (trong UCSRA).
o Bit 5-UDRIE: USART Data Register Empty Interrupt Enable
UDRIE=[1] cho phép ngắt khi Data trong thanh ghi trống. Ngắt này chỉ
được tạo ra khi UDRIE=[1], ngắt toàn cục được phép và UDRE =[1] (trong
UCSRA).
o Bit 4-RXEN: Receive Enable
RXEN=[1]: cho phép nhận.
o Bit 3-TXEN : Transmit Enable
TXEN=[1]: cho phép truyền.
o Bit 2-UCSZ2: character size
UCSZ2 kết hợp với UCSZ1:0 trong thanh ghi UCSRC dùng để thiết lập
khung dữ liệu (số Data_Bit có trong 1 khung truyền. VD: 5bit, 6bit, 8bit…)
truyền và nhận .
o Bit 1-RXB: Receive Data bit 8.
RXB chứa bit thứ 9 nhận về khi hoạt động ở chế độ khung truyền 9 bit.
Nó phải được đọc trước khi đọc những bit thấp từ UDR.
o Bit 0-TXB: Transmit Data bit 8.
TXB chứa bit thứ 9 sẽ được truyền đi khi hoạt động ở chế độ khung
truyền 9 bit. Nó phải được ghi trước khi ghi những bit thấp vào UDR.
- SART Control and Status Register C – UCSRC
Điều khiển động cơ dc giao tiếp máy tính Trang 24
Đồ án môn học 2
o Bit 7 – URSEL: Register Select
Bit nay dùng để lựa chọn thanh ghi UCSRC hay UBRRH.
URSEL=[1]: UCSRC
URSEL=[0]: UBBRH
o Bit 6 – UMSEL: USART Mode Select (lựa chọn truyền đồng bộ hay bất
đồng bộ)
o Bit 5:4 – UPM 1:0: Parity Mode (lựa chọn bit chẵn – lẻ)
o Bit 3 – USBS: stop bit select
o Bit 2:1-UCSZ 1:0: character size (Format khung truyền)
o Bit 0 – UCPOL: Clock Polarity
Bit này chỉ dùng cho chế độ truyền đồng bộ.
Điều khiển động cơ dc giao tiếp máy tính Trang 25
Đồ án môn học 2
UCPOL = [0]: chọn chế độ truyền bất đồng bộ.
UCPOL được thiết lập liên quan đến giữa dữ liệu đầu ra thay đổi và mẫu
dữ liệu vào và xung đồng bộ (XCK).
- USART Baud Rate Registers – UBRRL and UBRRH
o Bit 15 - URSEL: Register Select
Bit nay dùng để lựa chọn thanh ghi UCSRC hay UBRRH.
URSEL=[1]: UCSRC
URSEL=[0]: UBBRH
o Bit 14:12: Reserved Bits
o Bit 11:0: UBRR 11:0: USART Baud Rate Register
Dùng để chọn tốc độ BAUD
Điều khiển động cơ dc giao tiếp máy tính Trang 26
Đồ án môn học 2
1.2. Giới thiệu LCD HD44780
1.2.1.Hình dáng và kích thước
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1.6 là
hai loại LCD thông dụng.
Hình 1.10 – Hình dạng LCD
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong
lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số thứ tự và đặt tên
như hình 1.7
Hình 1.11 – Sơ đồ chân LCD
Điều khiển động cơ dc giao tiếp máy tính Trang 27
Đồ án môn học 2
1.2.2.Chức năng của các chân
Bảng 1.6 – Chức năng các chân LCD
* Ghi chú : Ở chế độ “đọc”, nghĩa là MPU sẽ đọc thông tin từ LCD thông qua các chân
DBx.
Còn khi ở chế độ “ghi”, nghĩa là MPU xuất thông tin điều khiển cho LCD thông qua
các chân DBx.
Điều khiển động cơ dc giao tiếp máy tính Trang 28
Đồ án môn học 2
1.2.3.Các khối cơ bản của LCD
Hình 1.12 – Các khối cơ bản của LCD
1.2.4.Các thanh ghi
- Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR (Instructor
Register) và thanh ghi dữ liệu DR (Data Register)
- Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua 8 đường
bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng. Người dùng chỉ việc
cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR. Nghĩa là, khi ta nạp vào thanh ghi
IR một chuỗi 8 bit, chíp HD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IR cung cấp và thực
hiện lệnh đó.
VD : Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7…DB0)
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
- Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAM
DDRAM hoặc CGRAM(ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM này gởi
ra cho MPU (ở chế độ đọc). Nghĩa là,khi MPU ghi thông tin vào DR, mạch nội bên trong
chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM. Hoặc khi thông tin về địa
Điều khiển động cơ dc giao tiếp máy tính Trang 29
Đồ án môn học 2
chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nội của HD44780 sẽ được
chuyển ra DR để truyền cho MPU.
Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2 thanh
ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối với hai chân RS
và R/W theo mục đích giao tiếp.
Bảng 1.7 – RS – R/W LCD
1.3.4.Tập lệnh của LCD
Các lệnh của LCD có thể chia thành 4 nhóm như sau :
• Các lệnh về kiểu hiển thị. VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài
dữ liệu (8 bit / 4 bit), …
• Chỉ định địa chỉ RAM nội.
• Nhóm lệnh truyền dữ liệu trong RAM nội.
• Các lệnh còn lại .
Điều khiển động cơ dc giao tiếp máy tính Trang 30
Đồ án môn học 2
Điều khiển động cơ dc giao tiếp máy tính Trang 31
Đồ án môn học 2
Điều khiển động cơ dc giao tiếp máy tính Trang 32
Đồ án môn học 2
Bảng 1.8 – Tập lệnh LCD
1.3.5. Đặc tính điện của các chân giao tiếp
LCD sẽ bị hỏng nghiêm trọng, hoặc hoạt động sai lệch nếu bạn vi phạm khoảng đặc
tính điện sau đây:
Bảng 1.9 – Phạm vi hoạt động của LCD
Đặc tính điện làm việc điển hình: (Đo trong điều kiện hoạt động Vcc = 4.5V đến
5.5V, T = -30 đến +75C)
Điều khiển động cơ dc giao tiếp máy tính Trang 33
Đồ án môn học 2
Bảng 1.10 – Miền làm việc bình thường của LCD
1.3.Giới thiệu về động cơ điện một chiều và điều khiển
tốc độ động cơ bằng phương pháp pwm
Động cơ điện một chiều là động cơ điện hoạt động với dòng điện một chiều. Động cơ điện một
chiều ứng dụng rộng rãi trong các ứng dụng dân dụng cũng như công nghiệp.
Cấu tạo của động cơ gồm có 2 phần: stato đứng yên và rôto quay so với stato. Phần cảm (phần
kích từ-thường đặt trên stato) tạo ra từ trường đi trong mạch từ, xuyên qua các vòng dây quấn của
phần ứng (thường đặt trên rôto). Khi có dòng điện chạy trong mạch phần ứng, các thanh dẫn phần
ứng sẽ chịu tác động bởi các lực điện từ theo phương tiếp tuyến với mặt trụ rôto, làm cho rôto
quay.
Tùy theo cách mắc cuộn dây roto và stato mà người ta có các loại động cơ sau:
- Động cơ kích từ độc lập: Cuộn dây kích từ (cuộn dây stato) và cuộn dây phần ứng
(roto) mắc riêng rẽ nhau, có thể cấp nguồn riêng biệt.
- Động cơ kích từ nối tiếp: Cuộn dây kích từ mắc nối tiếp với cuộn dây phần ứng.
Đối với loại động cơ kích từ độc lập, người ta có thể thay thế cuộn dây kích từ bởi nam châm vỉnh
cữu, khi đó ta có loại động cơ điện 1 chiều dùng nam châm vĩnh cữu. Đây là loại động cơ được sử
dụng trong đồ án này.
Điều khiển động cơ dc giao tiếp máy tính Trang 34
Đồ án môn học 2
Hình 1.13 - Nguyên tắc hoạt động của động cơ điện một chiều
1.3.1.Cơ chế sinh lực quay của động cơ điện một chiều
Khi có một dòng điện chảy qua cuộn dây quấn xung quanh một lõi sắt non, cạnh phía bên
cực dương sẽ bị tác động bởi một lực hướng lên, trong khi cạnh đối diện lại bị tác động
bằng một lực hướng xuống. Các lực này gây tác động quay lên cuộn dây, và làm cho
rotor quay. Để làm cho rotor quay liên tục và đúng chiều, một bộ cổ góp điện sẽ làm
chuyển mạch dòng điện sau mỗi vị trí ứng với 1/2 chu kỳ. Chỉ có vấn đề là khi mặt của
cuộn dây song song với các đường sức từ trường. Nghĩa là lực quay của động cơ bằng 0
khi cuộn dây lệch 90 độ so với phương ban đầu của nó, khi đó rotor sẽ quay theo quán
tính.
1.3.2.Phương pháp điều khiển tốc độ động cơ
Đối với loại động cơ kích từ độc lập dùng nam châm vĩnh cữu, để thay đổi tốc độ, ta
thay đổi điện áp cung cấp cho roto. Việc cấp áp 1 chiều thay đổi thường khó khăn, do vậy
người ta dùng phương pháp điều xung (PWM):
Điều khiển động cơ dc giao tiếp máy tính Trang 35
Đồ án môn học 2
Hình 1.14 - Điều chỉnh độ rộng xung PWM.
Phương pháp điều xung sẽ giữ tần số không đổi, thay đổi chu kì nhiệm vụ (Duty cycle) để
thay đổi điện áp trung bình đặt lên động cơ.
Điện áp trung bình:
in
on
dk VT
T
V =
Do đặc tính cảm kháng của động cơ, dòng qua động cơ là dòng liên tục, gợn sóng như sau:
Hình 1.15 - Dạng sóng dòng và áp trên động cơ.
1.4.Encoder
Encoder là thiết bị cảm biến được dùng phổ biến trong các ứng dụng cần
đo khoảng cách, vận tốc hoặc trong các ứng dụng cần độ chính xác cao. Hình dạng thực
tế của encoder như sau:
Điều khiển động cơ dc giao tiếp máy tính Trang 36
Đồ án môn học 2
Hình 1.16 - Encoder
1.4.1.Cấu tạo encoder
Cấu tạo của encoder gồm 1 vòng tròn, trên đó xẻ nhiều rãnh (còn gọi là đĩa),
và 1 mạch cảm biến để phát xung
Hình 1.17- Cấu tạo Encoder
Số rãnh trên đĩa gọi là độ phân giải hay số xung của encoder. Đối với encoder có độ
phân giải thấp (dưới 200 xung) thì đĩa này là đĩa thép, encoder như vậy còn gọi là
encoder quang. Đối với các encoder có độ phân giải cao, cỡ 1000 xung thì đĩa này được
làm bằng đĩa từ, gọi là encoder từ.
Điều khiển động cơ dc giao tiếp máy tính Trang 37
Đồ án môn học 2
Tín hiệu trả về của encoder có 3 kênh A, B và Z. Thông thường ta sử dụng 2 kênh A
và B là đủ thông tin cho quãng đường và chiều quay của encoder. Tín hiệu trả về trên 2
kênh này như sau :
Hình 1.18 -Tín hiệu thu được từ Encoder 2 kênh
Như vậy nếu ta đưa tín hiệu A vào chân ngắt ngoài và cấu hình là ngắt
cạnh lên, thì khi tín hiệu B ở mức cao là chiều quay thuận của encoder, khi
B ở mức thấp là chiều quay ngược lại.
Điều khiển động cơ dc giao tiếp máy tính Trang 38
Đồ án môn học 2
Chương 2: Thiết kế và thi công mạch
2.1 Thiết kế mạch
2.1.1.Sơ đồ khối
Điều khiển động cơ dc giao tiếp máy tính Trang 39
Đồ án môn học 2
2.1.2. Thiết kế sơ đồ nguyên lý cho tùng khối
2.1.2.1.Sơ đồ nguyên lý mạch điều khiển
Mạch vi điều khiển gồm có các linh kiện: Vi điều khiển ATMEGA 32, LCD, Thạch anh, tụ
hóa 10uF, Led, điện trở…
Hình 2.1-Sơ đồ nguyên lý mạch vi điều khiển
Điều khiển động cơ dc giao tiếp máy tính Trang 40
Đồ án môn học 2
2.1.2.2.Sơ đồ nguyên lý mạch động lực
Mạch động lực gồm có các linh kiện: Diode, Opto, Relay,Tip, Led…
Hình 2.2-Sơ đồ nguyên lý mạch động lực
Điều khiển động cơ dc giao tiếp máy tính Trang 41
Đồ án môn học 2
2.1.3. Thiết kế sơ đồ mạch in
Hình 2.3-Sơ đồ mạch in mạch vi điều khiển
Điều khiển động cơ dc giao tiếp máy tính Trang 42
Đồ án môn học 2
Hình 2.4 - Sơ đồ mạch in động lực
2.2.VIẾT CHƯƠNG TRÌNH CHO VI ĐIỀU KHIỂN
· HÀM MAIN
Điều khiển động cơ dc giao tiếp máy tính Trang 43
Đồ án môn học 2
· HÀM TRUYỀN DỮ LIỆU
Điều khiển động cơ dc giao tiếp máy tính Trang 44
Đồ án môn học 2
· HÀM NHẬN DỮ LIỆU
Điều khiển động cơ dc giao tiếp máy tính Trang 45
Đồ án môn học 2
Chương 3: Thiết kế chương trình điều
khiển trên máy tính
3.1.Thiết kế giao diện
Hình 2.5 – Giao diện chương trình điều khiển
v Hướng dẫn sử dụng chương trình
o Nhấn nút kết nối để chương trình kết nối với vi điều khiển.
o Sử dụng các nút nhấn trong bảng điều khiển để điều khiển trạng thái của
động cơ: tắt, mở, quay thuận, quay nghịch. Trạng thái này thể hiện ở hình
ảnh trạng thái động cơ bên phải
Điều khiển động cơ dc giao tiếp máy tính Trang 46
Đồ án môn học 2
o Sử dụng thanh trượt để diều khiển tốc độ động cơ.
o Đồng hồ bên trái hiển thị tốc độ đặt cho động cơ từ người dùng
o Bảng “ Thông số truyền lên ”bên phải hiển thị tốc độ thực của động cơ.
o Hình ảnh 2 led bên trên bảng điều khiển hiển thị trạng thái 2 led thuận nghịch
trên board công suất.
o Biểu đồ biểu diễn tốc độ động cơ hiển thị tốc độ động cơ dạng biểu đồ theo
thời gian. Quay con lăn trên chuột để phóng to, thu nhỏ biểu đồ.
Điều khiển động cơ dc giao tiếp máy tính Trang 47
Đồ án môn học 2
3.2.Thiết kế chương trình
Điều khiển động cơ dc giao tiếp máy tính Trang 48
Đồ án môn học 2
Chương 4: Kết luận
4.1.Kết quả đạt được
Hình ảnh sản phẩm
Hình 2.6– Mạch đang hoạt động
4.2.Nhận xét sản phẩm
Đề tài đã được hoàn thành đúng với những dự định ban đầu. Hệ thống điều khiển đã chạy
ổn định và cho phép giám sát và điều khiển động cơ tương đối chính xác. Tuy nhiên, với khả năng
của nhóm thì khối lượng công việc của đề tài là khá lớn và khá phức tạp nên đề tài vẫn chưa phát
triển thêm được một số tính năng cho hệ thống. Nhóm rất mong được sự chỉ bảo, đóng góp ý kiến
của các thầy cô giáo và những người có chuyên môn.
Điều khiển động cơ dc giao tiếp máy tính Trang 49
Đồ án môn học 2
4.3.Hướng phát triển đề tài
Hệ thống điều khiển đã chạy tốt với động cơ DC 12V công suất nhỏ. Trên cơ sở đó,
đề tài nên được phát triển theo những hướng sau:
- Điều khiển động cơ công suất lớn (vài kW).
- Phát triển hệ thống điều khiển và giám sát động cơ qua web.
4.4.Phụ lục và tài liệu tham khảo
4.4.1.Phụ lục
v Chương trình cho vi điều khiển
#include
#include
// Alphanumeric LCD Module functions
#include
static unsigned int count,t=0;
unsigned char status,data;
void lcd_putnum(unsigned int x);
// External Interrupt 2 service routine
unsigned char i=0;
unsigned int pulse;
unsigned int speedDC;
#ifndef RXB8
#define RXB8 1
#endif
#ifndef TXB8
#define TXB8 0
#endif
#ifndef UPE
#define UPE 2
#endif
#ifndef DOR
#define DOR 3
#endif
#ifndef FE
#define FE 4
#endif
#ifndef UDRE
#define UDRE 5
#endif
#ifndef RXC
Điều khiển động cơ dc giao tiếp máy tính Trang 50
Đồ án môn học 2
#define RXC 7
#endif
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
void USART_TXD(unsigned char data)
{
while(!(UCSRA&(1<<5))) ;
UDR=data;
}
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
//unsigned char status,data;
unsigned char n=0,tam;
status=UCSRA;
data=UDR;
if(data>100)
{
if(data==101)
{
PORTD.6=0;
}
if(data==102)
{
PORTD.6=1;
}
if(data==103)
{
PORTD.6^=1;
OCR2=0;
}
if(data==200)
{
int x=20000 ;
USART_TXD(255);
USART_TXD(x);
USART_TXD(x>>8);
Điều khiển động cơ dc giao tiếp máy tính Trang 51
Đồ án môn học 2
}
if(data==201)
{
int y=20001 ;
USART_TXD(255);
USART_TXD(y);
USART_TXD(y>>8);
}
}
else
{
tam=(data*255)/100;
OCR2=tam;
}
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0)
{
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
#endif
rx_buffer_overflow=1;
}
}
}
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index++];
#if RX_BUFFER_SIZE != 256
if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#endif
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
// USART Transmitter buffer
#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];
Điều khiển động cơ dc giao tiếp máy tính Trang 52
Đồ án môn học 2
#if TX_BUFFER_SIZE <= 256
unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif
// USART Transmitter interrupt service routine
interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index++];
#if TX_BUFFER_SIZE != 256
if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
#endif
}
}
#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index++]=c;
#if TX_BUFFER_SIZE != 256
if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
#endif
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif
// Standard Input/Output functions
#include
// Declare your global variables here
void lcd_putnum(unsigned int x)
{
unsigned char donvi,chuc,tram,ngan;
donvi=x%10;
chuc=(x/10)%10;
tram=(x/100)%10;
ngan=(x/1000)%10;
Điều khiển động cơ dc giao tiếp máy tính Trang 53
Đồ án môn học 2
lcd_putchar(ngan+48);
lcd_putchar(tram+48);
lcd_putchar(chuc+48);
lcd_putchar(donvi+48);
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
++count;
//i=4321;
if(count==244)
{
pulse=TCNT1;
speedDC=pulse/200;
lcd_gotoxy(0,0);
lcd_putnum(pulse);
lcd_putsf("pulse/500ms");
lcd_gotoxy(0,1);
lcd_putnum(speedDC);
lcd_putsf("v/500ms");
TCNT1=0;
USART_TXD(255);
pulse=pulse*2;
USART_TXD(pulse);
USART_TXD(pulse>>8);
count=0;
}
}
void main(void)
{
PORTA=0x00;
DDRA=0x01;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF; //FC
TCCR0=0x03;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x06;
TCNT1H=0x00;
TCNT1L=0x00;
Điều khiển động cơ dc giao tiếp máy tính Trang 54
Đồ án môn học 2
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x64;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x20;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x20;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
lcd_init(16);
// Global enable interrupts
#asm("sei")
while (1)
{
PORTA.0^=1;
delay_ms(500);
}
}
Điều khiển động cơ dc giao tiếp máy tính Trang 55
Đồ án môn học 2
v Chương trình điều khiển trên máy tính
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ZedGraph;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Image Motor1 = WindowsFormsApplication1.Properties.Resources.Motor1;
Image Motor2 = WindowsFormsApplication1.Properties.Resources.Motor2;
Image Motor3 = WindowsFormsApplication1.Properties.Resources.Motor3;
Image Motor4 = WindowsFormsApplication1.Properties.Resources.Motor4;
Image dongho_0 = WindowsFormsApplication1.Properties.Resources.dongho_0;
Image dongho_20 = WindowsFormsApplication1.Properties.Resources.dongho_20;
Image dongho_40 = WindowsFormsApplication1.Properties.Resources.dongho_40;
Image dongho_60 = WindowsFormsApplication1.Properties.Resources.dongho_60;
Image dongho_80 = WindowsFormsApplication1.Properties.Resources.dongho_80;
Image dongho_100 = WindowsFormsApplication1.Properties.Resources.dongho_100;
Image dongho_120 = WindowsFormsApplication1.Properties.Resources.dongho_120;
Image dongho_140 = WindowsFormsApplication1.Properties.Resources.dongho_140;
Image dongho_160 = WindowsFormsApplication1.Properties.Resources.dongho_160;
Image dongho_180 = WindowsFormsApplication1.Properties.Resources.dongho_180;
Image dongho_200 = WindowsFormsApplication1.Properties.Resources.dongho_200;
Image dongho_220 = WindowsFormsApplication1.Properties.Resources.dongho_220;
Image dongho_240 = WindowsFormsApplication1.Properties.Resources.dongho_240;
Image dongho_260 = WindowsFormsApplication1.Properties.Resources.dongho_260;
Image ledvang = WindowsFormsApplication1.Properties.Resources.light_yellow;
Image leddo = WindowsFormsApplication1.Properties.Resources.light_red;
Image ledxanh = WindowsFormsApplication1.Properties.Resources.light_green;
bool MotorDc = false;
int Chan = 1;
byte[] a = new byte[10];
int[] xung = new int[10];
int vong,index = 0;
int thuan, nghich;
int tickStart = 0;
int tam, X,t=0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox_connect.Image = ledvang;
pictureBox_dongho.Image = dongho_0;
Điều khiển động cơ dc giao tiếp máy tính Trang 56
Đồ án môn học 2
pictureBoxDC.Image = Motor1;
label_vong.Text = "0";
label_xung.Text = "0";
label1.Text = "0";
timer3.Enabled = true;
Control.CheckForIllegalCrossThreadCalls = false;
GraphPane myPane = zedGraphControl1.GraphPane;
myPane.Title.Text = "Đồ Thị Biểu Diễn Tốc Độ Động Cơ";
myPane.XAxis.Title.Text = "Thời Gian";
myPane.YAxis.Title.Text = "Số Vòng / Giây";
RollingPointPairList list1 = new RollingPointPairList(1200);
RollingPointPairList list2 = new RollingPointPairList(1200);
LineItem curve1 = myPane.AddCurve("tốc độ", list1, Color.Red, SymbolType.None);
LineItem curve2 = myPane.AddCurve("", list2, Color.Blue, SymbolType.None);
timer1.Interval = 50;
myPane.XAxis.Scale.Min = 0;
myPane.XAxis.Scale.Max = 30;
myPane.XAxis.Scale.MinorStep = 1;
myPane.XAxis.Scale.MajorStep = 5;
myPane.YAxis.Scale.Min = 0;
myPane.YAxis.Scale.Max = 60;
myPane.YAxis.Scale.MinorStep = 1;
myPane.YAxis.Scale.MajorStep = 10;
zedGraphControl1.AxisChange();
tickStart = Environment.TickCount;
}
public void draw(double setpoint1, double setpoint2)
{
if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
return;
LineItem curve1 = zedGraphControl1.GraphPane.CurveList[0] as LineItem;
LineItem curve2 = zedGraphControl1.GraphPane.CurveList[1] as LineItem;
if (curve1 == null)
return;
if (curve2 == null)
return;
IPointListEdit list1 = curve1.Points as IPointListEdit;
IPointListEdit list2 = curve2.Points as IPointListEdit;
if (list1 == null)
return;
if (list2 == null)
return;
double time = (Environment.TickCount - tickStart) / 1000.0;
list1.Add(time, vong);
Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = 0;
}
zedGraphControl1.AxisChange();
Điều khiển động cơ dc giao tiếp máy tính Trang 57
Đồ án môn học 2
zedGraphControl1.Invalidate();
}
private void timer1_Tick(object sender, EventArgs e)
{
draw(5, 20);
}
private void button1_Click(object sender, EventArgs e)
{
COM.Open();
a[0] = 200;
COM.Write(a, 0, 1);
timer_connect.Enabled = true;
thuan = 1;
timer4.Enabled = true;
timer2.Enabled = true;
timer1.Enabled = true;
timer1.Start();
tickStart = Environment.TickCount;
}
private void button2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Ngắt kết nối?", "Warning", MessageBoxButtons.OKCancel) ==
DialogResult.OK)
{
COM.Close();
timer_connect.Enabled = false;
pictureBox_connect.Image = ledvang;
timer1.Enabled = false;
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
label1.Text = trackBar1.Value.ToString();
a[0] = Convert.ToByte(trackBar1.Value);
COM.Write(a, 0, 1);
}
private void button3_Click(object sender, EventArgs e)
{
a[0] = 101;
COM.Write(a, 0, 1);
thuan = 1;
}
private void button4_Click(object sender, EventArgs e)
{
a[0] = 102;
COM.Write(a, 0, 1);
Điều khiển động cơ dc giao tiếp máy tính Trang 58
Đồ án môn học 2
thuan = 0;
}
private void button6_Click(object sender, EventArgs e)
{
a[0] = 103;
COM.Write(a, 0, 1);
}
private void button5_Click(object sender, EventArgs e)
{
a[0] = Convert.ToByte(trackBar1.Value);
COM.Write(a, 0, 1);
}
private void COM_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
tam = COM.ReadByte();
if (tam == 255)
index = 0;
else
{
xung[index] = tam;
index++;
}
X = xung[1] * 256 + xung[0];
if (X < 20000)
{
label_xung.Text = X.ToString();
vong = (X / 200);
label_vong.Text = vong.ToString();
}
}
private void timer2_Tick(object sender, EventArgs e)
{
kt();
if (MotorDc)
{
if (thuan==1)
{
if (Chan == 1)
{
pictureBoxDC.Image = Motor1;
Chan = 2;
}
else if (Chan == 2)
{
pictureBoxDC.Image = Motor2;
Chan = 3;
}
else if (Chan == 3)
Điều khiển động cơ dc giao tiếp máy tính Trang 59
Đồ án môn học 2
{
pictureBoxDC.Image = Motor3;
Chan = 4;
}
else if (Chan == 4)
{
pictureBoxDC.Image = Motor4;
Chan = 1;
}
}
else if (thuan==0)
{
{
if (Chan == 1)
{
pictureBoxDC.Image = Motor4;
Chan = 2;
}
else if (Chan == 2)
{
pictureBoxDC.Image = Motor3;
Chan = 3;
}
else if (Chan == 3)
{
pictureBoxDC.Image = Motor2;
Chan = 4;
}
else if (Chan == 4)
{
pictureBoxDC.Image = Motor1;
Chan = 1;
}
}
}
}
}
private void kt()
{
if (vong == 0)
MotorDc = false;
else
MotorDc = true;
if (vong > 0 & vong < 4)
{
timer2.Interval = 150;
}
if (vong > 4 & vong < 8)
{
timer2.Interval = 140;
}
if (vong > 8 & vong < 12)
{
timer2.Interval = 130;
}
if (vong > 12 & vong < 16)
Điều khiển động cơ dc giao tiếp máy tính Trang 60
Đồ án môn học 2
{
timer2.Interval = 120;
}
if (vong > 16 & vong < 20)
{
timer2.Interval = 110;
}
if (vong > 20 & vong < 24)
{
timer2.Interval = 100;
}
if (vong > 24 & vong < 28)
{
timer2.Interval = 90;
}
if (vong > 28 & vong < 32)
{
timer2.Interval = 80;
}
if (vong > 32 & vong < 36)
{
timer2.Interval = 70;
}
if (vong > 36 & vong < 40)
{
timer2.Interval = 60;
}
if (vong > 40 & vong < 44)
{
timer2.Interval = 50;
}
if (vong > 44 & vong < 48)
{
timer2.Interval = 40;
}
if (vong > 48 & vong < 52)
{
timer2.Interval = 30;
}
if (vong > 52 & vong < 56)
{
timer2.Interval = 20;
}
if (vong > 56 & vong < 60)
{
timer2.Interval = 10;
}
}
private void timer3_Tick(object sender, EventArgs e)
{
label12.Text = DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" +
DateTime.Now.Second.ToString();
label15.Text = DateTime.Now.Day.ToString() + ":" + DateTime.Now.Month.ToString() + ":" +
DateTime.Now.Year.ToString();
}
Điều khiển động cơ dc giao tiếp máy tính Trang 61
Đồ án môn học 2
private void timer4_Tick(object sender, EventArgs e)
{
if (trackBar1.Value > 0 & trackBar1.Value < 7)
pictureBox_dongho.Image = dongho_0;
if(trackBar1.Value > 7 & trackBar1.Value < 14)
pictureBox_dongho.Image = dongho_20;
if(trackBar1.Value > 14 & trackBar1.Value < 21)
pictureBox_dongho.Image = dongho_40;
if(trackBar1.Value > 21 & trackBar1.Value < 28)
pictureBox_dongho.Image = dongho_60;
if(trackBar1.Value > 28 & trackBar1.Value < 35)
pictureBox_dongho.Image = dongho_80;
if(trackBar1.Value > 35 & trackBar1.Value < 42)
pictureBox_dongho.Image = dongho_100;
if(trackBar1.Value > 42 & trackBar1.Value < 49)
pictureBox_dongho.Image = dongho_120;
if(trackBar1.Value > 49 & trackBar1.Value < 56)
pictureBox_dongho.Image = dongho_140;
if(trackBar1.Value > 56 & trackBar1.Value < 63)
pictureBox_dongho.Image = dongho_160;
if(trackBar1.Value > 63 & trackBar1.Value < 70)
pictureBox_dongho.Image = dongho_180;
if(trackBar1.Value > 70 & trackBar1.Value < 77)
pictureBox_dongho.Image = dongho_200;
if(trackBar1.Value > 77 & trackBar1.Value < 84)
pictureBox_dongho.Image = dongho_220;
if(trackBar1.Value > 84 & trackBar1.Value < 91)
pictureBox_dongho.Image = dongho_240;
if(trackBar1.Value > 91)
pictureBox_dongho.Image = dongho_260;
}
private void timer_connect_Tick(object sender, EventArgs e)
{
if (t == 0)
{
pictureBox_connect.Image = ledxanh;
t = 1;
}
else if (t == 1)
{
pictureBox_connect.Image = leddo;
t = 0;
}
}
}
}
Điều khiển động cơ dc giao tiếp máy tính Trang 62
Đồ án môn học 2
4.4.2.Tài liệu tham khảo
- www.hocavr.com
- www.dientuvietnam.net
- www.alldatasheet.com
- Và những tài liệu khác.
Các file đính kèm theo tài liệu này:
- do an.pdf