Sari la conținut
ELFORUM - Forumul electronistilor

Statie de lipit cu PWM


svm86

Postări Recomandate

Inainte sa o vand (din lipsa de spatiu si timp sa mai lucrez acasa), poate este cineva interesat sa vada o varianta de statie de lipit comandata cu PWM. Inspirat fiind de schema lui wolf, am ajuns la varianta urmatoare:

 

Detalii:

Transformator -2 x 12V 3000 mA

Letcon de 48W - cu termocupla K

Letconul este comandat cu mosfet.

PIC16f1826

5 volti obitinut cu sursa coboratoare de tensiune folosind mc34063.

Punte redresoare + capacitati - letconul comandat cu PWM de catre PIC (DC)

Pentru afisare am folosit: 1 led Power ON, 3 leduri (verde- sub pragul impus, galben-ok, rosu-peste pragul impus)

Am programat 3 temperaturi de lucru. Se pot selecta cu un switch (3 pozitii).

Ventilatorul este pentru decor. (Pe placa nu am decat 5 volti - nefiind suficienti sa invarta ventilatorul). Ca solutie se poate realiza separat un step-down catre 12volti pentru alimentarea lui. poate mai simplu un 7812- dar nu este eficient.

Carcasa este o sursa de PC mica.

Pentru AO am folosit 2 rezistente de precizie - cred ca sunt un model mai vechi :jytuiyu

 

Am sa adaug si schema facuta Altium Designer, codul sursa in C (CCS). -Luni 16.07.2012

 

poze cu statia de lpit

https://plus.google.com/u/0/11400502709 ... xaQSyPvNEz

 

ratza: titlu editat pentru mai multă claritate.

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

Top autori în acest subiect

  • svm86

    7

  • ratza

    2

  • rosmarin

    2

  • H Robert

    1

Top autori în acest subiect

Vezi ca ai pus albumul pe privat si nu putem sa vedem pozele.

Multumesc de observatie.Interesant ca erau publice (nu sunt obisnuit cu google plus, public poate fi considerat si pentru cercul tau de prieteni).
Link spre comentariu

TEMPERATURI: 270, 350, 400

 

Codul sursa:

 

#include <16F1826.h>//#device ICD=TRUE#device adc=16#FUSES NOWDT                    //No Watch Dog Timer#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT#FUSES NOPUT                    //No Power Up Timer#FUSES PROTECT              //Code not protected from reading#FUSES MCLR                     //Master Clear pin enabled#FUSES CPD                  //No EE protection#FUSES NOBROWNOUT               //No brownout reset#FUSES FCMEN                    //Fail-safe clock monitor enabled#FUSES WDT_SW                #FUSES NOCLKOUT #FUSES NOWRT                    //Program memory not write protected//#FUSES NOVCAP                #FUSES PLL#FUSES DEBUG                #FUSES BORV19#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#use delay(clock=8000000)#use rs232(baud=9600, xmit=PIN_B7,rcv=PIN_B6)#bit    ADPREF1=0x9e.1#bit    ADPREF0=0x9e.0#bit		FVREN=0x117.7#bit 	ADFVR0=0x117.0#bit 	ADFVR1=0x117.1#bit 	INTOSC=0x99.1#define KP 3#define KI  0#define KD 0unsigned int16 temperatura,temp,setare,t10;unsigned char PID;//PIDsigned int16 integral_err=0;signed int16 prev_err=0;#INT_AD //BUG pt PIC16f1826 - trebuie folosita intreruperea pentru a iesi din sleepvoid AD_isr(void){}   //masura temperaturavoid masura_temperatura(){	 set_adc_channel( 0 );	 read_adc(ADC_START_ONLY );     sleep();     temp=read_adc(ADC_READ_ONLY);		//temperatura = temp*8600; ; 	//scalare 4,096 volt =1024 pasi si scalare x214	//temperatura =temp*0.007637;    // valoarea de pe ADC		temperatura =temp*0.0067; //valoarea calculata cu factorul de amplificare 214		}//-----------------------------------------------------------void init(){	SET_TRIS_A(0xFF);	SET_TRIS_B(0xFF);		setup_spi(SPI_SS_DISABLED);    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);    setup_timer_1(T1_DISABLED );    setup_timer_2(T2_DIV_BY_1, 127, 1);    setup_comparator(NC_NC_NC_NC);	setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_ON,0);	INTOSC=1;  	   		setup_adc_ports( sAN0 |VSS_VREF  ); // gresit partial	ADPREF1 =1;	ADPREF0 =1;   	//[VREF_4096	FVREN=1;	ADFVR1 = 1;	ADFVR0 = 1;      	setup_adc(ADC_CLOCK_INTERNAL );	enable_interrupts(INT_AD);    enable_interrupts(GLOBAL);        	output_low(PIN_B3);   // Set CCP1 output low 	setup_ccp1(CCP_OFF);  // Configure CCP1 as a PWM 	//setup_timer_2(T2_DIV_BY_16, 250, 1);  // 500 Hz       //set_pwm1_duty(0);                    // 0% duty cycle on pin C2 	//output_high(PIN_B3); //LETCON	//delay_ms(150);}unsigned char PID_control(){signed int16 error;signed int16 delta_err;signed int16 p_out;signed int16 i_out;signed int16 d_out;signed int16 output;error = setare - temperatura;delta_err = prev_err - error;integral_err+= error;if(integral_err > 127)	integral_err = 127;if(integral_err < -127)	integral_err = -127;p_out = error * KP;i_out = integral_err * KI;d_out = delta_err * KD;output = p_out + i_out + d_out;//output = error * KP;if(output > 127)output = 127;if(output < -127)output = -127;prev_err = error;return (unsigned char)output + 127;}void main(){unsigned i;	setup_spi(SPI_SS_DISABLED);    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);    setup_timer_1(T1_DISABLED );    setup_timer_2(T2_DIV_BY_1, 127, 1);    setup_comparator(NC_NC_NC_NC);	setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_ON,0);	INTOSC=1;  	   		setup_adc_ports( sAN0 |VSS_VREF  ); // gresit partial	ADPREF1 =1;	ADPREF0 =1;      //[VREF_4096   FVREN=1;   ADFVR1 = 1;   ADFVR0 = 1;         	setup_adc(ADC_CLOCK_INTERNAL );	enable_interrupts(INT_AD);    enable_interrupts(GLOBAL);              setare=150;while(1){output_low(PIN_B3);delay_ms(3);if( input(PIN_A1)==1)	setare=0;if(input(PIN_B2)==0 && input(PIN_A1)==0)//rosu{	setare=400;	output_high(PIN_A2);}   else output_low(PIN_A2);if(input(PIN_B0)==0 && input(PIN_A1)==0 )//galben {	setare=350;	output_high(PIN_A3);}   else output_low(PIN_A3);  if(input(PIN_B1)==0 && input(PIN_A1)==0)//verde{	setare=270;	output_high(PIN_A4);}  else output_low(PIN_A4);if(setare > temperatura ){	output_high(PIN_A4);	//letconul este rece}if(setare < temperatura ){	output_high(PIN_A2);// atentie temperatura mai mare decat setata	}	masura_temperatura();printf("\n\r T= %Lu si trebuie sa fie %Lu  si PID= %u \n\r",temperatura,setare,PID); //DEBUG cu PICKIT PID =  PID_control();for(i=127;i<PID ;i++) //trebuie ridicata temperatura{	output_high(PIN_B3); //LETCON	delay_ms(1);}for(i=127;i>PID ;i--) //nu trebuie ridicata temperatura{	output_low(PIN_B3); //LETCON	delay_ms(1);}}}
Poate este neclar unde este folosit PWM; realizat soft

 

