Sari la conținut
ELFORUM - Forumul electronistilor

Help tranzistor MOSFET


Vizitator Alioshag

Postări Recomandate

Vizitator Alioshag

Va rog sa ma lamuriti si pe mine cum sta treaba cu tranzistoarele asta MOSFET.

Am nevoie de un tranzistor pentru montajul de la pagina 3 din urmatorul PDF:

 

http://datasheets.maxim-ic.com/en/ds/DS18S20-PAR.pdf

 

ala e un tranzistor P-MOSFET; ma poate lamuri si pe mn cineva cum functioneaza in montajul acela? care ar fi rolul lui pe acea magistrala a senzorului? :nas:

dap stiu, sunt varza la electronica :jytuiyu .

as putea folosi un N-MOSFET in locul celui din poza?

poate imi puteti sugera si un nume de tranzistor pe care as putea sa-l folosesc si se gaseste lejer prin partile noastre,

prin magazine obisnuite de electronica.

Cumva tranzistorul ala intra in conductie cand primeste o pe grila o tensiune de 0V sau 5V de la microcontroller; cum e treaba la tranzistoarele astea (n, respectiv p mosfet)? unele conduc la 0V pe grila iar altele la tensiune mai mare(5V)?

Link spre comentariu
  • Răspunsuri 9
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • cirip

    4

Top autori în acest subiect

ala e un tranzistor P-MOSFET; ma poate lamuri si pe mn cineva cum functioneaza in montajul acela? care ar fi rolul lui pe acea magistrala a senzorului?

Salut,

In timpul conversiei, senzorul trage un pic de curent, ca sa-si faca bucataria lui interna de masura.Rezistenta de 4.7KOhmi nu este suficienta ca sa alimenteze, mai ales daca ai mai multi senzori conectati pe aceeasi magistrala si le dai la toti, simultan, comanda de a efectua o conversie. Asa ca, pe perioada conversiei, linia "1-wire bus" este conectata la VPU prin deschiderea P-MOSului, ca sa pota sa traga deseii curent dupa pofta inimii. Am intalnit situatia asta intr-un proiect personal, numai ca eu m-am folosit de bufferul de I/O din interiorul procesorului. Nu am mai avut nevoie de tranzistor extern ptr ca procesorul PIC poate sa dea maxim 25mA, suficient pentru 3 senzori cati aveam eu pe magistrala.

 

as putea folosi un N-MOSFET in locul celui din poza?

Nu asa cum e in poza. Ar fi posibil dar este necesara alimentarea portii cu o tensiune cu cativa volti peste tensiunea de alimentare, altfel mosfetul nu se deschide bine si nu ai facut nici o branza. Se complica. Mai bine folosesti P-MOS.

 

Cumva tranzistorul ala intra in conductie cand primeste o pe grila o tensiune de 0V sau 5V de la microcontroller; cum e treaba la tranzistoarele astea (n, respectiv p mosfet)? unele conduc la 0V pe grila iar altele la tensiune mai mare(5V)?

Tranzistoarele N-MOS intra in conductie daca se aplica o tensiune pozitiva pe poarta fata de sursa. P-MOSurile intra in conductie cu tensiune negativa pe poarta fata de sursa. In cazul schemei tale, daca sursa e conectata la +5V, aplicand 0V pe poarta, tensiunea G-S este Vgs=Vg-Vs=0-(+5V)=-5V, deci negativa si P-MOSul se deschide.

 

Daca procesorul folosit e suficient de "autoritar" dpdv al curentului la pin si nu folosesti un catralion de senzori, e posibil sa mearga fara P-MOS, direct din portul tau de I/O. Pur si simplu scoti un "1" afara pe durata conversiei.

 

Cirip

Link spre comentariu

