1. Trang chủ
  2. » Luận Văn - Báo Cáo

TÌM HIỂU VỀ ĐỘNG CƠ BƯỚC THIẾT KẾ MẠCH ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC PHA, CÓ ĐIỀU KHIỂN BẰNG PHÍM VÀ HIỂN THỊ RA LED 7 ĐOẠN

40 60 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 1,73 MB
File đính kèm Vi_Dieu_Khien_Stepper_4.zip (2 MB)

Nội dung

Đồ án Kỹ thuật vi điều khiển Tìm hiểu về động cơ bước 4 pha, sử dụng module ULN2003A điều khiển các chức năng bằng phím nhấn và hiển thị thông tin qua led 7 đoạn. Đồ án bao gồm một số câu hỏi phụ liên quan đến động cơ bước rất chi tiết.

BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC CẦN THƠ TRƯỜNG BÁCH KHOA KHOA TỰ ĐỘNG HÓA ------ HỌC PHẦN KỸ THUẬT VI ĐIỀU KHIỂN ĐỒ ÁN: TÌM HIỂU VỀ ĐỘNG CƠ BƯỚC - THIẾT KẾ MẠCH ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC PHA, CĨ ĐIỀU KHIỂN BẰNG PHÍM VÀ HIỂN THỊ RA LED ĐOẠN Giáo viên hướng dẫn: Sinh viên thực hiện: Nhóm Th.s: Nguyễn Khắc Nguyên Lê Trường Giang B1907003 ss Phan Trường An B1906984 Nguyễn Tuấn Đạt B1907000 Nguyễn Duy Long B1907035 Đặng Hoài Phúc B1907052 Tháng 12/2022 Kỹ thuật vi điều khiển Đại học Cần Thơ NỘI DUNG Giới thiệu đề tài a) Tên mục tiêu đề tài b) Các tính c) Phương pháp thực Thực a) Mơ hình hệ thống i Mơ tả sơ lược hệ thống ii Vẽ mơ hình hệ thống dạng khối b) Thiết kế phần cứng mạch điện i Mô tả sơ lược hoạt động mạch điện ii Vẽ sơ đồ khối phần cứng mạch điện iii Thiết kế chi tiết 1) Khối nguồn 2) Khối hiển thị led đoạn 3) Khối xử lý động bước 4) Khối phím chức iv Sơ đồ nguyên lý tổng hợp toàn mạch c) Thiết kế phần mềm điều khiển i Mô tả chức phần mềm ii Vẽ lưu đồ chương trình iii Vẽ lưu đồ chương trình yếu iv Đoạn code chương trình ( có ghi thích đoạn lệnh, dịng lệnh) Kết thực a Mơ hình thực tế (hình ảnh có thích, nhận xét) b Phần cứng mạch điện (hình ảnh thực tế có thích, nhận xét) c Trình bày kết thực tính đặt hệ thống (đã nêu phần 1) i Dùng phím bấm chuyển đổi chế độ quay, chiều quay góc quay động ii Hiển thị thông tin chế độ động led đoạn iii Sử dụng phương pháp ngắt Timer iv Giao tiếp led đoạn họ IC 595 sử dụng phương thức dịch ghi HC595 quét led d) Nhận xét chung ưu nhược điểm hệ thống e) Các hướng phát triển Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Tài liệu tham khảo Phụ lục a Quá trình thực đề tài i Kế hoạch thời gian ii Những thuận lợi khó khăn trình thực kiến nghị b Danh sách thành viên bảng phân chia công việc c Trả lời câu hỏi Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Giới thiệu đề tài Mạch điều khiển động bước có nhiều ứng dụng thực tế nhờ vào nhiều chế quay khác động Full, Half Micro Step Chẳng hạn việc dùng chế độ ứng dụng vào máy in 3D thực tế hiệu độ xác cao có chế độ Micro Step Để bắt đầu thực đồ án chúng em dựa vào kiến thức học lập trình MSP430 nhằm thực đồ án Và đề tài mà nhóm thực thiết kế mạch điều khiển động bước pha có điều khiển phím hiển thị led đoạn a Tên mục tiêu đề tài Tên đề tài: Mạch điều khiển động bước pha có điều khiển phím hiển thị led đoạn Mục tiêu đề tài: • Giải u cầu đề tài • Tìm hiểu cách sử dụng động bước pha • Kết nối MSP430G2553 với động thông qua IC ULN2003 • Hiển thị qua Led đoạn • Hồn thành tiến độ b Các tính bản: • Dùng phím bấm để chuyển đổi chế độ quay, tốc độ góc quay động • Hiển thị thông tin chế độ động led đoạn • Sử dụng phương thức ngắt Timer • Giao tiếp Led đoạn IC họ 595 sử dụng phương thức dịch ghi HC595 quét led c Phương pháp thực hiện: • Tìm hiểu ngun lý hoạt động linh kiện • Tìm hiểu cách kết nối linh kiện cho phù hợp (kết nối theo sơ đồ ngun lý) • Phát thảo mơ hình phù hợp Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ • Lắp ráp mơ hình thực tế • Thực viết chương trình theo đề tài để mơ hình hoạt động theo dự kiến • Tổng kết đánh giá logic, chức tổng qt mơ hình • Hồn thành báo cáo báo cáo đề tài Thực a) Mô hình hệ thống i Mơ tả sơ lược hệ thống - Khi cấp nguồn, vi điều khiển đọc giá trị nhân tín hiệu từ phím nhấn thiết lập Sau xử lý đưa giá trị hiển thi led đoạn, mơ hình bao gồm nút nhấn nút chế độ quay, nút tốc độ quay nút điều chỉnh góc độ ii Vẽ mơ hình Hệ thống dạng khối Khối nguồn Khối hiển thị Led đoạn MSPG2553 Khối giao tiếp xử lý Stepper Khối giao tiếp với phím b) Thiết kế phần cứng mạch điện: i Mô tả sơ lược hoạt động mạch điện - Khi nhận tín hiệu đọc ghi từ vi điều khiển, ULN2003 xử lý trả tín hiệu cho vi điều khiển, vi điều khiển xử lý hiển thị led đoạn, phím chuyển chế độ nhấn vi điều khiển xử lý tín hiệu nhận tương ứng ii Vẽ sơ đồ khối phần cứng mạch điện Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Khối nguồn Khối hiển thị Led đoạn MSPG2553 Khối xử lý Stepper Khối giao tiếp với phím iii Thiết kế chi tiết: 1) Khối nguồn - Chức năng: Khối nguồn có chức chuyển đồi cung cấp nguồn cho mạch hoạt động dãy điện từ 3.3V đến 5V DC - Mục tiêu: Cung cấp nguồn ổn định cho hệ thống 2) Khối hiển thị led đoạn: - Chức năng: Xuất tín hiệu từ vi điều khiển sang led đoạn - Mục tiêu: Hiển thị xác liệu Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Cấu tạo: - LED đoạn bao gồm LED kết nối song song để thắp sáng hiển thị số “0, 1, 2, 3, 4, 5, 7, 8, 9, A, b, C, d, E, F, …” - Mỗi đoạn Led đánh dấu từ A tới G - Đoạn thứ tám gọi “chấm thập phân” (Decimal Point) ký hiệu DP sử dụng hiển thị số số nguyên Phân loại: Dựa vào cực nối, phân loại LED đoạn sau: - Loại dương chung (Common Anode): cực dương (anode) tất LED nối với cực âm (cathode) đứng riêng lẻ - Loại âm chung (Common Cathode): cực âm (cathode) tất LED nối với cực dương (anode) đứng riêng lẻ Nguyên lý hoạt động: - Nguyên tắc chung: muốn LED sáng LED phải phân cực thuận.Do muốn tạo chữ số ta cần cho LED vị trí tương ứng sáng lên Chân ngõ ra: - LED đoạn có 10 chân, chân nối với LED (A, B, C, D, E, F, G, DP) - Tùy vào loại LED đoạn, hai chân đánh dấu COM dương chung âm chung LED Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Dương chung Âm chung Bảng mô tả cách tạo chữ số để hiển thị lên LED đoạn Phương pháp quét led để hiển thị led đoạn: - Phương pháp quét hiển thị - Điều khiển LED sáng từ LED1 đến LED4, cho thời điểm có LED sáng - Gọi T chu kỳ quét LED: chu kỳ điều khiển LED - Gọi tx thời gian sang LED - Ta có giản đồ thời gian quét LED sau: tx 𝑇 𝑇 Điều kiện để led sáng đồng thời 𝑇 ≤ 20𝑚𝑠 ⇒ 𝑡𝑥 = Hướng dẫn: Ths Nguyễn Khắc Nguyên 𝑇 ≤ 3𝑚𝑠 Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Cấu tạo - Nguyên lý hoạt động IC họ HC595: - IC thuộc họ linh kiện logic HC thiết kế để sử dụng ứng dụng công nghệ CMOS 74HC595 có hai ghi tích hợp Cái ghi dịch thứ hai ghi lưu trữ Dữ liệu truyền nối tiếp để thay đổi bit ghi Nhưng chuyển vào ghi lưu trữ chân chốt liệu kích mức cao 3) Khối xử lý động bước - Chức năng: Đọc giá trị từ phím chức năng, đưa tín hiệu vi điều khiển để xử lý - Mục tiêu: Xử lý tín hiệu cho động quay Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ - - Mô-men xoắn động cơ: 34 N/m, nghĩa N/m truyền cho Kg, lực tương đương với việc đặt khoảng 0.34 Kg/cm lên trục Đủ để nâng rịng rọc 1/4 kg Có pha, góc bước 5.625°/64 Hộp số tích hợp: 1/64 tức chia bước thành 64 bước nhỏ để có độ xác cao Do đó, có 512 bước (0.7º bước) Hoặc xem 256 bước cho vịng (Full Step) Bảng mã nhị phân cấp xung dạng Full Step Bảng mã nhị phân cấp xung dạng Half Step Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ void main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer Chương trình cụ thể: void main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer // khoi dong timmer tim_init(); 10 // port la output 11 P1DIR = 0xff; 12 13 // khai bao button o port la input, dien tro keo len 14 P2DIR &= ~(BTN1 | BTN2 | BTN3); 15 P2REN = BTN1 | BTN2 | BTN3; 16 P2OUT = BTN1 | BTN2 | BTN3; 17 18 for (;;) { 19 // vao che sleep, mclk ngung hoat dong 20 LPM0; 21 } 22 } 23 24 void tim_init(void) { 25 26 // cau hinh bo dao dong noi chay 8MHZ 27 // ============== ========= ============= =============== ======================== ============ 28 BCSCTL1 = CALBC1_8MHZ; 29 DCOCTL = CALDCO_8MHZ; 30 31 // cau hinh ngat timmer sau moi 1ms 32 // ============== ========= ============= =============== ======================== ============ 33 TA1CCTL0 = CCIE; 34 TA1CTL = TASSEL_2 | ID_0 | MC_1; 35 _BIS_SR(GIE); 36 TA1CCR0 = 7999; 37 } 38 39 static inline void led7seg_scanner(uint8_t idx) { 40 41 uint16_t data = 0; 42 data |= (0x100 chan chung 43 44 if(idx == 3) 45 // hien thi chieu quay 46 led7seg_display_stepper_direction(&data); 47 else if (idx == 4) 48 // hien thi ky tu '-' ngan cach giua chieu quay & che quay stepper 49 data |= ~0x0008 & 0x00ff; 50 else if (idx == 5) 51 // hien thi che quay stepper 52 led7seg_display_stepper_mode(&data); 53 else 54 // hien thi goc quay stepper 55 led7seg_display_angle(&data, idx); 56 57 58 // shift data voi hc595 59 for(idx = 0; idx < 16; idx++) { 60 61 if((data = 3) { 139 led7seg_scanner(idx); 140 if(++idx >= led7seg_digits) idx = 0; 141 led7seg_counter = 0; 142 } 143 144 // doan code dieu khien dong co 145 // ============== ========= ============= =============== ======================== ============ 146 if(step) { 147 148 if(++micro_step_interval >= MICRO_STEP_DELAY) { 149 150 STP_PUT(stp_dir == backward ? STP1 : STP4, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT3); 151 STP_PUT(stp_dir == backward ? STP2 : STP3, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT2); 152 STP_PUT(stp_dir == backward ? STP3 : STP2, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT1); 153 STP_PUT(stp_dir == backward ? STP4 : STP1, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT0); 154 155 micro_step = micro_step >= (stp_mode == full ? : 7) ? : micro_step + 1; 156 micro_step_interval = 0; 157 step ; 158 } 159 } 160 else { 161 STP_PUT(STP1, 0); 162 STP_PUT(STP2, 0); 163 STP_PUT(STP3, 0); 164 STP_PUT(STP4, 0); 165 } 166 } 167 168 static inline void led7seg_display_angle(uint16_t *data, uint8_t idx) { 169 170 if(idx == 0) 171 *data |= led7seg_code[stp_angle / 100]; 172 else if(idx == 1) 173 *data |= led7seg_code[(stp_angle % 100) / 10]; 174 else 175 *data |= led7seg_code[stp_angle % 10]; 176 } 177 178 static inline void led7seg_display_stepper_mode(uint16_t *data) { Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ 179 *data |= stp_mode == full ? 0x8E & 0x00ff : 0x89 & 0x00ff; 180 } 181 182 183 static inline void led7seg_display_stepper_direction(uint16_t *data) { 184 *data |= stp_dir == forward ? 0x9D & 0x00ff : 0xaB & 0x00ff; 185 } 186 187 static inline uint16_t map(float x, float in_min, float in_max, float out_min, float out_max) { 188 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 189 } 190 Giang: Kết nối động bước (DCB) với MSP Driver Trình bày phương pháp điều khiển DCB pha đồ án sử dụng phương pháp ? - Các phương pháp điều khiển động bước phương pháp sử dụng đồ án là: • Động bc ko quay theo chế thông thường, chúng quay theo bước nên mang độ xác thực cao mặt điều khiển học để đk động bc pha có cuộn dây, ta thực tắt/bật nhiều cuộn dây theo thứ tự tần số định Mỗi lần bật/tắt cuộn dây, góc quay thay đổi Bên cạnh chiều quay tốc độ quay phụ thuộc vào thứ tự bậc tắt tần số bật tắt Ví dụ điều khiển full bước thứ tự bật tắt sau: Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ • Nếu bật tắt cuộn dây theo thứ tự này, điều khiển bước quay thuận, ta đảo ngược thứ tự điều khiển bước quay nghịch • Nếu muốn điều khiển tốc độ quay, ta thay đổi tần số bật/tắt cuộn dây Một ý cần chọn tần số phù hợp, nhanh làm động bị trượt bước, chậm làm nóng cuộn dây - Kết nối động bước với MSP430 Driver L298N: - Chương trình điều khiển: Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ #include #include #include "port.h" #define MICRO_STEP_DELAY #define STEP_DELAY 300 #define STP_PUT(pin, value) {if((value)) P1OUT |= (pin); else P1OUT &= ~(pin);} 10 // khai bao kieu du lieu chieu quay cua stepper 11 typedef enum { 12 forward = 0, 13 backward 14 } stepper_direction_t; 15 16 // khai bao kieu du lieu che quay cua stepper 17 typedef enum { 18 full = 0, 19 haft 20 } stepper_mode_t; 21 22 // khai bao bien goc quay, che quay, chieu quay 23 static volatile uint16_t stp_angle = 0; 24 static volatile stepper_mode_t stp_mode = full; 25 static volatile stepper_direction_t stp_dir = forward; 26 27 // bang ma led doan am chung 28 static const uint8_t led7seg_code[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; 29 30 // khai bao bo dem led doan 31 static volatile uint8_t led7seg_buffer[6] = {0, 0, 0, 0, 0, 0}; 32 33 // khai bao ham prototype 34 static inline void led7seg_display_angle(uint16_t *data, uint8_t idx); 35 static inline void led7seg_display_stepper_mode(uint16_t *data); 36 static inline void led7seg_display_stepper_direction(uint16_t *data); 37 static inline uint16_t map(float x, float in_min, float in_max, float out_min, float out_max); 38 void tim_init(void); 39 40 41 // bang ma full step va haft step 42 uint16_t stp_1frac1[] = {12, 6, 3, 9}; 43 uint16_t stp_1frac2[] = {8, 12, 4, 6, 10, 3, 1, 9}; 47 48 void main(void) { 49 WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer 50 51 // khoi dong timmer 52 tim_init(); 53 54 // port la output 55 P1DIR = 0xff; 56 57 P2DIR |= STP_EN_A | STP_EN_B; 58 P2OUT |= STP_EN_A | STP_EN_B; 59 60 // khai bao button o port la input, dien tro keo len 61 P2DIR &= ~(BTN1 | BTN2 | BTN3); 62 P2REN |= BTN1 | BTN2 | BTN3; 63 P2OUT |= BTN1 | BTN2 | BTN3; 64 Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ 65 for (;;) { 66 // vao che sleep, mclk ngung hoat dong 67 LPM0; 68 } 69 } 70 71 void tim_init(void) { 72 73 // cau hinh bo dao dong noi chay 8MHZ 74 // ============== ========= ============= =============== ======================== ============ 75 BCSCTL1 = CALBC1_8MHZ; 76 DCOCTL = CALDCO_8MHZ; 77 78 // cau hinh ngat timmer sau moi 1ms 79 // ============== ========= ============= =============== ======================== ============ 80 TA1CCTL0 = CCIE; 81 TA1CTL = TASSEL_2 | ID_0 | MC_1; 82 _BIS_SR(GIE); 83 TA1CCR0 = 7999; 84 } 85 86 static inline void led7seg_scanner(uint8_t idx) { 89 90 uint16_t data = 0; 91 data |= (0x100 chan chung 92 93 if(idx == 3) 94 // hien thi chieu quay 95 led7seg_display_stepper_direction(&data); 96 else if (idx == 4) 97 // hien thi ky tu '-' ngan cach giua chieu quay & che quay stepper 98 data |= ~0x0008 & 0x00ff; 99 else if (idx == 5) 100 // hien thi che quay stepper 101 led7seg_display_stepper_mode(&data); 102 else 103 // hien thi goc quay stepper 104 led7seg_display_angle(&data, idx); 105 106 107 // shift data voi hc595 108 for(idx = 0; idx < 16; idx++) { 109 110 if((data = 3) { 189 led7seg_scanner(idx); 190 if(++idx >= led7seg_digits) idx = 0; 191 led7seg_counter = 0; 192 } 193 194 // doan code dieu khien dong co 195 // ============== ========= ============= =============== ======================== ============ 196 if(step) { 197 198 if(++micro_step_interval >= MICRO_STEP_DELAY) { 199 200 STP_PUT(stp_dir == backward ? STP1 : STP4, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT3); 201 STP_PUT(stp_dir == backward ? STP2 : STP3, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT2); 202 STP_PUT(stp_dir == backward ? STP3 : STP2, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT1); 203 STP_PUT(stp_dir == backward ? STP4 : STP1, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT0); 204 205 micro_step = micro_step >= (stp_mode == full ? : 7) ? : micro_step + 1; 206 micro_step_interval = 0; 207 step ; 208 } 209 } 210 else { 211 STP_PUT(STP1, 0); 212 STP_PUT(STP2, 0); 213 STP_PUT(STP3, 0); 214 STP_PUT(STP4, 0); 215 } 216 } 217 218 static inline void led7seg_display_angle(uint16_t *data, uint8_t idx) { 219 220 if(idx == 0) 221 *data |= led7seg_code[stp_angle / 100]; 222 else if(idx == 1) 223 *data |= led7seg_code[(stp_angle % 100) / 10]; 224 else 225 *data |= led7seg_code[stp_angle % 10]; 226 } 227 228 static inline void led7seg_display_stepper_mode(uint16_t *data) { 229 *data |= stp_mode == full ? 0x8E & 0x00ff : 0x89 & 0x00ff; 230 } 231 232 233 static inline void led7seg_display_stepper_direction(uint16_t *data) { 234 *data |= stp_dir == forward ? 0x9D & 0x00ff : 0xaB & 0x00ff; 235 } 236 237 static inline uint16_t map(float x, float in_min, float in_max, float out_min, float out_max) { 238 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; 239 } 240 Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ Long: Giả sử bổ sung tính nút bấm chuyển chế chế độ chạy theo góc liên tục ? - Kết nối động bước với MSP430 Driver L298N: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include #include #include #include Chương trình điều khiển: "port.h" #define MICRO_STEP_DELAY #define STEP_DELAY 300 #define STP_PUT(pin, value) {if((value)) P1OUT |= (pin); else P1OUT &= ~(pin);} // khai bao kieu du lieu chieu quay cua stepper typedef enum { forward = 0, backward } stepper_direction_t; // khai bao kieu du lieu che quay cua stepper typedef enum { full = 0, haft } stepper_mode_t; typedef enum { auto_mode = 0, manual_mode } system_mode_t; // khai bao bien mode Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ 30 static volatile system_mode_t sys_mode = manual_mode; 31 32 // khai bao bien goc quay, che quay, chieu quay 33 static volatile uint16_t stp_angle = 0; 34 static volatile stepper_mode_t stp_mode = full; 35 static volatile stepper_direction_t stp_dir = forward; 36 37 // bang ma led doan am chung 38 static const uint8_t led7seg_code[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; 39 40 // khai bao bo dem led doan 41 static volatile uint8_t led7seg_buffer[6] = {0, 0, 0, 0, 0, 0}; 42 43 // khai bao ham prototype 44 static inline void led7seg_display_angle(uint16_t *data, uint8_t idx); 45 static inline void led7seg_display_stepper_mode(uint16_t *data); 46 static inline void led7seg_display_stepper_direction(uint16_t *data); 47 static inline uint16_t map(float x, float in_min, float in_max, float out_min, float out_max); 48 void tim_init(void); 49 50 51 // bang ma full step va haft step 52 uint16_t stp_1frac1[] = {12, 6, 3, 9}; 53 uint16_t stp_1frac2[] = {8, 12, 4, 6, 10, 3, 1, 9}; 54 55 56 void main(void) { 57 WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer 58 59 // khoi dong timmer 60 tim_init(); 61 62 // port la output 63 P1DIR = 0xff; 64 65 66 P2DIR |= STP_EN_A | STP_EN_B; 67 P2OUT |= STP_EN_A | STP_EN_B; 68 69 70 // khai bao button o port la input, dien tro keo len 71 P2DIR &= ~(BTN1 | BTN2 | BTN3 | BTN4); 72 P2REN |= BTN1 | BTN2 | BTN3 | BTN4; 73 P2OUT |= BTN1 | BTN2 | BTN3 | BTN4; 74 75 for (;;) { 76 // vao che sleep, mclk ngung hoat dong 77 LPM0; 78 } 79 } 80 81 void tim_init(void) { 82 83 // cau hinh bo dao dong noi chay 8MHZ 84 // ============== ========= ============= =============== ======================== ============ 85 BCSCTL1 = CALBC1_8MHZ; 86 DCOCTL = CALDCO_8MHZ; 87 88 // cau hinh ngat timmer sau moi 1ms Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ 89 // ============== ========= ============= =============== ======================== ============ 90 TA1CCTL0 = CCIE; 91 TA1CTL = TASSEL_2 | ID_0 | MC_1; 92 _BIS_SR(GIE); 93 TA1CCR0 = 7999; 94 } 95 96 static inline void led7seg_scanner(uint8_t idx) { 97 98 99 100 uint16_t data = 0; 101 data |= (0x100 chan chung 102 103 if(idx == 3) 104 // hien thi chieu quay 105 led7seg_display_stepper_direction(&data); 106 else if (idx == 4) 107 // hien thi ky tu '-' ngan cach giua chieu quay & che quay stepper 108 data |= ~0x0008 & 0x00ff; 109 else if (idx == 5) 110 // hien thi che quay stepper 111 led7seg_display_stepper_mode(&data); 112 else 113 // hien thi goc quay stepper 114 led7seg_display_angle(&data, idx); 115 116 117 // shift data voi hc595 118 for(idx = 0; idx < 16; idx++) { 119 120 if((data = 3) { 212 led7seg_scanner(idx); 213 if(++idx >= led7seg_digits) idx = 0; 214 led7seg_counter = 0; 215 } 216 217 // doan code dieu khien dong co 218 // ============== ========= ============= =============== ======================== ============ 219 if(step || sys_mode == auto_mode) { 220 221 if(++micro_step_interval >= MICRO_STEP_DELAY) { 222 223 224 225 STP_PUT(stp_dir == backward ? STP1 : STP4, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT3); 226 STP_PUT(stp_dir == backward ? STP2 : STP3, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT2); 227 STP_PUT(stp_dir == backward ? STP3 : STP2, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT1); 228 STP_PUT(stp_dir == backward ? STP4 : STP1, (stp_mode == full ? stp_1frac1[micro_step] : stp_1frac2[micro_step]) & BIT0); 229 230 micro_step = micro_step >= (stp_mode == full ? : 7) ? : micro_step + 1; 231 micro_step_interval = 0; 232 233 if(sys_mode == manual_mode) { 234 step ; 235 } 236 } 237 } 238 else { 239 STP_PUT(STP1, 0); 240 STP_PUT(STP2, 0); 241 STP_PUT(STP3, 0); 242 STP_PUT(STP4, 0); 243 } 244 } 245 246 static inline void led7seg_display_angle(uint16_t *data, uint8_t idx) { 247 248 if(idx == 0) 249 *data |= led7seg_code[stp_angle / 100]; 250 else if(idx == 1) 251 *data |= led7seg_code[(stp_angle % 100) / 10]; 252 else 253 *data |= led7seg_code[stp_angle % 10]; 254 } 255 256 static inline void led7seg_display_stepper_mode(uint16_t *data) { 257 *data |= stp_mode == full ? 0x8E & 0x00ff : 0x89 & 0x00ff; 258 } 259 260 261 static inline void led7seg_display_stepper_direction(uint16_t *data) { 262 *data |= stp_dir == forward ? 0x9D & 0x00ff : 0xaB & 0x00ff; 263 } 264 265 static inline uint16_t map(float x, float in_min, float in_max, float out_min, float out_max) { 266 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm Kỹ thuật vi điều khiển Đại học Cần Thơ 267 } 268 Hướng dẫn: Ths Nguyễn Khắc Nguyên Thực hiện: Nhóm ... hiển thị led đoạn a Tên mục tiêu đề tài Tên đề tài: Mạch điều khiển động bước pha có điều khiển phím hiển thị led đoạn Mục tiêu đề tài: • Giải u cầu đề tài • Tìm hiểu cách sử dụng động bước pha... số để hiển thị lên LED đoạn Phương pháp quét led để hiển thị led đoạn: - Phương pháp quét hiển thị - Điều khiển LED sáng từ LED1 đến LED4 , cho thời điểm có LED sáng - Gọi T chu kỳ quét LED: chu... vi điều khiển Đại học Cần Thơ 62 LED_ PORT |= LED_ DAT; 63 else 64 LED_ PORT &= ~LED_ DAT; 65 66 LED_ PORT |= LED_ CLK; 67 LED_ PORT &= ~LED_ CLK; 68 69 } 70 71 LED_ PORT |= LED_ LAT; 72 LED_ PORT &= ~LED_ LAT;

Ngày đăng: 12/12/2022, 12:48

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w