⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cnf_set.m

📁 hard disk drive servo control tools, it is very helpful
💻 M
📖 第 1 页 / 共 4 页
字号:
	'String','State Feedback', ...
	'Style','radiobutton',...
    'Callback',{@callback_observer},...
    'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.radio_OV_full =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Full Order Measurement Feedback', ...
	'Style','radiobutton',...
    'Callback',{@callback_observer},...
    'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.radio_OV_reduced =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Reduced Order Measurement Feedback', ...
	'Style','radiobutton',...
    'Callback',{@callback_observer},...
    'HorizontalAlignment','left');

%  set(ud.Handles.radio_OV_none,'UserData',[ud.Handles.radio_OV_full,ud.Handles.radio_OV_reduced]);
%  set(ud.Handles.radio_OV_full,'UserData',[ud.Handles.radio_OV_none,ud.Handles.radio_OV_reduced]);
%  set(ud.Handles.radio_OV_reduced,'UserData',[ud.Handles.radio_OV_none,ud.Handles.radio_OV_full]);


% the frame
% frmWid=TextWL+TextW;
frmHt=9*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder/2;
Y=Y-Params.vBorder;
frmBot=Y-frmHt;

uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'ForegroundColor','w',...
	'BackgroundColor',Params.StdColor, ...
   'Position',[frmLft frmBot frmWid frmHt], ...
   'Style','frame');

%  the CNF linear feedback part
Y=Y-Vgap;
uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'ForegroundColor','b', ...
   'FontSize',10,...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Design State Feedback Gain Matrix F using', ...
    'Style','text', ...
   'HorizontalAlignment','left');

% A specific F
Y=Y-Vgap;
ud.Handles.radio_FB_gain =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','A specific F', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.edit_FB_gain = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'HorizontalAlignment','left');

% H2 control
Y=Y-Vgap;
ud.Handles.radio_FB_H2 =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','H2 control with a preliminary tuning parameter epsilon (tunable)', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.edit_FB_epsilon = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');


% pole placement
Y=Y-Vgap;
ud.Handles.radio_FB_poles =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Pole placement with preliminary damping ratio and natural frequency (tunable)', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.edit_FB_poles = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');

% the integral pole 
Y=Y-Vgap;
ud.Handles.text_Integral=uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X,Y, TextWL*0.8  TextH], ...
	'String','Preliminary integration pole and gain (tunable) ', ...
    'Style','text', ...
   'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_Integral = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');
 
set(ud.Handles.check_IC,'UserData',[ud.Handles.text_Integral, ud.Handles.edit_Integral]);


 % set the database to control the radio-button
 udb=struct('others',[], 'enable',[],'disable',[]);

 udb.others=[ud.Handles.radio_FB_gain,ud.Handles.radio_FB_poles];
 udb.disable=[ud.Handles.edit_FB_gain,ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
 udb.enable=[ud.Handles.edit_FB_epsilon ];
 set(ud.Handles.radio_FB_H2,'UserData',udb);

 udb.others=[ud.Handles.radio_FB_H2, ud.Handles.radio_FB_poles];
 udb.enable=[ud.Handles.edit_FB_gain];
 udb.disable=[ud.Handles.edit_FB_epsilon , ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
 set(ud.Handles.radio_FB_gain,'UserData',udb);
 
 udb.others=[ud.Handles.radio_FB_H2, ud.Handles.radio_FB_gain];
 udb.disable=[ud.Handles.edit_FB_epsilon, ud.Handles.edit_FB_gain];
 udb.enable=[ud.Handles.edit_FB_poles,ud.Handles.edit_Integral];
 set(ud.Handles.radio_FB_poles,'UserData',udb);


% the right half window
Y=Y0;
 
%  the CNF nonlinear feedback part
%  the frame
frmLft=frmLft+0.5;
% frmWid=TextWL+TextW;
frmHt=4*Vgap+Params.vBorder;
% Y=Y-Params.vBorder;
frmBot=Y-frmHt;

uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'ForegroundColor','w',...
	'BackgroundColor',Params.StdColor, ...
   'Position',[frmLft frmBot frmWid frmHt], ...
   'Style','frame');

X0 = frmLft + Params.hBorder;
X = X0 + TextW/2;

Y=Y-Vgap;
ud.Handles.check_CNF=uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'ForegroundColor','b', ...
   'FontSize',10,...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','CNF Nonlinear Feedback', ...
	'Style','Checkbox', ...
	'Callback',{@callback_check}, ...
   'HorizontalAlignment','left');
 

Y=Y-Vgap;
ud.Handles.text_W=uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL, TextH], ...
	'String','The diagonal vector of matrix W (tunable)', ...
    'Style','text', ...
   'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_CNF_W = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.text_Rho =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Nonlinear function rho (parameters tunable at simulation panel). ', ...
    'Style','text', ...
   'HorizontalAlignment','left');

