欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: T12白光洛鐵PCB原理圖開源 Arduino源程序 [打印本頁]

作者: qdwyj    時間: 2019-7-28 21:13
標題: T12白光洛鐵PCB原理圖開源 Arduino源程序
給需要的的人,指證,點評。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


Arduino源程序如下:
  1. // SolderingStation v0.6
  2. //
  3. // ATmega168/328-controlled Soldering Station for Hakko T12 Tips.
  4. // This version of the code implements:
  5. // - PID control of the heater
  6. // - Temperature measurement of the tip
  7. // - Temperature control via rotary encoder
  8. // - Boost mode by pressing rotary encoder switch
  9. // - Time driven sleep/power off mode according to handle movement
  10. // - Information display on OLED
  11. //
  12. // Future versions may implement:
  13. // - Measurement of input voltage and vcc
  14. // - Buzzer
  15. // - Setup menu
  16. // - Storing default values into the EEPROM
  17. // - Check if iron is connected
  18. //
  19. //
  20. // Clockspeed 16 MHz external.
  21. //
  22. // 2019 by Stefan Wagner
  23. //
  24. // based on the work of Jurgis Bal?iūnas (http://jurgis.me)



  25. // Libraries
  26. #include <PID_v1.h>
  27. #include <U8glib.h>

  28. // Pins
  29. #define SENSOR_PIN    A0        // temperature sense
  30. #define VIN_PIN       A1        // input voltage sense
  31. #define BUZZER_PIN     5        // buzzer
  32. #define BUTTON_PIN     6        // rotary encoder switch
  33. #define ROTARY_1_PIN   7        // rotary encoder 1
  34. #define ROTARY_2_PIN   8        // rotary encoder 2
  35. #define CONTROL_PIN    9        // heater MOSFET PWM control
  36. #define SWITCH_PIN    10        // handle vibration switch

  37. // Temperature control values
  38. #define TEMP_MIN      150       // min selectable temperature
  39. #define TEMP_MAX      400       // max selectable temperature
  40. #define TEMP_DEFAULT  320       // default start setpoint
  41. #define TEMP_SLEEP    150       // temperature in sleep mode
  42. #define TEMP_BOOST     50       // temperature increase in boost mode
  43. #define TEMP_STEP      10       // rotary encoder temp change steps

  44. // Timer values (0 = disabled)
  45. #define TIME2SLEEP     5        // time to enter sleep mode in minutes
  46. #define TIME2OFF      15        // time to shut off heater in minutes
  47. #define TIMEOFBOOST   30        // time of boost mode in seconds

  48. // Define the aggressive and conservative PID tuning parameters
  49. double aggKp=20, aggKi=0, aggKd=1;
  50. double consKp=20, consKi=1, consKd=1;

  51. // Variables for pin change interrupt
  52. volatile uint8_t a0, b0, c0, d0;
  53. volatile int count = TEMP_DEFAULT;
  54. volatile bool handleMoved;

  55. // Variables for temperature control
  56. double Setpoint = TEMP_DEFAULT;
  57. double Input, Output, CurrentTemp, ShowTemp;

  58. // Other variables
  59. bool inSleepMode = false;
  60. bool inOffMode   = false;
  61. bool inBoostMode = false;
  62. uint32_t sleepmillis;
  63. uint32_t boostmillis;
  64. uint8_t  goneMinutes;
  65. uint8_t  goneSeconds;

  66. // Specify the links and initial PID tuning parameters
  67. PID ctrl(&Input, &Output, &Setpoint, aggKp, aggKi, aggKd, REVERSE);

  68. // Setup u8g object (OLED 128x64, Fast I2C)
  69. U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);



  70. void setup() {
  71.   // set the pin modes
  72.   pinMode(SENSOR_PIN,   INPUT);
  73.   pinMode(CONTROL_PIN,  OUTPUT);
  74.   pinMode(ROTARY_1_PIN, INPUT_PULLUP);
  75.   pinMode(ROTARY_2_PIN, INPUT_PULLUP);
  76.   pinMode(BUTTON_PIN,   INPUT_PULLUP);
  77.   pinMode(SWITCH_PIN,   INPUT_PULLUP);

  78.   // setup pin change interrupt for rotary encoder
  79.   PCMSK0 = bit (PCINT0);                // Configure pin change interrupt on Pin8
  80.   PCICR  = bit (PCIE0);                 // Enable pin change interrupt
  81.   PCIFR  = bit (PCIF0);                 // Clear interrupt flag

  82.   // prepare and start OLED
  83.   if      ( u8g.getMode() == U8G_MODE_R3G3B2 )   u8g.setColorIndex(255);
  84.   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3);
  85.   else if ( u8g.getMode() == U8G_MODE_BW )       u8g.setColorIndex(1);
  86.   else if ( u8g.getMode() == U8G_MODE_HICOLOR )  u8g.setHiColorByRGB(255,255,255);

  87.   // tell the PID to range between 0 and the full window size
  88.   ctrl.SetOutputLimits(0, 255);

  89.   // start PID
  90.   ctrl.SetMode(AUTOMATIC);

  91.   // set initial temperature to default value and clear rotary encoder values
  92.   count = TEMP_DEFAULT;
  93.   a0 = PINB & 1;
  94.   b0 = PIND>>7 & 1;

  95.   // reset sleep timer
  96.   sleepmillis = millis();
  97. }


  98. void loop() {
  99.   BOOSTCheck();       // check and activate/deactivate boost mode
  100.   SLEEPCheck();       // check and activate/deactivate sleep modes
  101.   ADCSample();        // reads temperature and vibration switch of the iron
  102.   PIDUpdate();        // updates the PID and sets the PWM duty cycle for the heater
  103.   OLEDRedraw();       // updates the OLED
  104. }




  105. // check and activate/deactivate boost mode
  106. void BOOSTCheck() {
  107.   // check rotary encoder switch
  108.   uint8_t c = digitalRead(BUTTON_PIN);
  109.   if ( !c && c0 ) {
  110.     inBoostMode = !inBoostMode;
  111.     if (inBoostMode) boostmillis = millis();
  112.     handleMoved = true;
  113.   }
  114.   c0 = c;

  115.   // check timer when in boost mode
  116.   if (inBoostMode) {
  117.     goneSeconds = (millis() - boostmillis) / 1000;
  118.     if (goneSeconds >= TIMEOFBOOST) inBoostMode = false;
  119.   }
  120. }


  121. // check and activate/deactivate sleep modes
  122. void SLEEPCheck() {
  123.   if (handleMoved) {                    // if handle was moved
  124.     handleMoved = false;                // reset handleMoved flag
  125.     inSleepMode = false;                // reset sleep flag
  126.     inOffMode   = false;                // reset off flag
  127.     sleepmillis = millis();             // reset sleep timer
  128.   }

  129.   // check time passed since the handle was moved
  130.   goneMinutes = (millis() - sleepmillis) / 60000;
  131.   if ( (TIME2SLEEP > 0) && (goneMinutes >= TIME2SLEEP) ) inSleepMode = true;
  132.   if ( (TIME2OFF   > 0) && (goneMinutes >= TIME2OFF  ) ) inOffMode   = true;
  133. }


  134. // reads temperature and vibration switch of the iron
  135. void ADCSample() {
  136.   // shut off heater in order to measure temperature and vibration switch
  137.   // this also allows the bootstrap capacitor to recharge
  138.   analogWrite(CONTROL_PIN, 255);
  139.   delayMicroseconds(300);
  140.   
  141.   // read temperature and filter ADC by multisampling
  142.   uint16_t adc = 0;
  143.   for (uint8_t i = 0; i < 32; i++)
  144.     adc += analogRead(SENSOR_PIN);
  145.   adc >>= 5;

  146.   // check handle vibration switch
  147.   uint8_t d = digitalRead(SWITCH_PIN);
  148.   if (d != d0) {
  149.     handleMoved = true;
  150.     d0 = d;
  151.   }
  152.   
  153.   // turn on again heater
  154.   analogWrite(CONTROL_PIN, Output);

  155.   // apply quadratic equation to get temperature
  156.   double temp = -0.0013*adc*adc + 1.696*adc - 59.284;
  157.   
  158.   // additional temperature filtering
  159.   CurrentTemp += (temp-CurrentTemp)*0.05;
  160. }


  161. // updates the PID and sets the PWM duty cycle for the heater
  162. void PIDUpdate() {
  163.   if      (inOffMode)   Setpoint = 0;
  164.   else if (inSleepMode) Setpoint = TEMP_SLEEP;
  165.   else if (inBoostMode) Setpoint = count + TEMP_BOOST;
  166.   else                  Setpoint = count;
  167.   
  168.   Input = CurrentTemp;
  169.   double gap = abs(Setpoint-Input); //distance away from setpoint
  170.   if (gap < 20) ctrl.SetTunings(consKp, consKi, consKd);
  171.   else ctrl.SetTunings(aggKp, aggKi, aggKd);
  172.   ctrl.Compute();
  173.   analogWrite(CONTROL_PIN, Output);
  174. }


  175. // updates the OLED
  176. void OLEDRedraw() {
  177.   u8g.firstPage();
  178.   do {
  179.     // draw setpoint temperature
  180.     u8g.setFont(u8g_font_9x15);
  181.     u8g.setFontPosTop();
  182.     u8g.drawStr( 0, 0,  "SET:");
  183.     u8g.setPrintPos(40,0);
  184.     u8g.print(Setpoint, 0);

  185.     // draw status of heater
  186.     u8g.setPrintPos(82,0);
  187.     if      (inOffMode)    u8g.print("  OFF");
  188.     else if (inSleepMode)  u8g.print("SLEEP");
  189.     else if (inBoostMode)  u8g.print("BOOST");
  190.     else if (Output < 180) u8g.print(" HEAT");
  191.     else                   u8g.print(" HOLD");

  192.     // draw current temperature in big figures
  193.     u8g.setFont(u8g_font_fub42n);
  194.     u8g.setFontPosTop();
  195.     u8g.setPrintPos(15,20);
  196.     u8g.print(CurrentTemp, 0);
  197.   } while(u8g.nextPage());
  198. }


  199. // Pin change interrupt service routine for rotary encoder
  200. ISR (PCINT0_vect) {
  201.   uint8_t a = PINB & 1;
  202.   uint8_t b = PIND>>7 & 1;

  203.   if (a != a0) {              // A changed
  204.     a0 = a;
  205.     if (b != b0) {            // B changed
  206.       b0 = b;
  207.       count = constrain(count + ((a == b) ? TEMP_STEP : -TEMP_STEP), TEMP_MIN, TEMP_MAX);
  208.       handleMoved = true;
  209.     }
  210.   }
  211. }
