Prévia do material em texto
Absorção & Stripping Programador: Pedro Henrique Siscato Grupo: Pedro Henrique Siscato. 117082 Gabriel Girotto Zanutto. 112431 Lucas Hideki Yamaguti 106775 Rafaela Sayuri Novais. 103522 Lucas Crepaldi Henriques. 112413 Diagrama construído do sistema: Dados de equilíbrio NH3/Água utilizados. 1 Absorção: % Entrada de Parâmetros R = 0.7302; % ft3.atm/R.lbmol % Torre de Absorção TRtr1 = 545.67; % °R - Temperatura % Alimentação V1 = 500; % ft3/min y1 = 0.2; % fração molar de amônia % Gás residual y2 = 0.01; % fração molar de amônia % Solvente pobre x2 = 0.001; MMNH3 = 17.031; %massa molar da amônia MMAr = 29; %massa molar do ar MMH2O = 18.01; %massa molar da água Ga = (V1*1.5)/(R*TRtr1); % lbmol/min - Vazão molar de gás Gs = Ga*(1-y1); % lbmol/min - Vazão molar de gás, em base inerte % Razões molares gasosas Y1 = y1/(1-y1); % Razão molar de entrada: mols de amônia/mols de ar Y2 = y2/(1-y2); % Razão molar de saída: mols de amônia/mols de ar % Razão molar líquida X2 = x2/(1-x2); % Razão molar de entrada: mols de amônia/mols de água % Pontos usados para ajuste da curva de equilíbrio p30= [454,352,260,179,110,79.7,51,40.1,29.6,19.3,0]; 2 % p50= [247,179,115,91.1,67.1,44.5,22.2,0]; p50= [91.1,67.1,44.5,22.2,0]; Y30 = p30./(760*1.5); Y50 = p50./760; Y30 = Y30./(1-Y30); Y50 = Y50./(1-Y50); x30 = [0.3, 0.25, 0.20, 0.15, 0.10, 0.075, 0.05, 0.04, 0.03, 0.02, 0]; % x50 = [0.10, 0.075, 0.05, 0.04, 0.03, 0.02, 0.01, 0]; x50 = [0.04, 0.03, 0.02, 0.01, 0]; % Ajuste load('C:\Users\pedro\Desktop\HD\UEM\Graduação\4° Ano\Operações Unitárias II\Exercícios\Absorção e Stripping\polynomial30_x1menorque1.mat'); xgrf30 = 0:0.0001:0.3; Ygrf30 = polymonial30_menosxmaiorque1(xgrf30); N = length(Ygrf30); % Correção de ajuste (pontos menores que 1 = 0) for i = 1:N if Ygrf30(i) < 0 Ygrf30(i) = 0; end end teste = zeros(0,N); testey = teste; for i = 1:N teste(i) = abs(Ygrf30(i) - Y1); end [~,k] = min(teste); X1_min = xgrf30(k); % Uso do polinômio somente na região de trabalho: xgrf30 = 0:0.0001:X1_min; Ygrf30 = polymonial30_menosxmaiorque1(xgrf30); N = length(Ygrf30); % Correção de ajuste (pontos menores que 1 = 0) for i = 1:N if Ygrf30(i) < 0 Ygrf30(i) = 0; end end figure(1) plot(xgrf30,Ygrf30, [0, X1_min],[Y1, Y1], 'k:',[xgrf30(k),xgrf30(k)],[Y1, 0], 'k:', [X2,X1_min],[Y2,Y1], 'r') title('Gráfico 1 - Diagrama de equilíbrio NH_3- Água à 30°C (Absorção)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') set(gca, 'MinorGridColor', 'k', 'LineWidth', 1.2 ); legend('Curva de equilíbrio','','','Ls/Gs mínimo','Location','NorthWest') axis([0 X1_min 0 Y1]) 3 coef30 = reta(0,xgrf30(k),Y2,Y1); % Cálculo da inclinação: Ls/Gs razaomin = coef30(2); Lsmin = Gs*razaomin; % lbmol/min % Critério: 1,35 min razao = 1.35*razaomin; Ls = Gs*razao; % lbmol/min p_RO = reta2(X2,Y2,razao); % Cálculo de X1: (BM) X1 = (Ls*X2+Gs*(Y1-Y2))/Ls; % mols de amônia/mols de água vet_x = linspace(X2,X1,N); reta_RO = polyval(p_RO,vet_x); figure(2) plot(xgrf30,Ygrf30, [0, X1_min],[Y1, Y1], 'k:',[X1_min,X1_min],[0 Y1], 'k:', [X2,X1_min],[Y2,Y1], 'r',vet_x,reta_RO, 'g',[X1,X1],[0, Y1], 'k:') title('Gráfico 2 - Diagrama de equilíbrio NH_3- Água à 30°C (Absorção)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') legend('Curva de equilíbrio','','','Ls/Gs mínimo','Ls/Gs de operação (1,35min)','Location','NorthWest') axis([0 X1_min 0 Y1]) 4 figure(3) plot(xgrf30,Ygrf30, [0, X1],[Y1, Y1], 'k:',vet_x,reta_RO, 'g',[X1,X1],[0, Y1], 'k:') title('Gráfico 3 - Diagrama de equilíbrio NH_3- Água à 30°C (Absorção)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') legend('Curva de equilíbrio','','Ls/Gs de operação','Location','NorthWest') axis([0 X1_min 0 Y1]) 5 figure(4) plot(xgrf30,Ygrf30, [0, X1],[Y1, Y1], 'k:',vet_x,reta_RO, 'g',[X1,X1],[0, Y1], 'k:') hold on title('Gráfico 4 - Diagrama de equilíbrio NH_3- Água à 30°C (Absorção)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') % Plotando os pratos da coluna: N = length(reta_RO); M = 5; x_p = zeros(M,0); y_p = x_p; x_p(1) = X2; y_p(1) = Y2; testex = zeros(N,0); testey = testex; % for j = 1:M % % Andando em Y % for i=1:N % testey(i) = abs(xgrf30(i) - x_p(j)); % end % [~,k] = min(testey); % y_p(j+1) = Ygrf30(k); % % Andando em X % for i=1:N % testex(i) = abs(reta_RO(i) - y_p(j+1)); % end % [~,k] = min(testex); 6 % x_p(j+1) = vet_x(k); % plot([x_p(j),x_p(j)],[y_p(j),y_p(j+1)], 'r',[x_p(j+1),x_p(j)],[y_p(j+1),y_p(j+1)], 'r') % end k=1; for j = 1:M % Andando em X for i=1:N testex(i) = abs(y_p(j) - Ygrf30(i)); end [~,k] = min(testex); x_p(j+1) = xgrf30(k); plot([x_p(j),x_p(j+1)],[y_p(j),y_p(j)],'r') % Andando em Y for i=1:N testey(i) = abs(x_p(j+1) - vet_x(i)); end [~,k] = min(testey); y_p(j+1) = reta_RO(k); if (j ~= M) plot([x_p(j+1),x_p(j+1)],[y_p(j),y_p(j+1)],'r') end end legend('Curva de equilíbrio','','Ls/Gs de operação','','','','N de pratos teóricos = 5','Location','NorthWest') axis([0 X1_min 0 Y1]) Nesteq = 5; 7 HETPteo = 1.83; Zteo = Nesteq*HETPteo Zteo = 9.1500 % Recheio escolhido: selas de Berl 1/2" Fp = 787; % m^-1 fator de recheio % Obtendo os valores de Yeq no intervalo da reta de operação Yeq = polymonial30_menosxmaiorque1(vet_x); Yeq = Yeq'; for i = 1:length(Yeq) if Yeq(i) < 0 Yeq(i) = 0; end end % Obtendo omegag: omegag = 1./(reta_RO-Yeq); figure(5) plot(reta_RO,omegag,[Y2,Y2],[0,omegag(1)],'k:',[Y1,Y1],[0,omegag(end)],'k:'); title('Gráfico 5 - Diagrama de equilíbrio NH_3- Água à 30°C (Absorção)') ylabel('ômega = 1/Y-Yeq') xlabel('Y') legend('Área abaixo da curva = Nog') axis([0 (Y1+Y2) 0 omegag(1)]) 8 % Integral (Nog regra do trapézio, aproximação muito boa pois existem 1818 pontos) Nog = trapz(reta_RO,omegag); % Densidades no sistema SI (anexo): % 30 °C roNH3f = 0.9532*1000; % kg/m3 roH2O = 0.99576*1000; % kg/m3 roAr = 1.1644; % kg/m3 roNH3g = 0.00912270*1000; % kg/m3 % Viscosidades % 30 °C miH2O = 0.00080082; % Pa.s miAr = 1800*10^-7*0.1; % Pa.s % Estimar ro e mi com amônia solubilizada? % Aproximação: líquido = água; gás = ar % rogás = média entre ar e amonia no vapor miL = miH2O; roL = roH2O; roG = y1*roNH3g + (1-y1)*roAr roG = 2.7561 % Vazão mássica de gás total Gt = Gs*MMAr + Gs*Y1*MMNH3; % lbm/min % Vazão mássica de líquido total 9 Lt= Ls*MMH2O + Ls*X1*MMNH3; % lbm/min % Diâmetro e área da coluna Método Eckert (1970): % deltaP escolhido = 1"in H2O % Conversão para SI Lt = Lt*0.0075598666666667; % kg/s Gt = Gt*0.0075598666666667; % kg/s % eixo x: axisx = Lt/Gt*sqrt(roG/roL) axisx = 0.0573 axisy = 0.08; % obtido do gráfico acima G = sqrt(axisy*(9.81*roG*roL^2)/(Fp*(miL^(0.2))*roH2O)); Area = Gt/G; % m2 DA(1) = sqrt(4*Area/(pi)); % m FluxoG = Gt/Area; % kg/m2s FluxoL = Lt/Area; % kg/m2s % Conversão dos fluxos para unidades inglesas do gráfico do Perry: FluxoG = FluxoG*737.3376 % lbm/ft2h FluxoG = 2.4884e+03 FluxoL = FluxoL*737.3376 % lbm/ft2h FluxoL = 2.7099e+03 10 Hog = 1.6; % ft Hog = Hog*0.3048; % m disp(['Hog obtido = ', num2str(HETPteo),' metros']); Hog obtido = 1.83 metros HETP = (Hog*Nog)/Nesteq; % m Z = Hog*Nog; % m disp(['HETP dado no enunciado = ', num2str(HETPteo),' metros']); HETP dado no enunciado = 1.83 metros disp(['Número de pratos teóricos (Gráfico 4) = ', num2str(Nesteq)]); Número de pratos teóricos (Gráfico 4) = 5 disp('Altura calculada usando o HETP dado e o número de pratos teóricos') 11 Altura calculada usando o HETP dado e o número de pratos teóricos disp(['Altura = ', num2str(Zteo),' metros']); Altura = 9.15 metros disp(' ') disp('Dados calculados:') Dados calculados: disp(['Diâmetro da coluna = ', num2str(D*100),' cm']); Diâmetro da coluna = 50.2854 cm disp(['HETP = ', num2str(HETP),' metros']); HETP = 0.5356 metros disp(['Altura = ', num2str(Z),' metros']); Altura = 2.678 metros % Desvio do HETP calculado e o dado no enunciado: desvio= abs(HETP - HETPteo)/HETP*100; disp(['Desvio do HETP = ', num2str(desvio),' %']); Desvio do HETP = 241.6729 % 12 Stripping load('C:\Users\pedro\Desktop\HD\UEM\Graduação\4° Ano\Operações Unitárias II\Exercícios\Absorção e Stripping\ajuste50att.mat'); X4 = X1; X3 = X2; Y3 = 0; % Precisamos encontrar X3: % Consideração: Gás que entra: ar puro. Y3 = 0 TStrR = 581.67; % Temperatura da coluna em °R GaS = (V1*1)/(R*TStrR); % lbmol/min - Vazão molar de gás 13 xgrf50 = 0:0.0001:X1; Ygrf50 = ajuste50att(xgrf50); % Correção de ajuste (pontos menores que 1 = 0) for i = 1:length(Ygrf50) if Ygrf50(i) < 0 Ygrf50(i) = 0; end end N = length(xgrf50); teste = zeros(N,0); % Para encontrar a reta de operação faremos a reta tangente no ponto X3, % usando o ponto superior a ele: x0(1) = Ygrf50(1); x0(2) = Ygrf50(2); y0(1) = Ygrf50(1); y0(2) = Ygrf50(2); p_tang = reta4(x0(1),x0(2),y0(1),y0(2)); vet_xt = linspace(0,X4,N); ytang = polyval(p_tang,vet_x); % y=0 na reta tg: [~,k] = min(abs(ytang)); p0tg = vet_x(k); vet_xt = linspace(p0tg,X4,N); retatan = polyval(p_tang,vet_xt); % Agora encontramos este ponto na curva de equilíbrio: % Encontrar o ponto Y4: for i =1:N teste(i) = abs(xgrf50(i) - vet_x(end)); end [~,k] = min(teste); Y4 = Ygrf50(k); figure(6) plot(xgrf50,Ygrf50, [X4,X4],[0,Y4],'k:',[0,X4],[Y4,Y4],'k:',vet_xt,retatan,'r') title('Gráfico 6 - Diagrama de equilíbrio NH_3- Água à 50°C (Stripping)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') legend('Curva de equilíbrio','','','Ls/Gs máx','Location','NorthWest') 14 % Obtendo Ls: razaomax = p_tang(1); LsS = GaS*razaomax; % lbmol/min % Critério: Gs*1,35 razao = razaomax/1.35; GaSop = Ls/razao; p_opS = reta2(p0tg,Y3,razao); vet_x = linspace(p0tg,0.1363,N); reta_opS = polyval(p_opS,vet_x); figure(7) plot(xgrf50,Ygrf50, [X4,X4],[0,Y4],'k:',[0,X4],[Y4,Y4],'k:',vet_xt,retatan,'r',vet_x,reta_opS,'g') title('Gráfico 7 - Diagrama de equilíbrio NH_3- Água à 50°C (Stripping)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') legend('Curva de equilíbrio','','','Ls/Gs máx','Ls/Gs de operação (máx/1,35)','Location','NorthWest') 15 figure(8) plot(xgrf50,Ygrf50, [X4,X4],[0,Y4],'k:',[0,X4],[Y4,Y4],'k:',vet_x,reta_opS,'g') title('Gráfico 8 - Diagrama de equilíbrio NH_3- Água à 50°C (Stripping)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') legend('Curva de equilíbrio','','','Ls/Gs de operação','Location','NorthWest') 16 figure(9) plot(xgrf50,Ygrf50, [X4,X4],[0,Y4],'k:',[0,X4],[Y4,Y4],'k:',vet_x,reta_opS,'g') hold on title('Gráfico 9 - Diagrama de equilíbrio NH_3- Água à 50°C (Stripping)') xlabel('mol de NH_3/mol de H_2O') ylabel('mol NH_3/mol de ar') % Agora plotamos os pratos da coluna: M = 5; x_p = zeros(M,0); y_p = x_p; x_p(1) = X3; y_p(1) = Y3; testex = zeros(N,0); testey = testex; k = 1; for j = 1:M % Andando em X for i=1:N testex(i) = abs(y_p(j) - reta_opS(i)); end [~,k] = min(testex); x_p(j+1) = vet_x(k); plot([x_p(j),x_p(j+1)],[y_p(j),y_p(j)],'r') % Andando em Y for i=1:N 17 testey(i) = abs(x_p(j+1) - xgrf50(i)); end [~,k] = min(testey); y_p(j+1) = Ygrf50(k); if (j ~= M) plot([x_p(j+1),x_p(j+1)],[y_p(j),y_p(j+1)],'r') end end legend('Curva de equilíbrio','','','Ls/Gs de operação','N° de pratos teóricos = 4','Location','NorthWest') vet_x = linspace(x_p(2),x_p(end),N); reta_opS = polyval(p_opS,vet_x); % Obtendo os valores de Yeq no intervalo da reta de operação Yeq = ajuste50att(vet_x); Yeq = Yeq'; % Obtendo omegag: omegag = 1./(Yeq - reta_opS); figure(10) plot(reta_opS,omegag); ylabel('ômega = 1/Y-Yeq') xlabel('Y') legend('Área abaixo da curva = Nog') title('Gráfico 10 - Curva obtida para cálculo do Nog') 18 NogS = trapz(reta_opS,omegag); % Vazão mássica de gás total GtS = GaS*MMAr + GaS*Y4*MMNH3; % lbm/min % Vazão mássica de líquido total LtS= LsS*MMH2O + Ls*X4*MMNH3; % lbm/min % Diâmetro e área da coluna Método Eckert (1970): % deltaP escolhido = 1"in H2O % Conversão para SI LtS = LtS*0.0075598666666667; % kg/s GtS = GtS*0.0075598666666667; % kg/s % eixo x: axisx = LtS/GtS*sqrt(roG/roL) axisx = 0.0267 19 axisy = 0.042; % obtido do gráfico acima G = sqrt(axisy*(9.81*roG*roL^2)/(Fp*(miL^(0.2))*roH2O)); Area = Gt/G; % m2 DS(1) = sqrt(4*Area/(pi)); % m FluxoG = Gt/Area; % kg/m2s FluxoL = Lt/Area; % kg/m2s % Conversão dos fluxos para unidades inglesas do gráfico do Perry: FluxoG = FluxoG*737.3376 % lbm/ft2h FluxoG = 1.8030e+03 FluxoL = FluxoL*737.3376 % lbm/ft2h FluxoL = 1.9635e+03 % Fazendo a mesma lógica de interpolação e extrapolação anterior: 20 Hog = 1.8; % ft Hog = Hog*0.3048; % m disp(['Hog obtido = ', num2str(HETPteo),' metros']); Hog obtido = 1.83 metros HETP = (Hog*Nog)/Nesteq; % m Z = Hog*Nog; % m disp(['HETP dado no enunciado = ', num2str(HETPteo),' metros']); HETP dado no enunciado = 1.83 metros disp(['Número de pratos teóricos (Gráfico 4) = ', num2str(Nesteq)]); 21 Número de pratos teóricos (Gráfico 4) = 5 disp('Altura calculada usando o HETP dado e o número de pratos teóricos') Altura calculada usando o HETP dado e o número de pratos teóricos disp(['Altura = ', num2str(Zteo),' metros']); Altura = 9.15 metros disp(' ') disp('Dados calculados:') Dados calculados: disp(['Diâmetro da coluna = ', num2str(D*100),' cm']); Diâmetro da coluna = 50.2854 cm disp(['HETP = ', num2str(HETP),' metros']); HETP = 0.60255 metros disp(['Altura = ', num2str(Z),' metros']); Altura = 3.0127 metros % Desvio do HETP calculado e o dado no enunciado: desvio = abs(HETP - HETPteo)/HETP*100; disp(['Desvio do HETP = ', num2str(desvio),' %']); Desvio do HETP = 203.7092 % Ar: 22 Extra: usando os outros 2 gráficos para calcular o diâmetro das colunas (todos deltaP = 1" H2O): Absorção NORTON: C = 10.764; % Unidades do SI nu = miH2O/roH2O; 23 % eixo x: axisx = Lt/Gt*sqrt(roG/roL) axisx = 0.0573 axisy = 2.3; % obtido do gráfico acima F = 240; G = sqrt(axisy*(roG*(roL-roG))/(C*F*nu^(0.1))); Area = Gt/G; % m2 24 DA(2) = sqrt(4*Area/(pi)); % m STRIGGLE: axisy = 0.08; % obtido do gráfico acima % 32,2 = aceleração gravitacional F = 240; G = sqrt(axisy*9.81*(roG*(roL-roG))/(C*F*nu^(0.1))); Area = Gt/G; % m2 DA(3) = sqrt(4*Area/(pi)); % m Stripping NORTON: C = 10.764; % Unidades do SI nu = miH2O/roH2O; % eixo x: axisx = LtS/GtS*sqrt(roG/roL); 25 axisy = 3.2; % obtido do gráfico acima G = sqrt(axisy*(roG*(roL-roG))/(C*F*nu^(0.1))); Area = GtS/G; % m2 DS(2) = sqrt(4*Area/(pi)); % m STRIGGLE: axisy = 0.1; % obtido do gráfico acima 26 % 32,2 = aceleração gravitacional F = 240; G = sqrt(axisy*9.81*(roG*(roL-roG))/(C*F*nu^(0.1))); Area = GtS/G; % m2 DS(3) = sqrt(4*Area/(pi)); % m Comparando os diferentes diâmetros, com os diferentes métodos: ABSORÇÃO: disp(['Eckert (1970) = ', num2str(DA(1)*100),' cm']); Eckert (1970) = 37.7936 cm disp(['Norton = ', num2str(DA(2)*100),' cm']); Norton = 39.128 cm disp(['Striggle (1994) = ', num2str(DA(3)*100),' cm']); Striggle (1994) = 51.1952 cm STRIPPING: disp(['Eckert (1970) = ', num2str(DS(1)*100),' cm']); Eckert (1970) = 44.3995 cm disp(['Norton = ', num2str(DS(2)*100),' cm']); Norton = 37.4172 cm disp(['Striggle (1994) = ', num2str(DS(3)*100),' cm']); Striggle (1994) = 50.2854 cm function p = reta2(x0,y0,m) b = m; a = -m*x0 + y0; p = [b,a]; end function coef = reta(x0,x,y0,y) m = (y-y0)/(x-x0); a = -m*x0 + y0; coef = [a,m]; end function p = reta4(x0,x,y0,y) b = (y-y0)/(x-x0); a = -b*x0 + y0; p = [b,a]; 27 end 28