长汀无线电厂交流论坛

标题: 用M16控制白光烙铁温度 [打印本页]

作者: zhouchs    时间: 2011-1-26 16:33
标题: 用M16控制白光烙铁温度
本帖最后由 zhouchs 于 2011-2-18 07:50 编辑

设计了白光T12温度控制电路,调试中

LED显示温度,设定时显示的温度3个小数点都亮,可按键设定,也可电位器设定
调试成功后再贴程序源码
作者: liu6590999    时间: 2011-1-26 17:22
支持楼主…祝你早日成功…呵呵!好共享
作者: zheng156    时间: 2011-1-26 21:00
大作品,得支持,顶一顶,学习
作者: linnan100234    时间: 2011-1-31 13:39
祝楼主成功 希望楼主马上成功  俺也能借光 学习下   谢谢啦
作者: diyer_zhou    时间: 2011-1-31 23:41
我怎么没想到用光耦呢?
作者: diyer_zhou    时间: 2011-1-31 23:45
LM35用来干什么呢?AVCC AREF都没接?光耦出来的电压是和输入电压同向还是反向呢?
作者: zhouchs    时间: 2011-2-4 22:03
//********************************************************************
//白光烙铁控制程序
//M16
//2011.2.4
//********************************************************************

#include <iom16v.h>
#include <macros.h>
#pragma interrupt_handler Timer0Int:10

#define twi_stop() TWCR=0x94   
#define twi_start() TWCR=0xa4      
#define check_TWINT() while(!(TWCR & (1<<TWINT)))  //轮询等待TEINT置位
unsigned char TwiStatus;

unsigned char DISP[3]={0x01,0x02,0x03};        //3位数字,高位在前,温度值:XXX℃

unsigned char KDelay;                //按键延时定值,快慢变化
unsigned char Set;                        //设定方式,0-电位器设定,1-按键设定
unsigned char Mod;                        //显示状态切换,0-停,显示环境温度,1-加热,显示烙铁温度,2-调节
unsigned char Suc;                        //I2C返回值
unsigned int Ns;                        //按键计数快慢,40-200ms,4-20ms
unsigned int Num1;                        //按键延时计数1
unsigned char Num2;                        //按键延时计数2
unsigned char Num3;                        //轮流显示
unsigned int Num4;                        //设定延时切换,2s
unsigned int Ut;                        //热电偶电压
unsigned int U[110];                        //热电偶电压均值计算
unsigned int Ua;                        //设定电压
unsigned int Tf;                        //上次设定值
unsigned char Tc;                        //环境温度数据
unsigned char Tk;                        //计时
unsigned char Tr;                        //加热周期,0~4/5
unsigned int Ts;                        //设定温度值,160~430
unsigned int Tt;                        //实际温度值,0~430

const unsigned char DIG[]={0x14,0x77,0x4C,0x45,0x27,0x85,0x84,0x57,0x04,0x05,0x26,0xBC};       
//从高到低:B、F、A、G、C、DP、D、E       
//数字编码:0、1、2、3、4、5、6、7、8、9、H(10)、L(11)



/*****************************************
              延时子程序
******************************************/
void Delay(unsigned int n)
{
    unsigned int i ;  
    for(i=0;i<50*n;i++);
}

//--------------------------------------------------
//io_init:初始化IO子程序
//--------------------------------------------------
void io_init(void)
{
         DDRA = 0xC2;  //PA0\PA2\PA3\PA4\PA5为输入,其余均为输出
         PORTA|=0x30;  //拉高按键管脚
         DDRB = 0xFF;
         DDRC = 0xFC;  //I2C管脚为定义为输入,再拉高
         PORTC|=0x03;
         DDRD = 0xF7;  //PD3输入
         PORTD|=0x08;         
}

//-------------------------------------------------------------------
//TIMER_init:初始化定时器 5ms定时 无分频
//-------------------------------------------------------------------
void TIMER_init(void)
{
         TCCR0 = 0x00; //stop
         TCNT0 = 0x64; //set count
         TCCR0 = 0x04; //start timer
         MCUCR = 0x00;
         GICR = 0x00;
         TIMSK = 0x01; //timer interrupt sources 允许定时器零匹配和溢出中断
}

