Thiết kế và thi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán PID

108 5 0
Thiết kế và thi công mạch điều khiển tốc độ động cơ DC sử dụng thuật toán PID

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG THIẾT KẾ VÀ THI CÔNG MẠCH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG THUẬT TOÁN PID GVHD: NGUYỄN MINH TÂM SVTH: ĐOÀN NGỌC LỘC MSSV: 16341014 SKL006511 Tp Hồ Chí Minh, tháng 01/2018 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ-CÔNG NGHIỆP  ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Đề Tài: THIẾT KẾ VÀ THI CÔNG MẠCH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG THUẬT TOÁN PID GVHD: TS Nguyễn Minh Tâm SVTH: Đồn Ngọc Lộc MSSV: 16341014 Tp Hồ Chí Minh – 01/2018 i TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP-Y SINH Tp HCM, ngày 15 tháng 01 năm 2018 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG MẠCH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG THUẬT TOÁN PID AI.NHIỆM VỤ Các số liệu ban đầu: Nhóm tiến hành việc khảo sát loại vi điều khiển, lựa chọn động DC, khảo sát linh kiện liên quan để tiến hành thiết kế mạch Tiến hành tìm hiểu thu thập số liệu từ trang mạng sách lập trình vi điều khiển ARM Tham khảo mơ hình điều khiển động để xây dựng lên mơ hình điều khiển Tìm hiểu mơ hình điều khiển động để lựa chọn tham khảo cách thức hoạt động phù hợp cho mơ hình Nội dung thực hiện: NỘI DUNG 1: Nghiên cứu tài liệu điều khiển PID DRIVER để điều khiển tốc độ động DC NỘI DUNG 2: Dựa liệu thu thập được, tiến hành lựa chọn giải pháp thiết kế thi cơng mơ hình phần mạch điều khiển NỘI DUNG 3: Thiết kế thi công hệ thống điều khiển động DC NỘI DUNG 4: Thiết kế lưu đồ giải thuật viết chương trình điều khiển cho Vi điều khiển, thiết kế giao diện hình để điều khiển NỘI DUNG 5: Thử nghiệm điều chỉnh phần cứng chương trình để mơ hình tối ưu Đánh giá thơng số mơ hình so với thơng số thực tế i i NỘI DUNG 6: Viết báo cáo thực III NGÀY GIAO NHIỆM VỤ: 25/09/2017 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 15/01/2018 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: TS.Nguyễn Minh Tâm CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP-Y SINH iii TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP-Y SINH Tp HCM, ngày 15 tháng 01 năm 2018 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên : ĐOÀN NGỌC LỘC Lớp: 163410A MSSV: 16341014 Tên đề tài: THIẾT KẾ VÀ THI CÔNG MẠCH ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC SỬ DỤNG THUẬT TOÁN PID Tuần/ngày 25/09/2017 01/10/2017 01/10/2017 15/10/2017 15/10/2017 29/10/2017 29/10/2017 10/11/2017 10/11/2017 28/11/2017 28/11/2017 15/12/2017 15/12/2017 02/01/2018 02/01/2018 15/01/2018 LỜI CAM ĐOAN Nhóm xin cam đoan đề tài nhóm tự thực dựa vào số tài liệu đề tài trước Các số liệu đề tài nhóm thu thập từ tài liệu hướng dẫn tham khảo số đề tài liên quan từ nhóm nghiên cứu phát triển để thực đề tài Không chép từ tài liệu hay cơng trình có trước TP Hồ Chí Minh, ngày 15 tháng 01 năm 2018 Sinh viên thực ĐỒN NGỌC LỘC v LỜI CẢM ƠN Sau q trình học tập trường với kiến thức Thầy Cô giảng dạy, kinh nghiệm học hỏi, q trình thực đồ án nhóm Thầy Cô tạo điều kiện tốt để thực đồ án Nhóm xin gửi lời cảm ơn tới tất cả Thầy, Cô Trường Đại Học Sư Phạm Kỹ Thuật TPHCM nói chung, đặc biệt giảng viên Khoa Điện - Điện Tử nói riêng giảng dạy cung cấp cho Nhóm có kiến thức quý báu, tạo tiền đề quan cho Nhóm có thể thực đồ án Nhóm xin gửi lời cảm ơn chân thành sâu sắc tới Thầy Nguyễn Minh Tâm trực tiếp hướng dẫn tận tình cho nhóm suốt q trình làm đồ án, cảm ơn Thầy giành thời gian quý báu để hướng dẫn cho nhóm, hỗ trợ thiết bị đưa hướng giải cho nhóm gặp khó khăn Bên cạnh nhóm xin cảm ơn tập thể lớp 163410A đồng hành với nhóm suốt q trình học tập thực đồ án Các bạn giúp đỡ, chia sẻ kinh nghiệm tạo thêm động lực để nhóm có thể hồn thành đồ án Nhóm xin chân thành cảm ơn bố mẹ, người thân bạn bè Những người giúp đỡ mặt tinh thần vật chất nhiều để có thể hồn thành tốt đồ án Xin chân thành cảm ơn người Trong trình nghiên cứu thực đồ án, thời gian trình độ có giới hạn nên khơng tránh khỏi thiếu sót Vì vậy, nhóm hy vọng nhận ý kiến đóng góp q báu từ Thầy Cơ, bạn bè người quan tâm để đề tài hoàn thiện Xin chân thành cảm ơn Sinh viên thực ĐỒN NGỌC LỘC vi TĨM TẮT Có thể nói lĩnh vực điều khiển cơng nghiệp điều khiển PID có ứng dụng rộng rãi, giải pháp đa cho ứng dụng cả Analog Digital Thống kê cho thấy có tới 90% điều khiển sử dụng thực tế PID Rõ ràng có thiết kế chọn lựa thông số hợp lý cho điều khiển PID việc đạt tiêu chất lượng mong muốn khả thi Bộ điều khiển PID giúp người sử dụng dễ dàng tích hợp chọn luật điều khiển : tỉ lệ(P), tích phân(I), tỉ lệ tích phân(PI), tỉ lệ vi phân(PD)… cho phù hợp đối tượng điều khiển Nhiều q trình cơng nghiệp việc sử dụng điều khiển PID không thể thay khống chế nhiệt độ, mức, tốc độ… Ngay cả lý thuyết điều khiển đại không cho ta hiệu quả cao điều khiển PID mang lại.Ngồi điều khiển PID cịn ứng dụng nhiều điều khiển thích nghi,bền vững vẫn mang lại hiệu quả cao cấu chỉnh định Ngày động điện chiều ứng dụng nhiều lĩnh vực khoa học & đời sống như: Trong dây chuyền sản xuất, ô tô điện, tàu thủy, máy bay… Bài toán thiết kế điều khiển động chiều toán bản quen thuộc ngành điều khiển tự động Trên sở muốn tìm hiểu thuật tốn PID em xin chọn đề tài : Điều khiển động DC motor với giải thuật PID xiv PHỤ LỤC if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { _Error_Handler( FILE , LINE ); } sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; sSlaveConfig.InputTrigger = TIM_TS_TI1FP1; sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING; sSlaveConfig.TriggerFilter = 0; if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != HAL_OK) { _Error_Handler( FILE , LINE ); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, HAL_OK) { _Error_Handler( FILE , LINE ); } } static void MX_TIM3_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig; TIM_MasterConfigTypeDef sMasterConfig; htim3.Instance = TIM3; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH &sMasterConfig) != PHỤ LỤC htim3.Init.Prescaler = 48000; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 99; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { _Error_Handler( FILE , LINE ); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { _Error_Handler( FILE , LINE ); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, HAL_OK) { _Error_Handler( FILE , LINE ); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH &sMasterConfig) != PHỤ LỤC HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOE_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, GPIO_PIN_SET); GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); } /** * @brief This function is executed in case of error occurrence * @param None * @retval None */ void _Error_Handler(char * file, int line) { while(1) { } } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred * @param file: pointer to the source file name BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { } #endif /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ CODE CHƯƠNG TRÌNH CON WEB APPLICATION: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; using System.IO; using System.Xml; namespace WindowsFormsApplication4 { public partial class Form1 : Form { string InputData = String.Empty; Int16 ND = 0; Int16 set = 0; string huong = "0"; int tocdoo = 0; int a = 0; int[] tocdo = new int[50] ; int[] potlo = new int[100]; public Form1() { InitializeComponent(); string[] ports = SerialPort.GetPortNames(); cbCom.Items.AddRange(ports); serialPort1.ReadTimeout = 1000; serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceive); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC String[] _bitsPerSecond = { "75", "110", "134", "150", "300", "600", "1200", "1800", "2400", "4800", "7200", "9600", "14400", "19200", "38400", "57600", "115200", "128000" }; cbBaudRate.Items.AddRange(_bitsPerSecond); cbBaudRate.SelectedIndex = 11; } private void DataReceive(object obj, SerialDataReceivedEventArgs e) { try { InputData = serialPort1.ReadTo("\n"); } catch (Exception e7) {} if (InputData == "a") { MessageBox.Show("Kết nối thành MessageBoxButtons.OK, MessageBoxIcon.Information); InputData = String.Empty; } else { if (InputData.Length > 2) { StText(InputData); InputData = String.Empty; BỘ MÔN ĐIỆN TỬ CƠNG NGHIỆP - Y SINH cơng!", "Thơng báo", PHỤ LỤC } } } delegate void SetTextCallback(string text); private void StText(string text) { if (this.label7.InvokeRequired) { SetTextCallback d = new SetTextCallback(StText); this.Invoke(d, new object[] { text }); } else this.label7.Text = text; } private void ketnoi_Click(object sender, EventArgs e) { ngat.BackColor = Color.Red; if (ketnoi.BackColor == Color.Red) ketnoi.BackColor = Color.White; else ketnoi.BackColor = Color.Red; if (!serialPort1.IsOpen) { if (String.IsNullOrEmpty(cbCom.Text)) { MessageBox.Show("Chưa chọn MessageBoxButtons.OK, MessageBoxIcon.Error); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH cổng COM", "Thông báo", PHỤ LỤC return; } serialPort1.PortName = cbCom.Text; serialPort1.BaudRate = Convert.ToInt32(cbBaudRate.Text); serialPort1.DataBits = 8; serialPort1.Parity = System.IO.Ports.Parity.None; serialPort1.StopBits = System.IO.Ports.StopBits.One; serialPort1.Open(); ketnoi.Enabled = false; //serialPort1.Write("a"); } } private void cbCom_SelectedIndexChanged(object sender, EventArgs e) { serialPort1.Close(); ketnoi.Enabled = true; } private void thoat_Click(object sender, EventArgs e) { DialogResult h = MessageBox.Show("Bạn có muốn khơng", "Cảnh báo", MessageBoxButtons.OKCancel); if (h == DialogResult.OK) { Application.Exit(); } } private void timer1_Tick(object sender, EventArgs e) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC lbTime.Text = DateTime.Now.ToString(); try { tocdoo = Int32.Parse(label7.Text); } catch (Exception e6) { } for (int ab = 49; ab >0; ab ) { tocdo[ab] = tocdo[ab-1]; } tocdo[0] = tocdoo; this.chart1.Series["VẬN TỐC"].Points.DataBindY(tocdo); this.chart1.Series["VẬN TỐC"].Points.ResumeUpdates(); } int max=0,min=0; private void set1_Click(object sender, EventArgs e) { a = Int32.Parse(SetText.Text); timer2.Start(); label10.Text = " " + 00 + "00 ms"; if (serialPort1.IsOpen) { serialPort1.Write(SetText.Text + "S" + huong + "C" + "0D"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC serialPort1.Write("!"); } } private void label7_Click(object sender, EventArgs e) { } private void lbTime_Click_1(object sender, EventArgs e) { } private void SetText_TextChanged(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } private void ngat_Click(object sender, EventArgs e) { ketnoi.BackColor = Color.Red; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC if (ngat.BackColor == Color.Red) ngat.BackColor = Color.White; serialPort1.Close(); MessageBox.Show("Đã ngắt kết nôi" ,"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); } private void chart1_Click(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { } private void Form1_Load_1(object sender, EventArgs e) { chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Interval = 1; chart1.ChartAreas[0].AxisX.Maximum = 50; chart1.ChartAreas[0].AxisY.Maximum = 25000; label7.Text = "0"; } private void button1_Click(object sender, EventArgs e) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC button3.BackColor = Color.Orange; if (button1.BackColor == Color.Orange) button1.BackColor = Color.White; else button1.BackColor = Color.Orange; if (serialPort1.IsOpen) { serialPort1.Write(SetText.Text+"S"+huong+"C"+"0D"); serialPort1.Write("!"); } } private void button2_Click(object sender, EventArgs e) { if (huong =="0") huong = "1"; else huong = "0"; if (serialPort1.IsOpen) { serialPort1.Write(SetText.Text + "S" + huong + "C" + "0D"); serialPort1.Write("!"); } } private void button3_Click(object sender, EventArgs e) { button1.BackColor = Color.Orange; if (button3.BackColor == Color.Orange) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH PHỤ LỤC button3.BackColor = Color.White; else button3.BackColor = Color.Orange; if (serialPort1.IsOpen) { serialPort1.Write("00000" + "S" + huong + "C" + "1D"); serialPort1.Write("!"); } } int b=0,c = 0,d=0; int i; private void timer2_Tick(object sender, EventArgs e) { i++; b= a + 100; c = a - 100; if (tocdoo > c && tocdoo

Ngày đăng: 25/12/2021, 23:14

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan