黄金会员
 
主题
帖子
积分8168
阅读权限40
注册时间2011-9-19
最后登录1970-1-1
在线时间 小时
|
本帖最后由 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, 下载次数: 939)
|
评分
-
查看全部评分
|