//-------------------------------------------------------------------
//U10:A/D转换
//-------------------------------------------------------------------
void U10(void)
{
        unsigned int tmp;                        //
        unsigned char i;                        //
        if(Set==0)
        {
          ADCSRA = 0x00; //disable adc
          ADMUX = 0xC0; //2.56V内部基准,右对齐,通道ADC0单端输入
          ACSR  = 0x80;
          ADCSRA=0xC6;
          while(!(ADCSRA&(1<<ADIF)));
          ADCSRA|=(1<<ADSC)|(0<<ADIF);
          while(!(ADCSRA&(1<<ADIF)));       
          Ua=ADCL;
          Ua=ADCH*256+Ua;       
          Tf=Ts;
          Ts=(2*Ua+1590)/10;
          if(Ts>340)Ts=340;
       
          if((Tf>Ts && Tf-Ts>2)||(Ts>Tf && Ts-Tf>2))
          {
                 Mod=2;
                 Num4=0;
          }
        }
       
        ADCSRA = 0x00; //disable adc
        ADMUX = 0xCF; //2.56V内部基准,右对齐,通道ADC0单端输入
        ACSR  = 0x80;
        ADCSRA=0xC6;
        while(!(ADCSRA&(1<<ADIF)));
        ADCSRA|=(1<<ADSC)|(0<<ADIF);
        while(!(ADCSRA&(1<<ADIF)));
        Ut=ADCL;
        Ut=ADCH*256+Ut;
        for(i=0;i<99;i++)U[i]=U[i+1];
        U[99]=Ut;
        Ut=0;
        for(i=0;i<100;i++)Ut=Ut+U[i];
        Ut=Ut/100;
       

       
//考虑环境温度
//        tmp=74*(Ut+Tc+37);       
        tmp=156*Ut+80*Tc;
        if(tmp>26400)tmp=tmp-26400;
        else tmp=0;       
        Tt=tmp/100;
}

/*****************************************
          TWI主接收方式子程序
          读取LM75的TEMP寄存器的值
******************************************/

void TWITempRead(unsigned char ReadDeviceAddr,unsigned char WriteDeviceAddr,unsigned char RegAddr)  
{  
    unsigned int j;
        Delay(100);
         
    while (TwiStatus != 0x08)   //检验TWSR,屏蔽预分频位   
    {
         twi_start();           //发送START信号
         Delay(1);
         TwiStatus=TWSR & 0xF8;  
   }  
    while (TwiStatus != 0x18)  //检验TWSR,SLA+W已发出,并收到ACK
    {
         TWDR = WriteDeviceAddr;//设备地址(写)  
         TWCR=0x84;
         Delay(1);
         TwiStatus=TWSR & 0xF8;   
   }     
   while (TwiStatus != 0x28) //DATA已发出,并收到ACK      
   {
         TWDR = RegAddr;  //写入LM75的TEMP寄存器的地址  
         TWCR=0x84;   
         Delay(1);
         TwiStatus=TWSR & 0xF8;  
   }
   
   while (TwiStatus != 0x10)  //REPEATED START信号已发出
   {
         twi_start();  //发REPEATED START信号
         Delay(1);
         TwiStatus=TWSR & 0xF8;  
   }
   
   while (TwiStatus != 0x40)  //检验TWSR,SLA+R已发出,并收到ACK
   {
         TWDR =ReadDeviceAddr;  //设备地址(读)
         TWCR=0x84;   
         Delay(1);
         TwiStatus=TWSR & 0xF8;  
   }
   TwiStatus=0x00;  
   while (TwiStatus != 0x50)  //DATA已收到,ACK已发出
   {
         TWCR=0xc4;           //接收高8位数据,发送ACK
         Delay(50);
         Tc=TWDR;
         TwiStatus=TWSR & 0xF8;  
   }
   while(TwiStatus != 0x58)    //DATA已收到,nACK已发出     
   {
         TwiStatus=TWSR & 0xF8;  
         TWCR=0x84;          //接收低8位数据,发送nACK
                 Delay(50);
//         TempLow=TWDR;
   }
   twi_stop();            //发送STOP 信号   
}  