復制代碼

所有資料51hei提供下載:
T12 文件夾.zip (1.15 MB, 下載次數: 556)



作者: 都市郎    時間: 2019-8-6 20:00
好資料,希望樓主能上傳些成品圖片看看。
作者: midkr    時間: 2019-8-9 18:43
很好,好資料,51黑有你更精彩!!!
作者: midkr    時間: 2019-8-16 18:13
好資料,終于有黑幣可以用了
作者: bluebaby21    時間: 2019-8-17 20:33
  謝謝分享。
作者: 沒有然后    時間: 2019-8-20 09:40
謝謝分享
作者: gameboyjk    時間: 2019-8-22 12:38
謝謝分享
作者: zxy2266    時間: 2019-9-7 18:01
很好,吧你做好的圖片發來欣賞下
作者: antu    時間: 2019-9-15 14:14
謝謝分享,這個真牛逼
作者: xky203    時間: 2019-9-15 18:16
很好,好資料,51黑有你更精彩!!!
作者: 20768797    時間: 2019-9-23 22:03
做的很好,開元很徹底。
作者: ninhaoa    時間: 2019-10-10 10:06
謝謝分享
作者: huanlewuyu    時間: 2019-10-14 15:44
感謝樓主的分享,學習中
作者: 騰飛的龍    時間: 2019-10-16 08:04
感謝分享!贊。
作者: 4920614    時間: 2019-10-31 13:44
感謝分享,非常不錯的資料。
作者: 4920614    時間: 2019-10-31 16:27
不錯 的資料  這個版本 的少見
作者: 20768797    時間: 2019-11-4 16:25
很實用的例子 多謝分享。
作者: whyida    時間: 2019-11-9 09:33
謝謝分享。
作者: zzp1374    時間: 2019-11-12 15:51
感謝分享,抽空試制,如成功也會分享給大家
作者: wangbolczx    時間: 2019-11-30 01:53
感謝分享,非常不錯的資料

