找回密码
 注册
关于网站域名变更的通知
查看: 696|回复: 3
打印 上一主题 下一主题

T12白光烙铁固件源码(天山V1.2 51单片机硬件SPI LED支持3芯手柄)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-28 09:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
stc芯片  支持3芯手柄  u5 C( R- t, ~( H+ [
白光烙铁_V3.1.1硬件SPI(天山V1.2)
6 J* n6 _. k2 B: ?6 a( m5 O
天山OLED烙铁使用手册
修订历史
版本
更新日期
更新说明
作者
V1.0
2017-06-05
第一次发布
王志浩
V2.0
2017-08-23
增加中文菜单,优化温度控制,修复若干BUG
王志浩
V2.1
2017-08-29
修复工厂模式中的若干BUG,优化温度控制
王志浩
V2.2
2017-08-30
修复蜂鸣器音量的相关BUG
王志浩
V2.3
2017-08-31
调整进入工厂模式的方法
王志浩
V2.4
2017-09-01
调整显示界面,修复若干BUG
王志浩
V2.5
2017-09-03
提高回温速度,提高烙铁可靠性
王志浩
V2.6
2017-09-13
修改程序适用于采用V1.0beta版硬件
王志浩
V2.7
2017-09-18
修改休眠和待机逻辑
王志浩
V2.7A
2017-09-19
修复若干BUG
王志浩
V2.8
2017-09-21
修复重要BUG,改进程序修改方法
王志浩
V2.9.0
2017-10-07
增加进口头的兼容性,调整程序结构,修复BUG
王志浩
V2.9.1
2017-10-08
优化程序结构,优化对进口头的兼容性
王志浩
V2.9.2
2017-10-09
优化温度显示,增加按键功能
王志浩
V2.9.3
2017-10-10
优化按键功能,优化菜单显示,修复BUG
王志浩
V2.9.4
2017-10-11
彻底移除STC库函数
王志浩
V2.9.5
2017-10-20
修改程序结构,为移植UI做最后准备
王志浩
V3.0.0
2017-10-21
更换菜单界面,取消工厂模式,修改焊咀校准
BEAT
V3.0.1
2017-10-22
修复若干BUG
BEAT
V3.0.2
2017-10-23
修复若干BUG
王志浩
V3.1.0
2017-10-27
更换新的UI界面,修复若干BUG
王志浩
V3.0.0 版更新详细说明:
①更换新的菜单界面;
②将工厂模式功能移植到主菜单中;
③修改校准烙铁头的方法;
V3.0.1 版更新详细说明:
①修复1.3吋OLED显示不全的BUG;
②修复菜单中默认通道不能置0的BUG;
③修复菜单中时间设置最大只能为10的BUG;
V3.0.2 版更新详细说明:
①修复部分硬件蜂鸣器不响的BUG;
②修复休眠时屏幕显示的BUG;
③修复菜单中版本号显示的BUG;
④尝试修复待机唤醒的花屏BUG.
V3.1.0 版更新详细说明:
①在保留原先UI界面的同时,添加仿JBC界面可供选择;
②修复最高温度限制可能无效的BUG;
③修复部分独立按键无提示音的BUG。# G( {4 M2 ^4 O% Z2 r
0 特别声明0.1 版权声明
程序中所有代码均由本人(即全体著作权所有人,下同)开发完成,程序开源后授权任何人可免费使用本程序(既可直接使用固件,亦可在程序基础上修改出任何衍生版本),但上述程序及本文档著作权属本人所有。
硬件设计中参考了广大网友的建议,不再声明版权,但请各位使用者尊重本人和其他网友的劳动成果。
0.2 开源协议
除本人以外的任何人对本程序(包括但不限于此版本,下同)进行修改后的任何衍生版本,以及以本程序思路或部分代码为基础设计的其它程序,必需开源所有代码。未经第一著作权所有人(@BEAT)之书面授权,任何单位和个人不得将上述程序(包括本程序及所有衍生版本和参考本程序设计的其它程序)及本文档以任何形式用于商业用途。
本程序受著作权法保护,本人保留对侵权者及违反开源协议者追究法律责任的权利。请遵守此开源协议,尊重原作者、及所有衍生版本作者的劳动成果,遵守著作权人所在地法律法规!
0.3 免责声明
              本人只进行程序的设计,并无偿分享给网友。本人只保证该程序在我的手中可以正常工作,不保证其他人以任何形式得到的电路板、元器件及源程序均可正常工作,不承担其他任何人使用本人所设计的所有软硬件造成的一切后果。如您不同意此声明,请您立即删除本文档及其相关程序。
0.4 致谢
              本程序中部分内容参考了@BEAT的相关算法;@ xzhyahoo1在V2.0和V2.1版本设计时提供了建议;V2.8版本修复的BUG是由@理解源于真诚发现的。V3.0中的UI是由@BEAT设计的。以上朋友的帮助,对程序的开发和更新起到了良好的作用,在此一并致谢。
" V0 |7 W  c8 O) k7 w
1 硬件准备1.1 硬件介绍1.1.1 本人设计的PCB介绍
①存在已知问题是编码器和OLED屏距离太近,如果选用1.3寸OLED,编码器装上旋钮后会挡住部分OLED屏。因此需要各位试用的朋友自己飞线,或给屏装上排线,或EC11采用飞线,总之将屏和编码器分开。
              ②焊接蜂鸣器和编码器时,应先焊蜂鸣器再焊编码器,并用胶带或热熔胶将蜂鸣器的两个焊盘妥善绝缘,否则编码器背部的金属会将蜂鸣器短路,并且需要将编码器两个固定脚剪掉。
              ③选用5V供电的OLED屏时,R4/R5应选用1k,采用3.3V供电时,R4/R5选用470R,具体选用5V还是3.3V,由JP1跳线决定。
              ④请在5V加470uF以上电容,运放VCC加104电容。
⑤电容C5设计有误,实际不需要。
1.1.2 智萌版硬件介绍
              ①正面三个电容不需要焊接,否则无法下载程序;
              ②建议MOS更换为AO4413.
1.1.3 海绵宝宝版硬件介绍
              ①单片机应改为STC15W2K60S2;
1.2 烧录固件1.2.1 烧录步骤
              固件在Prj文件夹下Objects子文件夹内,文件名为HAKKO.hex。
①将CH340模块连接焊台,先只接TX、RX、GND三根线,VCC不接;
②按图1-1步骤勾选相关选项;
图1-1 STC-ISP软件操作步骤
③将下载器VCC与焊台连接。
1.2.2 烧录失败排查
①编码器位置不合适,旋转编码器再试(请确保编码器转到位,不要卡在中间);
②TX、RX接反,V1.0beta版本硬件应是T-R、R-T;
③下载器供电不稳,检查下载器带载后的电源电压;
④降低下载时的最高波特率,并取消勾选“使用快速下载模式”。
2 功能介绍2.1 界面介绍
烙铁工作时,分为两种工作模式,即普通工作模式和通道工作模式,两种模式可短按编码器切换,以下将分别介绍。
2.1.1 普通工作模式
普通工作模式下,允许用户以自定义的步进(在菜单中可调),调整设定温度值。步进取值范围为1-50。普通工作模式界面如图2-1。
图2-1普通工作模式界面
2.1.2 通道工作模式
              通道工作模式下,用户可以在0~5共计6个温度通道中选择设定温度,其中通道0为0℃,通道5为“最高温度”值,其余四个通道的值可在工厂模式中设定。通道工作模式界面如图2-2。
2.2 主菜单介绍
长按编码器进入一级菜单,旋转编码器选择想要进入的二级菜单,短按进入该二级菜单。再次旋转编码器,将光标移动至需要修改的具体参数上,短按编码器选中该内容(选中后该选项值显示在文字后方)。再次旋转编码器修改该值,修改完成后短按编码器取消选中(取消选中后该选项值消失),再次旋转编码器可以移动光标至其他参数上。退出一级菜单和二级菜单均需要长按编码器,长按时间为1s。菜单结构如图2-3所示。
图2-3 菜单结构图
2.2.1 温度设置
温度步进:用户在正常模式下旋转编码器的温度步进值,以及在其他菜单中设定与温度相关的参数时的温度步进值;
休眠温度:烙铁进入“休眠模式”下的工作温度,该选项值如小于50,则休眠时不加热,且该选项值不能超过“最高温度”的设定值(已在固件中进行了限制,下同);
默认温度:烙铁开机后默认的设定温度,该选项值不能超过“最高温度”的设定值,如希望焊台保存上次关机时的设定温度值,则可以将该选项置为“0”;
最高温度:烙铁可以设置的最高温度,该选项值不能超过500(在温度超过450℃后精度没有保证,请谨慎使用);
2.2.2 时间设置
休眠时间:当烙铁手柄停止振动且编码器没有动作后开始计时,到时进入休眠模式,以“休眠温度”进行工作,直至进入“待机模式”,在此时间内通过振动手柄或编码器动作可唤醒烙铁,重新以原先的设定温度进行加热。如不需要休眠,该位置0。该位置0后,不会进入休眠和待机模式,也不会切断220V电源。
待机时间:在进入休眠模式后开始计时,到时进入待机模式,烙铁停止加热。该位置0表示到休眠时间后直接进入待机模式。待机模式下,只能由编码器动作唤醒烙铁。
关机时间:在进入待机模式后开始计时,到时由单片机IO口(可自定义,参见第三章第五节)给出低电平信号,由硬件配合切断220V电源,该位置0表示不切断220V电源,没有硬件配合的该位无效,可置任何值不影响程序运行。由于单片机掉电唤醒定时器时钟不准,该时间存在较大误差(20%)。
2.2.3 通道设置
默认通道:烙铁开机后默认的设定通道,该选项取值范围为1-5,如希望焊台保存上次关机时的设定通道,则可以将该选项置为“0”;
通道1-4:允许用户设定通道1-通道4的通道值,在通道模式中调用,该选项取值不得大于“最高温度”值。
2.2.4 其它设置
              焊咀选择:允许用户在工厂模式中事先储存4支烙铁头的参数;
              振动阈值:烙铁头振动唤醒烙铁时的灵敏度设定,取值0~10,0为最灵敏;
              按键音量:编码器转动或按下时的音量设定,取值为0~10,0为关闭蜂鸣器;
保护电压:烙铁停止加热的电压值,当电源(或电池)电压低于该设定值时,烙铁停止加热,但不影响菜单操作;
温度波动:烙铁显示温度波动较大时,可提高该值使显示稳定,取值范围1-5,1为显示实时值。
恢复出厂设置:如需恢复出厂设置,则将该位置1,退出菜单后所有参数均恢复出厂设置。
2.2.5 焊咀校准
              焊咀选校: 如需矫正并存储烙铁头参数,需将该选项调整为想要校准的烙铁头编号,之后在其余子菜单中进行校准。
0~600℃: 单击选中100℃至500℃选项后,将按照“焊咀选校”中设置的烙铁头编号对应的温度表对烙铁加热,取消选中后自动停止加热。在校准过程中,如实际温度低于设定的温度,则调大AD值;如实际温度高于设定的温度,则调小AD值。0℃及600℃一般为默认值无需调整。温度有过冲比较严重的现象时,反复多次校准温度一般可以解决. 在烙铁头校准时,切记该组数据必须严格从小到大递增,否则温度无效。例如,如果校准前:100℃,AD=110;200℃,AD =270;300℃,AD = 380,当校准200℃时,温度不足200℃,需要将AD值从270调大,但其大小不能超过300°时的AD值380,如果从270调到380温度还不能达到200℃,那就说明300℃时的380这个值也偏小了,需先将300℃的380也增大。
2.2.6 其他校准
按键校准:不同厂家的编码器AB通道不一定相同,如编码器方向与习惯不符,可将该选项调整为1,默认为0。
电压校准:如需矫正电源电压,需旋转编码器将当前电源电压的测量值乘10取整保存在菜单中,如当前电源电压为24.4V,那么将该值调整为244即可;(注意此值对应的编码器步进不为1,需多次旋转才会进1)
室温校准:如需矫正室温,需旋转编码器将当前室温的测量值取证保存在菜单中,如当前室温为18℃,那么将该值调整为18即可;(注意此值对应的编码器步进不为1,需多次旋转才会进1)
# }& \6 B* x* S+ y2 ~
3 程序修改
为方便各位朋友在本程序的基础上继续添加或修改自己需要的功能,在此介绍一些常见的问题。
3.1 准备工作
首先需安装Keil软件(见群文件),并下载解压STC-ISP软件(见群文件)。添加型号和头文件到Keil中,如图3-1。然后打开prj文件夹下的HAKKO.uvproj文件即可开始修改。
图3-1 添加型号和头文件
3.2 可快捷修改的几个设置
              (1)打开程序文件的config.h文件,找到图3-2(a)所示位置。
(a) config.h文件部分代码
(b)编译按钮
图3-2 可快捷操作的几个设置
(2)根据需要注释相关定义;
(3)设置完毕后按编译按钮,编译按钮在Keil界面左上角如图3-2(b)所示的红圈内。
3.3 修改开机LOGO
①准备一张128*64的logo图片,单色BMP格式;
②打开PCtoLCD2002软件;
③点菜单上的模式,改成图片模式。
- {% M7 p) C# g4 ]$ T; w④点菜单上文件、打开(打开准备好的bmp格式的logo图片)如图3-3;
图3-3
⑤点上面的齿轮,设字模选项,阴码,列行式,逆向,C51,自定义格式(删去行前缀和行后缀的大括号),如图3-4所示;
图3-4 字模选项
⑥设定好后,点确定,然后点生成字模,如图3-6;
⑦复制生成的代码,替换源程序中LQ12864.C中的LOGO[1024]数组,如图3-5所示;
图3-5 替换LOGO数组
⑧点击图3-2(b)所示的编译按钮,编译后即可下载。
3.4 提高烙铁最大输出功率
烙铁最大输出功率(24V侧)实测已经达75w以上,如果认为不满意可以手动修改程序。但提高效果并不明显且会造成进口头温度检测的波动。为满足更多人需要,特给出修改方法:
(1)打开程序文件的Sys_Sample.c文件,找到图3-6所示位置。
图3-6 Sys_Sample.c文件部分代码
(2)根据需要将Get_ADC10bitResult也注释;
(3)修改完毕后按编译按钮,编译按钮在Keil界面左上角如图3-2(b)所示的红圈内。
3.5 修改控制器IO口
为方便使用其他控制板的朋友修改IO,特取消PCA功能并改用定时器生成PWM波,如图3-7所示.
(1)打开程序的config.h文件,找到图3-7所示位置。
图3-7 config.h文件部分代码
(2)修改适当的IO,其中KEY_A为切换烙铁头按键,KEY_B为休眠或关机按键;
(3)修改完毕后按编译按钮,编译按钮在Keil界面左上角如图3-2(b)所示的红圈内。
) y' [" w* _* w0 ]& t) S1 s
4 结语
本程序为天山T12焊台最终版程序,程序中不再新增任何功能,不再修复任何不影响使用的BUG。软硬件均已经开源,希望各位朋友在研究、使用的同时切实遵守开源协议,尊重各版本作者劳动成果,共同营造一个自由、平等、排除商业模式干扰的交流平台。再次感谢开发本焊台过程中向我提供过帮助的所有人,衷心感谢!

  {+ s/ s# q1 R- ?+ }8 X/ W9 y0 |" s* w单片机源程序如下:
% Q0 l$ ^# j' ]
  • /*********************************************************************************
  • * COPYRIGHT NOTICE
  • * Copyright (c) 2017, XinJiang University
  • * All rights reserved.
  • *
  • * 文件名                :        Sys_Control.c
  • * 描述                 :        温度控制
  • *
  • * 版本                        :        V3.0.2
  • * 作者                        :        王志浩
  • * 日期                        :        2017-10-19
  • *
  • * 以下全部程序之著作权归属新疆大学所有,受《中华人民共和国著作权法》保护!
  • * 未经第一著作权所有人书面授权,任何单位和个人不得将以下程序用于商业用途!
  • * 修改此程序请保留上述版权声明,引用程序请注明出处!
  • **********************************************************************************/
  • #include "config.h"
  • PID_s                IronPID = {12.0f,0.4f,0.3f,0.0f,{0.0f,0.0f},0.0f,0.0f,0.0f};
  • /************************************************************
  • * 函数名                :        IronTempControl
  • * 功能说明        :        PID控制烙铁温度,P分段,I分离、抗饱和
  • *
  • * 输入参数        :        temp目标温度
  • * 输出参数        :        无
  • *
  • * 修改记录        :        新增函数,第一次编辑
  • * 历次作者        :        王志浩
  • * 日期                        :        2017-10-22
  • *************************************************************/
  • void IronTempControl(unsigned int temp)
  • {
  •         //设定温度
  •         IronPID.Set = temp;
  •         EA=0;//stop other interrupt
  •         //反馈温度
  •         if(FtyModeFlag)//如果是在工厂模式,则按照校准的烙铁头编号查表
  •         {
  •                 IronTemp.Feedback = GetIronTemp(FAC_DATA_Table.Adjust_s.Iron);
  •         }
  •         else//如果是在普通模式,则按照选定的烙铁头编号查表
  •         {
  •                 IronTemp.Feedback = GetIronTemp(MENU_DATA_Table.Other_s.Heater_Tip);
  •         }
  •         EA=1;
  •         IronPID.Feedback = IronTemp.Feedback;
  •   //误差计算
  •   IronPID.Delta[0] = IronPID.Set - IronPID.Feedback + STEADY_ERR;
  •         //积分分离
  •         if(IronPID.Delta[0] > 20.0f)
  •         {
  •                 IronPID.kP = 13.0f;
  •                 IronPID.kI = 0.4f;
  •         }
  •         else if(IronPID.Delta[0]<-10.0f)
  •         {
  •                 IronPID.kP = 12.0f;
  •                 IronPID.kI = 0.4f;
  •         }
  •         else
  •         {
  •                 IronPID.kP = 7.0f;
  •                 IronPID.kI = 0.5f;
  •         }
  •   //PID计算
  •         if(IronPID.Integration > 100)//积分超过上限时,只累计负的积分量
  •         {
  •                 if(IronPID.Delta[0] < 0)
  •                 {
  •                         IronPID.Integration += IronPID.kI * IronPID.Delta[0];
  •                 }
  •         }
  •         else if(IronPID.Integration < -100)//积分超过下限时,只累计正的积分量
  •         {
  •                 if(IronPID.Delta[0] > 0)
  •                 {
  •                         IronPID.Integration += IronPID.kI * IronPID.Delta[0];
  •                 }
  •         }
  •         else
  •         {
  •                 IronPID.Integration += IronPID.kI * IronPID.Delta[0];
  •         }
  •         IronPID.Out = IronPID.kP * IronPID.Delta[0] + IronPID.kD * (IronPID.Delta[0] - IronPID.Delta[1]) + IronPID.Integration;
  •         //设定温度大于50且小于最高温度才开烙铁
  •         if(IronPID.Set > 50 && IronPID.Set <= MENU_DATA_Table.Temp_s.Max_Temp && ((unsigned char)GetVoltage()>=FAC_DATA_Table.Other_s.Lim_Voltage))
  •         {
  •                 //大于255,直接等于255
  •                 if(IronPID.Out > 255.0f)
  •                 {
  •                         PWM.Run = Enable;
  •                         PWM.Duty = 255u;
  •                 }
  •                 //大于0
  •                 else if(IronPID.Out > 0.001f)
  •                 {
  •                         PWM.Run = Enable;
  •                         PWM.Duty = (unsigned char)IronPID.Out;
  •                 }
  •                 //负数
  •                 else
  •                 {
  •                         PWM.Duty = 0;
  •                         IronPID.Out = 0;
  •                         PWM.Run = Disable;
  •                         IRON = 0;
  •                 }
  •         }
  •         //设定温度小于50或大于最高温度,则关烙铁
  •         else
  •         {
  •                 PWM.Duty = 0;
  •                 IronPID.Out = 0;
  •                 PWM.Run = Disable;
  •                 IRON = 0;
  •         }
  •         //传递
  •   IronPID.Delta[1] = IronPID.Delta[0];
  • }8 p* d) C  K+ o* Q/ Z8 h8 P  K' O

5 q& Q  c) L0 i8 E; i: F6 }4 U! Y/ g5 c5 j. g+ T
7 x; K) [7 t% r+ [. ^

该用户从未签到

2#
发表于 2022-6-28 10:26 | 只看该作者
详细啊,Thanks♪(・ω・)ノ楼主。

该用户从未签到

3#
发表于 2022-6-28 11:28 | 只看该作者
Thanks♪(・ω・)ノ楼主

该用户从未签到

4#
发表于 2022-6-28 14:28 | 只看该作者
Thanks♪(・ω・)ノ楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-29 08:21 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表