Documente Academic
Documente Profesional
Documente Cultură
Construcţia Şi Comanda Manipulatorului Folosit La Sudarea Elementului Sensibil de Suporţii Acestuia
Construcţia Şi Comanda Manipulatorului Folosit La Sudarea Elementului Sensibil de Suporţii Acestuia
Elementul sensibil este un fir din Wolfram cu diametrul de 8 m. Suporii din srm de oel inox au diametrul de 0,3 mm.
X=
Motorul pas cu pas utilizat are pasul unghiular =18= rezult pasul liniar (incrementul): x = ;
rad, de aici
= 1,876 mm, rezult x=0,0938 mm. Tabel 4. Date tehnice ale motorului SPS 15 RF de la firma MOATECH: Frecventa Rezistenta Drive max la Seria Aplicatie nominala Faze Mode pornire (PPS) grade VDC 7% 042K FDD 18 4.5 2 16 Bipolar 960 Cuplu(gfcm) Surub conducator Pull in Pull out Pas Pentru Cursa surub L surub viteza Tip de alimentare (mm) unghiulara la 400PPS la 1400PPS (mm) nula mm 26 10.15 12.29 1.876 19.8 37.5 Tensiune constanta Unghiul pasului Eroarea de poziionare a elementului sensibil fa de centrul suporilor este data de relatia: Tensiune
Comanda motoarelor MPP se face cu ajutorul unei plci de dezvoltare ce are o arhitectur dezvoltat n jurul microcontrolerului ATMEGA 16. Interfaa dintre microcontroler i MPP se realizeaz cu ajutorul circuitului integrat L293 D. Pentru a comanda pe rnd, dou MPP bipolare n ambele sensuri de rotaie folosind acelai circuit L293 D s-a folosit un comutator bipolar ce
leag pe rnd 1Y i 4Y (dou din ieirile circuitului L293 D) cu fazele A1 i B1 ale lui MPP1 sau cu fazele A2 i B2 ale lui MPP2.
Fig. 5. Manipulator
Comanda s-a fcut n secven simpl de pire prin apsarea a dou butoane pentru deplasarea sarcinii S1 nainte napoi sau sus jos a sarcinii S2. Programul a fost dezvoltat n mediul de programare Mikro Pascal PRO for AVR.
Fig. 7. Schema legaturilor electrice intre L293H, motoare pas cu pas si comutator bipolar
program manipulator;
var i,j:word;
case arg of 0: begin portb.1:=1;portd.4:=0;portb.3:=0;portd.5:=0;end; 1: begin portb.1:=0;portd.4:=1;portb.3:=0;portd.5:=0;end; 2: begin portb.1:=0;portd.4:=0;portb.3:=1;portd.5:=0;end; 3: begin portb.1:=0;portd.4:=0;portb.3:=0;portd.5:=1;end; end; delay_ms(350); end;
begin ddrb:=$0a; ddrd:=$30; ddra.0:=0; i:=400; while true do begin if pina.0=0 then begin i:=i+1; j:=i mod 4; pas(j); end; if pind.6=0 then begin i:=i-1; j:=i mod 4;
program tradvit2; {Acest program permite calibrarea unui anemometru cu senzor de viteza cu element sensibil cald. Caracteristica statica a anemometrului se
determina pornind de la rezultatele experimentale si alegand drept functie de aproximare functia U^2=U0^2+B*v^n, ai carei coeficienti se determina folosind metoda de aproximare in sensul celor mai mici patrate.} uses crt,graph,printer; {$L AX5411P.OBJ} {$I AX5411.INC}
type traductor=record nume:string; temp_atm:real; viteza:array[1..50] of real; tensiune:array[1..50] of real; cont:integer; a,b,n:real; end; x=array[1..10] of integer; y=array[1..1000] of integer; aa=array[1..3,1..3] of real;
tv:traductor; dat,ch:y;
procedure offset;
fun:=nadc_ary; dio[1]:=1000; dio[2]:=ofs(dat); dio[3]:=timer_trg; dio[4]:=ofs(ch); flag:=ax5411(fun,dio); p_offset:=0; for j:=1 to 1000 do begin p_offset:=p_offset+dat[j]; end; p_offset:=p_offset/1000; end;
begin clrscr; fun:=init; dio[1]:=$300;{IOPORT} dio[2]:=3;{IRQ LEVEL} dio[3]:=3;{DMA CHANNEL} flag:=AX5411(fun,dio); if flag <> 0 then writeln('Eroare de initializare a placii AX5411, flag = ',flag);
count:=100; assign(tv_file,'C:\bp\bogatu\date_vi.dat');
repeat clrscr; writeln('1. Ridicare caracteristica anemometru (calibrare) si'); writeln(' determinerea caracteristicii acestuia folosind'); writeln(' metoda de aproximare in sensul celor mai mici patrate'); writeln('2. Reprezentare grafica'); writeln('3. Afisare date anemometru'); writeln('4. Imprimare date anemometru'); writeln('5. Determinare viteza cu ajutorul traductorului de viteza cu ajutaj'); writeln('Optiune: ');readln(o); reset(tv_file); clrscr; writeln; lista; writeln;
if o=1 then begin writeln('1. Calibrare traductor nou.'); writeln('2. Modificare traductor existent.'); writeln('Optiune: ');readln(o1);
writeln(''); if o1=2 then begin writeln('Numar ordine traductor de modificat din lista: ');readln(j); seek(tv_file,j); end; writeln('Nume traductor: '); readln(tv.nume);
i:=0;
clrscr; writeln; writeln(' Nr. Presiune atm. Tensiunea'); writeln(' crt. p_atm (Pa) Presiunea p (Pa) Temp. atm. Viteza v2 (m/s) U(V)');
temp_atm (C)
offset;
flag:=ax5411(fun,dio);
repeat i:=i+1; repeat if i=1 then begin gotoxy(1,22);clreol; gotoxy(1,22);write('Pentru primul punct de pe curba de calibrare viteza aerului trebuie sa fie zero!'); end; repeat gotoxy(1,23);clreol; gotoxy(1,23);write('Dupa fixarea vitezei dorite se apasa orice tasta!');
fun:=nadc_ary; dio[1]:=2*count; dio[2]:=ofs(dat); dio[3]:=timer_trg; dio[4]:=ofs(ch); flag:=ax5411(fun,dio); p_atm:=0; p:=0; for j:=1 to count do begin p_atm:=p_atm+dat[2*j]; p:=p+dat[2*j-1];
rap_pres:=p_atm/(p_atm+p);
gotoxy(1,23);clreol; gotoxy(1,22);clreol; gotoxy(1,22);write('Introduceti valoarea tensiunii indicate de anemometru (V): ');read(tv.tensiune[i]); gotoxy(1,22);clreol; gotoxy(66,i+4);write(tv.tensiune[i]:7:3);
gotoxy(1,23);clreol; gotoxy(1,23);write('Doriti repetarea ultimei conversii? (d/n) '); cha:=readkey; until cha<>'d'; gotoxy(1,23);clreol; gotoxy(1,23);write('Doriti realizarea unei noi conversii? (d/n) '); cha:=readkey; until cha<>'d'; tv.cont:=i;
U0:=2;B:=0.5;n:=0.5; dU02:=0;dB:=0;dn:=0; U02:=U0*U0; l:=0; repeat l:=l+1; s1:=0;s2:=0;s3:=0;s4:=0;s5:=0;s6:=0;s7:=0;s8:=0;s9:=0;s10:=0; for i:=1 to tv.cont do begin if tv.viteza[i]=0 then s7:=s7+putere_f(tv.tensiune[i],2) else begin; s1:=s1+putere_f(tv.viteza[i],n); s2:=s2+putere_f(tv.viteza[i],2*n); s3:=s3+putere_f(tv.viteza[i],n)*ln(tv.viteza[i]); s4:=s4+putere_f(tv.viteza[i],2*n)*ln(tv.viteza[i]);
s5:=s5+putere_f(tv.viteza[i],n)*ln(tv.viteza[i])*ln(tv.viteza[i]); s6:=s6+putere_f(tv.viteza[i],2*n)*ln(tv.viteza[i])*ln(tv.viteza[i]); s7:=s7+putere_f(tv.tensiune[i],2); s8:=s8+putere_f(tv.tensiune[i],2)*putere_f(tv.viteza[i],n); s9:=s9+putere_f(tv.tensiune[i],2)*putere_f(tv.viteza[i],n)*ln(tv.viteza[i]); s10:=s10+putere_f(tv.tensiune[i],2)*putere_f(tv.viteza[i],n)*ln(tv.viteza[i]) *ln(tv.viteza[i]); end; end; {determinarea coeficientilor matricei sistemului de ec.} a[1,1]:=tv.cont; a[1,2]:=s1; a[1,3]:=B*s3; a[2,1]:=s1; a[2,2]:=s2; a[2,3]:=U02*s3+2*B*s4-s9; a[3,1]:=s3; a[3,2]:=s4; a[3,3]:=U02*s5+2*B*s6-s10;
for i:=1 to 3 do begin a1[i,2]:=a[i,2]; a1[i,3]:=a[i,3]; end; for i:=1 to 3 do a2[i,2]:=al[i]; for i:=1 to 3 do begin a2[i,1]:=a[i,1]; a2[i,3]:=a[i,3]; end; for i:=1 to 3 do a3[i,3]:=al[i]; for i:=1 to 3 do begin a3[i,1]:=a[i,1]; a3[i,2]:=a[i,2]; end; da:=det_3(a); dU02:=det_3(a1)/da; dB:=det_3(a2)/da; dn:=det_3(a3)/da; U02:=U02+dU02; B:=B+dB; n:=n+dn; clrscr; writeln(l:2,U02:15:7,B:15:7,n:15:7,abs(dU02)+abs(dB)+abs(dn):15:9); until (abs(dU02)+abs(dB)+abs(dn)<0.0001) or (l>50);
if o=2 then begin writeln('Numar ordine traductor: ');read(j); seek(tv_file,j-1); read(tv_file,tv); dr:=detect; initgraph(dr,mo,'c:\bp\bgi'); {setbkcolor(blue);} xmaxim:=getmaxx; ymaxim:=getmaxy; line(25,5,25,ymaxim-30); line(25,ymaxim-30,xmaxim-25,ymaxim-30); line(xmaxim-25,ymaxim-30,xmaxim-25,5); line(xmaxim-25,5,25,5); outtextxy(xmaxim-200,ymaxim-25,'Viteza (m/s)'); settextstyle(0,1,1); outtextxy(15,50,'Tensiunea(V)'); fx:=(xmaxim-50)/tv.viteza[tv.cont]; fy:=(ymaxim-35)/tv.tensiune[tv.cont];
for i:=1 to tv.cont do begin {setcolor(red);} x1:=round(tv.viteza[i]*fx); y1:=ymaxim-30-round(tv.tensiune[i]*fy); circle(x1+25,y1,2); end; cha:=readkey; x1:=0; v:=-0.03; while x1<=round(tv.viteza[tv.cont]*fx) do begin v:=v+0.03; x1:=round(v*fx); y1:=ymaxim-30-round(sqrt(tv.a+tv.b*putere_f(v,tv.n))*fy); putpixel(x1+25,y1,white); end; cha:=readkey; closegraph; restorecrtmode; end;
writeln(' Caracteristica traductorului de viteza obtinuta prin'); writeln(' folosirea metodei de aproximare in sensul celor mai mici'); writeln(' patrate este: U^2(V^2)=',tv.a:5:3,'+',tv.b:5:3,'*v^',tv.n:4:2); writeln; writeln(' Punctele de pe caracteristica traductorului obtinute'); writeln(' in urma calibrarii sunt: '); writeln; writeln(' ! viteza(m/s) !Tensiunea(V)!'); writeln(' !-------------!------------!'); for i:=1 to tv.cont do writeln(' ! ',tv.viteza[i]:7:3,' ! ',tv.tensiune[i]:7:3,' !'); end;
if o=4 then begin writeln('Numar de ordine traductor: ');readln(j); seek(tv_file,j-1); read(tv_file,tv); writeln(lst,' Caracteristica traductorului de viteza obtinuta prin'); writeln(lst,' folosirea metodei de aproximare in sensul celor mai mici'); writeln(lst,' patrate este: U^2(V^2)=',tv.a:5:3,'+',tv.b:5:3,'*v^',tv.n:4:2); writeln(lst,''); writeln(lst,' Punctele de pe caracteristica traductorului obtinute'); writeln(lst,' in urma calibrarii sunt: '); writeln(lst,''); writeln(lst,' ! viteza(m/s) !Tensiunea(V)!');
writeln(lst,' !-------------!------------!'); for i:=1 to tv.cont do writeln(lst,' ! ',tv.viteza[i]:7:3,' ! ',tv.tensiune[i]:7:3,' !'); end;
write('Introduceti valoarea temperaturii atmosferice (oC): ');readln(tv.temp_atm); repeat fun:=nadc_ary; dio[1]:=2*count; dio[2]:=ofs(dat); dio[3]:=timer_trg; dio[4]:=ofs(ch); flag:=ax5411(fun,dio); p_atm:=0; p:=0; for j:=1 to count do begin p_atm:=p_atm+dat[2*j];
p:=p+dat[2*j-1]; end;
v:=0.833635*sqrt(2009.28*(273.15+tv.temp_atm)*(1putere_f(rap_pres,0.2857)));
clrscr; writeln('Viteza la iesirea din ajutaj este: ',v:5:2,' m/s'); delay(500); until keypressed; end;