1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Thiết lập thông số bộ điều khiển hệ thống treo chủ động trên mô hình 1 2 xe bằng matlab

108 3 0

Đ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 108
Dung lượng 11,45 MB

Nội dung

Hồ Chí Minh, tháng 08 năm 2022 TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH Trang 11 LỜI CẢM ƠN Trong suốt quá trình nghiên cứu và thực hiện đề tài “Thiết lập thông số bộ điều khiể

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 KHĨA LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ THIẾT LẬP THÔNG SỐ BỘ ĐIỀU KHIỂN HỆ THỐNG TREO CHỦ ĐỘNG TRÊN MƠ HÌNH ½ XE BẰNG MATLAB GVHD: TH.S DƯƠNG NGUYỄN HẮC LÂN SVTH : TRƯƠNG TRUNG NGUYÊN NGUYỄN HỒI NAM SKL009095 Tp Hồ Chí Minh, tháng 8/2022 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA CƠ KHÍ ĐỘNG LỰC ĐỒ ÁN TỐT NGHIỆP THIẾT LẬP THÔNG SỐ BỘ ĐIỀU KHIỂN HỆ THỐNG TREO CHỦ ĐỘNG TRÊN MƠ HÌNH ½ XE BẰNG MATLAB SVTH: TRƯƠNG TRUNG NGUYÊN MSSV: 18145409 SVTH: NGUYỄN HOÀI NAM MSSV: 18145404 GVHD: Th.S DƯƠNG NGUYỄN HẮC LÂN Tp Hồ Chí Minh, tháng 08 năm 2022 TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA CƠ KHÍ ĐỘNG LỰC XÁC NHẬN HỒN THÀNH ĐỒ ÁN Tên đề tài: Thiết lập thông số điều khiển Hệ thống treo chủ động mơ hình ½ xe Matlab Họ tên Sinh viên: Trương Trung Nguyên Nguyễn Hồi Nam MSSV: 18145409 MSSV: 18145404 Ngành: Cơng nghệ Kỹ thuật Ơ tơ Sau tiếp thu điều chỉnh theo góp ý Giảng viên hướng dẫn, Giảng viên phản biện thành viên Hội đồng bảo vệ Đồ án tốt nghiệp hoàn chỉnh theo yêu cầu nội dung hình thức Chủ tịch Hội đồng: Giảng viên hướng dẫn: Giảng viên phản biện: Tp Hồ Chí Minh, tháng 08 năm 2022 G=4096*10^-6; if get(handles.tag556,'value')==1 v=5.56; i=351; end if get(handles.tag1111,'value')==1 v=11.11; i=141; end if get(handles.tag1667,'value')==1 v=16.67; i=81; end if get(handles.tag2778,'value')==1 v=27.78; i=37; end end t=(a+b)/v; assignin('base','G',G); assignin('base','v',v); assignin('base','t',t); %chuan dau vao PID sim('taochuan.slx') x=matduong.time; y=matduong.signals.values; u=ones(1,i)/i; w=filter(u,1,y); smooth=[x,w]; assignin('base','smooth',smooth); sim('mophongchinh.slx'); 74 %in cac thong số ngoai giao dien len_zA_2dot_PA=length(zA_2dot_PA); sum_zA_2dot_PA=0; for count_zA_2dot_PA = 1:len_zA_2dot_PA sum_zA_2dot_PA=sum_zA_2dot_PA+abs(zA_2dot_PA(count_zA_2dot_PA)); end avg_zA_2dot_PA= sum_zA_2dot_PA/len_zA_2dot_PA; set(handles.taggttbctbd,'string',avg_zA_2dot_PA); len_zA_2dot_AC=length(zA_2dot_AC); sum_zA_2dot_AC=0; for count_zA_2dot_AC = 1:len_zA_2dot_AC sum_zA_2dot_AC=sum_zA_2dot_AC+abs(zA_2dot_AC(count_zA_2dot_AC)); end avg_zA_2dot_AC= sum_zA_2dot_AC/len_zA_2dot_AC; set(handles.taggttbctcd,'string',avg_zA_2dot_AC); len_zB_2dot_PA=length(zB_2dot_PA); sum_zB_2dot_PA=0; for count_zB_2dot_PA = 1:len_zB_2dot_PA sum_zB_2dot_PA=sum_zB_2dot_PA+abs(zB_2dot_PA(count_zB_2dot_PA)); end avg_zB_2dot_PA= sum_zB_2dot_PA/len_zB_2dot_PA; set(handles.taggttbcsbd,'string',avg_zB_2dot_PA); len_zB_2dot_AC=length(zB_2dot_AC); sum_zB_2dot_AC=0; for count_zB_2dot_AC = 1:len_zB_2dot_AC sum_zB_2dot_AC=sum_zB_2dot_AC+abs(zB_2dot_AC(count_zB_2dot_AC)); end avg_zB_2dot_AC= sum_zB_2dot_AC/len_zB_2dot_AC; set(handles.taggttbcscd,'string',avg_zB_2dot_AC); len_z_2dot_PA=length(z_2dot_PA); sum_z_2dot_PA=0; 75 for count_z_2dot_PA = 1:len_z_2dot_PA sum_z_2dot_PA=sum_z_2dot_PA+abs(z_2dot_PA(count_z_2dot_PA)); end avg_z_2dot_PA= sum_z_2dot_PA/len_z_2dot_PA; set(handles.taggttbttbd,'string',avg_z_2dot_PA); len_z_2dot_AC=length(z_2dot_AC); sum_z_2dot_AC=0; for count_z_2dot_AC = 1:len_z_2dot_AC sum_z_2dot_AC=sum_z_2dot_AC+abs(z_2dot_AC(count_z_2dot_AC)); end avg_z_2dot_AC= sum_z_2dot_AC/len_z_2dot_AC; set(handles.taggttbttcd,'string',avg_z_2dot_AC); Reduce_F=(1-avg_zA_2dot_AC/avg_zA_2dot_PA)*100; Reduce_R=(1-avg_zB_2dot_AC/avg_zB_2dot_PA)*100; Reduce_C=(1-avg_z_2dot_AC/avg_z_2dot_PA)*100; set(handles.tagtruoc,'string',Reduce_F); set(handles.tagsau,'string',Reduce_R); set(handles.tagtrongtam,'string',Reduce_C); x1_ACmax=max(abs(x1_AC)); set(handles.tagmaxtreotruoc,'string',x1_ACmax); x2_ACmax=max(abs(x2_AC)); set(handles.tagmaxtreosau,'string',x2_ACmax); WD1_ACmax=max(abs(WD1_AC)); set(handles.tagmaxloptruoc,'string',WD1_ACmax); WD2_ACmax=max(abs(WD2_AC)); set(handles.tagmaxlopsau,'string',WD2_ACmax); f1max=max(abs(f1)); set(handles.tagmaxluctruoc,'string',f1max); f2max=max(abs(f2)); set(handles.tagmaxlucsau,'string',f2max);  Chương trình vẽ đồ thị từ kết công việc khác: 76 function tagplot_Callback(hObject, eventdata, handles) sim('taochuan.slx') sim('mophongchinh.slx') x=matduong.time; y=matduong.signals.values; y2=matduong2.signals.values; if get(handles.tag556,'value')==1 v=5.56; end if get(handles.tag1111,'value')==1 v=11.11; end if get(handles.tag1667,'value')==1 v=16.67; end if get(handles.tag2778,'value')==1 v=27.78; end s=x.*v; if get(handles.tagchuyenvitrongtam,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,z_PA,'b ',x,z_AC,'r',x,y,'k-.','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,z_PA,'b ',s,z_AC,'r',s,y,'k-.','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi chuyen vi thang dung tam xe'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong','Mat duong'); 77 end if get(handles.taggiatoctrongtam,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,z_2dot_PA,'b ',x,z_2dot_AC,'r','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,z_2dot_PA,'b ',s,z_2dot_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi gia toc thang dung tam xe'); ylabel('Gia toc (m/s^2)'); legend('Bi dong','Chu dong'); end if get(handles.tagcvct,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,zA_PA,'b ',x,zA_AC,'r',x,y,'k-.','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,zA_PA,'b ',s,zA_AC,'r',s,y,'k-.','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi chuyen vi thang dung than xe truoc'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong','Mat duong'); end if get(handles.taggtct,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,zA_2dot_PA,'b ',x,zA_2dot_AC,'r','LineWidth',1.5); xlabel('Thoi gian (s)'); 78 end if get(handles.tags,'value')==1 plot(handles.axes1,s,zA_2dot_PA,'b ',s,zA_2dot_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi gia toc thang dung than xe truoc'); ylabel('Gia toc (m/s^2)'); legend('Bi dong','Chu dong'); end if get(handles.tagdchttt,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,x1_PA,'b ',x,x1_AC,'r','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,x1_PA,'b ',s,x1_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi dich chuyen he thong treo truoc'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong'); end if get(handles.tagcvcs,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,zB_PA,'b ',x,zB_AC,'r',x,y2,'k-.','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,zB_PA,'b ',s,zB_AC,'r',s,y2,'k-.','LineWidth',1.5); xlabel('Quang duong (m)'); end 79 title('do thi chuyen vi thang dung than xe sau'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong','Mat duong'); end if get(handles.taggtcs,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,zB_2dot_PA,'b ',x,zB_2dot_AC,'r','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,zB_2dot_PA,'b ',s,zB_2dot_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi gia toc thang dung than xe sau'); ylabel('Gia toc (m/s^2)'); legend('Bi dong','Chu dong'); end if get(handles.tagdchtts,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,x2_PA,'b ',x,x2_AC,'r','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,x2_PA,'b ',s,x2_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi dich chuyen he thong treo sau'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong'); end if get(handles.tagbxt,'value')==1 80 if get(handles.tagt,'value')==1 plot(handles.axes1,x,WD1_PA,'b ',x,WD1_AC,'r','LineWidth',1.5); xlabel('Thoi gian (m)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,WD1_PA,'b ',s,WD1_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi chuyen vi lop xe truoc'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong'); end if get(handles.tagbxs,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,WD2_PA,'b ',x,WD2_AC,'r','LineWidth',1.5); xlabel('Thoi gian (m)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,WD2_PA,'b ',s,WD2_AC,'r','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi chuyen vi lop xe sau'); ylabel('Chuyen vi (m)'); legend('Bi dong','Chu dong'); end if get(handles.tagpt,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,f1,'b','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 81 plot(handles.axes1,s,f1,'b','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi luc co cau chap hanh treo truoc'); ylabel('Luc (N)'); legend('Luc'); end if get(handles.tagps,'value')==1 if get(handles.tagt,'value')==1 plot(handles.axes1,x,f2,'b','LineWidth',1.5); xlabel('Thoi gian (s)'); end if get(handles.tags,'value')==1 plot(handles.axes1,s,f2,'b','LineWidth',1.5); xlabel('Quang duong (m)'); end title('do thi luc co cau chap hanh treo sau'); ylabel('Luc (N)'); legend('Luc'); end 82 PHỤ LỤC CÁC CHƯƠNG TRÌNH CON Trong trình chạy giao diện, chương trình gọi để kết hợp với chương trình tìm kết cho toán Các File.m chứa chương trình cần lưu thư mục chứa chương trình  Khởi tạo quần thể ban đầu:Initial function par=Initial(pop_size,npar,range) for pop_index = 1:pop_size for par_index = 1:npar par(pop_index,par_index)=rand*(range(2,par_index)range(1,par_index))+range(1,par_index); end end  Mã hóa thập phân cá thể: Encode_Decimal function pop=Encode_Decimal(par,sig,dec) if size(sig)~=size(dec) error(['SIG va DEC khong phu hop']); end [pop_size,npar]=size(par); for pop_index = 1:pop_size gene_index = 1; for par_index = 1:npar temp(par_index)=par(pop_index,par_index)/10^dec(par_index); for count = 1:sig(par_index) temp(par_index)=temp(par_index)*10; pop(pop_index,gene_index)=temp(par_index)-rem(temp(par_index),1); temp(par_index)=temp(par_index)-pop(pop_index,gene_index); gene_index=gene_index+1; end end end 83  Chọn cá thể cha mẹ cho hệ sau: Select_Base_Ranking function parent=Select_Linear_Ranking(pop,fitness,eta,best,bestchrom) N=length(fitness); [fitness,order] = sort(fitness); for k=1:N, p(k)=(eta+(2-eta)*(k-1)/(N-1))/N; end s=zeros(1,N+1); for k=1:N, s(k+1)=s(k)+p(k); end; for k = 1:N, if best==1 & order(k)==bestchrom parent(order(k),:)=pop(order(k),:); else r=rand*s(N+1); index=find(s rand k1 = rand*(chrom_len-1); k1 = k1-rem(k1,1)+1; k2=k1; while k2==k1 k2 = rand*(chrom_len-1); k2 = k2-rem(k2,1)+1; end if k1>k2 t=k2; k2=k1; k1=t; end child(p1,1:k1)=parent(p1,1:k1); child(p1,k1+1:k2)=parent(p2,k1+1:k2); child(p1,k2+1:chrom_len)=parent(p1,k2+1:chrom_len); else child(p1,:)=parent(p1,:); end end end  Phép đột biến: Mutate Function newpop=Mutate(child,mutate_prob,best,bestchrom,Pos_Fnum,EDrange) [pop_size,chrom_len]=size(child); newpop=child; for pop_index= 1:pop_size nPos=1; if (best==0) || (best==1 && pop_index~=bestchrom for gene_index = 1:chrom_len if m_prob > rand 85 rand_gene=rand*10; while (rand_gene==10) rand_gene=rand*10; end if gene_index==Pos_Fnum(nPos) while (rand_gene-rem(rand_gene,1)>EDrange(2,gene_index)||rand_gene==10) rand_gene=rand*10; end if nPos EDrange(2,gene_index)||rand_gene==10) rand_gene=rand*10; end newpop(pop_index,gene_index)=rand_gene-rem(rand_gene,1); else newpop(pop_index,gene_index)=rand_gene-rem(rand_gene,1); end end end end end end  Trả kết dạng số thực ban đầu: Decode_Decimal function par=Decode_Decimal(newpop,sig,dec) if size(sig)~=size(dec) error(['Mismatch between SIG and DEC']) end 86 [pop_size,chrom_len]=size(newpop) npar=length(sig) if chrom_len~=sum(sig) error(['Mismatch between chromosome length and SIG']) end par=zeros(pop_size,npar); for pop_index = 1:pop_size start_gene = 0; for par_index = 1:npar for count=1:sig(par_index) gene_index=start_gene+count; weight=dec(par_index)-count; par(pop_index,par_index)=par(pop_index,par_index)+(newpop(pop_index,gene_index)) *10^weight; end start_gene=start_gene+sig(par_index); end end 87 S K L 0

Ngày đăng: 28/12/2023, 18:49

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

TÀI LIỆU LIÊN QUAN

w