//--------------------------------------------------
//主程序
//--------------------------------------------------
void main(void)
{
        unsigned int m;                        //
        io_init();
         
        DDRC&=0Xcf;
        PORTC|=0X30;
    TWCR= 0X00; //disable twi
    TWBR= 0x12; //set bit rate
    TWSR= 0x01; //set prescale
    TWCR= 0x04; //enable twi        
        TIMER_init();
        Tr=1;
        PORTA=0xF2;
        Ts=200;       
        Ns=40;
        SEI(); //                                        //开中断
        Set=0;
        if(PIND & 0x08)        Set=1;
       
        while(1)
        {
                 if(Set==1)
                {
                    if((PINA & 0x10)==0)
                         {
                                  Num2=0;
                                  Num4=0;
                                Mod=2;
                                Ts++;
                                if(Ts>430)Ts=430;
                                while(Num2<Ns);
                        }
                            if((PINA & 0x20)==0)
                          {
                              Num2=0;
                                  Num4=0;
                                Mod=2;
                                Ts--;
                                if(Ts<160)Ts=160;
                                while(Num2<Ns);
                        }
                }
               
                if(Mod>1 && Num4>500)
                {
                         if(Ts<160)Mod=0;
                        else Mod=1;
                        Num4=0;
                }
       
                TWITempRead(0x91,0x90,0);
                if(Ts<Tt)
                {
                          Tr=1;
                          if(Ts>240)Tr=2;
                          if(Ts>340)Tr=3;
                }
                else
                {
                           m=(Ts-Tt);
                           if(m<6) Tr=3;
                           if(m>5 && m<11) Tr=5;
                           if(m>10 && m<21) Tr=8;
                           if(m>20 && m<31) Tr=10;
                           if(m>30 && m<41) Tr=13;
                           if(m>40) Tr=16;
                        if(Ts>240 && m<21)Tr*=2;
                        if(Ts>340 && m<21)Tr+=4;
                }
        }

}

//-------------------------------------------------------------------
//Timer0Int:定时中断子程序,用于显示输出及按键延时计时,5ms
//-------------------------------------------------------------------
void Timer0Int(void)
{       
        unsigned char n;                        //循环计数,0~19
        unsigned char m;                        //
        unsigned int p;                        //
        TCNT0=0x64;//79次计数为10mS
        if(((PINA & 0x20)==0) || ((PINA & 0x10)==0))Num1++;                //按键延时计数
        else
        {
                Num1=0;
                Ns=40;
        }
        if(Num1>400)Ns=4;                //按键加速
       
        Num2++;                                                //按键延时计数
        Num3++;                                                //轮显
        Num4++;                                                //按键延时计数2
        Tk++;
        n=Tk%20;
        if(n==0)
        {
                PORTA|=0x02;
                U10();                                            //读温度转换电压       
                if(Tk%40==0)                        //0.2s刷新显示
                {
                         p=Tc;
                         if(Mod==1)p=Tt;
                         if(Mod==2)p=Ts;       
                        DISP[0]=p/100;                          //显示温度
                        DISP[1]=(p%100)/10;
                        DISP[2]=p%10;
                }
        }
        else
        {
          if(n<Tr+1 && Mod>0)PORTA&=0xFD;                                //n/20周期加热
          else PORTA|=0x02;
        }

        PORTD|=0x07;
        n=Num3%3;
        m=DIG[DISP[n]];
        if(Mod==2) m&=0xFB;                        //设置温度状态
        PORTB=m;
        if(n==2)PORTD&=0xFE;                //输出个位数字
        if(n==1)PORTD&=0xFD;                //输出十位数字
        if(n==0)PORTD&=0xFB;                //输出百位数字
}

