一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4672|回复: 4
收起左侧

[51单片机] STC T12 烙铁头温度计算方法探讨

[复制链接]
发表于 2016-5-19 15:38 | 显示全部楼层 |阅读模式
本帖最后由 lazymike 于 2016-5-19 15:57 编辑

使用 ling.JACK 的 GoodCode 版本的 T12 套件学习单片机,在 T12 烙铁头温度计算的过程中遇到了困难,参考 junyee 的帖子得到了不少启发,下面分享下自己的一点看法,欢迎指正。

T12_ADC.JPG




上面是使用 STC 单片机测试的 T12 控制端口关闭后的 ADC 数据,ADC 函数与 STC15F204EA 指导书的示例相同,每次 ADC 之间无延时。结合上面的 T12 实际特性,采用了下面的计算方法,实际效果比较理想,目前ADC_OK_TIMES为5,MAX_ADC_TIMES为60。已下代码感兴趣的话可随意引用。

  1. bit tryToGetRightVt12(int32 Vt12)
  2. {
  3.         int32 DVt12 = Vt12 - oldVt12;
  4.         if(DVt12 < 2 && DVt12 > -2)        
  5.         {
  6.                 adcOkTimes++;
  7.                 if(adcOkTimes == ADC_OK_TIMES)
  8.                         return 1;                        
  9.         }
  10.         else
  11.         {
  12.                 adcOkTimes = 0;        
  13.                 oldVt12 = Vt12;
  14.         }
  15.         return 0;
  16. }

  17. void calcHeatingLimit(void)
  18. {
  19.         int32         Vt12, Dsr, Drr;
  20.         int32        Vos = Settings[S_VOS];
  21.         uint32  Vntc;
  22.         uint8         Tenv;        
  23.         uint8        idx = 0;
  24.         
  25.         bit                belowMinADC = 0;
  26.         bit                aboveMinADC = 0;
  27.         adcOkTimes = 0;
  28.         if(justStopHeat)
  29.         {
  30.                 do
  31.                 {
  32.                         Vt12 = adc(1);
  33.                         if(belowMinADC)
  34.                         {
  35.                                 if(aboveMinADC)                                       
  36.                                 {
  37.                                         if(tryToGetRightVt12(Vt12))
  38.                                                 break;
  39.                                 }
  40.                                 else
  41.                                 {
  42.                                         if(Vt12 > Vos)
  43.                                         {
  44.                                                 aboveMinADC = 1;
  45.                                                 oldVt12 = Vt12;
  46.                                         }
  47.                                 }
  48.                         }
  49.                         else
  50.                         {
  51.                                 if(Vt12 < Vos)
  52.                                         belowMinADC = 1;
  53.                         }
  54.                 }while(++idx<MAX_ADC_TIMES);
  55.                 justStopHeat = 0;
  56.                 oldVt12 = Vt12;        
  57.         }
  58.         else
  59.         {
  60.                 do
  61.                 {
  62.                         Vt12 = adc(1);
  63.                         if(tryToGetRightVt12(Vt12))
  64.                                 break;
  65.                 }while(++idx<MAX_ADC_TIMES);               
  66.         }
复制代码

发表于 2016-5-19 20:27 | 显示全部楼层
没有搞过,研究研究
 楼主| 发表于 2016-5-20 23:50 | 显示全部楼层
本帖最后由 lazymike 于 2016-5-20 23:51 编辑

一层的图形有误,希望没有误导,下面是抓的另一张图,这个和金向维说的大概50ms稳定对上了,横坐标:数值*2ms
T12.jpg
发表于 2016-5-25 19:34 来自手机 | 显示全部楼层
学习可~~~
发表于 2016-6-27 10:49 | 显示全部楼层
非常感谢您的共享!学习了。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-8 14:59 , Processed in 0.068387 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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