Você está na página 1de 28

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
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]
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
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','Nor
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','Locati
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

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,'
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','North

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','

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

Você também pode gostar