搜索
bottom↓
回复: 10

T12焊台的制作(ESP32+2.4吋TFT+CS1237)

[复制链接]

出0入26汤圆

发表于 2023-2-10 16:17:16 | 显示全部楼层 |阅读模式
本帖最后由 lizengmao 于 2023-2-10 16:16 编辑


构思
当前公司的936难用的一逼,:拆个编码器都费力.拆开看里面的火牛缩水,漏磁大,放颗螺丝在底部都可以被火牛吸起来.
后来买了一个T12烙铁.是半桶水设计的,用起来一言难尽.
编码器引脚没有对地电容,导致设置的温度经常被自动更改.
OLED仅有1.3,对于我这种老年人不友好.
加热控制部分回温太慢,936好但是并未达到我想象中的好.
因此有自行设计T12烙铁的想法.电源不再使用火牛,改为使用外置的24V,3A的开关电源.以便可以利用笔记本电脑的电源供电.
由于本人是硬件不是软件,因此预计从Arduino入手.手头有2.4TFT,ESP32-WROOM-32U,ISL1208,DIO54335这些适用的零件,因此将用这些零件构建.

零件选择
  零件
  
  型号
  
  备注
  
  成本(粗估价格,不准确)
  
  主控
  
  ESP32-WROOM-32U模组,4MB Flash
  
  32U板载IPEX天线接口,32D板载PCB天线
  
  15
  
  编码器
  
  EC11
  
  输出脉冲数:15~24/360°,柄长15mm,半月柄或滚花柄均可
  
  2.5
  
  RTC
  
  ISL1208
  
  
  
  2.5
  
  ADC
  
  CS1237
  
  
  
  2.5
  
  OP Amplifier
  
  GS8552
  
  需低失调电压的OPA,建议选仪表放大OP
  
  2
  
  T12手柄
  
  
  
  航空头/+手柄+支架+T12发热芯+1米硅胶5芯线+震动开关
  
  35
  
  TFT
  
  2.4,驱动IC:ST7789V,240x320  Pixels,装配方式:焊接.不带触摸
  
  视角当前为12 Clock,由于是横放,建议选93 Clock
  
  15
  
  32.768kHz晶振
  
  CM200S,CITIZEN,12.5pF
  
  RTX,可使用其它型号代替
  
  2.5
  
  DC-DC Step Down
  
  DIO54335,DIOO
  
  可用其他输入电压>30VDC-DC代替
  
  2.5
  

软件编译环境
Arduino 1.8.16
ESP32 Package 1.0.6

ESP32GPIO定义

  外设
  
  需要引脚数
  
  GPIO需求
  
  备注
  
  编码器
  
  3
  A,B相及按键
  
  ,GPIO即可
  
  
  
  TFT
  
  6
  SPI:CS,SCK,DATA
  RS(命令/数据选择)
  Reset(复位)
  Backlight(背光)
  
  SPI使用ESP32VSPI界面
  CS:   GPIO5
  SCK:  GPIO18
  MOSI: GPIO23
  Backlight: PWM输出
  
  通过SPI界面驱动TFT
  使用不同DutyPWMV-I转换电路后,驱动TFT的背光.以便用户更改背光亮度.
  
  RTC(ISL1208)
  
  2
  2-Wire(I2C)界面
  
  I2C使用ESP32Wire界面
  SCL:  GPIO22
  SDA:  GPIO21
  
  
  
  NTC
  
  1
  
  ADC,
  
  获取环境温度,以便得到正确的T12温度
  
  T12控制
  
  1
  
  PWM
  
  使用不同DutyPWM驱动MOSFET,控制T12的温度
  
  T12 位置传感器
  
  1
  
  GPIO
  
  获取T12手柄内水银开关的状态,识别使用是否在使用T12手柄
  
  DC Detect
  
  1
  
  ADC
  
  获取DC输入的电压值
  
  T12温度读取
  
  2
  
  GPIO
  
  T12的温度经OP放大后送入CS1237,ESP32读取CS1237 ADC.
  

