一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 17925|回复: 44
收起左侧

[51单片机] STC T12 PID 源码

  [复制链接]
发表于 2016-7-11 16:07 | 显示全部楼层 |阅读模式
本帖最后由 lazymike 于 2016-7-12 17:16 编辑

1.编译环境
   Keil,优化级别 9
2.测试环境
   仅用12v和19v电源进行了测试
3.编码开关使用说明
   编码开关状态设计为三种状态:短按,长按和超长按。按下时开始计数,释放时停止计数。计数小于500为短按,超过1000为超长按(即使未释放),500和1000之间为长按。
4.PID说明
   这个到现在也稀里糊涂,PID实现完全是根据GoodCode大侠公布的源码而来,达到目前的效果完全出乎本人的意料之外,有瞎猫撞上死耗子之嫌。PID编码中使用的Kp/Ki/Kd照搬GoodCode的,其他相关参数完全是随意定下的,没有任何根据。具体的PID实现问题请大家不要浪费时间问我了,真的不懂。
5.PID收敛效果
  12v下震荡较小,19v下比较大,但都能趋于稳定状态,据此如果使用24v等更高电压,震荡会更强烈一些,空载设定温度下波动小于正负2度。
6.操作简单说明
  为简单起见,参数设置分为两个状态:参数编号选择状态和参数数值设置状态。
  上电后,长按编码开关进入参数编号选择状态,即LED显示P01信息,此时旋转编码开关,会依次显示P02,P03等。
  显示Pxx时,长按退出参数设置,短按进入该参数数值设置状态。
  参数数值设置状态下,旋转编码开关设置大小,短按或长按退回到参数编号选择状态。
7.特殊操作说明
  在正常加热或休眠状态下,超长按会进入持续加热模式,此模式下LED会闪烁,旋转编码开关设置持续加热的时间,再次超长按进行持续加热。此操作期间,短按或长按都会立即退回到正常加热状态。
  在偏置电压设置状态,设置值为0时,超长按会自动获取偏置电压数值,此时如果插有烙铁头,则最好常温下进行此操作,或者短路T12烙铁头进行操作。
  密码设置状态,短按选择位数,旋转设置该位数值,默认555为空密码,设置后也需要超长按进行保存操作并退出。
  在正常加热状态下,短按进入休眠状态。
8.参数
        P00:T12温度,默认值 200,取值范围200~480
        P01:密码,默认空密码 555,取值范围000~999,设置后需超长按保存
        P02:参考电压(V),默认2.49,取值范围0.01~5.00
        P03:PID Kp,默认值 64,取值范围0~255
        P04:PID Ki,默认值 4,取值范围0~255
        P05:PID Kd,默认值 16,取值范围0~255
        P06:T12温度系数,默认值 41,取值范围1~255
        P07:偏置电压,默认值 0,取值范围0~255,自动获取后需超长按保存
        P08:室温补偿(度),默认值 0,取值范围-30~+30
        P09:休眠温度,默认值 200,取值范围200~255
        P10:休眠等待时间(分钟),默认值 0,0代表不休眠,取值范围0~255
        P11:关断等待时间(分钟),默认值 0,0代表不关断,取值范围0~255
        P12:编码开关无操作超时时间(秒),默认值0,0代表禁止判断超时,取值范围0~255,不为0时,在设置状态下,超过设置的秒数后自动返回正常加热状态
        P13:T12温度调节控制,默认值 0,取值范围0~2。0-自由调节;1-固定不可调节,此时旋转编码器进入休眠状态;2-密码保护,需输入密码后才能调节温度
        P14:再次要求密码时间(分钟),默认值 0,0代表在上电期间输入一次密码即可,取值范围0~255
        P15:保存读取EEPROM,默认值 0,取值范围0和1,0-读取,1-保存。超长按后进行相应操作
9.其他说明
        a) 无操作超时进入休眠状态编程参考了金向维的方法,但还未购置水银开关,效果未验证。http://bbs.mydigit.cn/read.php?tid=1047116&ds=1#tpc
        b) 由于最近几年游离于C++和Java,自己写代码的风格已混乱不堪,为这个帖子已尽力修改了一下,不入眼之处请谅解。
        c) 无任何版权要求。
=========================================================
20160712 变更说明
1. 刚开始学习单片机时,大概了解了变量存储区域 data 和 idata,关于 idata 说是性能差一些,所以尽量避免使用,而data大小的限制导致了参数数组看起来其丑无比。今天将参数数组放到了 idata 区域,并都声明为 int32 类型,试用了一下,感官上并无性能差异,但程序可读性好不少。
2. main.c 中  增加了下面语句
    开机按下编码开关,清空 EEPROM
    if(!ENCODER_D)
        IapEraseSector(0x0000);

    这句是整合程序时,漏掉了,补上
    PRE_HIBER_STATE = !HIBER_STATE;
3. Pic.c 中,下列语句中的红色括号必须去掉,iTerm和dTerm也同样处理,下面压缩包没有包括此变更
    pTerm = (signed long)(error*PID_P) / 100;
T12_PID_160712.zip (33.88 KB, 下载次数: 937)



T12_PID.zip

33.58 KB, 下载次数: 720, 下载积分: 一乐金币 -1

评分

参与人数 3一乐金币 +110 收起 理由
fujiachun + 60 很给力!
mousebat04 + 20 赞一个!
goodcode + 30 赞一个!

查看全部评分

发表于 2016-7-11 16:23 | 显示全部楼层
谢谢分享
发表于 2016-7-11 17:05 | 显示全部楼层
还不会STC,但买了几片想D一个T12控制器的
先下载份学习下,谢谢分享!
发表于 2016-7-11 17:13 | 显示全部楼层
感谢分享!
发表于 2016-7-11 18:34 | 显示全部楼层
感谢分享!
发表于 2016-7-11 19:04 | 显示全部楼层
看了下,代码还是很整齐的呀
 楼主| 发表于 2016-7-11 20:33 | 显示全部楼层
junyee 发表于 2016-7-11 19:04
看了下,代码还是很整齐的呀

,从您那个帖子也学到了不少
发表于 2016-7-11 23:35 | 显示全部楼层
谢谢分享,已经有1602版本的T12了,还是收藏学习一下。
发表于 2016-7-12 12:02 | 显示全部楼层
本帖最后由 8055 于 2016-7-12 12:10 编辑

思路清晰,目的明确,格式整齐,赞一个。要是注释详细就更好了。
 楼主| 发表于 2016-7-12 12:58 | 显示全部楼层
8055 发表于 2016-7-12 12:02
思路清晰,目的明确,格式整齐,赞一个。要是注释详细就更好了。

,项目编程写注释都写吐了,而维护注释简直令人痛不欲生,所以自己玩就轻易不写注释了,除了PID外,程序中有任何问题尽可提出。

本版积分规则

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

GMT+8, 2024-5-2 08:12 , Processed in 0.074398 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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