Đồ án môn học I : điều khiển vị trí động cơ

Lời nói đầu !
Từ chiếc máy tính đầu tiên do Pascal phát minh ra đến những chiếc máy
tính bây giờ đó là một quá trình phát triển vô cùng to lớn của khoa học kỹ
thuật , nhất là trong những thập niên gần đây, sự phát triển đó càng mau lẹ.
Trong đó , một trong những hạt nhân của quá trình phát triển đó là công
nghệ điện tử. Những chiếc máy tính bây giờ có thể đễ dàng làm những việc
mà con ngƣời trƣớc kia bỏ ra hằng năm để thực hiện xong , giờ có thể chỉ trong
nháy mắt.
Trong kỹ thuật mới thời gian không còn đƣợc tính bằng giây nữa , mà là
micrô giây , thậm chí còn nhỏ hơn nữa . Một bộ điều kiển tự động có thể thay
thế cho nhiều công nhân , nhiều kỹ sƣ, thậm chí làm những việc mà tự mình ,
con ngƣời không thể làm nổi.
Là một sinh viên kỹ thuật , ngành tự động , đang chập chững bƣớc vào
một lĩnh vực to lớn ấy , thì việc học tập , vận đụng những điều đã học vào
trong thực tiễn , để trao đồi kiến thức là chuyện đƣơng nhiên. Và đồ án tự động
1, có thể là công trình đầu tiên của nhiều bạn sinh viên cùng ngành đã làm , để
đánh đấu sự hiện điện đầu tiên của mình trong lĩnh vực này.
Trên con đƣờng trao dồi , học tập để trở thành kỹ sƣ thực , ngoài bản thân
của mình , còn là sự giúp đỡ , đạy đỗ của các thầy cô giáo. Vì vậy em xin chân
thành cảm ơn thầy hƣớng đẫn , các thầy các cô trong trƣờng , đã cho em những
kiến thức để có thể hoàn thành đƣợc đồ án này.
Vẫn biết còn nhiều thiếu sót , em rất mong thầy cô giúp đỡ , cho ý kiến ,
cho em những hiểu biết sâu sắc hơn , để thực hiện tốt hơn đồ án môn học 2 sắp
tới .
Em xin chân thành cảm ơn!

-1-

Đồ án môn học I : điều khiển vị trí động cơ

A/ SƠ LƢỢC VI ĐIỀU KIỂN P89V51Rx2:
1. Khái quát các tính năng:
+ Khái quát:
P89V51RD2 là vi điều khiển 80C51 có 64kB Flash và 1024bytes<1kB> bộ nhớ dữ
liệu RAM.
Tính năng đặc biệt của P89V61RD2 là ở chế độ hoạt động mode x2. Ngƣời thiết kế chọn
chạy ứng dụng của mình ở chế độ này để nâng đôi tốc độ khi hoạt động ở cùng tần số
dao động<một chu kì máy=6 chu kì xung nhịp>
Bộ nhớ chƣơng trình Flash cho phép lập trình ISP hoặc/và song song. Chế độ lập
trình song song đƣợc đƣa ra để thích ứng với tốc độ cao, giảm thời gian và giá thành.
IAP/ISP.
+Các tính năng:
CPU 80C51.
Hoạt động ở 5VDC trong tầm tần số dao động đến 40MHz.
64kB ISP.
SPI
5 PCA với chức năng PWM/capture/compare 16bits.
4 cổng xuất nhập.
3 Timers/Couters 16bits.
Watchdog Timer có thể lập trình đƣợc.
8 nguồn ngắt.
2 thanh ghi DPTR.
Tƣơng thích mức logic TTL và CMOS.
Phát hiện nguồn yếu <Brownout Detect>
Chế độ Low-power, Power down, Idle.

-2-

1 . Port 0: là port có hai chức năng ở các chân từ 32-39 .Đồ án môn học I : điều khiển vị trí động cơ Sơ đồ khối của MCU P89V51RD2: Sơ qua về các chân của vi điều khiển: Port 0. còn có nhiều chức năng đặc biệt .0 . Port 2. P1. Port 3: Nhƣ cấu trúc 8051 kinh điển. -3- . Port 2:là một port ở các chân từ 21-28 đƣợc dùng cho chức năng IO port hoặc là byte địa chỉ cao của Bus địa chỉ . Port 1. Port 3: là port có tác dụng kép . Các chân của port này ngoài IO . ở P89V51Rx2 còn có thêm nhiều chức năng mới: P1. Trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng nhƣ các đƣờng vào ra. từ chân 10-17.T2EX: Điều khiển hƣớng và cạnh kích chức năng Capture cho timer/Counter 2. Port 1: Ngoài chức năng IO port .T2: Ngõ vào Counter cho Timer/Counter 2 hoặc ngõ ra cho Counter/Timer2.

PSEN: Cho phép dùng bộ nhớ chƣơng trình ngoài. ALE/PROG: Cho phép khóa địa chỉ<Nhƣ 8051 cổ điển> ngoài ra.5/A13 P0.5/T1 P1.2 P3.4/A12 P0. Khi MCU sử dụng bộ nhớ chƣơng trình trong chip.6 P3.1/AD1 P2. o CEX1: ngõ vào xung nhịp cho chức năng Capture/Compare modul 1. Khi sử dụng bộ nhớ chƣơng trình ngoài.4 P3.1 P3.2/INT0 P1.3/AD3 P2.1/TXD P1.0 P3. P1.6: o MISO: phục vụ SPI o CEX3: ngõ vào xung nhịp cho chức năng Capture/Compare modul 3.7 P3. Nếu chân PSEN chuyển mức trong khi RST vẫn còn ở mức cao. Tín hiệu này là nguồn xung nhịp ngoài cho chức năng PCA. nếu không. P1.6/WR P1. PSEN không tích cực.7: o SCK: phục vụ SPI o CEX4: ngõ vào xung nhịp cho chức năng Capture/Compare modul 4. P1.4/T0 P1.7/RD XTAL1 ALE/PROG XTAL2 PSEN EA/VPP RST 20 39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8 19 18 31 9 VCC U1 40 Sơ đồ chân của IC: 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 30 29 -4- . mức cao trên chân RST trong ít nhất 2 chu kì máy sẽ Reset lại hệ thống. RST: Khi nguồn dao động đang hoạt động. ↓ EA: Cho phép sử dụng bộ nhớ chƣơng trình ngoài.3/INT1 P1.2 – ECI: Ngõ vào xung nhịp.5 P3. P1.3/A11 P0. Sự chuyển mức cao sang thấp trên ↓PSEN cƣỡng bức từ bên ngoài khi ngõ vào RST đang ở mức cao trong hơn 10 chu kì máy sẽ đƣa MCU vào chế độ lập trình host từ bên ngoài.2/AD2 P2.0/AD0 P2.1/A9 P0.7/A15 P1. sẽ hoạt động bình thƣờng.6/AD6 P2. o EA=’0’ :Bộ nhớ ngoài.2/A10 P0.0/A8 P0.3 –CEX0: ngõ vào xung nhịp cho chức năng Capture/Compare modul 0.0/RXD P1.6/A14 P0.Đồ án môn học I : điều khiển vị trí động cơ P1.4/AD4 P2. MCU sẽ vào chế độ lập trình host từ bên ngoài.4: o SS: Chọn cổng phụ vào cho SPI.5/AD5 P2.3 P3. PSEN thƣờng ở mức tích cực 2 lần trong mỗi chu kì máy.5: o MOSI: phục vụ SPI o CEX2: ngõ vào xung nhịp cho chức năng Capture/Compare modul 2. chân này còn đƣợc dùng để đƣa vào chế độ lập trình FLASH GND P0. P1.7/AD7 P2. o EA=’1’:Bộ nhớ trong chip.

cổng com RS-232.Đồ án môn học I : điều khiển vị trí động cơ B/ PHẦN CHƢƠNG TRÌNH THỰC HIỆN I/ THIẾT KẾ PHẦN CỨNG : Phần cứng gồm hai khối chính : + + Khối điều kiển : kít điều kiển Khối công suất : Nguồn . cầu H . IC . hiển thị led. hiển thị lcd . led 7 đoạn -5- . và động cơ Máy tính RS232 Nguồn 24VDC Kít điều kiển : P89V51RX2 Động cơ Cầu H Encoder Khối điều kiển:  Khối chấp hành Khối điều kiển : Nguồn 5V .

7 8 7 6 5 4 3 2 1 5V ZTA RESISTOR SIP 9 8 7 6 5 4 3 2 1 2 C1 Y1 1 1n 2 p0.6 p2.4 p2.5 p0.5/A13 P0.1/A9 P0.4 5 p1.0/A8 P0.5 p3.1 P3.7 GND CON8 J3 8 7 6 5 4 3 2 1 R12 20 J2 0 SW44 5V - Khối gồm có các giắc cắm đực .6 p1.2 p0.0 p0.5/T1 P1.6 p2.0 p3.4/T0 P1.1 p1.7 P3.3/A11 P0.2 p2.0/RXD P1.3 p3.1 p2.4/A12 P0.7/RD XTAL1 ALE/PROG XTAL2 PSEN EA/VPP RST AT89C51 R1 R C3 C CON8 J15 40 U1 VCC p1.1/AD1 P2.3 P3.0/AD0 P2.3 4 p1.0 p3.2 p2.3 p3.4 P3.6 7 p17 8 19 18 5V 31 9 C2 1 1n 0 P0.2 P3.1 p3.3 p2.2 p3.7 J1 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 30 29 p2.6 p0.2 3 p1.19 -6- 1 2 3 4 5 6 7 8 CON8 SW1 SW4 0 0 .0 1 p1.5 6 p1.1 p0.2/A10 P0.2 p3.4/AD4 P2.7 9 8 7 6 5 4 3 2 9 8 7 6 5 4 3 2 1 5V RESISTOR SIP 9 R13 p3.1 2 p1.1 p2.1 p3.2/AD2 P2.6/WR P1.6 P3.0 p1.4 p0.7 p3.3/INT1 P1.7/AD7 P2.1/TXD P1.4 p0.1uF D18 LED CON2 0 + Khối xử lý của kit: 5V CON8 J4 8 7 6 5 4 3 2 1 p2.2 p0.5 p0.5/AD5 P2.Đồ án môn học I : điều khiển vị trí động cơ 1 + Nguồn cho kit vxl: D17 7805 - + 4 1 IN 3 2 1 OUT 3 470 2 BRIDGE 5V GND 2 2200uF J12 1 2 0.0 p2.5 p2.7 8 7 6 5 4 3 2 1 J16 CON8 CON8 1 p0. và nút sw44 để reset lai vxl Vi xử lý sẽ tự động reset khi có nguồn nhờ tụ C3 Thạch anh 12Mhz sẽ tạo nguồn xung cho chân 18.6 p3.5 p2.3 p2.5 p1.4 p2.0 p2.7 39 38 37 36 35 34 33 32 p1.2/INT0 P1.6 p0.2 p1.5 P3.7/A15 P1.6 p3.4 p3.0 P3.3/AD3 P2.6/A14 P0.4 p3.4 p1. để xuất port. giao tiếp bên ngoài Bốn nút bấm .3 p0.3 p0.0 p0.6/AD6 P2.3 p1.5 p3.1 p0.