Schema nu am la ce. Am folosit o placa de PICDEM2, ala foarte vechi si am conectat doua fire, unul la masa si celalalt la un port de I/O. Apoi pe firele astea am insirat 3 senzori.Softul ... E destul de stufos, ptr ca facea multe chestii si e scris integral in asamblare, deci a trebuit sa scriu fiecare detaliu, sa fac fiecare rutina. De asemenea, nu e comentat prea generos, ptr ca scopul a fost sa rezolv ceva pe loc, nu sa-l postez. Daca in conditiile astea te coafeaza, mai discutam. A, si daca ceva nu merge, esti pe barba ta. Nu am timp sa vad ce si cum. Oricum, daca ar fi sa iti dau ceva, nu ti l-as da pe tot. Din principiu nu dau sursele complete la ceva care mi-a luat ceva timp de munca, dar cate o rutina-doua acolo, poate ca da.In orice caz, daca nu ai rutine "garantate" (ale mele nu sunt :) ), nu prea faci nimic fara osciloscop. Mie mi-a luat ceva timp sa potrivesc timingul la comunicatie, care e critic. Daca intarzii prin vreo intrerupere sau ceva, s-a dus comunicatia! Si inca ceva: trebuie sa fii absolut sigur ca ai citit corect codurile interne. Fara a avea codurile ROM corecte, nu poti face adresare individuala cand sunt toate conectate pe aceeasi pereche de fire.Cirip

Link spre comentariu
Vizitator Alioshag

Eu initial am vrut sa fac un termostat si primul pas a fost sa realizez un termometru,

asa ca am folosit urmatoarea placa de dezvoltare http://bobtech.ro/catalog/bobdemo_v1/index.html

cu un microcontroller PIC16F628A si un nenorocit de senzor DS18S20P, primit de la un priten, care la randul lui l-a primit ca si mostra.

Cum asamblarea nu imi place si nu stiu prea bine, am cautat un compilator C, unde ma pricep cat de cat;

asa ca am gasit unul, MikroC de la MikroElektonika, care are si o documetatie super tare,

http://www.mikroe.com/pdf/mikroc/mikroc_manual.pdf , orientata in spre aplicatii.

la pagina 299 a manualului am gasit in mare aplicatia pe care o doream, asa ca am implementat-o pe placa mea de dezvoltare, am conectat senzorul la placa, linia de date(DQ) la pinul RB4 al Controllerului.

apoi am gasit o pagina mai sus in manual(pag 298) si codul aplicatie scris in MikroC, pe care l-am adaptat astfel incat comunicatia cu pinul sa se faca pe pinul RB4 al controllerului, si in loc de afisare pe un LCD am transmis valoarea pe portul serial la PC; dar nu merge, citesc intr-una valoarea de 85 grade Celsius, citesc de la senzor 00AAh.

mentionez: codul original a fost scris pt. DS1820, iar eu folosesc DS18S20P.

am incercat sa maresc timpul de intaziere dintre operatiile cu senzorul; tot degeaba(poate nu l-am marit destul?)

la un moment dat am crezut ca am o problema cu compilatorul; asa ca am trecut la altul, cel de la CSS,

am gasit un cod exact pentru ce imi trebuia mie doar trebuia sa modific in cod iarasi pinul microcontrollerului la care era conectat senzorul.

am obtinut acelasi lucru pe care l-am obtinut si prima data.

te rog sa iti dai si u cu parerea, poate imi poti da un sfat folositor

nu stiu unde e problema mea. in partea de hard(fiindca lipseste acel tranzistor MOSFET) sau de soft.

din ceea ce am mai vb cu tine am inteles ca acel tranzistor nu e obligatoriu sa-l folosesc.

codul pt mikroC e la pagina 298 a manualului, de la adresa de mai sus

iar cel pentru CSS il voi trimite imediat dedesubt

te rog sa te uiti daca ai 2 min

oricine poate sa arunce o privire, orice parere este bine venita

 

urmatorul cod realizeaza citirea temperaturii de pe un senzor Dallas(cred ca e compatibil si cu versiunea DS18B20 si cu DS18S20) si o transmite pe portul serial PC-ului; nu este creatie proprie, este preluat de pe un alt forum si este confirmat de mai multe persoane ca functioneaza

 

 

//////////main.c//////////

#include <16f628.h>

#device *=16

// internal osilator used

#FUSES NOWDT,INTRC, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD//for 16f628

#use delay(clock=4000000)

#USE RS232(BAUD=9600, XMIT=PIN_B2, RCV=PIN_B1)

#include "1wire.c"

 

int8 tH,tL,Conf;

 

float ds1820_read()

{

int8 busy=0, temp1, temp2;

signed int16 temp3;

float result;

onewire_reset();

onewire_write(0xCC);

onewire_write(0x44);

delay_ms(200);

while (busy == 0)

busy = onewire_read();

onewire_reset();

onewire_write(0xCC);

onewire_write(0xBE);

temp1 = onewire_read();

temp2 = onewire_read();

tH=onewire_read();

tL=onewire_read();

Conf=onewire_read();

temp3 = make16(temp2, temp1);

//result = (float) temp3 / 2.0; // 0.5 deg C resolution

result = (float) temp3 / 16.0; //0.1 deg C resolution

delay_ms(200);

return(result);

}

 

