本项目由负熵生之光大佬提供。
OSHWHub:ESP8266 点焊机 3.0
由于大佬提供了 V3.0 和 V2.0 版本,本着追新不追旧的原则,还是研究 V3.0 项目是怎么实现的!
项目预览:
上板与中板通过四根排针相连接,底板就是普通底板,无实际作用。
点焊机原理
点焊机两极点瞬间放点,因接触点的接触电阻比较大,在电流通过的瞬间产生大量的能力而产生热熔接,形成熔核进而达到焊接目的。
本项目是由电容来提供瞬间大电流的。
放电电路
通过控制 MOS 管的通断,来达到瞬间导通、瞬间放电的效果。
放电电容采用外接方式!接在CN1接口。
控制电路
主控周边
电平设置部分就是一堆上拉、下拉电阻。设置端口为上拉/下拉。
2.54排针是和中板(放电板)相连控制的接口。
杂项目
电压采集 30V 是什么意思呢?是电压输入限制在了 30V 。
照明电路是给两电极提供照明的。
电源部分
过流过压保护此VCC由中板提供!这是控制板的电源来源。但是,这个保险选定不行吧!
ME3116是降压稳压器,采用PWM控制模式。
SX1308升压芯片:2V到24V的宽输入电压范围。VIN通过 +5V or BAT 提供电源。
外部接口
板载CH340,不必要吧。还自动下载电路。确实这样方便了。
TP4054 单颗锂电池充电管理芯片。
显示部分
采用的 0.42 OLED 进行显示。
中板控制电路
采用 TC4427 驱动芯片对MOS管进行驱动。
焊件检测问题:如果电容/供电电压达到较高值,那么 VDD 不就相当直接接到高电位了,这样大概不合适吧?
程序
代码比较简单。只几百行。
做了必要的注释!
经过验证,代码可编译!!
#include <Arduino.h>
#include <EEPROM.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
byte k1 = 0 ; // +按键,低调平有效
byte k2 = 2 ; // -按键,低电平有效
byte k3 = 13 ; // 模式按键,低电平有效
byte g1 = 14; // 焊件检测
byte ADC = A0; // 电池电压检测
byte mos = 12; // MOS 控制
float V = 0; // 电池电压v
int hms; // 焊接延时
int yms; // 延时焊接
volatile byte ms = 0; // 模式,这里其实用不到 volatile 吧,总共就0~4
/* 中断程序,执行模式切换 */
ICACHE_RAM_ATTR void zd1()
{
ms++;
}
/* 调参函数,参数,参数上限 */
void key(int &a , int b)
{
if(digitalRead(k1) != digitalRead(k2)) // KEY1&KEY2 不在同一电平状态
{
long int t = millis(); // 记录当前时间
if(digitalRead(k1) == LOW) // KEY1 按下
{
a++; // 参数增加
while(digitalRead(k1) == LOW) // 长按情况
{
if(millis() - t > 1200) // 长按大于 1200ms
{
a = a + 10; // 增加步长为 10
}
if(a > b) // 大于参数上限
a = b ;
delay(10);
oled(a); // 显示参数 a
}
}
else // KEY2 按下
{
a--; // KEY2 按下分析过程同 KEY1 按下
while(digitalRead(k2) == LOW)
{
if(millis() - t > 1200)
{
a = a - 10;
}
if(a < 0){ a = 0 ; }
delay(10);
oled(a);
}
}
sjx(hms, yms); // EEPROM写入数据
}
oled(a);
}
/* 写入Flash数据,焊接延时,延时焊接 */
void sjx(int a, int b){
EEPROM.begin(1024);
EEPROM.put(0, a);
delay(10);
EEPROM.put(4, b);
delay(10);
EEPROM.commit(); //保存更改的数据
}
/* 读取Flash数据,焊接延时,延时焊接 */
void sjd(){
EEPROM.begin(64);
EEPROM.get(0, hms);
delay(10);
EEPROM.get(4, yms);
}
/* 供电电压读取 */
void BAT(){
V = map(analogRead(A0),0,1023,0,1000);
V = V*31.3/1000;
}
/* 0.420 LED 显示 */
void OLED(){
u8g2.clearBuffer(); //清除内存中数据缓冲区
u8g2.setFont(u8g2_font_ncenB12_tr); //设置字体
u8g2.setCursor( 0, 12);
u8g2.print(V);
u8g2.setCursor(48, 12);
u8g2.print("V");
u8g2.setCursor(62, 12);
u8g2.print(ms);
u8g2.setCursor( 0, 26);
u8g2.print(hms);
u8g2.setCursor(48, 26);
u8g2.print("ms");
u8g2.setCursor( 0, 40);
u8g2.print(yms);
u8g2.setCursor(48, 40);
u8g2.print("ms");
u8g2.sendBuffer(); //绘制缓冲区的内容
}
/* 调参界面显示 */
void oled(int a)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.clearBuffer();
u8g2.setCursor(0, 14);
if(ms == 3){ // 焊接等待时间调参
u8g2.print("weld ms"); // 焊接等待时间
}else{ // 等待焊接时间调参
u8g2.print("wait ms"); // 等待焊接时间
}
u8g2.setCursor(0, 40);
u8g2.print(a);
u8g2.sendBuffer();
}
/* 延时函数(ms) */
void sj(int a)
{
long int i = millis();
while((millis() - i) < a)
OLED();
}
/* 自动模式 */
void zdhj()
{
if(digitalRead(g1) == HIGH) // 检测是否有焊件
{
sj(yms); // 延时函数充电(ms)
digitalWrite(mos,HIGH); // 导通MOS放电
sj(hms); // 延时放电时间
digitalWrite(mos,LOW); // 关闭MOS
}
}
/* 手动模式 */
void sddh()
{
if(digitalRead(g1) == HIGH) // 检测是否有焊件
{
if(digitalRead(k1) == LOW || digitalRead(k2) == LOW ) // KEY1/KEY2按下
{
sj(yms); // 延时函数充电(ms)
digitalWrite(mos,HIGH); // 导通MOS放电
sj(hms); // 延时放电时间
digitalWrite(mos,LOW); // 关闭MOS
}
}
}
/* 调节焊接延时时间 */
void hjms()
{
key(hms, 1000);
}
/* 调节延时焊接时间 */
void ysms()
{
key(yms, 3000);
}
void setup()
{
u8g2.begin();
pinMode(k1 ,INPUT_PULLUP);
pinMode(k2 ,INPUT_PULLUP);
pinMode(k3 ,INPUT_PULLUP);
pinMode(g1 ,INPUT);
pinMode(mos ,OUTPUT);
digitalWrite(mos,LOW);
/* 中断函数 */
attachInterrupt(k3, zd1, RISING); // 上升沿触发,按键松开触发
sjd(); // 读取Flash数据
}
void loop()
{
BAT();
switch(ms)
{
case 0 : OLED();
break;
case 1 : zdhj(); // 自动模式
OLED();
break;
case 2 : sddh(); // 手动模式
OLED();
break;
case 3 : hjms(); // 焊接时间调参
break;
case 4 : ysms(); // 延时焊接调参
break;
default: ms = 0; // 超出置0
break;
}
}
参考:
项目资料:
链接:https://pan.baidu.com/s/1cm7Nr6hIkZjasgeOpbPCCQ
提取码:k7d3
总结
给以后做点焊机提供了思路,是一个好项目!值得学习!
感谢开源!