作者: q131300    時間: 2019-12-1 00:16
摩拜大神,根本看不懂[em19
作者: 完完全全    時間: 2019-12-4 15:35
肯定有些伸手黨傻眼了
作者: oliver2    時間: 2019-12-13 11:17
這個圖用的MP2307,輸入24V很危險啊
作者: thangxu520    時間: 2019-12-19 21:12
感謝樓主分享!
作者: whwawa    時間: 2019-12-20 08:32
謝謝分享
作者: 一劍飛    時間: 2019-12-22 19:34
我打了五塊板。。
作者: 一劍飛    時間: 2019-12-24 09:40
打板5塊

6E839266-CDC8-4C0E-903D-6F6B094A868A.jpeg (1.31 MB, 下載次數: 261)

6E839266-CDC8-4C0E-903D-6F6B094A868A.jpeg

作者: catter1234    時間: 2019-12-30 10:43
感謝,感謝。
作者: flyingman    時間: 2020-1-18 20:40

感謝分享
作者: 28674500    時間: 2020-1-27 11:16
謝謝分享,改一下可以用esp8266
作者: 一劍飛    時間: 2020-2-19 15:28
我做了,屏不顯示,是什么問題?有誰做成功過的說一下。

作者: tigerzq    時間: 2020-2-19 17:11
Arduino在哪里呢?怎么上傳程序?
作者: 一劍飛    時間: 2020-2-21 09:09
tigerzq 發表于 2020-2-19 17:11
Arduino在哪里呢?怎么上傳程序?

ICSP接口。
作者: cooleaf    時間: 2020-3-10 13:00
這款確實有點創新,很少有人用Arduino寫T12的控制。
作者: ma918918    時間: 2020-3-10 19:37
謝謝,好資料!開源的很好
作者: 常勇    時間: 2020-3-13 18:20
下載看一下 謝謝
作者: 一劍飛    時間: 2020-3-15 01:35
鏈接:https://pan.baidu.com/s/1lC2Y5Sn7U_L-oxWhTOjhNA
提取碼:gxat改成中文了的文件,原程序已經加了注釋,打包有需要的自己下載,附上u8g2自定義字庫的相關文件和工具。20200305已備份

51hei圖片_20200315013244.jpg (162.98 KB, 下載次數: 263)

原版英文界面

原版英文界面

51hei圖片_202003150132441.jpg (161.59 KB, 下載次數: 279)

原版英文界面

原版英文界面

51hei圖片_202003150132442.jpg (159.13 KB, 下載次數: 273)

原版英文界面

原版英文界面

51hei圖片_202003150132443.jpg (158.97 KB, 下載次數: 260)

原版英文界面

原版英文界面

51hei圖片_202003150132444.jpg (108.8 KB, 下載次數: 270)

新版中文界面

新版中文界面

51hei圖片_202003150132445.jpg (112.59 KB, 下載次數: 236)

原版英文界面

原版英文界面

51hei圖片_202003150132446.jpg (93.92 KB, 下載次數: 245)

原版英文界面

原版英文界面

51hei圖片_202003150132447.jpg (84.63 KB, 下載次數: 248)

原版英文界面

原版英文界面

作者: dongfang08    時間: 2020-3-29 20:40
謝謝分享
作者: dongfang08    時間: 2020-4-7 17:58
我參考此列有制作成,其中一項樓主不太明白,X4  KP-301  2P  EARTH看了圖紙是空腳位,沒有找到和那個腳位連接,手柄自動沒有成功,忘賜教;
作者: sgviper    時間: 2020-4-9 09:27
樓主厲害
作者: 3inysy    時間: 2020-4-18 09:52
謝謝分享!
作者: 阿拉88    時間: 2020-4-28 16:46

鏈接:https://pan.baidu.com/s/1lC2Y5Sn7U_L-oxWhTOjhNA
提取碼:gxat改成中文了的文件,原程序已經加了注釋,打包有需要的自己下載,附上u8g2自定義字庫的相關文件和工具。20200305已備份

記號
作者: xnhtao    時間: 2020-4-29 10:52
哈哈,不錯不錯,樓主是不是板子也分享一下啊?
作者: 一劍飛    時間: 2020-5-7 09:59
阿拉88 發表于 2020-4-28 16:46
鏈接:https://pan.baidu.com/s/1lC2Y5Sn7U_L-oxWhTOjhNA
提取碼:gxat改成中文了的文件,原程序已經加 ...

現在測試發現一個問題,就是中文的加熱會有延遲,所以還是原版英文的好用。
作者: 一劍飛    時間: 2020-5-7 10:00
xnhtao 發表于 2020-4-29 10:52
哈哈,不錯不錯,樓主是不是板子也分享一下啊?

我不是樓主,你想要付會郵費我送你一片。

作者: tong0210    時間: 2020-6-5 11:53
很好,好資料,51黑有你更精彩!!!
作者: 林易璁    時間: 2021-1-5 15:42
主控是32u4?
作者: cyrs    時間: 2021-2-2 08:06
制作不易謝謝無私奉獻
作者: smartphone    時間: 2021-2-20 09:03
一劍飛 發表于 2019-12-24 09:40
打板5塊

看看做好的效果
作者: 亂世妖刀    時間: 2021-2-28 00:28
做的很好
作者: dtxy101    時間: 2021-3-23 21:43
謝謝無私奉獻
作者: didadi991    時間: 2022-5-26 09:32
原來有個想法用現成的ardunio開發板通過接口連接外圍控制板實現控制,現在集成的也不錯。
作者: duckyer    時間: 2022-5-29 10:17
用現成的ardunio開發板通過接口連接外圍控制板實現控制,試一試。
作者: jms209    時間: 2023-2-19 15:46
謝謝,好資料!開源的很好..
作者: 117008    時間: 2024-3-26 09:50
有實物圖嗎,看一下
作者: radio88931    時間: 2024-3-28 12:22
感謝分享!此PCB我幾年前也打板了,但一直沒組裝起來




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1