void main()

{

float temperature;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1);

//for 10 bit resolution mod

onewire_write(0xCC);

onewire_write(0x4E);

onewire_write(125);

onewire_write(-55); //this should be done for proper working of DS18B20

onewire_write(127);

onewire_reset();

onewire_write(0xCC);

onewire_write(0x48);

delay_ms(15);

while (1){

temperature = ds1820_read();

printf("Temperature= %3.1f\n\r",temperature);

}

}

 

 

 

 

 

 

 

 

////// 1wire.c //////

///// DS18b20 data pin connected to pic16f628 B0 pin //////

/***********************1Wire Class***********************/

/*Description: This class handles all communication */

/* between the processor and the 1wire */

/* sensors.

/*********************************************************/

 

/*-------1-wire definitions-------*/

#define ONE_WIRE_PIN PIN_B0

 

void onewire_reset() // OK if just using a single permanently connected device

{

output_low(ONE_WIRE_PIN);

delay_us( 500 ); // pull 1-wire low for reset pulse

output_float(ONE_WIRE_PIN); // float 1-wire high

delay_us( 500 ); // wait-out remaining initialisation window.

output_float(ONE_WIRE_PIN);

}

 

/*********************** onewire_write() ********************************/

/*This function writes a byte to the sensor.*/

/* */

/*Parameters: byte - the byte to be written to the 1-wire */

/*Returns: */

/*********************************************************************/

 

void onewire_write(int data)

{

int count;

for (count=0; count<8; ++count)

{

output_low(ONE_WIRE_PIN);

delay_us( 2 ); // pull 1-wire low to initiate write time-slot.

output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // set output bit on 1-wire

delay_us( 60 ); // wait until end of write slot.

output_float(ONE_WIRE_PIN); // set 1-wire high again,

delay_us( 2 ); // for more than 1us minimum.

}

}

 

/*********************** read1wire() *********************************/

/*This function reads the 8 -bit data via the 1-wire sensor. */

/* */

/*Parameters: */

/*Returns: 8-bit (1-byte) data from sensor */

/*********************************************************************/

 

int onewire_read()

{

int count, data;

for (count=0; count<8; ++count)

{

output_low(ONE_WIRE_PIN);

delay_us( 2 ); // pull 1-wire low to initiate read time-slot.

output_float(ONE_WIRE_PIN); // now let 1-wire float high,

delay_us( 8 ); // let device state stabilise,

shift_right(&data,1,input(ONE_WIRE_PIN)); // and load result.

delay_us( 120 ); // wait until end of read slot.

}

return( data );

}

Link spre comentariu
Vizitator Alioshag

personal in momentul de fata tind sa cred ca toata problema mea pleaca de la acel curent "necesar facerii bucatariei interne de masura"

deci asta ar insemna ca pe timpul conversiei ar trebui sa folosesc pinul de comunicare al microcontrollerului(cu senzorul) ca sa mai suplimentez nevoia de curent a senzorului.

astept o parere vis-a-vis de ce am spus eu, eventual vreo corectare daca am spus vreo prostie.

poate ar mai putea aparea vrea greseala din cauza timpilor de sincronizare(acele deley-uri)?

ce parere aveti?

as testa ceea ce am spus dar nu stiu cum, am reusit sa stric microcontrollerul sau programatorul, am comandat 2 controllere noi dar o sa ajuga abia peste vreo 10 zile.

toate cele bune si spor la treaba.

Link spre comentariu

Salut,In etapa in care esti, e dificil de spus unde e problema. In plus, folosind niste functii gata facute dintr-o biblioteca, nu ai nici o idee ce face in realitate procesorul. De aia prefer eu sa folosesc asm-ul.Cred ca in etapa asta ar trebui sa incerci sa citesti codurile ROM din fiecare termometru. Octetul cel mai putin semnificativ reprezinta "Family Code" si care este 10h ptr 1820 si 28h ptr 18B20. Pana cand nu reusesti sa regasesti aceste coduri, nu prea ai de ce sa mergi mai departe. In acest moment nu ai nici o garantie a comunicarii corecte cu DSul.Cirip

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări