Merge branch 'master' of http://gitea.hua-hua.cn/huahua/daxiang_dzyj
This commit is contained in:
commit
1dbf3de955
148
app_code/main.c
148
app_code/main.c
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
OUT_INIT = 0,
|
OUT_INIT=0,
|
||||||
|
OUT_CELI,
|
||||||
|
OUT_START,
|
||||||
OUT_RUNNING,
|
OUT_RUNNING,
|
||||||
OUT_AUTOSTOP,
|
OUT_AUTOSTOP,
|
||||||
OUT_ERR,
|
OUT_ERR,
|
||||||
@ -17,8 +19,8 @@ typedef enum
|
|||||||
|
|
||||||
#define IAP_ADDRESS 0x0000
|
#define IAP_ADDRESS 0x0000
|
||||||
|
|
||||||
#define LED_ON P16 = 1
|
#define LED_ON P16 = 0
|
||||||
#define LED_OFF P16 = 0
|
#define LED_OFF P16 = 1
|
||||||
|
|
||||||
#define WT_30M 0x80
|
#define WT_30M 0x80
|
||||||
#define WT_24M 0x81
|
#define WT_24M 0x81
|
||||||
@ -93,6 +95,9 @@ unsigned int ADC_Average(unsigned int *buff, unsigned int num, unsigned int thre
|
|||||||
// new
|
// new
|
||||||
void OutPutCtrl(void);
|
void OutPutCtrl(void);
|
||||||
|
|
||||||
|
|
||||||
|
unsigned char code BUILD_DATA[] = __DATE__ ;
|
||||||
|
unsigned char code BUILD_TIME[] = __TIME__ ;
|
||||||
/***************变量定义**************/
|
/***************变量定义**************/
|
||||||
bit busy = 0;
|
bit busy = 0;
|
||||||
bit SendEN = 0;
|
bit SendEN = 0;
|
||||||
@ -106,7 +111,7 @@ bit AcqInitFlag = 0;
|
|||||||
bit AD_Refresh = 0;
|
bit AD_Refresh = 0;
|
||||||
bit Save_Flag = 0;
|
bit Save_Flag = 0;
|
||||||
|
|
||||||
bit PWM_ON_EN = 0;
|
bit STOP_FLAG = 0;
|
||||||
|
|
||||||
unsigned char xdata Rxbuff[20];
|
unsigned char xdata Rxbuff[20];
|
||||||
unsigned char xdata aRxBufferTemp = 0;
|
unsigned char xdata aRxBufferTemp = 0;
|
||||||
@ -182,10 +187,10 @@ float xdata CurrentError = 0;
|
|||||||
float xdata AdjVoltage = 0; // 调节电压
|
float xdata AdjVoltage = 0; // 调节电压
|
||||||
float xdata CompensationValue = 0; // 补偿系数
|
float xdata CompensationValue = 0; // 补偿系数
|
||||||
float xdata OutGain = 0; // 输出增益调节
|
float xdata OutGain = 0; // 输出增益调节
|
||||||
|
float xdata LoadRes = 0;
|
||||||
// new
|
// new
|
||||||
OUTSTATE_t xdata OutPutState;
|
OUTSTATE_t xdata OutPutState;
|
||||||
unsigned int xdata InitTimeCnt;
|
unsigned int xdata InitTimeCnt,ErrTimeCnt;
|
||||||
unsigned int xdata TimeBaseCnt, TimeBaseCntLast;
|
unsigned int xdata TimeBaseCnt, TimeBaseCntLast;
|
||||||
bit ledState;
|
bit ledState;
|
||||||
unsigned int xdata TargetCurrent;
|
unsigned int xdata TargetCurrent;
|
||||||
@ -197,7 +202,7 @@ void main()
|
|||||||
PWM_Init();
|
PWM_Init();
|
||||||
UART1_Init();
|
UART1_Init();
|
||||||
ADC_Init();
|
ADC_Init();
|
||||||
|
P25 = 0;
|
||||||
ES = 1;
|
ES = 1;
|
||||||
EA = 1;
|
EA = 1;
|
||||||
UartCnt = 0;
|
UartCnt = 0;
|
||||||
@ -210,7 +215,7 @@ void main()
|
|||||||
Delay10ms();
|
Delay10ms();
|
||||||
Delay10ms();
|
Delay10ms();
|
||||||
|
|
||||||
EEPROM_read_n(IAP_ADDRESS, TableRead, 18); // 从EEPROM读取数据
|
EEPROM_read_n(IAP_ADDRESS, TableRead, 4); // 从EEPROM读取数据
|
||||||
if (TableRead[0] == 0x55 && TableRead[1] == 0xaa)
|
if (TableRead[0] == 0x55 && TableRead[1] == 0xaa)
|
||||||
{
|
{
|
||||||
TargetCurrent = (TableRead[2] << 8) + TableRead[3];
|
TargetCurrent = (TableRead[2] << 8) + TableRead[3];
|
||||||
@ -242,17 +247,18 @@ void main()
|
|||||||
AcqError = 100;
|
AcqError = 100;
|
||||||
OutSet = 10000;
|
OutSet = 10000;
|
||||||
DisSet = 16146;
|
DisSet = 16146;
|
||||||
|
InitError = 0;
|
||||||
OutGain = (float)OutSet / 10000;
|
OutGain = (float)OutSet / 10000;
|
||||||
|
|
||||||
CalibrationVoltage = SetVoltage;
|
CalibrationVoltage = SetVoltage;
|
||||||
PWM_TO_DAC(5000, (unsigned int)(CalibrationVoltage * OutGain) + (unsigned int)IA); // 供电电压为:5000MV,负载端输出电压为:CalibrationVoltage,单片机口输出电压为:SetOutVoltage/3
|
//PWM_TO_DAC(5000, (unsigned int)(CalibrationVoltage * OutGain) + (unsigned int)IA); // 供电电压为:5000MV,负载端输出电压为:CalibrationVoltage,单片机口输出电压为:SetOutVoltage/3
|
||||||
|
|
||||||
AcqInitCnt = 0;
|
AcqInitCnt = 0;
|
||||||
InitTimeCnt = 0;
|
InitTimeCnt = 0;
|
||||||
TimeBaseCnt = 0;
|
TimeBaseCnt = 0;
|
||||||
TimeBaseCntLast = 0;
|
TimeBaseCntLast = 0;
|
||||||
OutPutState = OUT_INIT;
|
OutPutState = OUT_INIT;
|
||||||
|
ErrTimeCnt = 0;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@ -270,8 +276,8 @@ void main()
|
|||||||
}
|
}
|
||||||
if (TimeBaseCntLast % 1000 == 0)
|
if (TimeBaseCntLast % 1000 == 0)
|
||||||
{
|
{
|
||||||
ledState = !ledState;
|
//ledState = !ledState;
|
||||||
P16 = ledState;
|
//P16 = ledState;
|
||||||
}
|
}
|
||||||
if (TimeBaseCnt >= 10000)
|
if (TimeBaseCnt >= 10000)
|
||||||
{
|
{
|
||||||
@ -302,25 +308,83 @@ void OutPutCtrl(void)
|
|||||||
switch (OutPutState)
|
switch (OutPutState)
|
||||||
{
|
{
|
||||||
case OUT_INIT:
|
case OUT_INIT:
|
||||||
PWM_TO_DAC(5000, 1000);
|
PWM_TO_DAC(5000, 0);
|
||||||
|
P25 = 0;
|
||||||
InitTimeCnt++;
|
InitTimeCnt++;
|
||||||
if (InitTimeCnt > 100)
|
if (InitTimeCnt > 100)
|
||||||
|
{
|
||||||
|
InitTimeCnt = 0;
|
||||||
|
OutPutState = OUT_CELI;
|
||||||
|
InitError = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case OUT_CELI:
|
||||||
|
PWM_TO_DAC(5000, 0);
|
||||||
|
InitTimeCnt++;
|
||||||
|
InitError += OutCurrent;
|
||||||
|
if (InitTimeCnt >= 10)
|
||||||
|
{
|
||||||
|
InitError /= 10;
|
||||||
|
InitTimeCnt = 0;
|
||||||
|
OutPutState = OUT_START;
|
||||||
|
OutputVol = 500;
|
||||||
|
}
|
||||||
|
if (OutCurrent > 30000)
|
||||||
|
{
|
||||||
|
ErrTimeCnt++;
|
||||||
|
if (ErrTimeCnt > 3)
|
||||||
|
{
|
||||||
|
OutPutState = OUT_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrTimeCnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case OUT_START:
|
||||||
|
PWM_TO_DAC(5000, OutputVol);
|
||||||
|
InitTimeCnt++;
|
||||||
|
if (InitTimeCnt > 40)
|
||||||
{
|
{
|
||||||
InitTimeCnt = 0;
|
InitTimeCnt = 0;
|
||||||
OutPutState = OUT_RUNNING;
|
OutPutState = OUT_RUNNING;
|
||||||
OutputVol = 1000;
|
}
|
||||||
|
if (OutCurrent > 30000)
|
||||||
|
{
|
||||||
|
ErrTimeCnt++;
|
||||||
|
if (ErrTimeCnt > 50)//500ms
|
||||||
|
{
|
||||||
|
OutPutState = OUT_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrTimeCnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case OUT_RUNNING:
|
case OUT_RUNNING:
|
||||||
if (OutCurrent > TargetCurrent + 20)
|
if (OutCurrent > InitError)
|
||||||
|
{
|
||||||
|
OutCurrent -= InitError;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OutCurrent = 0;
|
||||||
|
}
|
||||||
|
LoadRes = (float)OutVoltage / (OutCurrent/100);
|
||||||
|
if (OutCurrent > TargetCurrent + 10)
|
||||||
{
|
{
|
||||||
if (OutputVol > 100)
|
if (OutputVol > 100)
|
||||||
{
|
{
|
||||||
OutputVol--;
|
OutputVol--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (OutCurrent < TargetCurrent - 20)
|
else if (OutCurrent < TargetCurrent - 10)
|
||||||
{
|
{
|
||||||
if (OutputVol < 5000)
|
if (OutputVol < 5000)
|
||||||
{
|
{
|
||||||
@ -328,10 +392,33 @@ void OutPutCtrl(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
PWM_TO_DAC(5000, OutputVol);
|
PWM_TO_DAC(5000, OutputVol);
|
||||||
|
if (OutCurrent >= 100 && OutCurrent <= 10000)
|
||||||
|
{
|
||||||
|
LED_ON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LED_OFF;
|
||||||
|
}
|
||||||
|
if (OutCurrent > 10000)
|
||||||
|
{
|
||||||
|
ErrTimeCnt++;
|
||||||
|
if (ErrTimeCnt > 10)//100ms
|
||||||
|
{
|
||||||
|
OutPutState = OUT_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ErrTimeCnt = 0;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case OUT_AUTOSTOP:
|
case OUT_AUTOSTOP:
|
||||||
break;
|
break;
|
||||||
case OUT_ERR:
|
case OUT_ERR:
|
||||||
|
LED_OFF;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -340,7 +427,7 @@ void OutPutCtrl(void)
|
|||||||
|
|
||||||
void turnOFFOutput(void)
|
void turnOFFOutput(void)
|
||||||
{
|
{
|
||||||
PWM_ON_EN = 1;
|
STOP_FLAG = 1;
|
||||||
Shut_Hour = 0;
|
Shut_Hour = 0;
|
||||||
Shut_Min = 0;
|
Shut_Min = 0;
|
||||||
Shut_Sec = 0;
|
Shut_Sec = 0;
|
||||||
@ -352,7 +439,7 @@ void turnOFFOutput(void)
|
|||||||
|
|
||||||
void AutoAction(void)
|
void AutoAction(void)
|
||||||
{
|
{
|
||||||
if (PWM_ON_EN == 0) // PWM输出使能
|
if (STOP_FLAG == 0) // PWM输出使能
|
||||||
{
|
{
|
||||||
if (AcqVolatage >= Limitvoltage) // 采集电压大于1500mV,或电流小于0.5mA,关闭输出
|
if (AcqVolatage >= Limitvoltage) // 采集电压大于1500mV,或电流小于0.5mA,关闭输出
|
||||||
{
|
{
|
||||||
@ -1505,14 +1592,10 @@ void DataParsing(void)
|
|||||||
{
|
{
|
||||||
if (Uart1Ready_R == 1) // 数据接收完成,处理接收到的数据
|
if (Uart1Ready_R == 1) // 数据接收完成,处理接收到的数据
|
||||||
{
|
{
|
||||||
// 按键返回
|
|
||||||
if (Rxbuff[0] == 0x02)
|
if (Rxbuff[0] == 0x02)
|
||||||
{
|
{
|
||||||
// 参数复位
|
TargetCurrent = (Rxbuff[1] << 8) + Rxbuff[2];
|
||||||
TargetCurrent = Rxbuff[1] << 8 + Rxbuff[2];
|
|
||||||
// 参数掉电保存(直接调用函数)
|
|
||||||
Save_Flag = 1;
|
Save_Flag = 1;
|
||||||
// Parameter_Save();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Uart1Ready_R = 0;
|
Uart1Ready_R = 0;
|
||||||
@ -1540,10 +1623,10 @@ void UartSendData(void)
|
|||||||
SendBuffer[0] = 0x55;
|
SendBuffer[0] = 0x55;
|
||||||
SendBuffer[1] = 0xAA;
|
SendBuffer[1] = 0xAA;
|
||||||
|
|
||||||
SendBuffer[2] = RunTime >> 8; // 运行时间H
|
SendBuffer[2] = (unsigned int)LoadRes >> 8; // 运行时间H
|
||||||
SendBuffer[3] = RunTime; // 运行时间L
|
SendBuffer[3] = (unsigned int)LoadRes; // 运行时间L
|
||||||
SendBuffer[4] = InVoltage >> 8; // 输入电压H
|
SendBuffer[4] = InitError >> 8; // 输入电压H
|
||||||
SendBuffer[5] = InVoltage; // 输入电压L
|
SendBuffer[5] = InitError; // 输入电压L
|
||||||
SendBuffer[6] = OutVoltage >> 8; // 输出电压H
|
SendBuffer[6] = OutVoltage >> 8; // 输出电压H
|
||||||
SendBuffer[7] = OutVoltage; // 输出电压L
|
SendBuffer[7] = OutVoltage; // 输出电压L
|
||||||
SendBuffer[8] = OutCurrent >> 8; // 输出电流H
|
SendBuffer[8] = OutCurrent >> 8; // 输出电流H
|
||||||
@ -1637,7 +1720,7 @@ void TM0_Isr() interrupt 1 using 1
|
|||||||
AcqInitCnt++;
|
AcqInitCnt++;
|
||||||
TimeBaseCnt++;
|
TimeBaseCnt++;
|
||||||
/*** 新增2019-11-14 ***/
|
/*** 新增2019-11-14 ***/
|
||||||
if (PWM_ON_EN)
|
if (STOP_FLAG)
|
||||||
{
|
{
|
||||||
Shut_MS++;
|
Shut_MS++;
|
||||||
if (Shut_MS >= 1000)
|
if (Shut_MS >= 1000)
|
||||||
@ -1654,7 +1737,7 @@ void TM0_Isr() interrupt 1 using 1
|
|||||||
|
|
||||||
if (Shut_Min >= 180) // 大于3小时,恢复工作
|
if (Shut_Min >= 180) // 大于3小时,恢复工作
|
||||||
{
|
{
|
||||||
PWM_ON_EN = 0;
|
STOP_FLAG = 0;
|
||||||
Shut_Hour = 0;
|
Shut_Hour = 0;
|
||||||
Shut_Min = 0;
|
Shut_Min = 0;
|
||||||
Shut_Sec = 0;
|
Shut_Sec = 0;
|
||||||
@ -1681,13 +1764,6 @@ void TM0_Isr() interrupt 1 using 1
|
|||||||
{
|
{
|
||||||
Time_Min = 0;
|
Time_Min = 0;
|
||||||
RunTime++;
|
RunTime++;
|
||||||
|
|
||||||
Save_Cnt++;
|
|
||||||
if ((Save_Cnt > 0) && ((Save_Cnt % 5) == 0))
|
|
||||||
{
|
|
||||||
Save_Flag = 1; // 运行参数1个小时保存一次
|
|
||||||
Save_Cnt = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user