初步能用了,温度和采集电压的关系暂时没办法仔细校。图中3.3V为5V,LM75A用于测参考温度,矫正热偶温度用的,光耦用于低压驱动高压的隔离,更安全些,直接驱动也行,可能会损坏单片机。调试有改动时再补充,欢迎共同测试,好有改进。



作者: jchdq    时间: 2011-2-6 11:50
程序得用哪个下载器下载?
作者: zhouchs    时间: 2011-2-6 13:27
源程序用ICC AVR编译,用AVR_fighter烧写,USBasp下载
作者: taotaoliu    时间: 2011-2-17 12:01
是用M16做的控制器,很不错,能发个原理图吗
作者: mowuwen    时间: 2011-2-17 13:05
不错,早日成品
作者: cry511111    时间: 2011-2-17 16:06
祝你早日成功…呵呵!好共享
作者: Ly7    时间: 2011-2-17 17:26
本帖最后由 Ly7 于 2011-2-17 17:27 编辑

个人感觉,用m16实在没有性价比啊,不如用12c5410ad来做,这里就有一个厂家用12c5410ad来做的产品,国产942
http://item.taobao.com/auction/item_detail.htm?item_num_id=8310667044

作者: 浩祺心    时间: 2011-3-9 16:19
很棒,继续加油。 期待你的完美版。
作者: lcr39101    时间: 2011-4-10 11:38
很好,值得关注
作者: ynymwtb    时间: 2011-4-11 09:54
好奇心出来顶,说明贴子有份量,楼主继续
作者: smiless    时间: 2011-4-11 10:22
楼主说说制作的效果怎么样啊。
作者: walter    时间: 2011-4-28 16:13
我也建议用STC的MCU,便宜,更有性价比。开源,体现楼主的无私,敬佩!
作者: muqruwnc    时间: 2011-5-21 00:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: yoso    时间: 2011-6-6 14:24
记号一个.仿个试试
作者: wangchao303    时间: 2011-6-8 15:15
顶一下,看似可以
作者: zhouchs    时间: 2011-6-28 19:32
//********************************************************************
//白光烙铁控制程序
//M16  150-52?200-58?250-64?300-70
//2011.6.27 取消按键调节部分代码,只留电位器调节
//********************************************************************

#include <iom16v.h>
#include <macros.h>
#pragma interrupt_handler Timer0Int:10

unsigned char DISP[3]={0x01,0x02,0x03};        //3位数字,高位在前,温度值:XXX℃
//显示状态切换,0-停止,1-加热,显示烙铁温度,2-调节,3-烙铁插错
unsigned char Mod;                       
unsigned char Num3;                        //轮流显示
unsigned int Num4;                        //设定延时切换,2s
unsigned int Ut;                        //热电偶电压
unsigned int U[64];                        //热电偶电压均值计算
unsigned int Ua;                        //设定电压
unsigned int Tf;                        //上次设定值
unsigned char Tk;                        //计时
unsigned char Tr;                        //加热周期,0~4/5
unsigned int Ts;                        //设定温度值,160~410
unsigned int Tt;                        //实际温度值,0~410

const unsigned char DIG[]={0x14,0x77,0x4C,0x45,0x27,0x85,0x84,0x57,0x04,0x05,0x26,0xBC,0x8E};       
//从高到低:B、F、A、G、C、DP、D、E       
//数字编码:0、1、2、3、4、5、6、7、8、9、H(10)、L(11)、F(12)

/*****************************************
              延时子程序
******************************************/
void Delay(unsigned int n)
{
    unsigned int i ;  
    for(i=0;i<50*n;i++);
}

//--------------------------------------------------
//io_init:初始化IO子程序
//--------------------------------------------------
void io_init(void)
{
         DDRA = 0xC2;  //PA0\PA2\PA3\PA4\PA5为输入,其余均为输出
         PORTA|=0x30;  //拉高按键管脚
         DDRB = 0xFF;
         DDRC = 0xFC;  //I2C管脚为定义为输入,再拉高
         PORTC|=0x03;
         DDRD = 0xF7;  //PD3输入
         PORTD|=0x08;         
}