FW使用的Library:
  Library
  
  功能
  
  备注
  
  TFT_Espi
  
  TFT驱动,绘制点/线/字符等等
  
  
  
  LCDMenuLib2
  
  TFT菜单
  
  
  
  NTC_Thermistor
  
  NTC中获取温度
  
  
  
  KickSort
  
  使用快速排序对读取的T12 ADC值进行排序
  
  将丢弃最高最低的ADC(约为采样数的1/4)再进行平均
  
  ISL1208-RTC-Library
  
  ISL1208进行读写
  
  
  
  Arduino-PID-Library
  
  使用PID控制T12的温度
  
  
  

FW思路:
控制T12发热:ESP32通过PWM控制T12发热,并定期关闭PWM,然后通过CS1237获取T12的温度.T12实际温度与设定温度决定PWMDuty.
检测T12是否在使用:检测手柄内部的震动开关High/Low.如果长期没有变化视为没有操作T12,将自动休眠/关机.
读取RTC:通过2-Wire(I2CBus)读写ISL1208.
用户界面: 编码器旋转为上//减小/加大;编码器短按为确定,长按为退出.

其他:
输入电压可达到24V,因此使用DC-DC转换为3.3VESP32使用.
TFT背光的驱动,使用PWM输出经RC低通滤波后,DIO3581构成的V-I转换电路驱动TFT背光.优点是PWMDuty与背光电流成比例.
RTC使用ISL1208.当读到RTCF=1,视为ISL1208没有正常工作,将用预设的时间设定ISL1208.
懒得找如何设定ESP32的定时器以便每隔5ms扫一次编码器,直接使用ESP32的另一个核专门用于扫编码器.
LCDMenuLib2最好用Excel设定好脚本方便建立菜单.
按键长短按处理是自己写.应该有现成的库,懒得找了.
CS1237的驱动是在AMOBBS招的.拿来测试了一下,改了一些地方.CS123724bit,对于当前的应用,16-bit已经绰绰有余.因此把ADC结果右移8,仅使用16-bit.每次开机把CS1237设定为内部短路,记录此时的ADC.后续读取的T12温度的ADC值要减去这个内短的ADC.
有一些设定需要存起来,例如设定的温度,休眠时间等等.ESP32内部的FLASH模拟.需要包含”EEPROM.h”这个文件.
编码器的扫描应该有现成的库,懒得找,自己写.
汉字的显示是网上找的.但是TFT_eSPI应该可以添加自己的汉字字库,然后TFT_eSPI的方法直接绘制汉字到TFT.
LCDMenuLib2自己在TFT右边加入了滚动条,以指示菜单是否已经到底.
加入了自己画的Logo图片,开机时显示2.及显示版本号2.
RTC的显示,在关机时使用FONT7数码管字体,正常/待机页面使用FONT4字体.这样关机时可以更加清楚的看时间.
NTC的摄氏度保留到小数点后1.
输入DC 电压保留到小数点后1.需要校准后才能比较准确.当前是在9V,24各校正一次.在菜单内分别输入对应的电压和ADC值即可.然并卵,ESP32ADC仍然不能得到满意的结果.将就用吧.
mFunc_DispHeader()用于在菜单的上方显示当前菜单的父阶名称.
T12的温度需要校准.方法如下:
进入校正T12温度的菜单
1.设定NTC的温度为当前TFT显示的环境温度.

2.退出菜单,调整设定温度为250℃左右,用KAKKO191量T12实际温度.

3.进入菜单,在’校正点1温度”按下编码器,并设为T12实际的温度.”校正点1ADC”的值将在按下编码器的时候自动更新.

4.设定T12温度为350度左右, KAKKO 191T12实际温度.

5.进入菜单,在’校正点2温度”按下编码器,并设为T12实际的温度.”校正点2ADC”的值将在按下编码器的时候自动更新.

