You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

660 lines
25 KiB

#define _IRON_C
#include "iron.h"
#include "isr.h"
#include "mcu.h"
#include "PID.h"
//ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
//ID(HEX) 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19
//R 100 110 120 130 150 180 200 220 240 270 300 330 390 430 470 560 680 820 1K 1.2K 1.5k 2k 3k 5.6k inf.
const UINT16 IDHash[25] = { 87, 95, 104, 112, 123, 143, 161, 175, 188, 204, 223, 241, 264, 291, 310, 338, 380, 425, 470, 516, 563, 620, 690, 774, 875};
const t_IronPars NoIronPars = {
0,
0x0000,
"NO INSTRUMENT ",
{
{
255, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
128, //CurrentA
128, //CurrentB
0, //HRCompCurrent
128, //Gain
0, //Offset
{ //TPoly
0, //c0
0, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
0, //WSLength
0, //PID_DGain
0, //PID_KP
0, //PID_KI
0, //PID_OVSGain
0, //PID_PMax
0, //PID_PNom
},
{0}
}
};
const t_IronPars Irons[10] = {
{
0,
0x1011,
"PACE TD-100 BLACK ",
{
{
1, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
0, //CurrentA
10, //CurrentB
10, //HRCompCurrent
120, //Gain
0, //Offset
{ //TPoly
0, //c0
61, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
3, //PID_DGain
(UINT16)(0.06 * 32768), //PID_KP
(UINT16)(0.001 * 32768), //PID_KI
3, //PID_OVSGain
120, //PID_PMax
120 //PID_PNom
},
{0}
}
},
{
0,
0x1813,
"HAKKO T15 ",
{//--Type----HChannel----SChannel----CBand----CurrentA----CurrentB----HRCompCurrent---Gain----Offset--SoftGain----SoftOffset--WSLength----PID_DGain---PID_KP--------------------PID_KI--------------------PID_OVFGain-PID_PMax
{
1, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
10, //CurrentA
0, //CurrentB
10, //HRCompCurrent
100, //Gain
0, //Offset
{ //TPoly
0, //c0
50.1, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
2, //PID_DGain
(UINT16)(0.08 * 32768), //PID_KP
(UINT16)(0.0015 * 32768), //PID_KI
3, //PID_OVSGain
70, //PID_PMax
60 //PID_PNom
},
{0}
}
},
{
0,
0x1213,
"HAKKO FX8801 ",
{//-----------------------------------------------------------------------------------------
{
2, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
205, //CurrentA
0, //CurrentB
0, //HRCompCurrent
13, //Gain
331, //Offset
{ //TPoly
-165.5, //c0
3.98513793, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
0, //WSLength
20, //PID_DGain
(UINT16)(0.4 * 32768), //PID_KP
(UINT16)(0.02 * 32768), //PID_KI
14, //PID_OVSGain
65, //PID_PMax
65 //PID_PNom
},
{0}
}
},
{
0,
0x0501,
"CHIN. HAKKO 907 ",
{
{
1, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
10, //CurrentA
0, //CurrentB
0, //HRCompCurrent
49, //Gain
0, //Offset
{ //TPoly (TC Type K)
0, //c0
2.508355e+1, //c1
7.860106e-2, //c2
-2.503131e-1, //c3
8.315270e-2, //c4
-1.228034e-2, //c5
9.804036e-4, //c6
-4.413030e-5, //c7
1.057734e-6, //c8
-1.052755e-8 //c9
},
0, //WSLength
11, //PID_DGain
(UINT16)(0.4 * 32768), //PID_KP
(UINT16)(0.01 * 32768), //PID_KI
16, //PID_OVSGain
50, //PID_PMax
50 //PID_PNom
},
{0}
}
},
{
0,
0x1805,
"JBC C245 ",
{
{
1, //Type
{
0, //HChannel
7, //SChannel
1, //CBandA
1, //CBandB
},
0, //CurrentA
10, //CurrentB
0, //HRCompCurrent
87, //Gain
0, //Offset
{ //TPoly
0, //c0
43.5, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
1, //WSLength
11, //PID_DGain
(UINT16)(0.3 * 32768), //PID_KP
(UINT16)(0.003 * 32768), //PID_KI
10, //PID_OVSGain
130, //PID_PMax
130 //PID_PNom
},
{0}
}
},
{
0,
0x1817,
"JBC C210 ",
{
{
1, //Type
{
0, //HChannel
7, //SChannel
1, //CBandA
1, //CBandB
},
10, //CurrentA
0, //CurrentB
10, //HRCompCurrent
202, //Gain
0, //Offset
{ //TPoly
0, //c0
126.25, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
1, //PID_DGain
(UINT16)(0.25 * 32768), //PID_KP
(UINT16)(0.003 * 32768), //PID_KI
4, //PID_OVSGain
40, //PID_PMax
40 //PID_PNom
},
{0}
}
},
{
0,
0x1313,
"JBC Microtweezers ",
{
{
1, //Type
{
1, //HChannel
2, //SChannel
1, //CBandA
1, //CBandB
// 3 //CBand
},
0, //CurrentA
10, //CurrentB
10, //HRCompCurrent
202, //Gain
0, //Offset
{ //TPoly
0, //c0
126.25, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
1, //PID_DGain
(UINT16)(0.25 * 32768), //PID_KP
(UINT16)(0.004 * 32768), //PID_KI
4, //PID_OVSGain
40, //PID_PMax
40 //PID_PNom
},
{
1, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
10, //CurrentA
0, //CurrentB
10, //HRCompCurrent
202, //Gain
0, //Offset
{ //TPoly
0, //c0
126.25, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
1, //PID_DGain
(UINT16)(0.025 * 32768), //PID_KP
(UINT16)(0.004 * 32768), //PID_KI
4, //PID_OVSGain
40, //PID_PMax
40 //PID_PNom
}
}
},
{
0,
0x1111,
"Weller WMRT ",
{
{
1, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
// 3 //CBand
},
0, //CurrentA
0, //CurrentB
0, //HRCompCurrent
128, //Gain
0, //Offset
{ //TPoly
0, //c0
67.95, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
0, //WSLength
1, //PID_DGain
(UINT16)(0.25 * 32768), //PID_KP
(UINT16)(0.004 * 32768), //PID_KI
4, //PID_OVSGain
40, //PID_PMax
40 //PID_PNom
},
{
1, //Type
{
1, //HChannel
2, //SChannel
1, //CBandA
1, //CBandB
},
0, //CurrentA
0, //CurrentB
0, //HRCompCurrent
128, //Gain
0, //Offset
{ //TPoly
0, //c0
67.95, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
0, //WSLength
1, //PID_DGain
(UINT16)(0.025 * 32768), //PID_KP
(UINT16)(0.004 * 32768), //PID_KI
4, //PID_OVSGain
40, //PID_PMax
40 //PID_PNom
}
}
},
{
0,
0x1803,
"WELLER WSP80 ",
{
{
2, //Type
{
0, //HChannel
5, //SChannel
1, //CBandA
1, //CBandB
},
195, //CurrentA
0, //CurrentB
0, //HRCompCurrent
49, //Gain
627, //Offset
{ //TPoly
-313.5, //c0
14.2881775, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
0, //WSLength
30, //PID_DGain
(UINT16)(0.2 * 32768), //PID_KP
(UINT16)(0.008 * 32768), //PID_KI
4, //PID_OVSGain
80, //PID_PMax
80 //PID_PNom
},
{0}
}
},
{
0,
0x020B,
"ERSA RT80 ",
{//-----------------------------------------------------------------------------------------
{
2, //Type
{
0, //HChannel
5, //SChannel
0, //CBandA
1, //CBandB
},
167, //CurrentA
0, //CurrentB
0, //HRCompCurrent
21, //Gain
284, //Offset
{ //TPoly
-145.7299, //c0
86.2582, //c1
0, //c2
0, //c3
0, //c4
0, //c5
0, //c6
0, //c7
0, //c8
0 //c9
},
-1, //WSLength
0, //PID_DGain
(UINT16)(0.4 * 32768), //PID_KP
(UINT16)(0.02 * 32768), //PID_KI
4, //PID_OVSGain
80, //PID_PMax
80 //PID_PNom
},
{0}
}
}
};
volatile int IronTicks;
void IronIdentify(){
static UINT16_VAL OID;
static UINT8 IDCnt;
UINT16_VAL CID;
UINT16_VAL NewIronID;
int i;
UINT16 w;
ISRStop();
I2CData.CurrentA.ui16 = 0;
I2CData.CurrentB.ui16 = 0;
I2CAddCommands(I2C_SET_CPOT);
CBANDA = 1;
CBANDB = 1;
while(!I2CIdle);
HCH = 0;
ID_3S = 1;
ID_OUT = 1;
mcuADCStartManual();
mcuADCRefVdd();
_delay_us(1000);
w = mcuADCReadWait(ADCH_ID, 16) >> 4;
HCH = 1;
for(i = 0; i <= 24; i++)if(w < IDHash[i])break;
CID.v[0] = i;
_delay_us(1000);
w = mcuADCReadWait(ADCH_ID, 16) >> 4;
HCH=0;
for(i = 0; i <= 24; i++)if(w < IDHash[i])break;
CID.v[1] = i;
mcuADCRefVref();
NewIronID.Val = 0x1919;
if(CID.Val == OID.Val){
if(IDCnt < 255)IDCnt++;
if(IDCnt > 2)NewIronID.Val = CID.Val;
}
else{
IDCnt = 0;
}
OID.Val = CID.Val;
if(NewIronID.v[0] >= 0x19)NewIronID.v[0] = NewIronID.v[1];
if(NewIronID.v[1] >= 0x19)NewIronID.v[1] = NewIronID.v[0];
if(NewIronID.Val != 0x1919){
if(IronID != NewIronID.Val){
IronPars = NoIronPars;
for(i = 2; i--; ){
PIDVars[i].HR = 0x7FFF;
PIDVars[i].HNewData = 0;
PIDVars[i].HInitData = 1;
PIDVars[i].HP = 0;
PIDVars[i].HI = 0;
PIDVars[i].HV = 0;
PIDVars[i].OffDelay = 1600;
}
for(i = (sizeof(Irons) / sizeof(Irons[0])); i--; ){
if(Irons[i].ID.Val == NewIronID.Val){
IronPars = Irons[i];
for(i = 2; i--; )PIDVars[i].HR = 8;
break;
}
}
PIDInit();
}
}
else{
if(IronID != 0x1919)IronPars = NoIronPars;
for(i = 2; i--; ){
PIDVars[i].HInitData = 1;
PIDVars[i].HP = 0;
PIDVars[i].HI = 0;
PIDVars[i].HV = 0;
PIDVars[i].OffDelay = 1600;
}
}
IronID = NewIronID.Val;
ID_OUT = 0;
ID_3S = 0;
ISRStart();
}
void IronInit(){
IronID = 0x1919;
IronPars = NoIronPars;
}
void IronTasks(){
int i;
if(IronTicks != ISRTicks){
IronTicks = ISRTicks;
if((IronTicks & 15) == 15){
switch(IronID){
case 0x1919:
IronIdentify();
break;
default:
for(i = 2; i--;){
if(IronPars.Config[i].Type && (PIDVars[i].NoSensor || PIDVars[i].NoHeater)){
IronIdentify();
break;
}
}
break;
}
}
}
}
#undef _IRON_C