黄金会员
主题
帖子
积分8059
阅读权限40
注册时间2011-9-19
最后登录1970-1-1
在线时间 小时
|
本帖最后由 lazymike 于 2016-5-19 15:57 编辑
使用 ling.JACK 的 GoodCode 版本的 T12 套件学习单片机,在 T12 烙铁头温度计算的过程中遇到了困难,参考 junyee 的帖子得到了不少启发,下面分享下自己的一点看法,欢迎指正。
上面是使用 STC 单片机测试的 T12 控制端口关闭后的 ADC 数据,ADC 函数与 STC15F204EA 指导书的示例相同,每次 ADC 之间无延时。结合上面的 T12 实际特性,采用了下面的计算方法,实际效果比较理想,目前ADC_OK_TIMES为5,MAX_ADC_TIMES为60。已下代码感兴趣的话可随意引用。
- bit tryToGetRightVt12(int32 Vt12)
- {
- int32 DVt12 = Vt12 - oldVt12;
- if(DVt12 < 2 && DVt12 > -2)
- {
- adcOkTimes++;
- if(adcOkTimes == ADC_OK_TIMES)
- return 1;
- }
- else
- {
- adcOkTimes = 0;
- oldVt12 = Vt12;
- }
- return 0;
- }
- void calcHeatingLimit(void)
- {
- int32 Vt12, Dsr, Drr;
- int32 Vos = Settings[S_VOS];
- uint32 Vntc;
- uint8 Tenv;
- uint8 idx = 0;
-
- bit belowMinADC = 0;
- bit aboveMinADC = 0;
- adcOkTimes = 0;
- if(justStopHeat)
- {
- do
- {
- Vt12 = adc(1);
- if(belowMinADC)
- {
- if(aboveMinADC)
- {
- if(tryToGetRightVt12(Vt12))
- break;
- }
- else
- {
- if(Vt12 > Vos)
- {
- aboveMinADC = 1;
- oldVt12 = Vt12;
- }
- }
- }
- else
- {
- if(Vt12 < Vos)
- belowMinADC = 1;
- }
- }while(++idx<MAX_ADC_TIMES);
- justStopHeat = 0;
- oldVt12 = Vt12;
- }
- else
- {
- do
- {
- Vt12 = adc(1);
- if(tryToGetRightVt12(Vt12))
- break;
- }while(++idx<MAX_ADC_TIMES);
- }
复制代码
|
|