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

ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#

23 610 12

Đ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 23
Dung lượng 1,83 MB

Nội dung

TIỂU LUẬN ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C# MÔN HỌC EE3017 - ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG TIỂU LUẬN ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C# MÔN HỌC EE3017 - ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH NHĨM SINH VIÊN: NGƠ ĐĂNG HIỀN – 1670782 NGUYỄN THẾ NGỌC - 1770548 NGÀNH KỸ THUẬT ĐIỀU KHIỂN & TỰ ĐỘNG HÓA GIẢNG VIÊN HƯỚNG DẪN TS NGUYỄN TRỌNG TÀI TP HỒ CHÍ MINH, 2019 TRƯỜNG ĐẠI HỌC BÁCH KHOA TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN – ĐIỆN TỬ Độc lập - Tự - Hạnh phúc BỘ MÔN: ĐIỀU KHIỂN TỰ ĐỘNG TP HCM, ngày tháng 09 năm 2019 NHẬN XÉT ĐÁNH GIÁ TIỂU LUẬN Tên tiểu luận: ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C# Nhóm Sinh viên thực hiện: Cán hướng dẫn: NGÔ ĐĂNG HIỀN 1670782 NGUYỄN THẾ NGỌC 1770548 Đánh giá tiểu luận: Về nội dung tiểu luận: Về tính ứng dụng: Về thái độ làm việc sinh viên: Cho điểm sinh viên: Ngô Đăng Hiền: Nguyễn Thế Ngọc TS NGUYỄN TRỌNG TÀI MỤC LỤC Contents MỤC LỤC DANH MỤC HÌNH VẼ DANH MỤC BẢNG DANH MỤC TỪ VIẾT TẮT Chương GIỚI TIỆU TỔNG QUAN VỀ TIỂU LUẬN 1.1 Giới thiệu phần cứng 1.2 Giới thiệu phần mềm lập trình cho MCU STM32 PC Chương LẬP TRÌNH FIRMWARE TRÊN MCU STM32F407 2.1 Lập trình thuật tốn PID điều khiển động 2.1.1 Bộ PWM 2.1.2 Đọc tốc độ qua Encoder 2.1.3 Giải thuật PID rời rạc 2.2 Lập trình giao tiếp với máy tính 2.2.1 Giao tiếp nối tiếp RS232 2.2.2 Giao tiếp qua chuẩn USB 2.0 2.2.3 giao tiếp qua chuẩn TCP/IP 11 Chương LẬP TRÌNH GUI TRÊN C# 14 3.1 Giao diện phần mềm thiết kế 14 3.2 Khung truyền quy định MCU PC 14 3.3 Các giao thức truyền triển khai C# 15 Chương KẾ HOẠCH VÀ KẾT QUẢ THỰC HIỆN 18 4.1 Kế hoạch thực 18 TÀI LIỆU THAM KHẢO 19 Môn: Đo lường điều khiển máy Chương Giới thiệu tổng quan tiểu tính luận DANH MỤC HÌNH VẼ DANH MỤC BẢNG Table 1.1 Tổng quan Hệ thống Table Các phần mềm lập trình cho MCU STM32F4 Table Phần mềm lập trình GUI PC Table Software Library sử dụng Project 14 Table Các Function truyền nhận C# 14 Table 3 Ý nghĩa vị trí mảng truyền -txbuff[] 15 Table Phần code xử lý data nhận 15 Table Các công việc Timer – 5ms 15 Table Source code RS232, USB, TCP/IP 15 DANH MỤC TỪ VIẾT TẮT Chương Giới thiệu tổng quan tiểu luận Chương GIỚI TIỆU TỔNG QUAN VỀ TIỂU LUẬN 1.1 Giới thiệu phần cứng STT Name STM32F4-DIS1 H-Bridge HI216 MINERTIA MOTOR 27.0V 50W Encoder: 400 pulse Speed Max: 2500 rpm STT INPUT OUTPUT Encoder Lead RED BACK WHITE GREEN STM32F407VGT6 MINERTIA MOTOR, F SERIES UGFMED-03SRI21 AX070025A Note +5V 0V CHANEL A CHANEL B Table 1.1 Tổng quan Hệ thống Sơ đồ bố trí thiết bị Note Proe.vn Nhatbon.vn YASKAWA Chương Giới thiệu tổng quan tiểu luận Mạch cầu H sử dụng Phương pháp kích tín hiệu PWM điều hướng Mơ hình thực tế sử dụng Chương Giới thiệu tổng quan tiểu luận 1.2 Giới thiệu phần mềm lập trình cho MCU STM32 PC Table Các phần mềm lập trình cho MCU STM32F4 STT IDE + Compiler STM32CubeMX Package for STM32F4 MDK-ARM Professional Package STM32F4xx_DFP Note Version 5.3.0 Verion 1.24.0 Version 5.27.1.0 Version 2.14.0 Note: Toàn source code lưu Folder: DCMotorController; với STM32CubeMX.ioc project STM32CubeMX STM32CubeMX.uvprojx MDK-ARM Table Phần mềm lập trình GUI PC STT IDE + Compiler Microsoft Visual Studio Enterprise Visual C# Note Version 2015 Version 2015 Note: Toàn source code lưu Folder WindowsFormsApplication1 với project là: WindowsFormsApplication1.sln Chương Lập trình Firmware MCU STM32F407 Chương LẬP TRÌNH FIRMWARE TRÊN MCU STM32F407 2.1 Lập trình thuật tốn PID điều khiển động 2.1.1 Bộ PWM Cấu hình PWM sử dụng Timer 12 tần số băm 20Khz Sử dụng Internal clock (84Mhz), thông số đặt hình bên dưới, chân ngõ PB14 (TIM12_CH1) Timer Clock = 84Mhz Prescaler (CNT): Period (ARR): 839 Repetition: ➔ UE = 20 KHz NOTE: Việc cấu hình PWM CubeMX làm sẵn, User việc tạo hàm Set Duty bên /* Output pwm frequency - unit: 0.1% */ void PWM0_Set_Duty(int16_t d) { if (d < -1000) d = -1000; else if (d > 1000) d = 1000; Chương Lập trình Firmware MCU STM32F407 if (d == 0) { //GPIO_SetBits(GPIOD,GPIO_Pin_10); // disable pwm } else if (d > 0) { // HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_RESET); // dir = } else { HAL_GPIO_WritePin(DIR_GPIO_Port, DIR_Pin, GPIO_PIN_SET); // dir = d = -d; } d = (TIM12->ARR + 1) * d / 1000; TIM12->CCR1 = (uint32_t)d; 2.1.2 Đọc tốc độ qua Encoder Encoder chọn hình bên dưới, với ARR = 65535 (0xFFFF), Encoder Mode = TI1 and TI2 (chế độ x4) Chương Lập trình Firmware MCU STM32F407 //Note: Function để đọc (lấy mẫu): số xung đếm thời gian (sampe) /* Get encoder counter 32 bit */ int32_t ENC0_GetSpeed(void) { static int32_t p = 0, p_pre = 0, dp = 0; p = (int32_t)TIM1->CNT; dp = p - p_pre; //+/- (speed) if (dp > 32768) dp -= 65536; else if (dp < -32768) dp += 65536; p_pre = p; return dp; } //Tốc độ (RPM) tính sau: Speed = ENC0_GetSpeed()*60000.0/Ts/1600; Trong đó: + ENC0_GetSpeed(): Số xung Encoder đọc khoản thời gian Ts (ms) + Ts: Thời gian lấy mẫu (ms) + 1600: Độ phân giải Encoder (x4): 400x4 = 1600 Chương Lập trình Firmware MCU STM32F407 2.1.3 Giải thuật PID rời rạc void PID_step(void) { speed = (double)ENC0_GetSpeed() * 37.5/cPID.Ts; Speed = ENC0_GetSpeed()*60000.0/Ts/1600; e = setpoint - speed; pPart = Kp * e; iPart += 0.5 * Ts * Ki * e; dPart = Kd / Ts * e - predPart; predPart = Kd / Ts * e; udk = pPart + iPart + dPart; /* Saturate */ if (udk > 1000.0) pwm = 1000.0; else if (udk < 0.0) pwm = 0.0; else pwm = udk; PWM0_Set_Duty((int)pwm); } Chương Lập trình Firmware MCU STM32F407 2.2 Lập trình giao tiếp với máy tính 2.2.1 Giao tiếp nối tiếp RS232 char txRs232Buffer[64] = { }; //tx IO uint8_t rxUsbBuffer[64] = {0}; //rx /* Initialize all configured peripherals */ Chương Lập trình Firmware MCU STM32F407 MX_UART4_Init(); // HAL_UART_Receive_DMA(&huart4, (uint8_t*)rxUsbBuffer, RXBUFFERSIZE); // len = sprintf((char*)txUsbBuffer,"%ld,%ld,%ld\r\n",(long)setpoint,(long)speed,(long)pwm ); txRs232Buffer[0] = 'A'; txRs232Buffer[1] = (char)','; for(int i = 0; ip != NULL) && 12 Chương Lập trình Firmware MCU STM32F407 (es->p->len p; //add for (int i = 0; ilen; i++) rxUsbBuffer[i] = *((uint8_t*)(ptr- >payload)+i); /* enqueue data for transmission */ wr_err = tcp_write(tpcb, txUsbBuffer, 64, 1); … } } 13 Chương Lập trình GUI C# Chương LẬP TRÌNH GUI TRÊN C# 3.1 Giao diện phần mềm thiết kế Hình Giao diện phần mềm thiết kế Trong đó: Table Software Library sử dụng Project STT Visual Studio C# LibUsbDotNet Library ZedGraph Library Measurement Studio Shared NET Name WindowsFormsApplication1.sln LibUsbDotNet.dll ZedGraph.dll NationalInstruments.UI Version 2015 2.2.8.104 5.1.7.430 19.0.45.491 54 3.2 Khung truyền quy định MCU PC Table Các Function truyền nhận C# RS232 USB Truyền (PC to MCU) – Timer2 (5ms) Nhận (MCU to PC) byte[] txbuff = new byte[64]; byte[] readBuffer = new byte[64]; serialPort1.ReadLine(); serialPort1.Write(txbuff, 0, 36); writer.Write(txbuff, 1000, out bytesWritten); reader.Read(readBuffer, 1000, out bytesRead); stream.Read(readBuffer, 0, 64); TCP/IP stream.Write(txbuff, 0, 36); 14 Chương Lập trình GUI C# Table 3 Ý nghĩa vị trí mảng truyền -txbuff[] STT 10 11 12 [Buffer] txbuff[0] txbuff[1] txbuff[2] txbuff[3-10] txbuff[11-18] txbuff[19-26] txbuff[27-28] txbuff[29] txbuff[30] txbuff[31-32] txbuff[33] txbuff[34-35] Ý nghĩa Start/Stop Com = comuncation: Ts Double (Kp) Double (Ki) Double (Kd) Amplitude (rpm) Period (secs) Pulse Width (% of period) Stop time (sec) Manual/Pulse slide1 Note = start 0:rs232, 1:usb, 2: LAN Sample time (ms) Hệ số Kp (PID) Hệ số Ki (PID) Hệ số Kd (PID) Ampilute Period Pulse TimeStop M/Auto Silde (0->2400) Table Phần code xử lý data nhận STT Ý nghĩa Convert String Split readBuffer string data = Encoding.Default.GetString(readBuffer); string[] subdata = data.Split(','); if (subdata.Length < 3) return; string realSpeed, setpoint, udk; setpoint = subdata[0]; realSpeed = subdata[1]; udk = subdata[2]; Draw(setpoint, realSpeed, udk); Copy data Vẽ đồ thị Note: Phần nhận (from MCU) PC tuân theo mảng Byte gửi lên từ MCU Table Các công việc Timer – 5ms STT Note Các công việc Timer2 (5ms) Tính tốn khối Performance and Robustness Liên tục gửi nhận liệu từ USB Liên tục gửi nhận liệu từ TCP/IP Liên tục nhận liệu từ MCU gửi lên qua RS232 Vẽ đồ thị đáp ứng Setpoint, realSpeed, Udk POT,Peak… USB selected TCP/IP selected RS232 selected Draw() 3.3 Các giao thức truyền triển khai C# Table Source code RS232, USB, TCP/IP STT serialPort1 RS232 Note string[] port = SerialPort.GetPortNames(); 15 Using System.IO.Ports Form1_Load() Chương Lập trình GUI C# cbComPort.Items.AddRange(port); serialPort1.PortName = cbComPort.Text; serialPort1.BaudRate = Int32.Parse(cbBaudRate.Text); serialPort1.Open(); ckConnect = true; serialPort1.Write(txbuff, 0, 36); if (serialPort1.IsOpen) { if (serialPort1.BytesToRead > 8) { string data = serialPort1.ReadLine(); serialPort1.DiscardInBuffer(); string[] subdata = data.Split(','); btConnect_Click() timer2_Tick() if (subdata.Length < 4) return; if (subdata[0] == "A") { string realSpeed, setpoint, udk; setpoint = subdata[1]; realSpeed = subdata[2]; udk = subdata[3]; Draw(setpoint, realSpeed, udk); } } } USB Note public static UsbDevice myUsbDevice; UsbEndpointReader reader; UsbEndpointWriter writer; if (myUsbDevice == null) { UsbRegDeviceList allDevices = UsbDevice.AllDevices; foreach (UsbRegistry usbRegistry in allDevices) { if (usbRegistry.Open(out myUsbDevice)) { txtproductname.Text = myUsbDevice.Info.ProductString; txtvendorid.Text = myUsbDevice.Info.Descriptor.VendorID.ToString(); txtproductid.Text = myUsbDevice.Info.Descriptor.ProductID.ToString(); } } } //USB - Connect UsbDevice wholeUsbDevice = myUsbDevice as IUsbDevice; if (!ReferenceEquals(wholeUsbDevice, null)) { // Select config #1 wholeUsbDevice.SetConfiguration(1); // Claim interface #0 wholeUsbDevice.ClaimInterface(0); } //Open usb end point reader and writer reader = myUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01); // open read endpoint Global 16 btConnect_Click() Chương Lập trình GUI C# writer = myUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);// open write endpoint //Send try { int bytesWritten; writer.Write(txbuff, 1000, out bytesWritten); } catch (Exception err) { MessageBox.Show("Can Not Send Data To USB Device\nDetails: " + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } //Receive try { int bytesRead = 0; byte[] readBuffer = new byte[64]; reader.Read(readBuffer, 1000, out bytesRead); string data = Encoding.Default.GetString(readBuffer); string[] subdata = data.Split(','); if (subdata.Length < 3) return; string realSpeed, setpoint, udk; setpoint = subdata[0]; realSpeed = subdata[1]; udk = subdata[2]; Draw(setpoint, realSpeed, udk); } catch (Exception err) { MessageBox.Show("Can Not Receive Data From USB Device\nDetails: " + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } TCP/IP timer2_Tick() Note TcpClient client = null; Stream stream = null; client = new TcpClient(); client.Connect("192.168.0.10", 7); stream = client.GetStream(); // send stream.Write(txbuff, 0, 36); // receive byte[] readBuffer = new byte[64]; stream.Read(readBuffer, 0, 64); //process string data = Encoding.Default.GetString(readBuffer); string[] subdata = data.Split(','); if (subdata.Length < 3) return; string realSpeed, setpoint, udk; setpoint = subdata[0]; realSpeed = subdata[1]; udk = subdata[2]; Draw(setpoint, realSpeed, udk); 17 Global btConnect_Click() timer2_Tick() Chương Kế hoạch kết thực Chương KẾ HOẠCH VÀ KẾT QUẢ THỰC HIỆN 4.1 Kế hoạch thực Địa điểm thực hiện: Phòng trọ 708 Học viện Quân y, 84 Thành Thái, Q10, Tp Hồ Chí Minh STT Công việc Mua thiết bị cho thí nghiệm (khu vực Chợ Nhật Tảo) Ghép thiết bị thành mơ hình Lập trình Firmware cho MCU STM32 Lập trình GUI C# Viết báo cáo tiểu luận 18 Phân công Hiền + Ngọc Hiền Hiền Ngọc Hiền + Ngọc TÀI LIỆU THAM KHẢO [1] Nguyễn Thị Phương Hà, Lý thuyết điều khiển tự động, Nhà xuất ĐHQG HCM, 2005 [2] Bộ môn TĐH, Bài thí nghiệm 03 – Điều khiển vị trí động DC dùng tự chỉnh STR – Khoa ĐĐT, HCMUT [3] Bộ mơn TĐH, Bài thí nghiệm nhận dạng hệ thống, Khoa ĐĐT, HCMUT [4] Carmine Noviello, Mastering STM32 (Leanpub book – PDF), 2016 [5] UM1718, STM32CubeMX for STM32 configuration and initialization C code generation, STMicroelectronics, 2019 19 ... TIỂU LUẬN Tên tiểu luận: ĐIỀU KHIỂN VÀ GIÁM SÁT T? ?C ĐỘ ĐỘNG C? ? DC SỬ DỤNG MCU STM32 VỚI C# Nhóm Sinh viên th? ?c hiện: C? ?n hướng dẫn: NGÔ ĐĂNG HIỀN 1670782 NGUYỄN THẾ NG? ?C 1770548 Đánh giá tiểu... th? ?c tế sử dụng Chương Giới thiệu tổng quan tiểu luận 1.2 Giới thiệu phần mềm lập trình cho MCU STM32 PC Table C? ?c phần mềm lập trình cho MCU STM32F4 STT IDE + Compiler STM32CubeMX Package for STM32F4... trình cho MCU STM32 PC Chương LẬP TRÌNH FIRMWARE TRÊN MCU STM32F407 2.1 Lập trình thuật tốn PID điều khiển động 2.1.1 Bộ PWM 2.1.2 Đ? ?c t? ?c độ qua Encoder

