简要介绍:
基于触摸感应+单片机控制的可携带的智能恒温电烙铁,携带方便、智能控制、烙铁芯和烙铁头永不干烧、节能环保、烙铁头和烙铁芯使用寿命延长一倍以上。
一、详细描述:
把触摸+智能控制内置到电烙铁手柄里,当使用者拿起电烙铁时,切换到高功率快速升温恒温模式,当使用者放下电烙铁时,切换到低功率保温节能模式,烙铁芯和烙铁头免于干烧和节省电力,延长了电烙铁使用寿命,普通电烙铁烙铁芯和烙铁头使用寿命是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度,烙铁焊嘴的温度相差很大,目前采取时用单片机一路检测环境温度,烙铁工作时,把环境温度低时的影响补偿。
四、材料清单:
| | | | | |
| --- | --- | --- | --- | --- |
| 序号 | 名称 | 编号 | 封装 | 数量 |
| 1 | 二极管M7F | D1,D2 | SMD | 2 |
| 2 | 单片机8F5701 | IC5 | SOP8 | 1 |
| 3 | 可控硅BT131 | Q1 | SOT223 | 1 |
| 4 | 电源芯片3310 | IC1 | SOP8 | 1 |
| 5 | 电容100uF/10V | C15,C3 | EC8MM_3.81MM | 2 |
| 6 | 温度探头1000K | RNTC | | 1 |
| 7 | 贴片电阻100K 5% | R1 | 0603 | 1 |
| 8 | 贴片电容104 | C8,C10,C13,C14 | 0603 | 3 |
| 9 | 贴片电容4.7nF | C5 | 0603 | 1 |
| 10 | 贴片电容15pF NPO | C16 | 0603 | 1 |
| 11 | 贴片电阻3k 5% | R2,R4 | 0603 | 2 |
| 12 | 贴片电阻1k 5% | R11 | 0603 | 1 |
| 13 | 贴片电阻1k 1% | R13 | 0805 | 1 |
| 14 | 贴片电阻510R 5% | R9,R3 | 0603 | 2 |
| 16 | 感应ICSC01 | IC2 | SOP8 | 1 |
| 17 | 贴片电容8p NPO | C17 | 0603 | 1 |
| 18 | NTC 100K | RNTC1 | | 1 |
| 19 | 贴片电阻10k 1% | R12 | 0603 | 1 |
| 20 | LED 红色 蓝色 | LED1,LED2 | 0603 | 2 |
五、电烙铁照片:
1、线路板:![微信图片_20190922134752_副本.jpg](//image.lceda.cn/pullimage/hTpi27UsY0ozMFGSZqGo2j5JkhoE7tw004zJqDCn.jpeg)
![微信图片_20190922134746_副本.jpg](//image.lceda.cn/pullimage/TzudHAhLgYbltVUciVywIAAvfWSSkR9X3i7il6gV.jpeg)
![微信图片_20190922134742_副本.jpg](//image.lceda.cn/pullimage/TkiwfhCsd0oTJgIgPD9rs2ocGaQCzTH7kKkDMHp1.jpeg)
![微信图片_20190922134736_副本.jpg](//image.lceda.cn/pullimage/Rr4r90n3JotTbVumfRBj3xqaAZsNMPXPFHdptVAq.jpeg)
2、成品:![微信图片_20190922134706_副本.jpg](//image.lceda.cn/pullimage/JFkgvUcc8fTulVPZMGVHrCzcnfK1QQHrsKc4TJUy.jpeg)
六、视频:见11附件。
七、开源文档:
七、开源文档。
#include
#include
#include
#define unchar unsigned char //8位,值域0~255
#define unint unsigned int //16位,值域0~65535
#define CLR_ADCCH (ADM & 0xE0) // 清除CHS[4:0]
#define _EOC ADM & 0x20 // ADC status (EOC)
\#define \_ADENB ADM \|= 0x80 // ADC enable \(ADENB\)
\#define EnADC\_Coverting ADM \|= 0x40 // ADC converting start \(ADS\)
//#define BufSize 20
unint uiADCL=0; //AD值低8位
unint uiADC=0; //AD值高4位
unint ADC\_Room\_Temperature=0;//
unint Value\_Room\_Temperature=0;//室温ADC
unint Value\_Room\_Temperature\_Average=0;//室温平均值
//unint xdata ADC\_Room\_Temperature\_Last=0;
unint ADC_NTC=0;//
unint Value_NTC=0;//烙铁ADC
unint Value\_NTC\_Average=0;//室温平均值
unint Value\_NTC\_Last=0;
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;
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;
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;
/\*\*\*\*\*\*\*\*\*\*\*\*输入输出定义\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
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; //红色灯
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*系统初始化\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
void System_Init(void)
{
WDTR = 0x5A; //清看门狗
CLKSEL = 0x04; //Fcpu=32M/2=16M
CLKCMD = 0x69; //使能设置
CKCON &= 0x4F; //Wait 4 Cycle From=16M
//P0OC \|= 0x02; //1pin开漏输出模式
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*IO输入输出设置\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
void Init_GPIO(void)
{
P0M = 0x25; //1,3,4为输入,其余为输出
P0UR = 0x08; // 3设为上拉电阻
P0CON=0x12; //1和4只作为模拟输入脚,其余为GPIO
P0 = 0x08; //3为高电平,其余为低电平
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*定时器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初始化初值
TF0 = 0; //没有溢出位
ET0 = 1; //中断开启
TR0 = 1; //定时功能开启
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*ADC初始化\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
void ADC_Init(void)
{
ADR \|= 0x40; // 开启ADC中断功能 \(GCHS\)
ADR \|= 0x30; //1/2时钟源
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.
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*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;
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;
}
}
}
/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*按键扫描\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
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秒定时到跳到主程序
}
}
}
}
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*室温温度处理\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
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;
}
}
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*烙铁头温度处理\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
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 //手握时温度处理
{
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;
}
}
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*主程序\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
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();
}
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*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;
}
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;
}
}
}
}
//\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*ADC中断函数\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
void ADC_ISR(void) interrupt ISRAdc
{
IRCON2 &= 0xFE; //清除中断请求
if (_EOC) // 检查ADC状态
{
uiADCL = ADR;
uiADCL &= 0x0F; // 获取ADB3~ADB0
uiADC = ADB ;
uiADC
14
35
收藏到专辑