描述
<p>简要介绍:
基于触摸感应+单片机控制的可携带的智能恒温电烙铁,携带方便、智能控制、烙铁芯和烙铁头永不干烧、节能环保、烙铁头和烙铁芯使用寿命延长一倍以上。
一、详细描述:
把触摸+智能控制内置到电烙铁手柄里,当使用者拿起电烙铁时,切换到高功率快速升温恒温模式,当使用者放下电烙铁时,切换到低功率保温节能模式,烙铁芯和烙铁头免于干烧和节省电力,延长了电烙铁使用寿命,普通电烙铁烙铁芯和烙铁头使用寿命是3个月左右,AI恒温电烙铁的烙铁头和烙铁芯寿命寿命在6个月以上。
二、所面临的挑战及所解决的问题;
A、面临的挑战:1、把感应电路、单片机、供电芯片如何内置到电烙铁手柄里。2、从闲置状态到使用状态,如何快速升温。3、如何可靠识别使用者状态。
B、解决的问题:使用电烙铁(或者电焊台)者分为研发工程师、调试工程师、维修工程师和电器维修人员、生产线上技术工人以及初学电子技术人员。1、研发工程师、调试工程师调试线路板时,也许几个小时使用一下电烙铁,烙铁80%的时间处于等待状态。因为:a、工程师不会也不可能等到要使用电烙铁时插上电烙铁,上电电烙铁预热需要3-5分钟。b、长期插上电烙铁(或者电焊台),电烙铁烙铁头和烙铁芯就会干烧,充气干烧烙铁头会很脏污,脏污的烙铁头会严重影响焊接质量。2、维修工程师和电器维修人员,由于测量分析时间不一,使用电烙铁或者电焊台的时间也不同,电烙铁(或者电焊台)80%的时间在干烧,另外,一个维修人员背着一个2-3公斤的大焊台,很不方便。3、初学电子技术人员,由于电焊台价格贵,初学电子技术人员买普通的没有恒温功能的电烙铁,没有恒温控制,电烙铁2-3个月就会烧坏,而且电烙铁温度高,焊接焊接质量没有保障。本AI恒温电烙铁,恒温、智能感应控制,携带方便(普通电烙铁大小),价格跟普通恒温电烙铁几乎一样。
三、硬件、软件的关键点:
A、硬件:
1、电源芯片、触摸芯片、单片机等硬件如何装进手感好的烙铁小手柄里(大的手柄手感极差,现在没有人使用):电源芯片选用必易科技的KP3310 SOP8分钟,外围元件只有5个元件;触摸芯片选用专用触摸芯片SC01,SOP8封装,单片机选用松翰或者中微12位ADC12 SOP8封装,上述配置元件就能内置到手柄里。
2、烙铁芯:烙铁芯的选择要求,低功率保温模式时,功率在8-10W,高功率工作模式时,要求在3秒内快速升温值350度左右,并且恒温。这样选用内置感温电阻的陶瓷4线发热芯,感温电阻45-55欧姆,发热电阻选用90W功率的陶瓷发热芯,但是这么高的功率发热芯,如何保持恒温。
3、感应模式:由于使用220V或者110V电压,触摸感应片(点)不能外置,一定要在手柄里才安全。同时由于使用者手握时千差万别,如何保证触摸感应可靠。本设计选用专用触摸芯片SC01,+弹簧紧贴手柄内壳,
B、软件:
1、烙铁芯发热部位离焊嘴有20mm左右,烙铁芯感温电阻检测到是烙铁芯的温度,不是焊嘴的温度,软件采取先全速加热,再延时一定时间后,再逐步减少输入功率。
2、环境影响,在同样功率下,环境10度和环境36度,烙铁焊嘴的温度相差很大,目前采取时用单片机一路检测环境温度,烙铁工作时,把环境温度低时的影响补偿。
四、材料清单:</p>
<table>
<tr>
<th></th>
<th></th>
<th></th>
<th></th>
<th></th>
</tr>
<tr>
<td>序号</td>
<td>名称</td>
<td>编号</td>
<td>封装</td>
<td>数量</td>
</tr>
<tr>
<td>1</td>
<td>二极管M7F</td>
<td>D1,D2</td>
<td>SMD</td>
<td>2</td>
</tr>
<tr>
<td>2</td>
<td>单片机8F5701</td>
<td>IC5</td>
<td>SOP8</td>
<td>1</td>
</tr>
<tr>
<td>3</td>
<td>可控硅BT131</td>
<td>Q1</td>
<td>SOT223</td>
<td>1</td>
</tr>
<tr>
<td>4</td>
<td>电源芯片3310</td>
<td>IC1</td>
<td>SOP8</td>
<td>1</td>
</tr>
<tr>
<td>5</td>
<td>电容100uF/10V</td>
<td>C15,C3</td>
<td>EC8MM_3.81MM</td>
<td>2</td>
</tr>
<tr>
<td>6</td>
<td>温度探头1000K</td>
<td>RNTC</td>
<td></td>
<td>1</td>
</tr>
<tr>
<td>7</td>
<td>贴片电阻100K 5%</td>
<td>R1</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>8</td>
<td>贴片电容104</td>
<td>C8,C10,C13,C14</td>
<td>0603</td>
<td>3</td>
</tr>
<tr>
<td>9</td>
<td>贴片电容4.7nF</td>
<td>C5</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>10</td>
<td>贴片电容15pF NPO</td>
<td>C16</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>11</td>
<td>贴片电阻3k 5%</td>
<td>R2,R4</td>
<td>0603</td>
<td>2</td>
</tr>
<tr>
<td>12</td>
<td>贴片电阻1k 5%</td>
<td>R11</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>13</td>
<td>贴片电阻1k 1%</td>
<td>R13</td>
<td>0805</td>
<td>1</td>
</tr>
<tr>
<td>14</td>
<td>贴片电阻510R 5%</td>
<td>R9,R3</td>
<td>0603</td>
<td>2</td>
</tr>
<tr>
<td>16</td>
<td>感应ICSC01</td>
<td>IC2</td>
<td>SOP8</td>
<td>1</td>
</tr>
<tr>
<td>17</td>
<td>贴片电容8p NPO</td>
<td>C17</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>18</td>
<td>NTC 100K</td>
<td>RNTC1</td>
<td></td>
<td>1</td>
</tr>
<tr>
<td>19</td>
<td>贴片电阻10k 1%</td>
<td>R12</td>
<td>0603</td>
<td>1</td>
</tr>
<tr>
<td>20</td>
<td>LED 红色 蓝色</td>
<td>LED1,LED2</td>
<td>0603</td>
<td>2</td>
</tr>
</table>
<p>五、电烙铁照片:
1、线路板:<img src="//image.lceda.cn/pullimage/hTpi27UsY0ozMFGSZqGo2j5JkhoE7tw004zJqDCn.jpeg" alt="微信图片_20190922134752_副本.jpg">
<img src="//image.lceda.cn/pullimage/TzudHAhLgYbltVUciVywIAAvfWSSkR9X3i7il6gV.jpeg" alt="微信图片_20190922134746_副本.jpg">
<img src="//image.lceda.cn/pullimage/TkiwfhCsd0oTJgIgPD9rs2ocGaQCzTH7kKkDMHp1.jpeg" alt="微信图片_20190922134742_副本.jpg">
<img src="//image.lceda.cn/pullimage/Rr4r90n3JotTbVumfRBj3xqaAZsNMPXPFHdptVAq.jpeg" alt="微信图片_20190922134736_副本.jpg">
2、成品:<img src="//image.lceda.cn/pullimage/JFkgvUcc8fTulVPZMGVHrCzcnfK1QQHrsKc4TJUy.jpeg" alt="微信图片_20190922134706_副本.jpg">
六、视频:见11附件。</p>
<p>七、开源文档:
七、开源文档。</p>
<h1>include</h1>
<h1>include</h1>
<h1>include</h1>
<h1>define unchar unsigned char //8位,值域0~255</h1>
<h1>define unint unsigned int //16位,值域0~65535</h1>
<h1>define CLR_ADCCH (ADM & 0xE0) // 清除CHS[4:0]</h1>
<h1>define _EOC ADM & 0x20 // ADC status (EOC)</h1>
<p>#define _ADENB ADM |= 0x80 // ADC enable (ADENB)
#define EnADC_Coverting ADM |= 0x40 // ADC converting start (ADS)
//#define BufSize 20</p>
<p>unint uiADCL=0; //AD值低8位
unint uiADC=0; //AD值高4位</p>
<p>unint ADC_Room_Temperature=0;//
unint Value_Room_Temperature=0;//室温ADC
unint Value_Room_Temperature_Average=0;//室温平均值
//unint xdata ADC_Room_Temperature_Last=0;</p>
<p>unint ADC_NTC=0;//
unint Value_NTC=0;//烙铁ADC
unint Value_NTC_Average=0;//室温平均值
unint Value_NTC_Last=0;</p>
<p>unint Value_Work=0;
unint Value_Work1=0;
unint Value_Work2=0;
unint Low_Default=4018;
unint High_Default=3993;
unint Low=3861;
unint High=3798;</p>
<p>unchar Time_20ms=0; //20ms计数器
unchar Time_500ms=0;
unchar Time_1s=0;
unchar Time_1m=0;
unchar Time_90m=90;
unchar Time_240m=240;
unchar Time_1h=0;
unchar i=0;
unchar j=0;
unchar Count_50=50;
unchar Count_5=5;
unchar Open_Time=15;
//unchar Count_Heating=0;
unchar Mode_Temperature=1;
unchar Time_10s=10;
unchar Time_45s=45;
unchar Time_30s=30;
unchar Count_20ms=0;</p>
<p>bit Tag_1s=0;
//bit Tag_500ms=0;
bit Tag_100ms=0;
bit Tag_240m=0;
bit Tag_90m=0;
bit Tag_20ms=0;
bit Tag_Touch=0;
bit Tag_Pre_Insulation=0;
bit Tag_Smart=1;
bit Tag_Timing_Control=1;
bit Tag_10s=1;
bit Tag_Temperature_Setting=1;
bit Tag_Compensate=0;
bit Tag_45s=0;
bit Tag_Compensate1=0;
bit Tag_30s=0;
bit Tag_Stop_High=0;
bit Tag_ADC_Deal=0;</p>
<p>/************输入输出定义***************/
sbit LED_Blue=P0^0; //蓝色灯
sbit NTC=P0^1; //NTC检测
sbit SCR=P0^2; //可控硅输出
sbit Touch=P0^3; //触摸接口
sbit Room_Temperature=P0^4; //温度监测
sbit LED_Red=P0^5; //红色灯</p>
<p>//********************系统初始化************************
void System_Init(void)
{
WDTR = 0x5A; //清看门狗
CLKSEL = 0x04; //Fcpu=32M/2=16M
CLKCMD = 0x69; //使能设置
CKCON &= 0x4F; //Wait 4 Cycle From=16M
//P0OC |= 0x02; //1pin开漏输出模式
}</p>
<p>//********************IO输入输出设置************************
void Init_GPIO(void)
{
P0M = 0x25; //1,3,4为输入,其余为输出
P0UR = 0x08; // 3设为上拉电阻
P0CON=0x12; //1和4只作为模拟输入脚,其余为GPIO
P0 = 0x08; //3为高电平,其余为低电平</p>
<p>}</p>
<p>//*********************定时器0初始化****************
void Timer0_Init_Mode1(void) //50ms
{
TCON0 = 0x22; //定时器外部时钟选择寄存器T1RATE=Fext0/32=32/32=1M
TMOD = 0x65; // 定时器模式1
// T0GATE = 0,
// T0CT = 0, 16位定时器
TH0 = 0xB1;
TL0 = 0xE0; // 65536-45536=20ms初始化初值</p>
<p>TF0 = 0; //没有溢出位
ET0 = 1; //中断开启
TR0 = 1; //定时功能开启
}</p>
<p>//*********************ADC初始化*****************************
void ADC_Init(void)
{
ADR |= 0x40; // 开启ADC中断功能 (GCHS)
ADR |= 0x30; //1/2时钟源</p>
<p>VREFH = 0x04; // 使能内部VDD电压参考
//VREFH &= 0xFD; // 使能内部低电压参考
//VREFH |= 0x03; // VHS[2] = 0 : ADC internal VREFH function is depend on VHS[1:0].
// VHS[1:0] = 0X03 : 内部参考电压为VDD.
}</p>
<p>//*********************ADC处理***********************
void ADC_Deal(void) // 只有在保温阶段方去ADC判断
{
if(Tag_100ms==1&&Tag_10s==0)
{
//Tag_100ms=0;
i++;
IEN2 |= 0x01; //ADC中断使能
_ADENB; //ADC 使能(ADENB),STOP模式下,禁止ADC以省电
ADR |= 0x40; //开启ADC全局通道(GCHS)
ADM = CLR_ADCCH |0x04; //选中ADC 04通道
P0CON |= 0x10; //P04置1,作为ADC输入
EnADC_Coverting;
while(!_EOC); //等待转换结束
ADC_Room_Temperature=uiADC;
IEN2 &= 0xFE; //关闭ADC中断
Value_Room_Temperature=Value_Room_Temperature+ADC_Room_Temperature;
if(i==10)
{
i=0;
Value_Room_Temperature_Average=Value_Room_Temperature/10;
Value_Room_Temperature=0;
ADC_Room_Temperature=0;
Tag_ADC_Deal=1;
}
}
if(Tag_100ms==1)
{
Tag_100ms=0;
j++;
IEN2 |= 0x01; //ADC中断使能
_ADENB; //ADC 使能(ADENB),STOP模式下,禁止ADC以省电
ADR |= 0x40; //开启ADC全局通道(GCHS)
P0CON |= 0x02; //P01置1,作为ADC输入
ADM = CLR_ADCCH |0x01; //选中ADC 01通道
EnADC_Coverting;
while(!_EOC); //等待转换结束
ADC_NTC=uiADC;
IEN2 &= 0xFE; //关闭ADC中断
Value_NTC=Value_NTC+ADC_NTC;
if(j==10)
{
j=0;
Value_NTC_Average=Value_NTC/10;
Value_NTC=0;
ADC_NTC=0;</p>
<p>if(Value_NTC_Last!=0)
{
if(Value_NTC_Average=41)Open_Time=40;
}
//Value_NTC_Last=Value_NTC_Average;
}
else Value_NTC_Last=Value_NTC_Average;
}
}
}</p>
<p>/*****************按键扫描**********************/
void Key_Scan(void)
{
if(Tag_10s==1)
{
SCR=0;
if(Touch==0)
{
Mode_Temperature+=1;
if(Mode_Temperature==4)Mode_Temperature=1;
switch(Mode_Temperature)
{
//case 1:Low_Default=3913;High_Default=3866;Tag_Temperature_Setting=1;break;//130-140
//case 1:Low_Default=4018;High_Default=3993;Tag_Temperature_Setting=1;break;//130-140
case 1:Low=3861;High=3798;LED_Red=1;LED_Blue=0;Tag_Temperature_Setting=0;Value_Work1=32;break;//140-150
case 2:Low=3798;High=3725;LED_Red=0;LED_Blue=0;Tag_Temperature_Setting=0;Value_Work1=40;break;//150-160
case 3:Low=3725;High=3640;LED_Red=0;LED_Blue=1;Tag_Temperature_Setting=0;Value_Work1=49;break;//160-170
}
while(1)
{
if(Touch==1) return; //触摸松开跳到主程序
if(Tag_10s==0) return; //10秒定时到跳到主程序
}
}
}
}</p>
<p>// ********************室温温度处理************************
void Value_Work_Deal(void) //头10秒处理室温,因为室温传感器会被烙铁头传热
{
if(Tag_ADC_Deal==1&&Tag_10s==0)
{
Tag_ADC_Deal=0;
if(Value_Room_Temperature_Average=119&&Value_Room_Temperature_Average=146&&Value_Room_Temperature_Average=185&&Value_Room_Temperature_Average=232&&Value_Room_Temperature_Average=289&&Value_Room_Temperature_Average=355&&Value_Room_Temperature_Average=432&&Value_Room_Temperature_Average=520&&Value_Room_Temperature_Average=619&&Value_Room_Temperature_Average=731&&Value_Room_Temperature_Average=880)Value_Work2=31;
}
}</p>
<p>// ********************烙铁头温度处理************************
void Temperature_Treatment(void) //1s查询一次
{
if(Tag_10s==0&&Tag_20ms==1)
{
Tag_20ms=0;
//初始温度设置
if(Value_Work1>=Value_Work2)Value_Work=Value_Work1;
else Value_Work=Value_Work2;
//手握时电烙铁的处理,高温恒温工作状态
if(Touch==0)
{
Tag_Smart=0;
Tag_Pre_Insulation=1;
Tag_Compensate1=1;
Tag_45s=1;
Time_45s=45;
if(Tag_Compensate==1) //从低温返回时,全功率工作30s
{
Tag_Compensate=1;
Tag_30s=1;
LED_Blue=1;
LED_Red=0;
SCR=1;
}
else //手握时温度处理
{</p>
<p>LED_Blue=1;
if(Value_NTC_Average=Value_Work)SCR=0;
else SCR=1;
}
if(Value_NTC_Average=High)
{
if(Open_Time=Open_Time)SCR=0;
else SCR=1;
}
if(Value_NTC_Average>=Low)SCR=1;
}
}
//闲置时电烙铁的处理,进入烙铁头防氧化状态
if(Touch==1)
{
Tag_Smart=1;
Tag_Pre_Insulation=0;
Tag_Compensate=1;
Tag_30s=1;
Time_30s=30;
if(Tag_Compensate1==1) //从高温返回时,40%功率工作45s
{
Tag_Compensate1=1;
Tag_45s=1;
LED_Blue=0;
LED_Red=0;
if(Count_50>=26)SCR=0;
else SCR=1;
}
else //闲置时温度恒温
{
LED_Red=1;
if(Value_NTC_Average=Open_Time)SCR=0;
else SCR=1;
}
if(Value_NTC_Average=High_Default)
{
if(Count_50>=Open_Time)SCR=0;
else SCR=1;
}
if(Value_NTC_Average>=Low_Default)SCR=1;
}
}
Value_NTC_Last=Value_NTC_Average;
}
}</p>
<p>// ********************主程序************************
void main(void)
{
EAL=1; //开总中断
System_Init(); //系统初始化
Init_GPIO(); //IO口输入输出定义
Timer0_Init_Mode1(); //定时器0初始化
ADC_Init();
while (1)
{
ADC_Deal();
Key_Scan();
Value_Work_Deal();
Temperature_Treatment();
}
}</p>
<p>//*********************time0中断函数*************************
void Timer0_ISR(void) interrupt ISRTimer0 // 20ms定时中断
{
TH0 = 0xB1;
TL0 = 0xE0; // 65536-45536=20ms初始化初值
Tag_20ms=1;
Count_5-=1; //100ms倒计时
if(Count_5==0)
{
Tag_100ms=1;
Count_5=5;
}
Count_50-=1; //功率计时基准
if(Count_50==0)Count_50=50;
Time_20ms+=1;
if(Time_20ms==25)
{
Time_20ms=0;
Time_500ms+=1;
if(Time_500ms==2) //1秒计数
{
Time_500ms=0;
Time_1s+=1;
Tag_1s=1;
if(Tag_10s==1)Time_10s-=1;
if(Time_10s==0)
{
Tag_10s=0;
Tag_Temperature_Setting=0;
}
if(Tag_30s==1)Time_30s-=1;
if(Time_30s==0)
{
Tag_30s=0;
Time_30s=30;
Tag_Compensate=0;
}
if(Tag_45s==1)Time_45s-=1;
if(Time_45s==0)
{
Tag_45s=0;
Time_45s=45;
Tag_Compensate1=0;
}</p>
<p>if(Time_1s==60)//60
{
Time_1m+=1;
Time_1s=0;
if(Tag_Timing_Control==1)Time_240m-=1;
if(Time_240m==0)
{
Tag_90m=1;
Tag_Timing_Control=0;
Time_240m=240;
}
if(Tag_90m==1)
{
Time_90m-=1;
P0M = 0x00;
P0 = 0x08;
if(Time_90m==0)
{
Tag_90m=0;
P0M = 0x25; //1,3,4为输入,其余为输出
P0UR = 0x08; // 3设为上拉电阻
P0CON=0x12; //1和4只作为模拟输入脚,其余为GPIO
P0 = 0x08; //2为低电平,其余为高电平
}
}
if(Time_1m==60)
{
Time_1h+=1;
Time_1m=0;
if(Time_1h==10)//4
{
P0M=0x00;
P0 = 0x08; //关掉LED和输出,掉电重启后恢复
Time_1h=0;
EAL=1;
}
}
}
if(Tag_Temperature_Setting==1)
{
LED_Red=\~LED_Red;
LED_Blue=1;
}
if(Tag_Smart==1&&Tag_10s==0&&Value_NTC_Average>=High_Default)
{
LED_Blue=\~LED_Blue;
//LED_Red=1;
}
if(Tag_Pre_Insulation==1&&Tag_10s==0&&Value_NTC_Average>=High)
{
LED_Red=\~LED_Red;
//LED_Blue=1;
}
}
}
}</p>
<p>//*********************ADC中断函数*************************
void ADC_ISR(void) interrupt ISRAdc
{
IRCON2 &= 0xFE; //清除中断请求
if (_EOC) // 检查ADC状态
{
uiADCL = ADR;
uiADCL &= 0x0F; // 获取ADB3~ADB0</p>
<p>uiADC = ADB ;
uiADC</p>
评论(2)