Browse Source

fix:修正wantline出错问题

weight-flt
Zhangwen 10 months ago
parent
commit
184efffabd
  1. 5
      .vscode/settings.json
  2. 30
      source/app/app_weight.c
  3. 39
      source/app/main.c
  4. 93
      source/asp/asp_schain.c
  5. 28
      source/asp/asp_schain.h

5
.vscode/settings.json

@ -1,6 +1,9 @@
{
"files.associations": {
"stc_only.H": "cpp",
"asp_lowpower.h": "c"
"asp_lowpower.h": "c",
"main.h": "c",
"msp_eeprom.h": "c",
"msp_uartn.h": "c"
}
}

30
source/app/app_weight.c

@ -73,6 +73,8 @@ void L2_task_weight_init(u8 openclose)
{
if(openclose)
{
printf5("\r\n rev L2_task_weight_init wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[0].ch,\
TS_adc_SPara[0].wantline,TS_adc_SPara[0].offset,TS_adc_SPara[0].ashift,TS_adc_SPara[0].bshift444);
L0_ADS1213_INIT(D_ADS1213_GAIN_128);
L2_task_adc_init(0);
L2_task_adc_init(1);
@ -108,6 +110,9 @@ void L3_task_weight_init(void)
//显示任务初始化
L1_task_reg_clear(&tst_weight.task);
L3_task_s_go(tst_weight,D_task_init);
printf5("\r\n rev L3_task_weight_init wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[0].ch,\
TS_adc_SPara[0].wantline,TS_adc_SPara[0].offset,TS_adc_SPara[0].ashift,TS_adc_SPara[0].bshift444);
L2_task_weight_init(1);
///Lc_buf_from_const_uc(U8 * d, const U8 * s, U16 num)
///tst_weight.pSPara->ts_WPoint
@ -209,6 +214,10 @@ void L3_task_weight_handler(TS_TASK_weight_ *s)
L2_task_go(D_task_WEIGHT_out);
TTSS_Task_step(D_task_WEIGHT_out):
// L0_uart1_ushex(tst_weight.kgx10_zero);
// L0_uart1_ushex(tst_weight.kgx10);
if(tst_weight.kgx10 > tst_weight.kgx10_zero)
{
s->kgx10_out = s->kgx10 - s->kgx10_zero;
@ -229,21 +238,34 @@ void L3_task_weight_handler(TS_TASK_weight_ *s)
void L3_task_weight_cal(void)
{
// L0_uart1_str("tst_weight.adc32: ");
// L0_uart1_ushex(tst_weight.adc32);
// L0_uart1_0d0a();
// L0_uart1_str("S.weight_SPara.ts_WPoint[0].adc: ");
// L0_uart1_ushex(S.weight_SPara.ts_WPoint[0].adc);
// L0_uart1_0d0a();
// L0_uart1_str("S.weight_SPara.ts_WPoint[1].adc: ");
// L0_uart1_ushex(S.weight_SPara.ts_WPoint[1].adc);
// L0_uart1_0d0a();
// L0_uart1_str("S.weight_SPara.ts_WPoint[2].adc: ");
// L0_uart1_ushex(S.weight_SPara.ts_WPoint[2].adc);
// L0_uart1_0d0a();
if(tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[1].adc)
{
if( tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[0].adc )
{
tst_weight.adc32 = (vU32)S.weight_SPara.ts_WPoint[0].adc;
}
///0-0-40KG
//0-0-40KG
tst_weight.t32a = (tst_weight.adc32-(vU32)S.weight_SPara.ts_WPoint[0].adc);////有可能<0
tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[1].adc-S.weight_SPara.ts_WPoint[0].adc);
tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[1].kg - S.weight_SPara.ts_WPoint[0].kg);
tst_weight.t32a /= tst_weight.t32b;
//L0_uart1_ulhex(tst_weight.t32a);
}
else
{ ///40KG 80KG
{ //40KG 80KG
tst_weight.t32a = (vU32)(tst_weight.adc32-S.weight_SPara.ts_WPoint[1].adc);////有可能大于b
tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[2].adc-S.weight_SPara.ts_WPoint[1].adc);
tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[2].kg-S.weight_SPara.ts_WPoint[1].kg) ;
@ -252,6 +274,7 @@ void L3_task_weight_cal(void)
}
tst_weight.kgx10 = (vU16)tst_weight.t32a;
// tst_weight.kgx10 = 0x1234;
}
/*
@ -540,6 +563,7 @@ void L4_weight_out(void)
ts_weight_out.sensor_adc[2] = ts_adc_samples[2].out1_adc;
ts_weight_out.sensor_adc[3] = ts_adc_samples[3].out1_adc;
ts_weight_out.kgx10_out = tst_weight.kgx10_out;
//ts_weight_out.kgx10_out = 0x1234;
ts_weight_out.adc32 = tst_weight.adc32;//采样值用作校准时使用
// L0_uart1_us(ts_weight_out.adc32);

39
source/app/main.c

@ -64,15 +64,52 @@ void L0_main_init(void)
printf1("\r\nL3_S_init %d",r);
}
TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]=
{
'A', //0 1 u8 rev1;
0, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch1_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
1, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch2_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
2, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch3_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
3, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch4_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5 //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
};
//===============================================
//主函数
//===============================================
void main(void)
{
u16 a= 0;
char d[9]={0xab};
L0_main_init();
L3_task_weight_init();
TTSS_run_every_init(s_nos_tick.stamp,10);
@ -84,7 +121,7 @@ void main(void)
if(1 == s_nos_tick.t1s_heartbeat)
{
s_nos_tick.t1s_heartbeat = 0;
L1_uartD_uc('.');
// L1_uartD_uc('.');
D_LED1_REV();
// L0_uart2_uc('Q');
// L0_uart2_0d0a();

93
source/asp/asp_schain.c

@ -20,20 +20,20 @@
//=============================================
///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc FF77 FFB3 00A4 FFEA
#define D_ch1_0kg_out1_adc (vS16)0xFF77
#define D_ch2_0kg_out1_adc (vS16)0xFFB3
#define D_ch3_0kg_out1_adc (vS16)0x00A4
#define D_ch4_0kg_out1_adc (vS16)0xFFEA
/////需要通过测试配置 如果不在意符号位 可以优化掉
#define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc)
#define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc)
#define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc)
#define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc)
#define D_ch1_wantline (vS16)0x18da
#define D_ch2_wantline (vS16)0x18da
#define D_ch3_wantline (vS16)0x18da
#define D_ch4_wantline (vS16)0x18da
// #define D_ch1_0kg_out1_adc (vS16)0xFF77
// #define D_ch2_0kg_out1_adc (vS16)0xFFB3
// #define D_ch3_0kg_out1_adc (vS16)0x00A4
// #define D_ch4_0kg_out1_adc (vS16)0xFFEA
// /////需要通过测试配置 如果不在意符号位 可以优化掉
// #define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc)
// #define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc)
// #define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc)
// #define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc)
// #define D_ch1_wantline (vS16)0x18da
// #define D_ch2_wantline (vS16)0x18da
// #define D_ch3_wantline (vS16)0x18da
// #define D_ch4_wantline (vS16)0x18da
///cc 2023/04/06--7:39:40 每个传感器放置10kg
///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差
@ -47,40 +47,7 @@
#define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_0kg_out1_adc)/D_Rsensor_per_10kg)
#define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg
TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]=
{
'A', //0 1 u8 rev1;
0, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch1_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
1, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch2_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
2, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch3_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
'A', //0 1 u8 rev1;
3, //2 3 u8 ch;
D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
D_ch4_out1_offset, //3 4 vU16 offset;
2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
5 //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
};
TS_task_adc_sample ts_adc_samples[D_ADC_CHANNEL_NUM];
@ -92,10 +59,38 @@ void L2_task_adc_init(U8 ch)
L1_task_reg_clear(&ts_adc_samples[ch].task);
L3_task_s_go(ts_adc_samples[ch],D_task_init);
printf5("\r\n rev **************** wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[ch].ch,\
TS_adc_SPara[ch].wantline,TS_adc_SPara[ch].offset,TS_adc_SPara[ch].ashift,TS_adc_SPara[ch].bshift444);
ts_adc_samples[ch].pSPara = &TS_adc_SPara[ch];
ts_adc_samples[ch].firstRun = 1;
// printf5("\r\n rev **************** wantline %5X\t %X\t %X\t %X\t %X\r\n",ts_adc_samples[ch].pSPara->ch,\
// ts_adc_samples[ch].pSPara->wantline,ts_adc_samples[ch].pSPara->offset,ts_adc_samples[ch].pSPara->ashift,ts_adc_samples[ch].pSPara->bshift444);
// ts_adc_samples[0].pSPara->wantline = D_ch1_wantline;
// ts_adc_samples[0].pSPara->offset = D_ch1_out1_offset;
// ts_adc_samples[0].pSPara->ch = 0;
// ts_adc_samples[0].pSPara->ashift = 2;
// ts_adc_samples[0].pSPara->bshift444 = 5;
// ts_adc_samples[1].pSPara->wantline = D_ch1_wantline;
// ts_adc_samples[1].pSPara->offset = D_ch2_out1_offset;
// ts_adc_samples[1].pSPara->ch = 1;
// ts_adc_samples[1].pSPara->ashift = 2;
// ts_adc_samples[1].pSPara->bshift444 = 5;
// ts_adc_samples[2].pSPara->wantline = D_ch1_wantline;
// ts_adc_samples[2].pSPara->offset = D_ch3_out1_offset;
// ts_adc_samples[2].pSPara->ch = 2;
// ts_adc_samples[2].pSPara->ashift = 2;
// ts_adc_samples[2].pSPara->bshift444 = 5;
// ts_adc_samples[3].pSPara->wantline = D_ch1_wantline;
// ts_adc_samples[3].pSPara->offset = D_ch4_out1_offset;
// ts_adc_samples[3].pSPara->ch = 3;
// ts_adc_samples[3].pSPara->ashift = 2;
// ts_adc_samples[3].pSPara->bshift444 = 5;
}
@ -329,8 +324,8 @@ void L2_task_adc_sample(TS_task_adc_sample *s)
printfs("\r\n D_ADC_JITTER_zero---");
///printf3("\r\n ch(%d) out3_Peak %5d %5X ",(int)s->pSPara->ch,s->out3_Peak,s->out3_Peak );
printf4("\r\n ch(%d) adc=%5d ->offset %5d wantline %5d ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline);
printf4("\r\n ch(%d) adc=%5X ->offset %5X wantline %5X ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline);
printf5("\r\n rev(%c) ch(%d) adc=%5d ->offset %5d wantline %5d ",s->pSPara->rev1,(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline);
printf5("\r\n rev(%c) ch(%d) adc=%5X ->offset %5X wantline %5X ",s->pSPara->rev1,(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline);
s->ts_SAa.average = (vU32)s->out3_Peak;/// shiftaverage_a路初始化
s->ts_SAa.sum = s->ts_SAa.average << s->pSPara->ashift;

28
source/asp/asp_schain.h

@ -42,21 +42,41 @@ typedef struct
vU16 out4_shift; ///
}TS_shift_averge_;
#define D_ch1_0kg_out1_adc (vS16)0xFF77
#define D_ch2_0kg_out1_adc (vS16)0xFFB3
#define D_ch3_0kg_out1_adc (vS16)0x00A4
#define D_ch4_0kg_out1_adc (vS16)0xFFEA
#define D_ch1_wantline (vS16)0x18da
#define D_ch2_wantline (vS16)0x18da
#define D_ch3_wantline (vS16)0x18da
#define D_ch4_wantline (vS16)0x18da
/////需要通过测试配置 如果不在意符号位 可以优化掉
#define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc)
#define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc)
#define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc)
#define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc)
typedef struct
{///!!!!!和 D_TS_adc_SPara_LEN 需要一一对应
u8 rev1; ////= 0x30 第一次运行
u8 ch;
vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
vU16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc)
vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
vU8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整
// vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
// vU16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc)
// vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
// vU8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整
u16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值
u16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc)
u8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
u8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整
// u8 rev1;
// u8 rev2;
// u8 rev2;
}TS_adc_SPara_;
extern TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM];

Loading…
Cancel
Save