set(ud.Handles.check_CNF,'UserData', [ud.Handles.text_W, ud.Handles.edit_CNF_W, ud.Handles.text_Rho]);    
        

%  the observer part

%  the frame
% frmWid=TextWL+TextW;
frmHt=7*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder/2;
Y=Y-Params.vBorder;
frmBot=Y-frmHt;

uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'ForegroundColor','w',...
	'BackgroundColor',Params.StdColor, ...
   'Position',[frmLft frmBot frmWid frmHt], ...
   'Style','frame');

Y=Y-Vgap;
ud.Handles.text_OV_tip=uicontrol('Parent',ThisFig, ...
    'Unit',Params.StdUnit,...
	'ForegroundColor','b', ...
	'BackgroundColor',Params.StdColor, ...
    'FontSize',10,...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Design Observer Gain Matrix K using', ...
    'Style','text', ...
    'HorizontalAlignment','left');

% design observer using a specific K
Y=Y-Vgap;
ud.Handles.radio_OV_gain =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','A specific K', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.edit_OV_gain = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'HorizontalAlignment','left');

% design observer via H2
Y=Y-Vgap;
ud.Handles.radio_OV_H2 =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','H2 technique with a tuning parameter epsilon (tunable)', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');
 
Y=Y-Vgap;
ud.Handles.edit_OV_epsilon = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');

% design observer via Butterworth filter

Y=Y-Vgap;
ud.Handles.radio_OV_butter =uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Desired bandwidth of observer dynamics in Butterworth pattern (tunable)', ...
	'Style','radiobutton',...
    'Callback',{@callback_radio_choice},...
    'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_OV_omega = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@Callback_Matrix_Read}, ...
   'HorizontalAlignment','left');


% set the database for the radio buttons associated with observer type
obv_type=[ud.Handles.radio_OV_none,ud.Handles.radio_OV_full,ud.Handles.radio_OV_reduced];
obv_gain=[ud.Handles.radio_OV_gain, ud.Handles.edit_OV_gain, ...
          ud.Handles.radio_OV_H2, ud.Handles.edit_OV_epsilon, ...
          ud.Handles.radio_OV_butter, ud.Handles.edit_OV_omega, ud.Handles.text_OV_tip];
obv=struct('obv_type', obv_type, 'obv_gain',obv_gain, 'on_off','on');

set(ud.Handles.radio_OV_full,'UserData',obv);
set(ud.Handles.radio_OV_reduced,'UserData',obv);
obv.on_off='off';
set(ud.Handles.radio_OV_none,'UserData',obv);

%  set the database to control the radio-button
%  udb=struct('others',[], 'enable',[],'disable',[]);
 udb.others=[ud.Handles.radio_OV_H2, ud.Handles.radio_OV_butter];
 udb.enable=[ud.Handles.edit_OV_gain];
 udb.disable=[ud.Handles.edit_OV_epsilon,ud.Handles.edit_OV_omega];
 set(ud.Handles.radio_OV_gain,'UserData',udb);
 
 udb.others=[ud.Handles.radio_OV_gain,ud.Handles.radio_OV_butter];
 udb.disable=[ud.Handles.edit_OV_gain,ud.Handles.edit_OV_omega];
 udb.enable=[ud.Handles.edit_OV_epsilon];
 set(ud.Handles.radio_OV_H2,'UserData',udb);

 udb.others=[ud.Handles.radio_OV_gain,ud.Handles.radio_OV_H2];
 udb.disable=[ud.Handles.edit_OV_gain,ud.Handles.edit_OV_epsilon];
 udb.enable=[ud.Handles.edit_OV_omega];
 set(ud.Handles.radio_OV_butter,'UserData',udb);

 
% For filter

Y=Y-Params.vBorder;
frmHt=2*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder;
frmBot=Y-frmHt;

ud.Handles.frame_FT = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'ForegroundColor','w',...
	'BackgroundColor',Params.StdColor, ...
   'Position',[frmLft frmBot frmWid frmHt], ...
   'Style','frame');

 Y=Y-Vgap;
 ud.Handles.text_FT=uicontrol('Parent',ThisFig, ...
     'Unit',Params.StdUnit,...
     'BackgroundColor',Params.StdColor, ...
     'Position',[X0,Y, TextWL  TextH], ...
     'ForegroundColor','b',...
     'FontSize',10,...
     'String','The Transfer Function of the Addtional (Notch) Filter', ...
     'Style','text', ...
     'HorizontalAlignment','left');
Y=Y-Vgap;
ud.Handles.edit_FT_Fcn = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Callback',{@edit_RM_Callback,gco}, ...
   'HorizontalAlignment','left');
 
set(ud.Handles.check_FT, 'UserData', [ud.Handles.frame_FT, ud.Handles.text_FT, ud.Handles.edit_FT_Fcn] );
 