có tác dụng nâng dòng cho port điều kiển. giải mã BCD sang các chân của led để hiển thị số. .1 LED7.Hiển thị led 7 Đoạn: 5V 0 7447 13 12 11 10 9 15 14 A B C D E F G A B C D E F G R23 330 R24 330 R27 330 R28 330 R29 330 R30 330 R31 330 Q2 R32 1K R33 1K U9 U10 A 7 A A 7 A B 6 B B 6 B C 4 C C 4 C D 2 D D 2 D E 1 E E 1 E F 9 F F 9 G 10 G DP 5 G 10 FG 5V 5V O7 C1815 C1815 Q3 Q4 Q5 R34 1K R35 1K U12 U13 A 7 A A 7 A B 6 B B 6 B C 4 C C 4 C D 2 D D 2 D E 1 E E 1 E F 9 F F 9 F G G 10 G DP 5 5 10 5 DP G DP O6 8 8 8 8 LED7.4 led 7 đoạn .IC giải mã 7447 . +LCD: J7 CON16 R26 5V 0 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 J9 J8 1 2 3 5V 5V 0 R25 0 - Khối gồm có : giắt cắm cái 16 chân cho LCD Giắt 8 chân dành cho bus dữ liệu Giắt 3 chân dành cho 3 chân điều kiển Điện trở r28 để hạn dòng cho led trong LCD Biến R25 để chỉnh độ tƣơng phản cho LCD -7- 3 T 8 L U3 D0 D1 D2 D3 LT RBI BI/RBO C1815 3 T 8 L 7 1 2 6 3 5 4 O5 3 T 8 L O0 O1 O2 O3 5V C1815 3 T 8 L 16 5V 5V 20 VCC 5V O4 GND CON8 O7 O6 O5 O4 8 8 7 6 5 4 3 2 1 U11 19 G 1 DIR 2 A1O0 B1 18 3 A2O1 B2 17 4 A3O2 B3 16 5 A4O3 B4 15 6 A5O4 B5 14 7 A6O5 B6 13 8 A7O6 B7 12 9 A8O7 B8 11 74LS245 GND 5V J10 5V 10 0 .3 LED7.2 LED7. .Đồ án môn học I : điều khiển vị trí động cơ + Khối hiển thị: .Khối gồm IC nâng 74LS245 .4 0 . 4 BJT C1815 có tác đụng chọn led – sử đụng cho quét led-.

24 A3 B3 16 4 p1.1 C7 5V GND C4 13 14 7 8 1 3 4 5 MAX232_1 C6 15 1 6 2 7 3 8 4 9 5 VCC U2 P1 16 5V 0 o Mạch có cổng DB9 . và IC max232 -8- 0 . + Khối giao tiếp: .RS-232: 0 C5 R1IN R1OUT 12 T1OUT T1IN 11 T2OUT R2OUT 910 R2IN T2IN C1+ C1V+ 2 C2+ C2V.Đồ án môn học I : điều khiển vị trí động cơ Mạch hiển thị led: J5 5V 1 2 3 4 5 6 7 8 20 R2 R9 10 CON8 G DIR A1 B1 18 A2 B2 17 A3 B3 16 A4 B4 15 A5 B5 14 A6 B6 13 A7 B7 12 A8 B8 11 74LS245 1 2 3 4 5 6 7 8 19 1 2 3 4 5 6 7 8 9 5V VCC 0 U6 J13 CON8 D1 GND - D8 0 0 VCC R15 D9 R22 D16 CON8 - 10 GND J6 0 U7 19 G 5V 1 DIR 1 p1.02 A1 B1 18 2 p1.79 A8 B8 11 74LS245 J11 CON8 1 2 3 4 5 6 7 8 20 5V 0 0 Để xuất led .57 A6 B6 13 7 p1.35 A4 B4 15 5 p1. Một dãy led để hiển thị. gồm 2 IC nâng dòng 74LS245.46 A5 B5 14 6 p1. các giắc cắm đực đƣa ra ngoài.13 A2 B2 17 3 p1.68 A7 B7 12 8 p1.0 p3.6 p3.

6 P0.3 SW31 P0.5 P0. Sơ đồ khối Kit: Nguồn 5v Khối xử lý Khối hiển thị Khối giao tiếp -9- . một chân mức thấp .7 P0.1 SW35 SW36 SW34 SW37 P0. o Khi quét phiếm .Ma trận phiếm: SW26 P0. và vi điều kiển có thể nhận ra sự thay đổi. mạch trong IC và các tụ sẽ tạo ra nguồn +10V .4 o Mạch gồm 8 chân nối với port 1 .Đồ án môn học I : điều khiển vị trí động cơ o IC max232 và các tụ làm nên mạch chuyển mức áp TTL sang 232 o Cấp nguồn cho max232 là 5v.0 SW27 SW28 SW29 SW32 SW33 SW30 P0. Nếu nút nhấn có một chân đƣợc đƣa vào mức cao. thì cả hai chân đều ở mức thấp . khi nhấn phiếm .2 SW38 SW39 SW40 SW41 P0.