//-------------------------------------------------------------------
//TIMER_init:初始化定时器 5ms定时 无分频
//-------------------------------------------------------------------
void TIMER_init(void)
{
         TCCR0 = 0x00; //stop
         TCNT0 = 0x64; //set count
         TCCR0 = 0x04; //start timer
         MCUCR = 0x00;
         GICR = 0x00;
         TIMSK = 0x01; //timer interrupt sources 允许定时器零匹配和溢出中断
}

//-------------------------------------------------------------------
//TLT:A/D转换,烙铁温度
//-------------------------------------------------------------------
void TLT(void)
{
        unsigned int tmp;                        //
        unsigned char i;                        //
       
        ADCSRA = 0x00; //disable adc
        ADMUX = 0xEF; //2.56V内部基准,左对齐,通道ADC3、ADC2差分输入
        ACSR  = 0x80;
        ADCSRA=0xC6; //ADC使能并开始转换,预分频64,8/64=125kHz(50~200)
        while(!(ADCSRA&(1<<ADIF)));
        ADCSRA|=(1<<ADSC)|(0<<ADIF); //第二次转换,更准确些
        while(!(ADCSRA&(1<<ADIF)));
        Ut=ADCH;
        //if(Ut>127) Ut=0;
                
        for(i=0;i<63;i++)U[i]=U[i+1];
        U[63]=Ut;
        Ut=0;
        for(i=0;i<64;i++)Ut=Ut+U[i];
        Ut>>=6;
        if(Ut<34) Ut=34;
        Tt=25*Ut/3-283;
       
}

//-------------------------------------------------------------------
//TSET:A/D转换,设定温度转换
//-------------------------------------------------------------------
void TSET(void)
{
        unsigned int tmp;                        //
        unsigned char i;                        //

         ADCSRA = 0x00; //disable adc
         ADMUX = 0x60; //AVCC,左对齐,通道ADC0单端输入
         ACSR  = 0x80;
         ADCSRA=0xC6;
         while(!(ADCSRA&(1<<ADIF)));
         ADCSRA|=(1<<ADSC)|(0<<ADIF);
         while(!(ADCSRA&(1<<ADIF)));       
         Ua=ADCH;       
         Tf=Ts;                       
         Ts=Ua+155;
                         if((Tf>Ts && Tf-Ts>2)||(Ts>Tf && Ts-Tf>2))
                 {
                        Mod=2;
                        Num4=0;
                 }
               
                if(Ts<160)Mod=0;
               
                if(Mod==2 && Num4>500)
                {
                         if(Ts<160)Mod=0;
                        else Mod=1;
                }
}

//--------------------------------------------------
//主程序
//--------------------------------------------------
void main(void)
{
        unsigned int m;                        //
        io_init();
         
        DDRC&=0Xcf;
        PORTC|=0X30;
        TIMER_init();
        Mod=1;
        Tr=1;
        PORTA=0xF2;
        Ts=200;       
        SEI(); //                                        //开中断
               
        while(1)
        {
                if(Ts<Tt)
                {
                          Tr=2;
                          if(Ts>240)Tr=4;
                          //if(Ts>340)Tr=3;
                }
                else
                {
                           m=(Ts-Tt);
                           if(m<11) Tr=4;
                           //if(m>5 && m<11) Tr=5;
                           if(m>10 && m<31) Tr=6;
                           //if(m>20 && m<31) Tr=10;
                           if(m>30 && m<51) Tr=8;
                           if(m>50) Tr=12;
                }
        }

}

