Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
317 KB
Nội dung
Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com LỜI NÓI ĐẦU Động chiều có nhiều ứng dụng điều khiển sản xuất công nghiệp Trong đòi hỏi động phải có nhiều cấp tốc độ tăng giảm dễ dàng Với đời phát triển vi xử lý vấn đề điều khiển động chiều không vấn đề khó khăn Động điều khiển với nhiều cấp tốc độ khác điều khiển dừng, đảo chiểu , nhanh chậm dễ dàng Vi xử lý 8501 loại dòng vi xử lý thông dụng có mặt từ lâu ứng dụng vào nhiều thiết bị điều khiển hay tự động hóa Nên việc điều khiển động chiều với dòng vi xử lý phương pháp tối ưu kinh tế toán điều khiển động DC ngày Trên sở kiến thức học từ môn vi xử lý Chúng em thực tập : Điều khiển động chiều (DC) Với yêu cầu điều khiển : Dừng, Quay thuận, Quay nghịch, Tăng tốc, Giảm tốc Chúng em cám ơn thầy Nguyễn Thanh Bình hướng dẫn chúng em làm tập Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com CHƯƠNG I: VI ĐIỀU KHIỂN 8501 Bắt đầu xuất vào năm 1980, trải qua gần 30 năm, có tới hang trăm biến thể (derrivatives) sản xuất 20 hãng khác nhau, phải kể đến đại gia làng bán dẫn (Semiconductor) ATMEL, Texas Instrument, Philips, Analog Devices… Tại Việt Nam, biến thể hãng ATMEL AT89C51, AT89C52, AT89S51, AT89S52… có thời gian xuất thị trường lâu nói sử dụng rộng rãi loại vi điều khiển bit Cấu trúc bus Bus địa họ vi điều khiển 8051 gồm 16 đường tín hiệu (thường gọi bus địa 16 bit) Với số lượng bit địa trên, không gian nhớ chip mở rộng tối đa 216 = 65536 địa chỉ, tương đương 64K Bus liệu họ vi điều khiển 8051 gồm đường tín hiệu (thường gọi bus Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com liệu bit), lý nói 8051 họ vi điều khiển bit Với độ rộng bus liệu vậy, chip họ 8051 xử lý toán hạng bit chu kỳ lệnh CPU (Central Processing Unit) CPU đơn vị xử lý trung tâm, não toàn hệ thống vi điện tử tích hợp chip vi điều khiển CPU có cấu tạo gồm đơn vị xử lý số học lôgic ALU (Arithmethic Logic Unit) - nơi thực tất phép toán số học phép lôgic cho trình xử lý Bộ nhớ chương trình (Program Memory) Không gian nhớ chương trình AT89 64K byte, nhiên hầu hết vi điều khiển AT89 thị trường tích hợp sẵn chip lượng nhớ chương trình định chiếm dải địa từ 0000h trở không gian nhớ chương trình AT89C51/AT89S51 có 4K byte nhớ chương trình loại Flash tích hợp sẵn bên chip Đây nhớ cho phép ghi/xóa nhiều lần điện, cho phép người sử dụng thay đổi chương trình nhiều lần Số lần ghi/xóa thường lên tới hàng vạn lần Bộ nhớ chương trình dùng để chứa mã chương trình nạp vào chip Mỗi lệnh mã hóa hay vài byte, dung lượng nhớ chương trình phản ánh số lượng lệnh mà nhớ chứa Địa nhớ chương trình (0x0000) địa Reset 8051 Ngay sau reset (do tắt bật nguồn, mức điện áp chân RESET bị kéo lên 5V ), CPU nhảy đến thựchiện lệnh đặt địa trước tiên, luôn Phần trống không gian chương trình không dùng để làm Nếu muốn mở rộng nhớ chương trình, ta phải dùng nhớ chương trình bên có dung lượng ý muốn Tuy nhiên dùng nhớ chương trình ngoài, nhớ chương trình onchip không dùng nữa, nhớ chương trình chiếm dải địa từ địa 0x0000 Bộ nhớ liệu (Data Memory) Vi điều khiển họ 8051 có không gian nhớ liệu 64K địa chỉ, dung lượng nhớ liệu lớn mà chip thuộc họ có (nếu phối ghép cách tắc, sử dụng đường tín hiệu bus địa liệu) Bộ nhớ liệu chip họ 8051 thuộc hay hai loại: SRAM EEPROM Bộ nhớ liệu SRAM tích Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com hợp bên chip thuộc họ vi điều khiển này, có dung lượng khác tùy loại chip, thường khoảng vài trăm byte Đây nơi chứa biến trung gian trình hoạt động chip điện, chất SRAM mà giá trị biến bị theo Khi có điện trở lại, nội dung ô nhớ chứa biến bất kỳ, xác định trước Bên cạnh nhớ loại SRAM, số chip thuộc họ 8051 có thêm nhớ liệu loại EEPROM với dung lượng tối đa vài Kbyte, tùytừng loại chip cụ thể Dưới vài ví dụ nhớ chương trình số loại chip thông dụng thuộc họ 8051 STT Tên chip AT89C51 AT89C52 AT89C2051 AT89S51 AT89S52 AT89S8252 Bộ nhớ SRAM 128 byte 256 byte 128 byte 128 byte 256 byte 256 byte Bộ nhớ EEPROM 0 0 2048 byte Đối với chip có nhớ SRAM 128 byte địa byte SRAM đánh số từ 00h đến 7Fh Đối với chip có nhớ SRAM 256 byte địa byte SRAM đánh số từ 00h đến FFh Ở hai loại chip, SRAM có địa từ 00h đến 7Fh gọi vùng RAM thấp, phần có địa từ 80h đến FFh (nếu có) gọi vùng RAM cao Bên cạnh nhớ, bên chip 8051 có tập hợp ghi chức đặc biệt (SFR – Special Function Register) Các ghi lien quan đến hoạt động ngoại vi onchip (các cổng vào ra, timer, ngắt ) Địa chúng trùng với dải địa vùng SRAM cao, tức có địa từ 80h đến FFh Các nghi đặc biệt SFR Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Cổng vào song song (I/O Port) 8051 có cổng vào song song, có tên P0, P1, P2 P3 Tất cảcác cổng cổng vào hai chiều 8bit Các bit cổng chân chip, cổng có chân chip Hướng liệu Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com dùng cổng làm cổng hay cổng vào) độc lập cổng chân (các bit) cổng Ví dụ, ta định nghĩa cổng P0 cổng ra, P1 cổng vào ngược lại cách tùy ý, với cổng P2 P3 lại Trong cổng P0, ta định nghĩa chân P0.0 cổng vào, P0.1 lại cổng tùy ý Cổng P0 điện trở treo cao (pullup resistor) bên trong, mạch lái tạomức cao có sử dụng cổng với tính bus dồn kênh địa chỉ/dữ liệu Như với chức thông thường, P0 cổng open drain, với chức vào, P0 cổng vào cao trở (high impedance) Nếu muốn sử dụng cổng P0 làm cổng vào/ra thông thường, ta phải thêm điện trở pullup bên Giá trị điện trở pullup bên thường từ 4K7 đến 10K Các cổng P1, P2 P3 có điện trở pullup bên trong, dùng với chức cổng vào/ra thông thường mà không cần có thêm điện trở pullup bên Thực chất, điện trở pullup bên FET, điện trở tuyến tính thông thường, khả phun dòng mạch lái đầu mức cao (hoặc đầu vào) nhỏ, khoảng 100 micro Ampe Cổng vào nối tiếp (Serial Port) Cổng nối tiếp 8051 chủ yếu dùng ứng dụng có yêu cầu truyền thông với máy tính, với vi điều khiển khác Liên quan đến cổng nối tiếp chủ yếu có ghi: SCON SBUF Ngoài ra, ghi khác ghi PCON (không đánh địa bit) có bit tên SMOD quy định tốc độ truyền cổng nối tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD = 0) Ngắt (Interrupt) 8051 có số lượng nguồn ngắt (interrupt source) gọi nguyên nhân ngắt Mỗi ngắt có vector ngắt riêng, địa cố định nằm nhớ chương trình, ngắt xảy ra, CPU tự động nhảy đến thực lệnh nằm địa Với 8052, ngắt có thêm ngắt timer2 (do vi điều khiểnnày có thêm timer2 số ngoại vi onchip) Mỗi ngắt dành cho vector ngắt kéo dài 8byte Về mặt lý thuyết, chương trình đủ ngắn, mã tạo chứa đủ byte, người lập trình hoàn toàn đặt phần chương trình xử lý ngắt vector ngắt Tuy nhiên hầu hết trường hợp, chương trình xử lý ngắt có dung lượng Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com mã tạo lớn 8byte nên vector ngắt, ta đặt lệnh nhảy tới chương trình xử lý ngắt nằm vùng nhớ khác Nếu không làm vậy, mã chương trình xử lý ngắt lấn sang, đè vào vector ngắt kế cận Bảng tóm tắt ngắt 8051 sau: Để cho phép ngắt, bit tương ứng với ngắt bit EA phải đặt Thanh ghi IE ghi đánh địa bit, dùng lệnh tác động bit để tác động riêng rẽ lên bit mà không làm ảnh hưởng đến giá trị bit khác Cờ ngắt hoạt động độc lập với việc cho phép ngắt, điều có nghĩa cờ ngắt tự động đặt lên có kiện gây ngắt Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com xảy ra, kiện có cho phép ngắt hay không Do vậy, trước cho phép ngắt, ta nên xóa cờ ngắt để đảm bảo sau cho phép, kiện gây ngắt khứ gây ngắt 8051 có ngắt INT0 INT1 Ngắt hiểu ngắt gây kiện mức lôgic (mức điện áp thấp, gần 0V) sườn xuống (sự chuyển mức điện áp từ mức cao mức thấp) xảy chân ngắt tương ứng (P3.2 với ngắt P3.3 với ngắt 1) Việc lựa chọn kiểu ngắt thực bit IT (Interrupt Type) nằm ghi TCON Đây ghi điều khiển timer bit LSB (bit0 3) dùng cho ngắt Khi bit ITx = ngắt tương ứng chọn kiểu ngắt theo sườn xuống, ngược lại bit ITx = ngắt tương ứng có kiểu ngắt ngắt theo mức thấp Các bit IE bit cờ ngắt ngoài, có tác dụng trường hợp kiểu ngắt chọn ngắt theo sườn xuống Khi kiểu ngắt theo sườn xuống chọn ngắt xảy lần có sườn xuống tín hiệu, sau tín hiệu mức thấp, có sườn lên, mức cao ngắt xảy có sườn xuống Cờ ngắt IE dựng lên có sườn xuống tự động bị xóa CPU bắt đầu xử lý ngắt Khi kiểu ngắt theo mức thấp chọn ngắt xảy tín hiệu chân ngắt mức thấp Nếu sau xử lý xong ngắt mà tín hiệu mức thấp lại ngắt tiếp, xử lý xong ngắt lần thứ n , tín hiệu lên mức cao không ngắt Cờ ngắt IE trường hợp ý nghĩa cả.Thông thường kiểu ngắt hay chọn ngắt theo sườn xuống Bộ định thời/Bộ đếm (Timer/Counter) 8051 có timer tên timer0 timer1 Các timer timer 16bit, giátrị đếm max 216 = 65536 (đếm từ đến 65535) Hai timer có nguyên lý hoạt động hoàn toàn giống độc lập Sau cho phép chạy, có thêm xung đầu vào đếm, giá trị timer tự động tăng lên đơn vị, giá trị tăng lên vượt giá trị max mà ghi đếm biểu diễn giá trị đếm lại đưa trở giá trị (thông thường = 0) Sự kiện hiểu kiện tràn timer (overflow) gây ngắt ngắt tràn timer Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com cho phép (bit ETx ghi IE = 1) Việc cho timer chạy/dừng thực bit TR ghi TCON (đánh địa đến bit) Khi bit TRx = 1, timerx đếm, ngược lại TRx = 0, timerx không đếm có xung đưa vào Khi dừng không đếm, giá trị timer giữ nguyên Các bit TFx cờ báo tràn timer, kiện tràn timer xảy ra, cờ tự động đặt lên ngắt tràn timer cho phép, ngắt xảy Khi CPU xử lý ngắt tràn timerx, cờ ngắt TFx tương ứng tự động xóa Giá trị đếm 16bit timerx lưu hai ghi THx (byte cao) TLx (byte thấp) Hai ghi ghi/đọc lúc Tuy nhiên nhà sản xuất khuyến cáo nên dừng timer (cho bit TRx = 0) trước ghi/đọc ghi chứa giá trị đếm Các timer hoạt động theo nhiều chế độ, quy định bittrong ghi TMOD (không đánh địa đến bit) Để xác định thời gian, người ta chọn nguồn xung nhịp (clock) đưa vào đếm timer xung nhịp bên (dành cho CPU) Nguồn xung nhịp thường đặn (có tần số ổn định), từ số đếm timer người ta nhân với chu kỳ xung nhịp để tính thời gian trôi qua Timer lúc gọi xác với tên “timer”, tức định thời Để đếm kiện bên ngoài, người ta chọn nguồn xung nhịp đưa vào đếm timer tín hiệu từ bên (đã chuẩn hóa dạng xung vuông 0V/5V) Các tín hiệu nối với bit cổng có dồn kênh thêm tính T0/T1/T2 Khi có kiện bên gây thay đổi mức xung đầu vào đếm, timer tự động tăng lên đơn vị giống trường hợp đếm xung nhịp bên Lúc này, timer gọi xác với tên khác: “counter”, tức đếm (sự kiện) Nhìn vào bảng mô tả ghi TMOD bên trên, ta nhận thấy có bit giống (gồm GATEx, C/Tx, Mx0 Mx1) dành cho timer0 Ý nghĩa bit timer Bit GATEx quy định việc cho phép timer đếm (run timer) Nếu GATEx = 0,timerx đếm bit TRx 1, dừng bit TRx Nếu GATEx = 1, timerx đếm bit TRx = tín hiệu chân INTx = 1, dừng hai điều kiện không thỏa mãn Thông thường người ta dùng timer với GATE = 0, dùng timer với GATE = trường hợp muốn đo độ rộng xung lúc timer đếm thời gian xung đưa vào chân INTx mức cao Bit C/Tx quy định nguồn clock đưa Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com vào đếm timer Nếu C/Tx = 0, timer cấu hình định thời, C/Tx = 1, timer cấu hình đếm kiện Hai bit lại (Mx0 Mx1) tạo tổ hợp giá trị (00,01,10 11) ứng với chế độ hoạt động khác timerx Trong chế độ thường dùng chế độ timer/counter 16bit (Mx1 = 0, Mx0 = 1) chế độ Auto Reload 8bit timer/counter (Mx1 = 1, Mx0 = 0).Trong chế độ timer/counter 16bit, giá trị đếm (chứa hai ghi THx TLx) tự động tăng lên đơn vị lần nhận thêm xung nhịp Khi giá trị đếm tăng vượt giá trị max = 65535 tràn 0, cờ ngắt TFx tự động đặt = Chế độ dùng ứng dụng đếm thời gian đếm kiện Trong chế độ Auto Reload 8bit, giá trị đếm chứa ghi TLx, giá trị ghi THx số n (từ đến 255) người lập trình đưa vào Khi có thêm xung nhịp, giá trị đếm TLx đương nhiên tăng lên đơn vị bình thường Tuy nhiên trường hợp này, giá trị đếm lớn 255 65535 trường hợp timer/counter 8bit Do kiện tràn lúc xảy nhanh hơn, cần vượt 255 giá trị đếm tràn Cờ ngắt TFx tự động đặt = trường hợp tràn 16bit Điểm khác biệt thay tràn 0, giá trị THx tự động nạp lại (Auto Reload) vào ghi TLx, timer/counter sau tràn có giá trị n (giá trị chứa THx) đếm từ giá trị n trở Chế độ dùng việc tạo Baud rate cho truyền thông qua cổng nối tiếp Để sử dụng timer 8051, thực bước sau: - Quy định chế độ hoạt động cho timer cách tính toán ghi giá trị cho bit ghi TMOD - Ghi giá trị đếm khởi đầu mong muốn vào ghi đếm THx TLx Đôi ta không muốn timer/counter bắt đầu đếm từ mà từ giá trị để thời điểm tràn gần hơn, chẵn tính toán sau Ví dụ cho timer đếm từ 15535 sau 50000 xung nhịp (tức 50000 micro giây với thạch anh 12MHz) timer tràn, thời gian giây dễ dàng tính xác = 20 lần tràn timer (đương nhiên lần tràn lại phải nạp lại giá trị 15535) - Đặt mức ưu tiên ngắt cho phép ngắt tràn timer (nếu muốn) - Dùng bit TRx ghi TCON timer chạy hay dừng theo ý muốn 10 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Chương II : ĐIỀU CHẾ PWM ĐỂ ĐIỀU KHIỂN ĐỘNG CƠ CHIỀU Để điều khiển tốc độ động ta cần thay đổi độ rộng xung vi điều khiển Độ rộng xung lớn động quay nhanh Như biết việc điều khiển nhấp nháy LED điều chế PWM xung có độ rộng thay đổi tần số lớn điều khiển hàm trễ (delay) Tuy nhiên dùng hàm delay thời gian xung lên 5V xuống 0V vi điều khiển không làm việc tạo xung hàm delay ta muốn phát xung kênh có độ rộng thay đổi khó khăn sử dụng định thời timer phương pháp tối ưu I :Ngắt định thời Timer Ngắt đáp ứng kiện bên bên nhằm thông bào cho vi điều khiển biết thiết bị cần phục vụ Một chương trình ngắt chạy liên tục, chương trình mà có ngắt có ngắt đảm bảo trỏ nhảy sang hàm ngắt thực xong hàm ngắt quay trở chỗ cũ thực tiếp chương trình 11 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Ví dụ : bạn học mà có tiếng chuông điện thoại kêu , bạn dừng việc học lại để nghe điện thoại nghe xong bạn lại trở học tiếp Như bạn học chương trình bạn nghe điện thoại điều kiện ngắt Bạn nghe điện thoại thực chương trình ngắt sau quay học chương trình Nhìn vào tiến trình hàm main có ngắt : Chương trình chạy, ngắt xẩy ra, thực hàm ngắt quay lại chương trình Thời gian thực hàm ngắt nhỏ thời gian thực hàm ngắt không ảnh hưởng đến chức hàm hàm ngắt thực công việc hàm thực công việc Ví dụ : với ngắt định thời Timer hay đếm couter tràn đếm phần cứng vi điều khiển bào có ngắt xảy nhảy đến chương trình phục vụ ngắt Với ngắt ta khai báo chân sử dụng ngắt (P3_2) mà chân sử dụng cho ngắt mà không sử dụng cho IO xung xuất chân vi điều khiển nhận có điều kiện tắc động vào phần cứng vi điều khiển thực chương trình ngắt Với ngắt cổng nối tiếp thu song kí tự hay truyền song kí tự cổng nối tiếp , ta có sử dụng ngắt để truyền liệu nối tiếp chương trình nhảy đến chương trình phục vụ ngắt * Hàm ngắt: Void tenhamngat(void) interrupt nguồn ngắt { // Chương trình ngắt } + Chú ý hàm ngắt - Hàm ngắt không trả lại hay truyền biến vào hàm - Tên hàm - Interrupt hàm ngắt phải phân biệt với hàm khác - Nguồn ngắt từ 0-5 theo bảng vecto ngắt - Băng ghi Ram chọn từ 0-3 Các bảng nguồn ngắt 12 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Riêng ngắt Reset không tính bắt đầu đếm từ ngắt từ void timer1_isr(void) interrupt using { // Lenh can thuc hien } II: Tạo PWM từ ngắt Timer 1) Cách tạo hàm ngắt Để tạo hàm ngắt ta phải làm công việc sau đây: a) Khởi tạo hàm ngắt Dùng ngắt cho phép ngắt hoạt động cách gán giá trị cho ghi cho phép ngắt IE b) Cấu hình ngắt Trong ngắt có nhiều chế độ Với ngắt Timer0 cấu hình cho chạy chế độ nào, chế độ timer hay counter, chế độ 8bit ,16bit…bằng cách gán cho giá trị tương ứng TMOD 13 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com c) Bắt đầu chương trình có ngắt + Trước chạy chương trình ngắt ta phải cho phép ngắt toàn cục xẩy cách gán EA =1 ngắt xẩy + Các giá trị ghi TCON 14 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com 2: Tạo PWM có chu kì max : 100us a) Tạo timer Do yêu cầu toán điều khiển tốc độ động quay nhanh quay chậm chạy thuận nghịch nên nguyên chu kì thay đổi thời gian mở Yêu cầu như: + Động quay thuận nghịch bình thường : 1000us + Động tăng tốc lớn : 100us + Động giảm tốc lớn : 2000us Khi bắt đầu cho timer chạy đếm timer đếm dao động thạch anh, 12 dao động cửa thạch anh đếm timer TL0 đếm tăng , nói timer đếm chu kì máy chế độ 8bit 15 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com TL0 ghi bit đếm từ đến 255 Nếu đếm đến 256 tràn đếm TL0 lại quay cờ ngắt TF0 tự động nạp lại giá trị ngắt xảy Như toán ta cần tạo timer 100us nên ta tính theo công thức ta có : Timer0 = (255 – TL0) * 1us Như để tạo timer0 100us cần phải gán giá trị TL0=155 đếm từ 155 – 255 tức 100 lần ngắt xẩy Để điều khiển nhanh chậm động ta phải tạo xung có độ rộng 5%, 10% .95%,100% Như ta có khoảng thời gian kéo lên 5V T1 Xung có độ rộng 10% tức T1/T=10% b) Nguyên lý hoạt động PWM * PWM : Đưa để mở transitor , xung có độ rộng lớn transitor mở lâu động quay nhanh mà không tuyến tính Không có xung động không quay, xung có độ rộng 100% động quay lớn Tuy nhiên xung phải lớn mức đủ khởi động động Để thay đổi độ rộng xung theo 10 cấp khác ( lấy giá trị quay thuận nghịch lúc bình thường 1000us) với chu kì 2000us.ta phải khởi tạo timer 1000us lại ngắt lần * Hàm khởi tạo timer0 16 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Như nói muốn có giá trị timer0 cần gán cho TL0 ghi đếm sau tràn tạo timer 100us nên ta dùng chế độ bit tự nạp void khoitaotimer0(void)// Ham khoi tao { EA=0;// Cam ngat toan cuc TMOD=0x02;// Timer che bit auto reload TH0=0x9B;// Gia tri nap lai 155 doi so hex TL0=0x9B;// Gia tri khoi tao 155 doi so hex ET0=1;// Cho phep ngat timer EA=1;// Cho phep ngat toan cuc TR0=1;// Chay timer bat dau dem so chu ki may } * Hàm ngắt bit PWM; unsigned char dem=0;// Khai bao bien dem de dem tu den 10 unsigned char phantram_PWM =10 ;// Bien chua phan tram xung(0 10) void timer0(void) interrupt //Ngat timer { TR0=0;// Dung chay timer TF0=0;// Xoa co, o che co tu duoc xoa dem++; if(dem phantram_PW M Dem=2 Dem=0 PWM=1 PWM=0 exit Chương trình 18 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com Begin Phục vụ ngắt Timer0 Khai báo biến Khởi động Timer0 Khởi tạo Stack Stop Thuận P1_ P1_1 exit P2_0=0 P2_1=0 Báo hiệu Nghịch Tăng tốc P1_ P1_2 exit P2_0= pwm P2_1=0 Báo hiệu Giảm tốc exit P2_0=0 P2_1=pwm Báo hiệu P1_ exit exit Phantram_pwm - Hiện thị Phantram_pwm ++Hiện thị II ) Chương trình : /* Dieu khien toc dong co DC : Quay thuan, quay nghich, tang toc, giam toc Nhom 6: Nguyen Van Bien - TBD47 Nguyen Son Tung - TBD47 Nguyen Duc Hanh - TBD47 Quan Duc Huong - TBD47 Do Van Khang - TBD47 Dang Thi Tuyet Lan - TBD47 Nghiem Minh Tuan - TBD47 19 Vi xử lý : Điều khiển động chiều biendt.biendt@gmail.com */ // Chan dieu khien dong co la : P2_0 va P2_1 // chan de dieu khien : Quay thuan, quay nghich, Dung, Tang toc, giam toc // chan bao hieu dong co dang o che nao #include /* Dinh nghia cac nut nhan*/ #define stop P1_0 #define thuan P1_1 #define nghich P1_2 #define tang P1_3 #define giam P1_4 bit PWM; unsigned char dem=0; unsigned int phantram_PWM=10; /* Ham tao thoi gian tre*/ void delay(unsigned int t) { unsigned int i,j; for(i=0;i[...]...Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com Chương II : ĐIỀU CHẾ PWM ĐỂ ĐIỀU KHIỂN ĐỘNG CƠ 1 CHIỀU Để điều khiển được tốc độ động cơ thì ta chỉ cần thay đổi độ rộng xung trong vi điều khiển Độ rộng xung càng lớn thì động cơ quay càng nhanh Như chúng ta đã biết thì việc điều khiển nhấp nháy 1 con LED cũng là chúng ta đã điều chế được PWM rồi nhưng xung đó có... bộ đếm couter là khi tràn bộ đếm thì phần cứng của vi điều khiển sẽ bào là có ngắt xảy ra và nhảy đến chương trình phục vụ ngắt Với ngắt ngoài nếu ta khai báo chân sử dụng ngắt ngoài (P3_2) mà chân sử dụng cho ngắt mà không sử dụng cho IO thì cứ 1 xung xuất hiện ở chân này thì vi điều khiển nhận ra rằng là có điều kiện tắc động vào phần cứng và vi điều khiển thực hiện chương trình ngắt Với ngắt cổng... yêu cầu của bài toán là điều khiển tốc độ động cơ quay nhanh và quay chậm trong khi chạy thuận nghịch nên dữ nguyên chu kì và thay đổi thời gian mở Yêu cầu như: + Động cơ quay thuận nghịch bình thường : 1000us + Động cơ tăng tốc lớn nhất : 100us + Động cơ giảm tốc lớn nhất : 2000us Khi bắt đầu cho timer 0 chạy thì bộ đếm của timer sẽ đếm dao động thạch anh, cứ 12 dao động cửa thạch anh thì bộ đếm timer... phantram_PW M Dem=2 0 Dem=0 PWM=1 PWM=0 exit Chương trình chính 18 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com Begin Phục vụ ngắt Timer0 Khai báo các biến Khởi động Timer0 Khởi tạo Stack Stop Thuận P1_ 0 P1_1 exit P2_0=0 P2_1=0 Báo hiệu Nghịch Tăng tốc P1_ 3 P1_2 exit P2_0= pwm P2_1=0 Báo hiệu Giảm tốc exit P2_0=0 P2_1=pwm Báo hiệu P1_ 4 exit exit Phantram_pwm - Hiện thị Phantram_pwm ++Hiện... của bài ra : Quay thuận, quay nghịch, tăng tốc, giảm tốc, dừng Đây chỉ là mô hình và nguyên lý điều khiển động cơ 1 chiều Mạch trên chỉ điều khiển được động cơ công suất nhỏ không điều khiển được động cơ công suất lớn Để điều khiển được động cơ công suất lớn thì cần phải có mạch công suất khác 24 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com Một lần nữa xin cám ơn thầy : Nguyễn Thanh... Timer0 cấu hình cho nó chạy ở chế độ nào, chế độ timer hay counter, chế độ 8bit ,16bit…bằng cách gán cho giá trị tương ứng TMOD 13 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com c) Bắt đầu chương trình có ngắt + Trước khi chạy chương trình ngắt ta phải cho phép ngắt toàn cục được xẩy ra bằng cách gán EA =1 thì ngắt mới xẩy ra + Các giá trị thanh ghi TCON 14 Vi xử lý : Điều khiển động cơ 1... sự kiện bên trong và bên ngoài nhằm thông bào cho bộ vi điều khiển biết thiết bị đang cần phục vụ Một chương trình không có ngắt thì chạy liên tục, còn chương trình mà có ngắt thì cứ khi nào có ngắt được đảm bảo thì con trỏ sẽ nhảy sang hàm ngắt thực hiện xong thì hàm ngắt quay trở về đúng chỗ cũ và thực hiện tiếp chương trình chính 11 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com Ví... void main() { khoitaohethong(); while(1) 23 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com { tangtoc(); giamtoc(); chonchedo(); hienthi((20-phantram_PWM)/10,(20-phantram_PWM)%10); } } Chương trình này đã được kiểm tra trên mô phỏng phần mền Protues III) Mạch nguyên lý KẾT LUẬN Sau 1 thời gian tìm hiểu và làm bài tập thì bài tập điều khiển động cơ 1 chiều đã được hoàn thành đúng thời... dem=0;// Neu dem du 20 thi gan lai bang 0 de bat dau chu ki moi TR0=1;// Cho chay timer } Do yêu cầu bài toán là điều khiển thuận nghịch nên ta cần phải lưu biến PWM này Do PWM có chu kì không đổi nên do đó ta chỉ cần thay đổi phantram_PWM là có thể thay đổi được độ rộng xung 17 Vi xử lý : Điều khiển động cơ 1 chiều biendt.biendt@gmail.com CHƯƠNG III : LƯU ĐỒ - CHƯƠNG TRÌNH – MẠCH NGUYÊN LÝ Do yêu cầu... xong là bạn lại trở về học bài tiếp Như vậy bạn đang học bài là chương trình chính còn bạn nghe điện thoại là điều kiện ngắt Bạn nghe điện thoại là thực hiện chương trình ngắt sau đó quay về học bài là chương trình chính Nhìn vào tiến trình của hàm main và có ngắt : Chương trình chính đang chạy, ngắt xẩy ra, thực hiện hàm ngắt rồi quay lại chương trình chính Thời gian thực hiện hàm ngắt rất nhỏ cho ... biết vi c điều khiển nhấp nháy LED điều chế PWM xung có độ rộng thay đổi tần số lớn điều khiển hàm trễ (delay) Tuy nhiên dùng hàm delay thời gian xung lên 5V xu ng 0V vi điều khiển không làm vi c... Analog Devices… Tại Vi t Nam, biến thể hãng ATMEL AT89C51, AT89C52, AT89S51, AT89S52… có thời gian xu t thị trường lâu nói sử dụng rộng rãi loại vi điều khiển bit Cấu trúc bus Bus địa họ vi điều... theo sườn xu ng chọn ngắt xảy lần có sườn xu ng tín hiệu, sau tín hiệu mức thấp, có sườn lên, mức cao ngắt xảy có sườn xu ng Cờ ngắt IE dựng lên có sườn xu ng tự động bị xóa CPU bắt đầu xử lý ngắt