Trình tự chi tiết trong các chương trình con và 5 chương trình phục vụ Ngắt

Một phần của tài liệu điều khiển mờ và giao thức can trong đồng bộ tốc độ hệ động cơ dc (Trang 125 - 131)

CHƯƠNG 7 : GIẢI THUẬT CHƯƠNG TRÌNH

7.3 Lưu đồ giải thuật cho vi điều khiển trên các mơ-đun

7.3.2 Trình tự chi tiết trong các chương trình con và 5 chương trình phục vụ Ngắt

7.3.1.1 Trình tự chi tiết trong các chương trình con (dùng trong các lưu đồ giải thuật chương

trình MAIN )

· Chương trình con Khởi động các khối chức năng : Khởi động theo trình tự sau + Bộ PLL : Bus-Clock sẽ là 24 Mhz

+ Timer OC2 :dùng để lấy mẫu tốc độ động cơ – thời gian 20ms, cĩ sử dụng Ngắt ( Chỉ cĩ trên Node 1& 2 ; Khơng cĩ trên node 0 )

+ Bộ SCI0 : Tốc độ là 115200 Bit/s , cĩ sử dụng Ngắt khi nhận dữ liệu + Bộ điều xung PWM : Tần số xung điều khiển là 10 Khz

( Chỉ cĩ trên Node 1& 2 ; Khơng cĩ trên node 0 )

+ Bộ đếm xung A : Để đếm xung từ Encoder , đếm khi cạnh lên của xung ( Chỉ cĩ trên Node 1& 2 ; Khơng cĩ trên node 0 )

+ Bộ giao tiếp CAN0: tốc độ 1Mbit/s, sử dụng mã căn cước chuẩn ( Standard ID) + Chức năng Key-WakeUp ,dùng Ngắt để đọc giá trị phím được nhấn

+ Khởi động bộ giao tiếp IIC với hệ thống thời gian thực DS1307 và sử dụng Ngắt ngồi để đọc giá trị thời gian từ DS1307 ( Chỉ cĩ trên node 0 )

+ Khối hiển thị: LCD 2x16 ( đối với Node 0 là LCD 4x20 )

· Chương trình con Xử lý bức điện nhận từ CAN-Bus: ( dùng cho node 1 và 2 )

+ Dữ liệu được chứa trong biến chuỗi rxdata ( đã được lưu giá trị trong hàm Ngắt nhận bức điện CAN, bức điện nhận từ Node 0 gởi đến )

+ Cấu trúc dữ liệu trong biến chuỗi rxdata:

rxdata = khung truyền gốc (của PC trung tâm truyền xuống node 0) sau khi loại bỏ

Byte địa chỉ node cần điều khiển ( là byte 0)

+ Xĩa cờ báo hồn thành việc nhận dữ liệu từ CAN-Bus.

· Chương trình Xử lý dữ liệu nhận từ SCI0 ( dùng cho node 1 và 2 )

+ Dựa vào cấu trúc khung truyền của PC ở tại node truyền xuống node ( Chương 7 –

phần 7.2.1 ) để kiểm tra giá trị các byte điều khiển để thực hiện cơng việc tương ứng + Xĩa cờ báo hồn thành việc nhận dữ liệu từ cổng nối tiếp COM

· Chương trình con Xử lý phím được nhấn

- Giá trị nút được nhấn, đã được lưu lại trong biến key ( việc lưu là ở trong hàm ngắt ). Ở đây , ta chỉ cần kiểm tra giá trị biến key để thực hiện:

+ Nếu giá trị là 0xE0: Phím được nhấn là phím CHẠY à Cho động cơ chạy + Nếu giá trị là 0xD0: Phím được nhấn là phím DỪNG à Cho động cơ dừng + Nếu giá trị là 0xB0: Là phím TĂNG à Cho động cơ tăng tốc thêm 90 R.P.M + Nếu giá trị là 0x70 : Là phím GIẢM à Cho động cơ giảm tốc bớt 90 R.P.M - Xĩa cờ báo hồn thành việc phát hiện Phím nhấn ( cho giá trị cờ bằng 0 )

· Chương trình con Bộ điều khiển PI-Mờ

- Mờ hĩa các biến đầu vào ET và DET

- Giải mờ để tính các giá trị KP , KD, a - Suy ra giá trị KI theo cơng thức

D P I K K K a 2 =

- Điều rộng xung cho mạch động lực để điều khiển động cơ.

· Đoạn chương trình con Các việc thực thi khi động cơ dừng

- Điều rộng xung với Hiduty = 2% để dừng động cơ

- Khởi tạo lại (Reset) giá trị các tham số của bộ điều khiển PI-Mờ - Gởi lên PC khung truyền như sau: Gồm 6 byte

Bảng 7.10: Khung dữ liệu từ node 1 truyền lên PC tại đĩ – khi động cơ dừng

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 “1”hoặc “0” Ký tự “-” “S” “T” “O” “P” Byte 0 : + Cĩ giá trị là ký tự “1” khi động cơ hoạt động ở chế độ đồng bộ + Cĩ giá trị là ký tự “0” khi động cơ hoạt động ở chế độ độc lập

Hình 7.12: Hình minh họa dữ liệu truyền lên PC ở node 1 khi động cơ dừng

· Đoạn chương trình con Các việc thực thi khi động cơ chạy:

- Gởi lên PC một chuỗi byte với đầy đủ các thơng tin:

+ Giá trị xung đọc từ encoder trong 20ms ( Pulse: ) + Chế độ mà động cơ đang hoạt động

+ Giá trị vận tốc của động cơ 1 và động cơ 2

Hình 7.13: Hình minh họa dữ liệu truyền lên PC ở node 1 khi động cơ chạy

· Cấu trúc bức điện CAN mà mỗi node ( node 1 và node 2 ) gởi về cho node 0

- Cấu trúc bức điện này sẽ bao gồm các phần: Mã căn cước ID , độ ưu tiên , chiều dài của

khung dữ liệu trong bức điện và khung dữ liệu:

+ Bức điện của node 1 truyền về sẽ cĩ mã căn cước ID là 0x200 + Bức điện của node 2 truyền về sẽ cĩ mã căn cước ID là 0x300

Bảng 7.11: Khung truyền của bức điện CAN từ node 1 và node 2 truyền về node 0

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7

Mã bắt đầu của dữ liệu Số hàng ngàn Số hàng trăm Số hàng chục Số hàng đơn vị Ký tự “ - ” Chế độ hoạt động Checksum (ký tự “E”) Trong đĩ:

Byte 0 : Là mã bắt đầu của dữ liệu

+ Là ký tự “A” : Khung truyền của Node 1 ; Là ký tự “B” : Khung truyền của Node 2 Byte [1:4] : là giá trị hàng ngàn , trăm, chục ,đơn vị của tốc độ thật động cơ ( mã hĩa ở

dưới dạng từng ký tự )

Byte 6 : Phản hồi cho trung tâm biết chế độ hoạt động hiện giờ của động cơ + Là ký tự “1” : Động cơ đang hoạt động ở chế độ đồng bộ

+ Là ký tự “0” : Động cơ đang hoạt động ở chế độ độc lập

Byte 7: Là byte checksum riêng của chuỗi khung truyền này – là ký tự “E” ( E: End )

Hình 7.14: Khung truyền của bức điện CAN từ node 1 và node 2 truyền về node 0

7.3.1.2 5 chương trình phục vụ Ngắt

· Chương trình ngắt Timer OC2 – dùng để lấy mẫu: ( chỉ dùng cho Node1 và Node 2) - Đối với node 1:

+ Đọc giá trị trong bộ đếm xung A ( tại thanh ghi PACN32) , lưu vào biến toc_do_do + Đọc giá trị tốc độ thật của động cơ 2 từ Port H

+ Tính các giá trị : Sai số tốc độ ET = toc_do_do – toc_do_dat ; và đạo hàm sai số (tốc độ tăng ): DET = ET_mới – ET_cũ

+ Gởi tốc độ thật của động cơ 1 ( giá trị toc_do_do) ra Port A ( nếu giá trị toc_do_do cĩ thay đổi )

+ Reset bộ đếm xung A (thanh ghi PACN32 = 0 ) ; khởi tạo lại giá trị cho Timer OC2 và xĩa cờ ngắt ( ở thanh ghi TFLG1 ) để cho phép timer ngắt ở lần 20ms kế tiếp.

+ Thốt khỏi chương trình phục ngắt. - Đối với node 2:

+ Đọc giá trị trong bộ đếm xung A ( tại thanh ghi PACN32) , lưu vào biến toc_do_do + Đọc các giá trị của động cơ 1 từ Port A , lưu vào giá trị toc_do_dat

+ Tính các giá trị : Sai số tốc độ ET = toc_do_do – toc_do_dat ; và đạo hàm sai số (tốc độ tăng ): DET = ET_mới – ET_cũ

+ Gởi tốc độ thật của động cơ 2 ( giá trị toc_do_do) ra Port H

+ Reset bộ đếm xung A (thanh ghi PACN32 = 0) ; khởi tạo lại giá trị cho Timer OC2 và xĩa cờ ngắt ( ở thanh ghi TFLG1 ) để cho phép timer ngắt ở lần 20ms kế tiếp

+ Thốt khỏi chương trình phục ngắt.

· Chương trình ngắt nhận dữ liệu từ cổng COM qua RS232

Ở đây , các vi điều khiển trên cả 3 mơ-đun (node) đều sử dụng bộ SCI0. Chỉ trình bày chương trình dành cho node 1&2 ( cịn chương trình dành cho node 0 đã được trình bày đầy đủ trên lưu đồ giải thuật của node 0 )

+ Đã khai báo trước 1 biến kiểu mảng ,gọi là SCI0_In[ index ] . Mỗi khi vào thực thi chương trình ngắt , giá trị từ bộ đệm sẽ được lưu vào mảng , giá trị chỉ số của mảng :

index sẽ được tăng thêm 1.

+ Dựa vào byte đầu tiên của dữ liệu nhận được ( khi đĩ đã lưu vào SCI0_In[0] ) , ta sẽ định biết khung truyền đang nhận này sẽ cĩ bao nhiêu byte . Từ đĩ xác định chính xác chiều dài của khung truyền , và lưu vào biến frame_len ( Để xác định được chiều dài hãy xem cấu trúc Khung truyền từ PC xuống node 1 tại Chương 7 - phần 7.2.1 )

+ Khi chỉ số index của mảng SCI0_In[ index ] bằng giá trị chiều dài frame_len , sẽ reset giá trị của biến index ( index = 0 ) và kiểm tra byte cuối cùng của chuỗi - Nếu byte đĩ đúng là byte CheckSum ( là ký tự “F” ) thì việc nhận dữ liệu thành cơng à Sẽ cho cờ

+ Xĩa cờ ngắt ( trong thanh ghi SCI0SR1 ) để chuẩn bị cho lần ngắt nhận kế tiếp và thốt khỏi chương trình phục ngắt.

· Chương trình ngắt nhận bức điện CAN :

+ Đọc giá trị chiều dài của bức điện trong thanh ghi CAN0RXDLR của bộ MSCAN0 + Lặp vịng để lưu tất cả dữ liệu trong bức điện vào biến mảng rxdata[index] ( với index là

chỉ số của mảng )

+ Kiểm tra byte CheckSum , nếu đúng là ký tự “F” thì cho cờ báo hồn thành việc nhận

dữ liệu từ CAN-Bus lên 1.

+ Xĩa cờ báo ngắt ( trong thanh ghi CAN0RFLG) để chuẩn bị cho lần ngắt nhận kế tiếp . + Thốt khỏi chương trình phục ngắt.

· Chương trình ngắt của Phím nhấn ( chức năng Key-WakeUp)

+ Cấm tất cả các chân thuộc 4 bit cao của Port P khơng được ngắt Key-WakeUp

+ Đọc giá trị 4 bit cao của Port P ( nơi kết nối với 4 phím nhấn) , rồi lưu vào biến key đã khai báo sẵn. Sau đĩ cho cờ báo hồn thành việc đọc giá trị phím nhấn lên 1.

+ Xĩa cờ ngắt và cho phép lại các chân thuộc 4 bit cao của Port P được thực hiện chức năng Key-WakeUp , sau cùng là thốt khỏi chương trình phục vụ ngắt

· Chương trình ngắt ngồi để cập nhật thời gian từ DS1307 : ( Ngắt này chỉ cĩ ở node 0 ) + Sử dụng giao tiếp IIC , đọc lần lượt các giá trị: giây , phút , giờ ở các địa chỉ RAM của

DS1307 tương ứng là: 0x00 , 0x01 , 0x02. Các giá trị ở dưới dạng BCD .

+ Chuyển các giá trị nhận được ở trên ( mã BCD) sang số dạng thập phân và lưu vào các biến: sec , minute , hour ( các biến này là biến tồn cục ,được khai báo từ trước )

+ Cho cờ báo hồn thành việc đọc giá trị thời gian lên 1. + Thốt khỏi chương trình phục vụ ngắt.

Một phần của tài liệu điều khiển mờ và giao thức can trong đồng bộ tốc độ hệ động cơ dc (Trang 125 - 131)

Tải bản đầy đủ (PDF)

(139 trang)