2 p3.0 p1.0 p0.7 SW28 10 8 7 6 5 4 3 2 1 p0.1/TXD P1.3/AD3 P2.1/A9 P0.6 P0.7 p0.Mạch cầu H: R13 M2 R1 R14 560 1 2 0 U2 0 4 D2 R4 R3 1k R16 24V 1k R17 1k 1k 5V 24V J6 1 2 NGUON 24V D3 D13 1 2 D14 2 1 2 1 CON3 M1 1k 3 3 2 1 4 3 J2 24V U1 1 2 2200uF M3 D1 R5 1k 0. .3 4 p1.0 p3.6 p0.5 p0.5/A13 P0.2 p3.1 p3.3/INT1 P1.2 p1.2/INT0 P1.6/WR P1.3 p3.7 8 7 6 5 4 3 2 1 P0.2 CON8 20 D1 R2 R9 D8 0 0 CON8 SW1 SW38 SW39 SW40 P0.6 p1.4 p2.3 p0.35 A4 B4 15 5 p1.4 p3.3/A11 P0.2 3 p1.3 p1.3 p3.68 A6 A7 B7 12 8 p1.2 p2.4/A12 P0.5 p1.1 LED7.1 P3.7 P0.7 9 8 7 6 5 4 3 2 R13 CON8 1 5V CON8 RESISTOR SIP 9 ZTA 2 C1 Y1 1 1n 2 C2 1 1n 40 P0.1 p0.1/AD1 P2.4 CON16 1 0 - + 4 1 IN OUT 3 R36 R 2 3 J9 J8 1 2 3 5V 5V 0 C4 C5 0 VCC 1 6 2 7 3 8 4 9 5 R1IN R1OUT 12 T1OUT T1IN 11 T2OUT R2OUT 910 R2IN T2IN C1+ C1V+ 2 C2+ C2V.2 p0.4 5 p1.4 J6 SW4 0 0 0 U7 19 G 5V 1 DIR 1 p1.46 B5 14 6 p1.4/T0 P1.5 p3.0/AD0 P2.1 p2.0 p0.5/AD5 P2.7 P3.Đồ án môn học I : điều khiển vị trí động cơ  Sơ Đồ Toàn Kít: 8 7 6 5 4 3 2 1 p3.5 p0.1 C7 5V GND 8 T L 3 8 R32 1K R33 1K U9 U10 A 7 A A 7 A B 6 B B 6 B C 4 C 4 C D 2 CD D 2 D E 1 E E 1 E F 9 F F 9 G 10 G DP 5 G 10 FG 3 8 A B C D E F G T L A B C D E F G R23 330 R24 330 R27 330 R28 330 R29 330 R30 330 R31 330 3 8 13 12 11 10 9 15 14 C1815 3 8 U3 D0 D1 D2 D3 LT RBI BI/RBO O5 Q2 T L 16 5V 7 1 2 6 3 5 4 5V O0 O1 O2 O3 C1815 5V 5V O7 O6 C1815 C1815 Q3 Q4 Q5 R34 1K R35 1K U12 U13 A 7 A A 7 A B 6 B B 6 B C 4 C 4 C D 2 CD D 2 D E 1 E E 1 E F 9 F F 9 F DP 5 G 10 G DP 5 G 10 G DP 5 T L O4 5V J7 5V C6 15 5V GND 20 VCC GND 0 O7 O6 O5 O4 8 CON8 8 7 6 5 4 3 2 1 10 J10 5V U11 19 G 1 DIR O0 2 B1 18 3 A1 B2 17 O1 O2 4 A2 A3 B3 16 O3 5 A4 B4 15 O4 6 B5 14 7 A5 13 B6 12 O5 O6 8 A6 A7 B7 9 A8 B8 11 O7 74LS245 16 5V 0 5V D4 0 0 .0 p2.1 p3.1 p0.6 p2.1 p2.4 p2.4 P3.6 p2.0 P3.7/RD XTAL1 ALE/PROG XTAL2 PSEN EA/VPP RST AT89C51 R1 R 0 CON8 p2.5 6 p1.1uF J3 CON2 R7 10k R6 M4 1k R8 10k 0 0 o Mạch có bốn IC FET chịu đòng lớn .6 MAX232_1 0 R25 0 BRIDGE 2 1 1 2 3 4 5 6 7 8 13 14 7 8 1 3 4 5 5V GND 2 U2 P1 D17 U15 J14 R26 5V 0 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 J12 1 2 C8 C9 CON2 C10 D18 LED CON2 0  Khối Công suất: + Mạch cầu h .2 LED7.2/AD2 P2.3 p0.3 SW41 P0.2 P3.6 P3.13 A2 B2 17 3 p1.3 p2.24 A3 B3 16 4 p1.0 p2.4 p0.79 A8 B8 11 74LS245 0 CON8 SW44 C3 C G DIR A1 B1 18 A2 B2 17 A3 B3 16 A4 B4 15 A5 B5 14 A6 B6 13 A7 B7 12 A8 B8 11 74LS245 1 2 3 4 5 6 7 8 19 1 2 3 4 5 6 7 8 9 VCC SW32 5V 1 2 3 4 5 6 7 8 J5 GND 39 38 37 36 35 34 33 32 p1.6 p3.1 p1.6 7 p17 8 19 18 5V 31 9 SW29 1 2 3 4 5 6 7 8 p2.7/A15 P1.7 p3.2 p0. Nguồn 24v .7 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 30 29 1 2 3 4 5 6 7 8 SW31 SW35 SW33 SW30 P0.57 A5 B6 13 7 p1.7/AD7 P2.0 p3.hai led để biết chiều động cơ.5 p2.0 1 p1.5 p3.6 p0.5 P3.5 J11 CON8 5V P0.1 2 p1.4 p0.4/AD4 P2.6/A14 P0.4 p3.3 LED7.2 p2.1 SW36 SW34 SW37 P0.5 p2.3 P3.3 p2.10 - p3.0/A8 P0.6/AD6 P2.0 p3.5/T1 P1.6 p3.4 p1.7 8 7 6 5 4 3 2 1 20 J2 0 0 5V 7447 8 8 8 LED7.2/A10 P0.0 SW27 20 8 7 6 5 4 3 2 1 J16 SW26 J15 VCC 1 RESISTOR SIP 9 CON8 J4 5V U1 J1 5V J13 CON8 5V R15 D9 R22 D16 GND J3 0 U6 10 CON8 R12 VCC 9 8 7 6 5 4 3 2 GND p1.02 A1 B1 18 2 p1.0/RXD P1.