//-------------------------------------------------------------------
//Timer0Int:定时中断子程序,用于显示输出及按键延时计时,5ms
//-------------------------------------------------------------------
void Timer0Int(void)
{       
        unsigned char n;                        //循环计数,0~19
        unsigned char m;                        //
        unsigned int p;                        //
        TCNT0=0x64;//79次计数为10mS
        Num3++;                                                //轮显
        Num4++;                                                //状态转换
        Tk++;

        if(Tk>199)Tk=0;
        n=Tk%20;
        if(n==0)
        {
                PORTA|=0x02;               
                TLT();                                        //读温度转换
                if(Tk%40==0)                        //0.2s刷新显示
                {
                         TSET();                                //设定电压       
                        if(Mod==1)p=Tt;
                         if(Mod==2)p=Ts;       
                        //p=Mod;
                        //p=Ua;       
                        DISP[0]=p/100;                          //显示温度
                        DISP[1]=(p%100)/10;
                        DISP[2]=p%10;
                        if(Mod==0)
                        {
                         DISP[0]=0;                          //显示OFF
                         DISP[1]=12;
                         DISP[2]=12;
                        }
                }
        }
        else
        {
          if(n<Tr+1 && Mod>0)PORTA&=0xFD;                                //n/20周期加热
          else
          PORTA|=0x02;
        }

        PORTD|=0x07;
        n=Num3%3;
        m=DIG[DISP[n]];
        if(Mod==2) m&=0xFB;                        //设置温度状态
        PORTB=m;
        if(n==2)PORTD&=0xFE;                //输出个位数字
        if(n==1)PORTD&=0xFD;                //输出十位数字
        if(n==0)PORTD&=0xFB;                //输出百位数字
}

取消了LM35环境温度测量,取消了按键调节,只支持电位器调节。调整了温度测量准确度,由于使用了内部差分输入,用放大了200倍,精度只有7位,加上测温范围的关系,温度准确度在10度左右。
作者: ynymwtb    时间: 2011-6-29 22:30
M16太贵,用M8加LM358放大获取温度采样电压,最经济,环境温度也可选三极管采样,这样能大大降低制作成本,我认为楼主修改用电位器调节温度,构思巧妙,缩减了原代码,用电位器调节温度,操作简便,还有温度控制写得比较好,网上我看了数码之家,手电论谈里网友写的原代码,用上了温度调节系数,电烙铁实用为主,差几度也不影响,若能做到这几点,开源数显白光离大家越来越近了。
作者: 浴火之冰    时间: 2011-8-20 11:01
很好很好,能套件更好
作者: 红军战士    时间: 2011-9-7 17:19
能套件更好!!!!!!!!!!
作者: 拨拨    时间: 2011-9-17 23:47
也建议用STC的MCU,便宜,更有性价比。开源,体现楼主的无私,敬佩!
作者: 柱栅管    时间: 2011-10-6 21:32
楼主 加油  !
作者: 快活丞    时间: 2011-10-7 22:59
拨拨 发表于 2011-9-17 23:47
也建议用STC的MCU,便宜,更有性价比。开源,体现楼主的无私,敬佩!

是啊,STC的现在也容易买。
作者: wjxhone    时间: 2011-10-8 15:27
现在AVR的单片机价格降下来了,像贴片的 ATMEGA8L淘宝上只要4.5元 ,楼主的电路可以改用 ATMEGA8L,还有AVR的驱动能力比较强,数码管改成共阴的,可以省掉3个位驱动的三极管。
作者: liu6590999    时间: 2012-3-19 10:47
记个号
作者: 追求真理    时间: 2012-3-29 10:29
又有好玩的东东了。记个号
作者: ksd    时间: 2012-4-17 21:19
谁能改为51的源程序就好了,51的片子我很多,烧录器也有。

AVR的芯片我还没用过。
作者: www6037    时间: 2012-7-4 23:52
支持,我认为你太厉害了
作者: liuruizhou2    时间: 2012-10-5 22:36
希望楼主尽快成功!期盼着……
作者: 163yjq    时间: 2012-10-7 09:33





    这是我以前做的自用版PACE恒温烙铁,几年用下来效果不错。用51单片机控温外带数显。为了减少感应电用的是铁牛供电也算的上是防静电焊台,焊cmos器件不用提心掉胆的。
    外壳是微机电源的铁壳,有点大,不过竖起来放横向空间不大。原本想做个两用焊台,往里面塞点稳压电源电路啥的,可惜没空,等里面都做好了再做面板也不迟,现在这副样子就算是个样机吧!能用,实用。
    市场上PACE烙铁不多,当初还研究了一番,烙铁芯里的测温元件和936,T12还不一样,是热电阻的,为了这我还对电路做了一下特殊改进。
    试用的时候出现了一个小插曲,显示的温度不稳定,而且升温慢,起初以为是单片机程序问题,改了好几次,连程序结构也改了,后来拆开大卸八块,连示波器都用上了,一看原来是一根跳线虚焊。东西复杂了,容易出问题,简单最好啊,电饭锅一个温控器就搞定一顿饭,下回搞个精简版模拟控温电路试试。
    过节空闲时间多,话也多,交流了,希望对坛友有些帮助吧。