2~5步反复2次即可得到满意的温度校准结果.
菜单中可以自定义文本颜色和背景色,并被保存.
所有自定义的参数,将在退出菜单1分钟后保存.如果退出菜单后1分钟内断电,将不会保存到FLASH.
使用两个PWM通道用于驱动TFT背光和T12.PWM解析度设定为10 bit.PWM频率设定为350Hz.
T12温度闭环控制,设为两个阶段.T12温度与设置温度差异超过20,使用激进的PID,反之使用保守的PID.
T12温度检测时间:激进:1秒检测一次;保守:200ms检测一次.
T12温度读取时,先停止T12加热(PWM设为0),延迟25ms后连续读取64.并丢弃1/8最大的ADC值和1/8最小的ADC,剩下的ADC值做平均.
T12温度的计算是把T12温度与ADC值视为线性关系.用校准温度和ADC值进行计算得到.
mFunc_SwitchPage()用于切换菜单页面,正常加热页面,休眠页面,关机页面.MenuPageIndex跳转.
mFunc_SysTimer()用于检测1/1分钟的时间.用于自动退出菜单/自动休眠/自动关机/自动存用户参数等.
开机后显示Logo,FW版本后直接进入关机状态.原因是老是有人用我的T12不断电.每次上班一通电就自动加热.索性改为开机后直接进入关机状态.晃动手柄或者旋转编码器或者按下编码器均可退出关机并进入正常加热状态.
目测在24V供电时,T12温升速度约25/.因此,升温到350度约需15.
蜂鸣器有留位置但是FW没有写入,.
ESP32的烧录:
使用USBUART板接入PCBA上预留的Uart排针,PCBA通电后,按住Boot0按键,再按下Reset按键,释放Reset按键,释放Boot0按键,即使得ESP32进入烧录状态.
烧录软件:flash_download_tool_3.9.3_0
烧录bin的地址如下:
0x1000       bootloader.bin
0xe000       boot_app0.bin
0x8000       partitions.bin
0x10000      T12_ESP32_PID_CS1237.ino.bin
烧录的选项如下:
ChipType:ESP32

SPIMode:DIO

SPISpeed:80MHz/40MHz

Uart的波特率可选961200以便获得最快的烧录速度.

遇到的一些坑:
ESP32 GPIO有一些脚不能接太大的电容及用太小的Pull-Up电阻.将导致无法烧录ESP32!!!浪费我1天时间查无法烧录ESP32的原因.
最好写一段GPIO测试函数,以确认ESP32模组用到的GPIO都可正确的输出High/Low,验证模组的焊接是否有问题.由于模组虚焊我浪费了半天时间查驱动是否有问题.
T12加热控制的当前使用PWM频率=350Hz.注意低于20kHzPWM频率有可能导致MLCC/LED震动导致有可听到的噪音.
如果PWM使用使用更高的频率,注意硬件一定要改为三极管推挽驱动,避免烧功率MOSFET.
如果使用更改的频率驱动T12的输出,Pin输出的电阻应该要改为电容,以避免ESP32出现异常导致GPIO一直输出High,导致T12无法关闭,烙铁有烧红甚至发生火灾的危险!!!
T12内部热电偶输出电压很低,需要OPA进行放大.建议选择低失调电压,低温漂的OPA.试过DIO2032,LM358,NJM4558均不可靠.当前选择GS8552 (30uV失调电压).
ESP32自带的ADC性能不佳.当前用在读取NTC,DC电压上.ADC 输入范围150mV~2.5V.且线性度极差,用于ADC按键使没有问题,用于传感器就呵呵.
试过ESP32自带的ADC读取T12温度,需在OPA输入增加10mV左右的直流,以便避开ESP32150mVADC死区.但不同的ESP32模组,ADC读取的值相差很大.ESP32 ADC的批次性不佳.改为使用CS1237读取T12的温度.
由于NTCDC输入电压仍用ESP32自带的ADC监测,因此,将有较大的误差.NTC误差约2,DC输入电压误差约0.2V.
NTC_Thermistor库的adcResolution要改为4096以便与ESP32ADC对应.
LCDMenuLib2的控制方式自己添加了一种自定义的编码器输入.因为自带的编码器输入方式不好用.需要注意的是LCDMenuLib2自带的编码器输入的左转是往下,自定义的改为了左转对应往上.
LCDMenuLib2在调整菜单时默认会刷新整个屏幕.改为了只有跨页面或转至新一阶菜单时才会刷新整个屏幕.
TFT_eSPI我设定SPI频率=80MHz,使用FillSceen(TFT_BLACK)擦除整个屏幕用时约16ms.
有尝试改为STM32G070试图省去外部的ADC,SPI频率只有32MHz,TFT_eSPI库未对STM32G070优化.实测FillSceen(TFT_BLACK)擦除整个屏幕用时约180ms.刷新率太低.尝试改为160*800.96TFT,实测FillSceen(TFT_BLACK)擦除整个屏幕用时约55ms.但是TFT尺寸太小,放弃.
CS1237理论上要用差分模式,但是似乎PGA=1的时候,单端输入用起来也可以.
由于外置的开关电源内部Y电容的存在,将会导致PCBA,烙铁头有几十V的感应交流电压,因此需要把PCBA,烙铁头接地!!!使用质量好的大牌厂商的笔记本电源将会大大降低Y电容的漏电.

