亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 636|回復: 8
收起左側

T12白光烙鐵固件源碼(天山V1.2 51問題,缺文件嗎

[復制鏈接]
ID:60178 發表于 2026-4-11 13:23 | 顯示全部樓層 |閱讀模式
T12白光烙鐵固件源碼(天山V1.2 51單片機問題
主函數如下
#include "config.h"

void main(void)
{
        
        //系統初始化
        Sys_Init();
        while(1)
        {
                //顯示主界面
                Sys_Monitor();這叫:
空閑休眠(IDLE 模式)
它只休眠:
  • CPU 內核休息

但這些全部正常工作:
  • 定時器中斷
  • PWM 加熱
  • ADC 采集
  • IIC 通信
  • 外部中斷
  • 編碼器掃描

一句話:
CPU 睡了,但是所有外設都在跑!


休眠后怎么喚醒?
中斷一來,自動喚醒!
你的程序里:

  • 定時器 1ms 中斷 → 喚醒
  • 編碼器中斷 → 喚醒
  • 按鍵中斷 → 喚醒

喚醒后繼續執行:

plaintext









Sys_Monitor();   // 顯示ParaSet();       // 按鍵





所以你看到的現象是:
明明休眠了,屏幕還在刷新,加熱還在控制,溫度還在跑!


終極總結(你一定要記住)
  • IRON = 加熱 IO,在 config.h 里
  • PID = IronTempControl()
  • main 只管顯示 + 按鍵
  • 真正加熱、溫控、計時 = 定時器中斷后臺跑
  • 休眠 = CPU 休息,外設繼續跑,所以程序不會停



你現在想讓我繼續做什么?
  • 幫你找 IRON 引腳
  • 幫你看 PID 代碼
  • 幫你畫 流程圖
  • 幫你移植到 STM32
                //編碼器設定參數,
                ParaSet();
        }
}************************************************************
  65           * 函數名               :       timer1_int
  66           * 功能說明     :       定時器1中斷,主要控制
  67           *
  68           * 輸入參數     :       無      
  69           * 輸出參數     :       無
  70           *
  71           * 修改記錄     :       新增函數,第一次編輯
  72           * 歷次作者     :       王志浩
  73           * 日期                 :       2017-10-18
  74          *************************************************************/  
  75          void timer1_int (void) interrupt TIMER1_VECTOR
  76          {
  77   1              static unsigned int             IronUseCounter[2]={0,0};
  78   1              static  unsigned int    ShutDownCounter = 0;
  79   1              static unsigned char    Sleep_Old = 0;
  80   1              static unsigned char    PWM_counter     =       0;
  81   1              static unsigned char SetTempCounter = 0;
  82   1      
  83   1              
  84   1              //烙鐵PWM生成
  85   1              PWM_counter=Timer.mSec%100;
  86   1              if((PWM_counter<PWM.Duty) && PWM.Run)
  87   1                      IRON = 1;
  88   1              else
  89   1                      IRON = 0;
  90   1              
  91   1              //1ms處理部分
  92   1              Timer.mSec++;                   //定時器0分段計數器自加
  93   1              EC11_Capture();         //捕捉EC11信息  
  94   1      
  95   1              //10ms處理部分
  96   1              if(Timer.mSec%10 == 0)
  97   1              {
  98   2                      if(IronUse_Status.Handle || IronUse_Status.Coder)//烙鐵或編碼器用了,那要看看現在是不是休眠什么的狀態了


主函數只有這幾個,沒有看出來怎么加熱,能解釋下嗎,下面的文件多不用,怎么工作的,誰來整理解釋下,經過學習,


回復

使用道具 舉報

ID:857072 發表于 2026-4-11 17:58 來自觸屏版 | 顯示全部樓層
#include "config.h"這么大一個,順著進去找啊
回復

使用道具 舉報

ID:60178 發表于 2026-4-11 18:57 | 顯示全部樓層
主函數中沒有,好向在中斷中加熱
************************************************************
  65           * 函數名               :       timer1_int
  66           * 功能說明     :       定時器1中斷,主要控制
  67           *
  68           * 輸入參數     :       無      
  69           * 輸出參數     :       無
  70           *
  71           * 修改記錄     :       新增函數,第一次編輯
  72           * 歷次作者     :       王志浩
  73           * 日期                 :       2017-10-18
  74          *************************************************************/  
  75          void timer1_int (void) interrupt TIMER1_VECTOR
  76          {
  77   1              static unsigned int             IronUseCounter[2]={0,0};
  78   1              static  unsigned int    ShutDownCounter = 0;
  79   1              static unsigned char    Sleep_Old = 0;
  80   1              static unsigned char    PWM_counter     =       0;
  81   1              static unsigned char SetTempCounter = 0;
  82   1      
  83   1              
  84   1              //烙鐵PWM生成
  85   1              PWM_counter=Timer.mSec%100;
  86   1              if((PWM_counter<PWM.Duty) && PWM.Run)
  87   1                      IRON = 1;
  88   1              else
  89   1                      IRON = 0;
  90   1              
  91   1              //1ms處理部分
  92   1              Timer.mSec++;                   //定時器0分段計數器自加
  93   1              EC11_Capture();         //捕捉EC11信息  
  94   1      
  95   1              //10ms處理部分
  96   1              if(Timer.mSec%10 == 0)
  97   1              {
  98   2                      if(IronUse_Status.Handle || IronUse_Status.Coder)//烙鐵或編碼器用了,那要看看現在是不是休眠什么的狀態了
回復

使用道具 舉報

ID:469589 發表于 2026-4-11 21:07 | 顯示全部樓層
不管怎么說,T12的PID程序編的非常簡練、科學、實用!
回復

使用道具 舉報

ID:84476 發表于 2026-4-13 13:11 | 顯示全部樓層
我們有時候寫的程序,主函數里幾乎是空的。哈哈
回復

使用道具 舉報

ID:60178 發表于 2026-4-16 09:56 | 顯示全部樓層
新手抱著試試看,閱讀了王志浩板本的T12烙鐵程序,去看了MAIN函數,發現只有開關機和主界面程序,按鍵程序調用,沒有PWM加熱,ADC,顯示,PID等程序,百思不得其解,后來發現中斷好像有,問了豆包,牽出來關于程序結構問題,原來單片機是主程序和中斷程序分2路同時運行的,其它程序在中斷程序里執行的,以定時中斷時間1MS為基準,再用變量計數10MS、20MS,50MS等分別判斷執法其它程序,是可以沒有MAIN,或不在MAIN也能單獨運行,又了解了程序結構的時間片輪詢,狀態機結構等。比方每隔20MS重復一次,結構為定時器每中斷1MS,變量++,間隔變量=當前變量一一前次變量。IF間隔時間如果=10MS,就執行,ADC,然后把前次變量=當前變量,然后其它按此方法,間隔20MS,50MS時間間隔分別執行PWM加熱開關,PID算法,濾波等程序。后來發現疑問這個變量沒有清零,是不是有問題呢,又問豆包,它說溢出后計數為5,5-65535=11,不改間隔時間
回復

使用道具 舉報

ID:230500 發表于 2026-4-20 11:08 | 顯示全部樓層
想當年 我們玩這個的時候,群里也是熱熱鬧鬧的。當年這個程序主編是王志浩,一名  大學的學生。我做了幾臺 至今還在使用。后來又改了幾個鋰電池版本的。
我這個帖子里有程序和PCB的源文件,都是驗證可以用的。
http://www.denmoz.com/bbs/dpj-216508-1.html
回復

使用道具 舉報

ID:60178 發表于 2026-4-21 02:54 | 顯示全部樓層
a399288395 發表于 2026-4-20 11:08
想當年 我們玩這個的時候,群里也是熱熱鬧鬧的。當年這個程序主編是王志浩,一名  大學的學生。我做了幾臺  ...

去學習下
回復

使用道具 舉報

ID:60178 發表于 2026-4-21 03:03 | 顯示全部樓層
T12 焊臺 K 型熱電偶 代碼逐行精講
我把公式原理 + 代碼逐行解釋完全對應起來,用最通俗的話講透,新手也能徹底看懂。
先記住核心物理原理:T12 內部是 K 型熱電偶,溫度越高,輸出的毫伏電壓越大,我們用數學公式把電壓 ↔ 溫度互轉。

一、先把公式講明白(代碼的數學基礎)
1. 物理公式(冷端 0℃)
正向(溫度算電壓):E=0.04107×t−0.055反向(電壓算溫度,焊臺真正用):t=0.04107E+0.055​
符號含義:

t:烙鐵頭溫度(℃)
E:熱電偶輸出電壓(mV 毫伏)
0.04107:K 型熱電偶在 T12 溫區的平均靈敏度(每℃ 約 0.041mV)
-0.055:擬合修正值,讓計算更準

2. 冷端補償原理(必須懂!)
熱電偶只有冷端 = 0℃時公式才直接成立。但焊臺冷端是室溫,所以必須:總電壓 = 實測電壓 + 室溫對應的電壓總測室溫
室溫電壓簡化公式:室溫室溫

二、完整代碼 + 逐行超詳細解釋c運行// 1. 功能:將熱電偶電壓(mV) 轉換成 溫度(℃),不帶冷端補償(理論值)
float mv_to_temp(float mv)
{
    // 公式:溫度 = (電壓 + 0.055) / 0.04107
    return (mv + 0.055f) / 0.04107f;
}

// 2. 功能:帶冷端補償的電壓轉溫度(焊臺實際使用的核心函數)
float mv_to_temp_comp(float mv_meas, float t_room)
{
    // 第一步:計算 室溫 產生的熱電偶電壓
    float mv_room = 0.0407f * t_room;

    // 第二步:總電壓 = 實測電壓 + 室溫補償電壓
    float mv_total = mv_meas + mv_room;

    // 第三步:用總電壓計算真實溫度
    return (mv_total + 0.055f) / 0.04107f;
}


三、逐行拆解(每行都講透)
① 函數 1:mv_to_temp(無補償,基礎版)
float mv_to_temp(float mv)

float:返回值是溫度(小數)
mv_to_temp:函數名,意思是 mV 轉 溫度
float mv:傳入參數 = 熱電偶電壓(毫伏)

return (mv + 0.055f) / 0.04107f;

對應公式:t=0.04107E+0.055​
mv + 0.055f:修正電壓偏移
/ 0.04107f:除以靈敏度,把毫伏 → 攝氏度
f:告訴編譯器這是小數(浮點數),避免計算錯誤

② 函數 2:mv_to_temp_comp(帶補償,真實可用)
float mv_to_temp_comp(float mv_meas, float t_room)

mv_meas:ADC 實測到的電壓(來自烙鐵頭熱電偶)
t_room:冷端室溫(由單片機內部溫度傳感器測得)

float mv_room = 0.0407f * t_room;

公式:室溫室溫
作用:算出室溫本身產生的毫伏電壓
因為熱電偶冷端不是 0℃,必須補上這部分電壓
float mv_total = mv_meas + mv_room;
公式:總測室溫
作用:把室溫電壓補償回去,等效冷端 = 0℃的總電壓

return (mv_total + 0.055f) / 0.04107f;

用補償后的總電壓算溫度
結果 = 烙鐵頭真實溫度

四、用一個例子帶你跑一遍(徹底懂)
假設:
室溫 = 25℃
實測電壓 = 16.2 mV

計算過程:

室溫電壓 = 0.0407 × 25 = 1.0175 mV
總電壓 = 16.2 + 1.0175 = 17.2175 mV
溫度 = (17.2175 + 0.055) / 0.04107= 17.2725 / 0.04107= ≈ 420.6℃

代碼就是自動完成這三步計算。

五、最核心的 3 句話總結

熱電偶 = 溫度 → 小電壓信號
公式 = 把小電壓翻譯成溫度
冷端補償 = 把室溫的影響減掉,得到真實溫度


如果你需要,我可以繼續給你講:

ADC 原始值 → mV 的公式與代碼
整數運算優化版(適合 51 單片機 / STM8 低速芯片)
T12 控溫的完整溫度計算邏輯
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表