Ngày đăng: 14/12/2021, 21:44

HÌNH ẢNH LIÊN QUAN

Mô hình thực tế sử dụng - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
h ình thực tế sử dụng (Trang 6)
Cấu hình PWM sử dụng Timer 12 ở tần số băm là 20Khz - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
u hình PWM sử dụng Timer 12 ở tần số băm là 20Khz (Trang 8)
Chương 2. Lập trình Firmware trên MCU STM32F407 - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
h ương 2. Lập trình Firmware trên MCU STM32F407 (Trang 9)
Encoder chọn như hình bên dưới, với ARR = 65535 (0xFFFF), Encoder Mode = TI1 and TI2 (chếđộ x4) = TI1 and TI2 (chếđộ x4)  - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
ncoder chọn như hình bên dưới, với ARR = 65535 (0xFFFF), Encoder Mode = TI1 and TI2 (chếđộ x4) = TI1 and TI2 (chếđộ x4) (Trang 9)
Hình 3.1 Giao diện phần mềm thiết kế - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
Hình 3.1 Giao diện phần mềm thiết kế (Trang 18)
Chương 3. Lập trình GUI trên C# - ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG MCU STM32 VỚI C#
h ương 3. Lập trình GUI trên C# (Trang 18)

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

TÀI LIỆU LIÊN QUAN

w