作者: panqi    时间: 2012-10-7 09:58
广大爱好者的心声:越简单越好
作者: 1849150247    时间: 2012-10-7 22:52
动手能力不错,希望能简单化。
作者: 163yjq    时间: 2012-10-9 14:47
   很久都想利用电阻丝的热态电阻搞个温控电路,现在草图出来了。(脑子里想象的,可能和实际有点偏差。)   向来没有盖楼打地基的习惯,借用贴主的宝地摆个地摊,凑凑热闹,呵呵




注明一下:
         RW是普通的220V烙铁,只要内部是发热丝的都行.
         Q1功率晶体管,MOS管都可。
         30W的内热式烙铁,随着温度上升电阻会增加上百欧姆,不过离散性有点大

220v恒温_1.jpg (82.61 KB, 下载次数: 0)

220v恒温_1.jpg

作者: 江鑫    时间: 2012-11-10 18:12
是否调校交流电压而达到调温目的呢-----------请指教。
作者: 163yjq    时间: 2012-11-16 16:39
回复 江鑫 的帖子

电路原理和经典的白菜白光电路差不多(那个带热电偶)。整个电路是在震荡中的,功率管在不断的开关,开关时间比决定了烙铁的温度。开关时间由电阻丝的电阻决定。
作者: 江鑫    时间: 2012-11-16 21:47
回复 163yjq 的帖子

控制器价格较高,因眼高度花眼【500】DIY控制交流电压高低而控制烙铁温度,【个人想法】目前还没动手,准备制作,特请教。
作者: 163yjq    时间: 2012-11-18 12:49
回复 江鑫 的帖子

       我原来做过一个白光烙铁,后来我想是不是可以省略掉开关电源部分,而且也不用特殊的白光烙铁芯,同样达到恒温的目的,所以有了这个想法,毕竟普通内热式烙铁价低,量大。
    电路上半部分的原理可参考白菜白光的原理(从C1的充电开始分析),下半部分思路如下:
    当Q1导通时D1截止,AR1的2脚电压>1脚电压,D2截止,C1充电;
    当Q1截止时D1导通,AR1的2脚的电流被RW分流,RW的热态电阻如果较小,使得AR1的2脚电压<1脚电压,D2导通,C1放电;
    R1//R2,R3//R4的数值和具体的RW有关,说明一下:Q1控制的是直流电。

此电路纯属交流,如果能挽救一下过时的内热式烙铁,那我也就欣慰了,呵呵.......
作者: 江鑫    时间: 2012-11-18 16:03
回复 163yjq 的帖子

谢谢您老师。电路越简单越好【容易仿制】,如果是220V烙铁,是否用吊扇阻抗器进行调压而控制烙铁温度,我以做好,使用效果较好。因相机不好,没拍照请谅。
作者: 163yjq    时间: 2012-11-18 21:44
回复 江鑫 的帖子

       用电扇调试器也可以,串入电感,或电容达到调压的目的;另外也可以用调光台灯的控制器,那是通过可控硅调压;两者都是手动调压,没有反馈回路,不能自动调压,适合输入电压较稳定的情况,而且达不到恒温的目的。
    在对焊接要求高的地方,一般用恒温烙铁,控制器都有测温元件,带自动控制功能。
   
作者: 江鑫    时间: 2012-11-18 22:56
回复 163yjq 的帖子

谢谢,因用的时间较少基本能满足要求。




欢迎光临 长汀无线电厂交流论坛 (http://www.ctwxd.com/) Powered by Discuz! X3.1