后记:
本人并非职业选手,一边做一遍学,可能会有有很多错误.
只是做来自己用.没有成品.

参考照片:
























本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入90汤圆

发表于 2023-2-10 16:39:13 | 显示全部楼层
不错不错,支持开源

出100入312汤圆

发表于 2023-2-10 16:45:58 来自手机 | 显示全部楼层
串口屏么,esp应该不能驱动其他接口的屏

出20入186汤圆

发表于 2023-2-10 16:48:24 | 显示全部楼层
弱弱的问一下,像CS1237这种电子称芯片,输入电压如果在AIN-N附近会有问题么?不用偏置到VCC/2附近么?如果不用运放可以么?CS1237不是最高可以到128倍么?

出20入186汤圆

发表于 2023-2-10 16:52:22 | 显示全部楼层
akey3000 发表于 2023-2-10 16:45
串口屏么,esp应该不能驱动其他接口的屏
(引用自3楼)

这个是SPI屏,ESP32是有专用的接口驱动屏的,不过IO太少,一般人不用并口驱动。

出0入4汤圆

发表于 2023-2-10 16:59:04 来自手机 | 显示全部楼层
支持一下,?

出0入26汤圆

 楼主| 发表于 2023-2-10 20:42:34 | 显示全部楼层
yuyu87 发表于 2023-2-10 16:48
弱弱的问一下,像CS1237这种电子称芯片,输入电压如果在AIN-N附近会有问题么?不用偏置到VCC/2附近么?如果 ...
(引用自4楼)

按CS1237规格书,共模电压与PGA有关。前两个PGA可以到GND-0.1V~VREF +0.1V。不过据坛友说如果当作单端输入时线性度会较差。由于我只是用到16-bit,因此将就用就算了。

出20入186汤圆

发表于 2023-2-11 08:49:55 | 显示全部楼层
lizengmao 发表于 2023-2-10 20:42
按CS1237规格书,共模电压与PGA有关。前两个PGA可以到GND-0.1V~VREF +0.1V。不过据坛友说如果当作单端输 ...
(引用自7楼)

谢谢,刚看了手册,确实是这样,PGA在1和2倍时,可以低于GND,当在8,64,128时,就需要GND+0.75以上了。
学习了。

出215入118汤圆

发表于 2023-2-11 08:54:39 来自手机 | 显示全部楼层
Esp32-s3 可以用8bit并口。

出0入0汤圆

发表于 2023-2-28 08:22:18 | 显示全部楼层
yuyu87 发表于 2023-2-11 08:49
谢谢,刚看了手册,确实是这样,PGA在1和2倍时,可以低于GND,当在8,64,128时,就需要GND+0.75以上了。 ...
(引用自8楼)

可以参考AD7705的做法,把热电偶负极接参考电压

出0入59汤圆

发表于 2023-2-28 12:08:38 | 显示全部楼层
这类作品一般是画画绿绿的界面、曲线、换皮、还有 WIFI  APP 占了 99% 的代码, 然后温控哪里估计就 if   else   10行内解决战斗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-15 20:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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