Buscar

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