Documente Academic
Documente Profesional
Documente Cultură
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;