và xả khi có dòng hồi từ động cơ về -vì mạch nguồn là cầu diof .o Tụ lọc gai cho động cơ khi chạy o Nguyên tắc chống trùng đẫn : không thể kích ( mức cao) cho 2 ngõ vào cùng lúc . viết bằng Visual basic Chƣơng trình trên vi xử lý .Đồ án môn học I : điều khiển vị trí động cơ o Hai opto có nhiệm vụ cách ly nguồn điện của vi điều kiển với bộ công suất o Các zener để bảo vệ mạch .1uF R2 2. viết bằng hợp ngữ Sơ đồ và giải thuật chính: + Chƣơng trình Visual Basic: GIAO ĐIỆN: .Nhận đữ liệu từ vxl . và xuất kết quả .Nhận lệnh o XỬ LÝ : . Và R1 để duy trì đòng cho zener .Nguồn 24VDC: 1 Q1 J1 2 1 2 R1 D8 - + 4 C1 2200uF 270 C5 470uF zener 24v D7 D2 D10D1 J2 1 2 24VDC 3 24VAC C4 0.Ngắt timer để thực hiện đk. Tụ C4 để lọc thông cao . Tụ hóa C4 để lọc phẳng thông thấp .Truyền lệnh tới vxl Vi điều kiển . SƠ ĐỒ . có chỉnh sửa . + diof gắn đƣới zener để bù lại điện thế mất do BJT. II> CHƢƠNG TRÌNH THỰC HIỆN:  THÀNH PHẦN . GIẢI THUẬT TỔNG QUÁT: Thành phần : + Gồm có 2 phần chƣơng trinh chinh: Chƣơng trình trên máy tính .Hiển thị . Tụ C5 để lọc . BJT công suất 2N3005.Phần mềm PID.11 - GIAO TIẾP VXL: . không xả đƣợc.2k 0 + Mạch có cầu diof để chỉnh lƣu.

Đồ án môn học I : điều khiển vị trí động cơ + Chƣơng trình hợp ngữ : Máy tính Timer 2 tạo xung uart Giao tiếp máy tính .Nhận mã lệnh Mã lệnh Từ máy tính Điều xung PWM Động cơ Timer1: quét gởi giá trị encoder lên máy tính  Gt encoder Đếm giá trị encode CHI TIẾT CHƢƠNG TRÌNH: o CHƢƠNG TRÌNH TRÊN VB: Visual basic:Giao diện VB: Timer1 MSComm <Name: gt> Timer2 Cmdketnoi Labecd Labsovong Labvantoc Cmddung Cmdtien H_vantoc cmdlui txtvitri Cmdchay Cmdclr_ecd txtvantoc Cmd_dungvitri .12 - encoder .

dùng cho thông số KI ‘biến lƣu trữ vị trí xác lập ‘biến lƣu vận tốc động cơ ‘biến lƣu lại giá trị trƣớc của encoder ‘Biến lƣu lại chuỗi vận tốc tức thời ‘Đánh đấu vị trí bắt đầu của chuỗi lấy về ‘thứ tự của tín hiệu đƣa về ‘chuổi giá trị encoder lấy về từ vi xử lý ‘Trạng thái : tiến . chống nháy khi hiển thị Timer2: Tạo ngắt trong khoảng thời gian 10ms . dừng của động cơ ‘Hệ số P của bộ PID-vị trí ‘ Hệ số I ‘ Hệ số D .Vận tốc động cơ ( Đã có chống nháy do thay đổi quá nhanh ) - MSComm : < name : gt > : công cụ để giao tiếp với ngoại vi thông qua cổng com Timer1: liên tục lấy giá trị trung bình của vận tốc .Hiển thị số vòng tƣơng ứng ( 400 xung / vòng )  Label.Đồ án môn học I : điều khiển vị trí động cơ  Giao diên gồm có: - - - Nút kết nối vi điều khiển Khung điều khiển tiến lùi:  Nút tiến động cơ  Lùi động cơ  Đừng động cơ  TextBox nhập giá trị điều xung  Thanh trƣợt . lùi .  Nút clear giá trị encoder  Nút dừng chức năng.Hiển thị giá trị encoder tuyệt đối (có offset )  Label.13 - 'vị trí encoder lay ve ‘vận tốc tức thời của động cơ ‘sai số của vị trí động cơ_giữ lại ‘Sai số tích lũy . tạo giá trị điều xung Khung điều khiển vị trí động cơ:  TextBox nhập vị trí chạy tới  Nút start quá trình. phục vụ điều khiển vị trí của động cơ Mã của chƣơng trình:  Phần khai báo đầu chƣơng trình: Option Explicit Dim ht As Double Dim D_tt As Double Private e_p As Double Private e_tichluy As Long Private dblvitridat As Double Private intvt As Integer Private ht_p As Double Private d_p(20) As Double Private dang_load As Boolean Private thu_tu As Byte Private ecd(4) As Long Private trang_thai As Byte Dim P As Double Dim I As Double Dim D As Double . Khung hiển thị :  Label.

RThreshold = 1 gt.Đồ án môn học I : điều khiển vị trí động cơ  Xử lý các sự kiện:  Kết nối với máy tính: Private Sub cmdketnoi_Click() On Error Resume Next gt.Enabled = True ‘chƣa đƣợc kích hoạt .CommPort = 1 gt.Enabled = True cmdclr_ecd.InputLen = 1 cmddung.8 k gt.Settings = "28800.1" tốc độ 28.14 - .PortOpen = True gt. phải End Sub Khởi tạo giá trị ban đầu Private Sub Form_Load() Timer1. chống cmdlui.CommEvent ‘Nhận biết sự kiện Case comEvReceive ‘Nhận dữ liệu Dim buffer As Variant ‘bộ đệm thu buffer = gt.Interval = 10 Timer2.Caption = a & " .N.0187 ‘PP Zeigler-Nichols intvt = 0 thu_tu = 0 trang_thai = 0 End Sub Xử lý nhận ký tự: Private Sub gt_OnComm() Dim a As Integer Dim b As Double Select Case gt.Enabled = True cmd_dungvitri.Enabled = True lab_trangthai.Interval = 10 ‘ngắt mỗi lần là10ms Timer1." & buffer ‘hiển thị ở góc cuối phải buffer = "" ‘xóa để tiện theo dõi If dang_load = True Then ‘Nếu đã nhận đƣợc điểm .Enabled = False ‘cấm timer 2 P = 0.125 ‘Các giá trị đƣợc tìm bằng i = 0.Caption = "da ket noi !" ‘hiển thị ở góc dƣới .Enabled = True ‘kích hoạt timer 1 Timer2.Enabled = True ‘lỗi cho chƣơng trình cmdchay.8.Input a = Asc(buffer) ‘chuyển ký tự ra mã ascii lab.Enabled = True ‘Khi chƣa kết nối các nút bấm cmdtien.282 ‘Các thông số bộ PID D = 1.

lùi .Caption = ht End If End If End Select Xử lý các nút bấm tiến .0000") labecd. dừng: Private Sub cmdtien_Click() intvt = Val(txtvantoc) trang_thai = 1 If intvt >= 256 Then MsgBox ("gia tri phai nho hon 256") Exit Sub End If Call chay(intvt) End Sub ‘giá trị điều xung max Private Sub cmdlui_Click() intvt = Val(txtvantoc) trang_thai = 2 If intvt >= 256 Then MsgBox ("gia tri phai nho hon 256") Exit Sub End If Call chay(-intvt) End Sub Private Sub cmddung_Click() trang_thai = 0 gt.15 - .8388608 ‘Giá trị encoder tuyệt đối trừ đi giá trị offset b = ht / 400 ‘số vòng labsovong.Output = Chr(3) ‘gởi kí tự có mã là 3 . "00000.Caption = Format(b.Đồ án môn học I : điều khiển vị trí động cơ thu_tu = thu_tu + 1 ‘ bắt đầu thì nạp dữ liệu ecd(thu_tu) = a If thu_tu = 3 Then dang_load = False thu_tu = 0 End If Else If a = 99 Then ‘ ký tự gốc bắt đầu nạp dang_load = True ht = ecd(3) * 256 * 256 + 256 * ecd(2) + ecd(1) .

để đk vị trí động cơ Private Sub cmd_dungvitri_Click() Call cmddung_Click e_tichluy = 0 Timer2.Output = Chr(4) ‘Mã clear encoder End Sub Hàm chay( ): Private Sub chay(ByVal v As Integer) If (v > 255) Or (v < -255) Then Exit Sub ‘Max điều xung =256 gt.Enabled = True ‘bắt đầu chạy vị trí End Sub Private Sub cmdclr_ecd_Click() gt.Output = Chr(v) ‘truyền vận tốc gt.Đồ án môn học I : điều khiển vị trí động cơ End Sub Sự kiện thanh trƣợt: Private Sub H_vantoc_Change() txtvantoc = H_vantoc.Output = Chr(1) ‘ lệnh chạy lùi Else gt. kết thúc tìm vị trí End Sub Private Sub cmdchay_Click() Timer2.Value intvt = Val(txtvantoc) Select Case trang_thai Case 1: Call chay(intvt) ‘chạy tới Case 2: Call chay(-intvt) ‘chạy lui End Select End Sub Các nút bấm còn lại .Output = Chr(0) ’mã nhập vận tốc If v < 0 Then v = -v gt.16 - .Enabled = False ‘ngừng timer.Output = Chr(v) ‘truyền vận tốc .

Enabled = False ’nếu đúng vị trí trong vòng End Sub ‘0.1) tong = tong + d_p(i) Next ‘lấy vận tốc tức thời cho bộ PID ‘lấy tổng giá trị vận tốc trong 0. xử lý nhấp D_tong = D_tong * 10 ‘ nháy labvantoc = Format(D_tong.ht_p D_tt = D_tong ht_p = ht tong = 0 For i = 20 To 2 Step -1 d_p(i) = d_p(i .00") ‘Cho giá trị đứng yên trênGD End Sub Private Sub Timer2_Timer() Static g As Integer Dim e As Double Dim v As Integer dblvitridat = Val(txtvitri) * 400 e = ht – dblvitridat ‘Lấy sai số cho bộ PID v = PID(e. "0000.Output = Chr(2) ‘lệnh chạy tới End If Xử lý sự kiện timer1.Đồ án môn học I : điều khiển vị trí động cơ gt. timer2: Private Sub Timer1_Timer() Dim D_tong As Double Dim tong As Double Dim i As Integer D_tong = ht .3s thì dừng chức năng lại .17 - . e_p) ‘lấy vận tốc từ bộ PID Call chay(v) e_p = e If e = 0 Then g=g+1 Else g=0 End If If g = 30 Then Timer2.2s d_p(1) = D_tong tong = tong + d_p(1) D_tong = tong / 20 ‘ lấy giá trị trung bình .

0927 .1505 . T=0. ByVal e_c As Double) As Integer Dim step1 As Integer Dim up As Double Dim ui As Double Dim ud As Double Dim u As Double If D_tt = 0 Then ‘ Hiệu chỉnh thông số I step1 = 3 ‘Làm giảm thời gian đƣa sai số về 0 Else step1 = 1 End If up = -P * e ud = -D * (e .6 x k = 0. I = 0.03875 . Td = 0.47.e_c) If (e > -130) And (e < 130) Then e_tichluy = e * step1 + e_tichluy ui = -I * e_tichluy Else e_tichluy = 0 ui = 0 End If ‘Kích hoạt thông số Ki khi động cơ ‘cách đích khoảng 1 vòng u = (up + ui + ud) If u > 255 Then u = 255 If u < -255 Then u = -255 PID = CInt(u) If e = 0 Then PID = 0 End Function  PID số:  V K p (ek TS ek _ TL TI ‘ Khâu bão hòa TD (ek TS ek 1 )) Trong đó hệ số Ts là chu kỳ lấy mẫu Tìm thông số bằng cách : .Kd = 0) đến khi hệ bắt đầu đao động ổn định quanh vị trí cân bằng ( có kích nhẹ ) ta có : k=0. Ti = 0.Cho hệ số khuếch đại K ( Ki.Vậy D = 1.282 .31s Kp = 0.1874 .Đồ án môn học I : điều khiển vị trí động cơ Bộ PID: Private Function PID(ByVal e As Double.18 - .

ngat time de quet truyen data org 0023h LJMP NGAT_NT.#01000010B .#01000010B MOV CCAPM3.Đồ án môn học I : điều khiển vị trí động cơ o CHƢƠNG TRÌNH TRÊN VI ĐIỀU KIỂN : INCLUDE p89v51rx2.#f3h MOV scon.#08h .-------------MOV CCAPM0. Lƣu giữ giá trị quét xuất dữ liệu ECD1 DATA 41h .IC SETB RCLK .mc ECD DATA 40h .#02h .#01000010B MOV CCAPM2.Nâng đôi tốc độ xử lý của MOV t2mod.#50h SETB TR2 .#01000010B MOV CCAPM1. tao toc do boau main: MOV fst. để đảm bảo xuất chính xác ECD3_p DATA 46h van_toc DATA 49h . Cờ nhập vận tốc org 0000h LJMP main org 0003h LJMP ngat_ngoai0 org 000bh LJMP ngat_T0.Cho phép xuất đữ liệu đếnPC MOV rcap2h. 3 byte tiếp trung gian lƣu giữ ECD2_p DATA 45h .19 - .cho phép nhận dữ liệu từ PC SETB TCLK .#ffh . 3 byte Lƣu giữ giá trị encoder ECD2 DATA 42h ECD3 DATA 43h ECD1_P DATA 44h . tốc độ baud 28800 MOV rcap2l. Vận tốc được nhập vào đây nhap_vt BIT 33h . giá trị để xuất.

reset giá trị encoder .A ACALL nhan_dk POP acc JNB ti. cho phép chức năng PCA chạy .thoat_ngat_nt CLR ri PUSH acc MOV A.#01h MOV ien0.#100 MOV ecd.#ffh SETB cr .-------------MOV tmod.#05h .#10010011b SETB it1 SETB it0 MOV ip0. nhận tốc độ chạy.------------------------------------------ngat_nt: JNB ri.Đồ án môn học I : điều khiển vị trí động cơ MOV CCAPM4. đứng .#ffh MOV ccap4h.#0h MOV ecd2.#0h MOV ecd3. . Gồm có nhận chỉ thị chạy tới .#128 SJMP $ . Chƣơng trình trong đoạn này để nhận tín hiệu điều khiển từ máy tính.-------------------------------------------MOV ecd1.******************************************************* .20 - .thoat_ngat_nt CLR ti thoat_ngat_nt: RETI . sbuf MOV p2.#01000010B MOV cmod.#1 SETB tr0 .ƣu tiên ngắt ngoài MOV ip0h.#0 MOV van_toc.chạy lùi .#0 CLR nhap_vt MOV ccap3h.

tiep0 LCALL nhap_vantoc LJMP thoat_nhan_dk CJNE A. van_toc A ccap4h.#4.tiep1 LCALL chay_toi LJMP thoat_nhan_dk CJNE A.#ffh ccap3h.A ccap4h.A ccap3h.tiep3 LCALL dung_dc LJMP thoat_nhan_dk CJNE A. van_toc A ccap3h.tiep2 LCALL chay_lui LJMP thoat_nhan_dk CJNE A.#0.#ffh A .#ffh ccap4h.tiep MOV van_toc.Đồ án môn học I : điều khiển vị trí động cơ .21 - .-----------------------------------nhan_dk: JNB nhap_vt.#2.#ffh .thoat_nhan_dk LCALL clr_ecd thoat_nhan_dk: RET chay_toi: MOV CPL MOV MOV RET chay_lui: MOV CPL MOV MOV RET dung_dc: MOV MOV RET nhap_vantoc: A .#1.#3.A CLR nhap_vt LJMP thoat_nhan_dk tiep: tiep0: tiep1: tiep2: tiep3: CJNE A.

#0 MOV ecd3. Ngắt timer 0 .------------------------------------------------------hien_thi: PUSH acc MOV A.O_N_1 MOV sbuf.#0.22 - .Đƣa chƣơng trình thu vào RET . nhập Vận tốc chế độ clr_ecd: MOV ecd1.******************************************************* .#4. . để liên tục gọi hàm hien_thi.Đồ án môn học I : điều khiển vị trí động cơ SETB nhap_vt .lần được gọi .#99 MOV R2.#fch MOV tl0. gồm có: .#128 RET . Hàm hien_thi tuần tự xuất 3 byte lưu trử .------------------------------------------------------ngat_T0: thoat: CLR tf0 CLR tr0 MOV th0.R2 .#00 SETB tr0 PUSH 00h MOV R0.ecd1 MOV ecd1_p.thoat MOV R0.#0 MOV ECD.ECD CJNE A.vị trí encoder của động cơ cho máy tính . .R0 POP 00h LCALL hien_thi RETI . Chƣơng trình trong 2 đoạn đƣới .#0 MOV ecd2. Mỗi . xuất 1 byte.ECD INC R0 CJNE R0.

Đồ án môn học I : điều khiển vị trí động cơ MOV R2.ecd1 CJNE R1.A SJMP Thoat_hien_thi O_N_3: CJNE A.thoat_tang_ecd MOV ECD2.O_N_2 MOV A.#0.O_N_3 MOV A.ecd3 MOV ecd3_p.a Thoat_hien_thi: POP acc ret .thoat_tang_ecd MOV ecd1.ecd2 CJNE R1.------------------------------------------------------tang_encoder: INC ECD1 MOV R1.#0 .ecd1_p MOV sbuf.-----------------------------------------------------------ngat_ngoai0: JNB p3. .#1.ecd3_p MOV sbuf.thoat_hien_thi MOV A.#2.#3. Nếu chân còn lại ở mức cao thì động cơ đang lùi .#0. ngƣợc lại là đang tiến.Ngắt ngoài khi có xung encoder vào vi điều khiển .23 - .#0 INC ECD2 MOV R1.ecd2_p MOV sbuf.R2 SJMP Thoat_hien_thi O_N_1: CJNE A.ecd2 MOV ecd2_p.3.R2 MOV R2.A SJMP Thoat_hien_thi O_N_2: CJNE A.******************************************************* .tang_encoder JMP giam_encoder thoat_ngat0: RETI .

giam_ecd2 MOV ecd2.24 - .giam_ecd1 MOV ecd1.#0.------------------------------------------------------giam_encoder: MOV R1.ecd2 CJNE R1.#ffh SJMP thoat_giam_ecd giam_ecd1: DEC ecd1 SJMP thoat_giam_ecd giam_ecd2: DEC ecd2 SJMP thoat_giam_ecd giam_ecd3: DEC ecd3 thoat_giam_ecd: LJMP thoat_ngat0 END .#ffh MOV R1.Đồ án môn học I : điều khiển vị trí động cơ INC ECD3 thoat_tang_ecd: LJMP thoat_ngat0 .#0.ecd3 CJNE R1.giam_ecd3 MOV ecd3.ecd1 CJNE R1.#0.#ffh MOV R1.

10 . 2 Sơ đồ khối…………………………………………………………………… 3 Sơ đồ chân…………………………………………………………………. 2 Khái quát các tính năng…………………………………………………….25 - .. giải thuật tổng quát…………………………….. 6 + Phần hiển thị……………………………………………………. 11  Chi tiết chƣơng trình ………………………………………………… 12 -Chƣơng trình trên visual basic……………………………………. 13 + PID số ………………………………………………………. 18 . 5 + Nguồn cho kit vxl………………………………………………..Mạch cầu H………………………………………………………. 19 Mục lục : …………………………………………………………………………. 4 B/ CHƢƠNG TRÌNH THỰC HIỆN……………………………………………… 5 I/ Thiết kế phần cứng……………………………………………………….Nguồn 24Vdc……………………………………………………..Đồ án môn học I : điều khiển vị trí động cơ Mục lục : Trang Lời nói đầu ………………………………………………………………………..Chƣơng trình trên vi điều khiển………………………………….. 12 + Giao diện VB………………………………………………… 12 + Code chƣơng trình trên VB…………………………………. 10 . 1 A/ SƠ LƢỢC VỀ VI ĐIỀU KIỂN P89V51Rx2………………………………….. 6 + Phần xử lý của kit………………………………………………. 7 + Phần giao tiếp…………………………………………………… 8  Sơ đồ toàn kít………………………………………………………… 10 Khối công suất…………………………………………………………. 5 Khối điều khiển ……………………………………………………….... 25 .. sơ đồ .. 11 II/ Chƣơng trình thực hiện………………………………………………….. 11  Thành phần .....