|
|
本帖最后由 慕名而来 于 2026-5-6 11:49 编辑
用了四十多年20w内热电烙铁,去年秋天终于入手了这个亚克力手柄的白光电烙铁,用了几次感觉真的挺好用,拿起来很快可以干活,撂下就待机、待机久了还会休眠,用好久也不烧烙铁头,体验感觉真的不错。转眼之间白光烙铁用了快半年了,最近焊板子用的多了发现一个小毛病,就是拿着干活时活动幅度小的时候它会偷停、经常掉温度,连续焊东西多的时候要时常的摇晃一下才好,我第一次用这东西也不知道别人是否有遇到这个问题。
我对白光烙铁的工作原理一窍不通,经过检查发现是一个滚珠开关的问题,烙铁想要保证持续的工作状态就要求这个开关中的滚珠实时的移动,也就是手拿着烙铁不能静止太长时间。既然这个电烙铁需要感知拿去和放下的状态,那么电容感应触摸开关做传感器就是最佳选择了,而最近我恰好就在玩STC单片机的触摸功能,说做就做,弄模块、编程序一顿操作猛如虎,简简单单的就实现了白光电烙铁手柄姿态的手感控制。
原理很简单,当单片机确认了烙铁被触摸(拿起)后就通过一个引脚不断输出上跳脉冲去触发电烙铁的主控使其控制加热,需要说明的是经过实测我的电烙铁是需要上跳脉冲触发的,其他烙铁我没接触过需要实测确定,触摸感应头我用的是铜箔胶带、也可以用两面胶粘贴薄的金属片来实现,最后的关键点是测量触摸数据时需要把整机粗略的装配拢成一体,否则如果单独调试好了的小板子总装后或许因单片机附件环境电容的变化引起数据漂移、失控。
以下是STC8H1K08T单片机的执行程序:
声明!共享程序仅供坛友交流、参考,每次使用需要在实际系统中调试、适配,不能作为固件使用,如有疑问请跟帖讨论、我当知无不言言无不尽,如有疏漏也请告知避免误导他人。
主程序:
串口.c程序:
- #include "STC8_uart.h"
- #define MAIN_Fosc 22118400L //定义主时钟(烧录程序时设定)
- #define Baudrate 115200L
- #define TM (65536 -(MAIN_Fosc/Baudrate/4))
- #define Timer0_Reload (65536UL -(MAIN_Fosc / 1000))//Timer 0中断频率,1000次/秒
- //-----------------------------
- void UartInit()
- {
- SCON = (SCON & 0x3f) | 0x40;
- AUXR |= 0x40; //定时器时钟1T模式
- AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
- TL1 = TM;
- TH1 = TM >> 8;
- TR1 = 1; //定时器1开始计时
- }
- //-----------------------------
- //使用函数printf()时必须保留下述两个函数
- void UartPutc(unsigned char dat)
- {
- SBUF = dat;
- while(TI == 0);
- TI = 0;
- }
- //-----------------------------
- char putchar(char c)
- {
- UartPutc(c);
- return c;
- }
- //----发送字符串函数-----------
- void SendString(char *str)
- {
- while (*str) // 遍历字符串直到结束符
- {
- UartPutc(*str++); // 发送当前字符并指向下一个
- }
- }
- //----数字转字符串函数--------
- //16位无符号整数 → 字符串
- void UartNumToString(unsigned int num, char *str)
- {
- char temp[10];
- int i = 0, j = 0;
-
- if(num == 0) // 处理数字0
- {
- str[j++] = '0';
- str[j] = '\0';
- return;
- }
-
- // 逆序取数字
- while(num > 0)
- {
- temp[i++] = num % 10 + '0';
- num = num / 10;
- }
-
- // 反转得到正确顺序
- while(i > 0)
- {
- str[j++] = temp[--i];
- }
- str[j] = '\0'; // 字符串结束符
- }
- //----串口打印16位无符号整数变量-------------
- void SendUInt16(unsigned int dat)
- {
- char buf[10]; // 存储转换后的字符串
- UartNumToString(dat, buf);
- SendString(buf);
- }
复制代码
串口.h程序:
- #ifndef __STC_UART_H
- #define __STC_UART_H
- #include "STC8H.h"
- #include <stdio.h>
- //---------------------------------------------------------------------
- void UartInit();
- void UartPutc(unsigned char dat);
- char putchar(char c);
- void SendString(char *str);
- void UartNumToString(unsigned int num, char *str);
- void SendUInt16(unsigned int dat);
- #endif
复制代码
实物图片:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|