% For Nonlinearity Compensation part
% the frame
% frmWid=TextWL+TextW;
Y=Y-Params.vBorder;
frmHt=2*Vgap+Params.vBorder;
% frmLft=X0-Params.hBorder;
frmBot=Y-frmHt;

ud.Handles.frame_NF = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'ForegroundColor','w',...
	'BackgroundColor',Params.StdColor, ...
   'Position',[frmLft frmBot frmWid frmHt], ...
   'Style','frame');

Y=Y-Vgap;
ud.Handles.text_NF=uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
	'BackgroundColor',Params.StdColor, ...
	'ForegroundColor','b', ...
    'FontSize',10,...
	'Position',[X0,Y, TextWL  TextH], ...
	'String','Nonlinear Pre-compensation Function g(y) ', ...
	'Style','text', ...
   'HorizontalAlignment','left');

Y=Y-Vgap;
ud.Handles.edit_NF = uicontrol('Parent',ThisFig, ...
   'Unit',Params.StdUnit,...
   'BackgroundColor',[1 1 1], ...
   'Position',[X Y EditW EditH], ...
   'Style','edit', ...
   'Tag','y', ...
   'Callback',{@edit_NF_Callback,gco}, ...
   'HorizontalAlignment','left');

set(ud.Handles.check_NL, 'UserData', ...
    [ud.Handles.frame_NF, ud.Handles.text_NF, ud.Handles.edit_NF] );


% For the buttons
Y=Y-Vgap;
BW = Params.ButtonW; % button width 
BH = Params.ButtonH;
XGap = BW/2;
Y0 = BH/2;
X0 = 1/2+(0.5-BW*2.5)/2;
% Add window buttons
ud.Handles.OKButton = uicontrol('Parent',ThisFig, ...
    'Unit',Params.StdUnit,...
    'Position',[X0 Y0 BW BH], ...
    'FontWeight','bold', ...
    'Callback',{@button_OK_Controller},...
    'String','Apply');
%     'BackgroundColor',[0.7 1 1], ...

X0 = X0 + BW + XGap;
ud.Handles.CancelButton = uicontrol('Parent',ThisFig, ...
    'Callback','close(gcbf)',...
    'Unit',Params.StdUnit,...
    'Position',[X0 Y0 BW BH], ...
    'FontWeight','bold', ...
    'String','Cancel');

%     'BackgroundColor',[1 1 0.7], ...

% Fill the initial controller data
  
handles=ud.Handles;

FB_choice = cnfdb.Controller.FB_choice;
switch  FB_choice
    case 1
        callback_radio_choice(handles.radio_FB_gain);
    case 2
        callback_radio_choice(handles.radio_FB_H2);
    case 3
        callback_radio_choice(handles.radio_FB_poles);
end    

FB_poles=cnfdb.Controller.FB_poles;

if isempty(cnfdb.Entry.F)
    set(handles.edit_FB_gain,'String', matrix2str(cnfdb.Controller.FB_F));
else
    set(handles.edit_FB_gain,'String', cnfdb.Entry.F);
end    
set(handles.edit_FB_epsilon,'String', num2str(FB_poles(1)));
if size(FB_poles,2) >=3
    set(handles.edit_FB_poles,'String', matrix2str(FB_poles(2:3)));
end

set(handles.check_IC, 'Value', cnfdb.Controller.IC_in);
if cnfdb.Controller.IC_in==0
    set(get(handles.check_IC,'UserData'), 'Visible', 'off');
end
if size(FB_poles,2) >=4
    if size(FB_poles,2)>=5
        intpg=FB_poles(4:5);
    else    
        intpg=[FB_poles(4) 1];
    end    
    set(handles.edit_Integral, 'String', matrix2str(intpg));
end


set(handles.check_CNF, 'Value', cnfdb.Controller.ctrl_type);
if cnfdb.Controller.ctrl_type==0
    set(get(handles.check_CNF, 'UserData'), 'Visible', 'off');
end
set(handles.edit_CNF_W,'String', matrix2str(cnfdb.Controller.CNF_W));


ov_type=cnfdb.Controller.OV_type;
set(handles.radio_OV_none,'Value',(ov_type==0));
set(handles.radio_OV_full,'Value',(ov_type==1));
set(handles.radio_OV_reduced,'Value',(ov_type==2));
if ov_type==0
    set(obv_gain,'Visible','off');
end

ov_choice=cnfdb.Controller.OV_choice;
switch ov_choice
    case 1
        callback_radio_choice(handles.radio_OV_gain);
    case 2
        callback_radio_choice(handles.radio_OV_H2);
    case 3
        callback_radio_choice(handles.radio_OV_butter);
end    

if isempty(cnfdb.Entry.K)
    set(handles.edit_OV_gain, 'String', matrix2str(cnfdb.Controller.OV_K) );
else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -