Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
1,21 MB
Nội dung
ĐẠI HỌC BÁCH KHOA – ĐHQG-HCM KHOA CƠ KHÍ BỘ MƠN CƠ ĐIỆN TỬ THÍ NGHIỆM VI ĐIỀU KHIỂN BUỔI 4: TRUYỀN THƠNG CAN L07 - NHĨM A - HK222 Giảng viên hướng dẫn: ThS LƯƠNG THANH NHẬT Sinh viên thực hiện Mã số sinh viên Hồ Đình Bách 2010145 Phạm Hồng Khanh 2011381 Nguyễn Văn Vũ Lân 2013606 Bùi Sơn Nhật Minh 2011605 Lê Nhựt Trường 2014911 Thành phố Hồ Chí Minh - 2023 CƠ SỞ LÝ THUYẾT I Kết nối phần cứng Board UMB1P.0-15376 V 1.0 Động DC giảm tốc độ Module điều khiển động DC L298N Hình 1 – Module giao tiếp CAN MCP2515 Hình 2 – Sơ đồ nguyên lý Hình 3 – Sơ Hình 4 – K ết nối đồ giao tiếp phần cứng module CAN với board MCU Kết nối node với dây theo mơ hình CAN_H CAN_H, CAN_L CAN_L Mỗi board module CAN cung cấp cặp cổng CAN_H CAN_L Hình 5 – Kết nối mạng node CAN II Hướng dẫn lập trình Hình 6 – Các module sử dụng dự án điều khiển động cơ Hình 7 – Cấu hình Pin Manager Gird View dự án Hình 8 – Cấu hình SPI Module dự án Hình 9 – Cấu hình EUSART Module dự án Hình 10 – Cấu hình Interrupt module dự án Hình 11 – Cấu hình I/O dự án THÍ NGHIỆM VÀ KẾT QUẢ Bài Giao tiếp CAN kit vi điều khiển Lần lượt nhấn nút 1, 2, kit số 1 LED 1, 2, k it số sáng tương ứng. Code #include "mcc_generated_files/mcc.h" #include #define RESET_INS 0b11000000 #define READ 0b00000011 #define WRITE 0b00000010 #define READ_STATUS 0b10100000 #define RX_STATUS 0b10110000 #define BIT_MODIFY 0b00000101 #define READ_RX_BUFFER_SID0 0b10010000 #define READ_RX_BUFFER_DT0 0b10010010 #define READ_RX_BUFFER_DT1 0b10010110 #define READ_RX_BUFFER_SID1 0b10010100 #define LOAD_TX_BUFFER_SID0 0b01000000 #define LOAD_TX_BUFFER_DT0 0b01000001 #define LOAD_TX_BUFFER_SID1 0b01000010 #define LOAD_TX_BUFFER_DT1 0b01000011 #define LOAD_TX_BUFFER_SID2 0b01000100 #define LOAD_TX_BUFFER_DT2 0b01000101 #define REQUEST_TO_SEND_TXBUFF0 0b10000001 #define REQUEST_TO_SEND_TXBUFF1 0b10000010 #define REQUEST_TO_SEND_TXBUFF2 0b10000100 #define BIT_MODIFY 0b00000101 uint8_t press = 0; uint8_t receive = 0; uint8_t sendframe1[8] = "abcdefgh"; uint8_t sendframe2[8] = "ijklmnop"; uint8_t sendframe3[8] = "qrstuvwx"; uint8_t receiveframe[9]={0,0,0,0,0,0,0,0,0}; volatile uint8_t receive_flag = 0; uint8_t receive_pre = 0; void Reset_sensor (void) { SPI1_Open(SPI1_DEFAULT); CS_SetLow(); SPI1_ExchangeByte(RESET_INS); CS_SetHigh(); SPI1_Close(); } void Set_sensor (uint8_t reg, uint8_t data) { SPI1_Open(SPI1_DEFAULT); CS_SetLow(); SPI1_ExchangeByte(WRITE); SPI1_ExchangeByte(reg); SPI1_ExchangeByte(data); CS_SetHigh(); SPI1_Close(); } void Read_sensor (uint8_t reg, uint8_t *data) { SPI1_Open(SPI1_DEFAULT); CS_SetLow(); SPI1_ExchangeByte(READ); SPI1_ExchangeByte(reg); *data = SPI1_ExchangeByte(0x00); CS_SetHigh(); SPI1_Close(); } void Bit_Modify(uint8_t Address, uint8_t mask, uint8_t dataset) { SPI1_Open(SPI1_DEFAULT); CS_SetLow(); SPI1_ExchangeByte(BIT_MODIFY); SPI1_ExchangeByte(Address); SPI1_ExchangeByte(mask); SPI1_ExchangeByte(dataset); CS_SetHigh(); SPI1_Close(); } void REQUEST_TO_SEND_BUFF (uint8_t buff) { uint8_t bufftemp; switch (buff) { case 0: bufftemp = REQUEST_TO_SEND_TXBUFF0; break; case 1: bufftemp = REQUEST_TO_SEND_TXBUFF1; break; case 2: bufftemp = REQUEST_TO_SEND_TXBUFF2; break; default: break; } SPI1_Open(SPI1_DEFAULT); CS_SetLow(); SPI1_ExchangeByte(bufftemp); CS_SetHigh(); SPI1_Close(); } void Send_messenger (uint8_t *data, uint8_t buff, uint8_t length) { Set_sensor(0x30, 0x03); // Clear TXREQ Set_sensor(0x35, length); for(uint8_t i = ; i