for(i=127;i

{

output_high(PIN_B3); //LETCON

delay_ms(1);

}

 

for(i=127;i>PID ;i--) //nu trebuie ridicata temperatura

{

output_low(PIN_B3); //LETCON

delay_ms(1);

}

 

Nu am continuat proiectul... dar se poate porni modulul de PWM si modifica factorul de umplere in raport cu variabila PID.

Suplimentar se poate modifica algoritmul de PID/parametrii acestuia.

 

Am folosit si pickit pt interfata cu calculatorul, pentru a observa mai bine temperatura de lucru.

Link spre comentariu
  • 1 lună mai târziu...

Laudabila ideea propusa si realizata in forma prezentata de dvs.Rog respectuos daca aveti amabilitatea sa ducem o idee pana la capat.Una este sa trezim interesul si alta sa finalizam un proiect.In masura posibilitatilor pe care le aveti de libertate constructiva asi fi foarte interesat si nu numai eu de acest proiect.BOALA ROMANILOR IN GENERAL: Nu finalizam nimic, deoarece suntem presati de alte noutati,sarim usor de la una la alta,vesnic in cautare. Acest lucru caracterizeaza in general oamenii dotati, vesnic in cautare de alte solutii Este o parere personala care poate sa nu coincida cu a altora.SCUZE.

Link spre comentariu

Laudabila ideea propusa si realizata in forma prezentata de dvs.Rog respectuos daca aveti amabilitatea sa ducem o idee pana la capat.Una este sa trezim interesul si alta sa finalizam un proiect.In masura posibilitatilor pe care le aveti de libertate constructiva asi fi foarte interesat si nu numai eu de acest proiect.BOALA ROMANILOR IN GENERAL: Nu finalizam nimic, deoarece suntem presati de alte noutati,sarim usor de la una la alta,vesnic in cautare. Acest lucru caracterizeaza in general oamenii dotati, vesnic in cautare de alte solutii Este o parere personala care poate sa nu coincida cu a altora.SCUZE.

Proiectul l-am facut, testat, construit (vreo 3 variante de PCB), am facut cateva lipituri cu aceasta statie - proiectul este functional - si da mai poate fi imbunatatit.Nu inteleg rostul comentariului adresat.
Link spre comentariu

Probabil s-a legat de asta:

Nu am continuat proiectul... dar se poate porni modulul de PWM si modifica factorul de umplere in raport cu variabila PID.

Link spre comentariu

Probabil s-a legat de asta:

Nu am continuat proiectul... dar se poate porni modulul de PWM si modifica factorul de umplere in raport cu variabila PID.

Nu am continuat... vroiam sa adaug un LCD, senzori de temperatura care sa sesize stationarea in suport -> sa apreasca incalzirea... Nu am scris: nu am terminat proiectul, si ca statie nu este functionala.Ca orice produs se poate face mai bun. Acum o masina este finalizata.. sau apare o versiune mai buna - si aici ma refer facuta de acelasi producator...Ce vroiam sa spun eu: codul sursa cel de sus, este compilat si incarcat in statia de lipit => produs final PENTRU MINE.
Link spre comentariu
  • 2 luni mai târziu...

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