去除AD7190校准过程,增加超低频抑制,限制零点跟踪范围,优化初始称重传感器倍率,增加含水量含固量湿重率回潮率,限制称重调零范文不大于总称量的4%,修复型号未对应立项书参数bug,提高SPI速率,增加SPI超时退出机制。
This commit is contained in:
parent
efcb158126
commit
c13a96ff84
File diff suppressed because it is too large
Load Diff
220
Moisture.uvoptx
220
Moisture.uvoptx
@ -103,7 +103,7 @@
|
||||
<bEvRecOn>1</bEvRecOn>
|
||||
<bSchkAxf>0</bSchkAxf>
|
||||
<bTchkAxf>0</bTchkAxf>
|
||||
<nTsel>4</nTsel>
|
||||
<nTsel>3</nTsel>
|
||||
<sDll></sDll>
|
||||
<sDllPa></sDllPa>
|
||||
<sDlgDll></sDlgDll>
|
||||
@ -114,9 +114,29 @@
|
||||
<tDlgDll></tDlgDll>
|
||||
<tDlgPa></tDlgPa>
|
||||
<tIfile></tIfile>
|
||||
<pMon>Segger\JL2CM3.dll</pMon>
|
||||
<pMon>BIN\CMSIS_AGDI.dll</pMon>
|
||||
</DebugOpt>
|
||||
<TargetDriverDllRegistry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U941000024 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>CMSIS_AGDI</Key>
|
||||
<Name>-X"" -O206 -S8 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U38FF68063050503448221643 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ARMRTXEVENTFLAGS</Key>
|
||||
@ -135,85 +155,10 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>d</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U69400112 -O78 -S5 -ZTIFSpeedSel1000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>UL2CM3</Key>
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM))</Name>
|
||||
<Name></Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>127</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>.\Source\USARTHMI.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>109</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134223724</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\Source\AD7190.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\Moisture\Source/AD7190.c\109</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>2</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>118</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134223738</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\Source\AD7190.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\Moisture\Source/AD7190.c\118</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>3</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>131</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134223776</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\Source\AD7190.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\Moisture\Source/AD7190.c\131</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
@ -248,227 +193,252 @@
|
||||
<Ww>
|
||||
<count>6</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ADvalue2filterOld,0x0A</ItemText>
|
||||
<ItemText>buf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>7</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ADvalue2filter</ItemText>
|
||||
<ItemText>NameBuf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>8</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>CalibrateWeight2.WeightZero,0x0A</ItemText>
|
||||
<ItemText>WeightDataBuf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>9</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>HeatOutValue</ItemText>
|
||||
<ItemText>DataBufIndex,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>10</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Percent,0x0A</ItemText>
|
||||
<ItemText>\\Moisture\Source/HMI.c\WeightDataBuf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>11</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Ki</ItemText>
|
||||
<ItemText>CountNochange,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>12</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ADvalue2,0x0A</ItemText>
|
||||
<ItemText>DifErrCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>13</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>kf2</ItemText>
|
||||
<ItemText>lastdata,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>14</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>CountNochange,0x0A</ItemText>
|
||||
<ItemText>UseuLBuf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>15</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ADvalue2,0x0A</ItemText>
|
||||
<ItemText>average</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>16</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ADvalue2filter</ItemText>
|
||||
<ItemText>\\Moisture\Source/AD7190.c\UseuLBuf,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>17</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DataIn</ItemText>
|
||||
<ItemText>UseuLBuf2,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>18</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DataInbuf</ItemText>
|
||||
<ItemText>center</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>19</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>NameBuf</ItemText>
|
||||
<ItemText>\\Moisture\Source/AD7190.c\average</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>20</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>startTime</ItemText>
|
||||
<ItemText>ADvalue2filter</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>21</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>buf</ItemText>
|
||||
<ItemText>UninstiallRefWeight</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>22</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>CountDelay,0x0A</ItemText>
|
||||
<ItemText>CalibrateWeight2.WeightZero,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>23</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Title</ItemText>
|
||||
<ItemText>kf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>24</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DataLogValue</ItemText>
|
||||
<ItemText>alpf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>25</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Set,0x0A</ItemText>
|
||||
<ItemText>ChangeMax,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>26</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>len,0x0A</ItemText>
|
||||
<ItemText>ADvalue2filterOld,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>27</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ui</ItemText>
|
||||
<ItemText>WeightData2Finally</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>28</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>f</ItemText>
|
||||
<ItemText>FliterCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>29</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>WeightData2Temp</ItemText>
|
||||
<ItemText>WeightData2Finally</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>30</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>buf</ItemText>
|
||||
<ItemText>WeightData2Temp</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>31</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>NameBufSelect</ItemText>
|
||||
<ItemText>(WeightData2Temp - WeightRefStart) * ( 1.0f - FliterCount /1100.0f)</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>32</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>startTimeSelect</ItemText>
|
||||
<ItemText>Set.TempDelta</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>33</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>StartWeightSelect</ItemText>
|
||||
<ItemText>WeightZeroOld,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>34</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>StopWeightSelect</ItemText>
|
||||
<ItemText>Set,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>35</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>WaterPercentSelect</ItemText>
|
||||
<ItemText>SetZeroCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>36</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>NameBuf</ItemText>
|
||||
<ItemText>WeightData2TempOld</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>37</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>PwdBuf</ItemText>
|
||||
<ItemText>(WeightData2Temp - WeightData2Finally) * ( 1.0f - 0.9f * FliterCount / 1000)</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>38</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>NameBuf</ItemText>
|
||||
<ItemText>FliterCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>39</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>weightChanging</ItemText>
|
||||
<ItemText>WeightData2</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>40</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ErrCount</ItemText>
|
||||
<ItemText>WeightOld</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>41</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>TempI,0x0A</ItemText>
|
||||
<ItemText>WeightDataS</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>42</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>TemperatureIn</ItemText>
|
||||
<ItemText>weight11g</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>43</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>lostTick,0x0A</ItemText>
|
||||
<ItemText>ZeroWeightOld</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>44</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>CountDelay,0x0A</ItemText>
|
||||
<ItemText>ZeroWeightChange</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>45</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>oneTick,0x0A</ItemText>
|
||||
<ItemText>ADvalue2,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>46</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>LastTick,0x0A</ItemText>
|
||||
<ItemText>WeightData2Finally</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>47</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>Err,0x0A</ItemText>
|
||||
<ItemText>WeightData2</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>48</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>buf</ItemText>
|
||||
<ItemText>WeightData2Temp</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>49</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>PwdBuf</ItemText>
|
||||
<ItemText>ErrCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>50</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>NameBuf</ItemText>
|
||||
<ItemText>DifErrCountAdd,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>51</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ErrcountAdd,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>52</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>WeightDataBuf</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>53</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DataBufIndex,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>54</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>LCount,0x0A</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>55</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>DataOld,0x0A</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<MemoryWindow1>
|
||||
@ -547,7 +517,7 @@
|
||||
<pMultCmdsp></pMultCmdsp>
|
||||
<DebugDescription>
|
||||
<Enable>1</Enable>
|
||||
<EnableFlashSeq>1</EnableFlashSeq>
|
||||
<EnableFlashSeq>0</EnableFlashSeq>
|
||||
<EnableLog>0</EnableLog>
|
||||
<Protocol>2</Protocol>
|
||||
<DbgClock>10000000</DbgClock>
|
||||
|
||||
112
Moisture.uvprojx
112
Moisture.uvprojx
@ -17,8 +17,8 @@
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F103C8</Device>
|
||||
<Vendor>STMicroelectronics</Vendor>
|
||||
<PackID>Keil.STM32F1xx_DFP.2.4.1</PackID>
|
||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
||||
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
|
||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||
<Cpu>IRAM(0x20000000,0x00005000) IROM(0x08000000,0x00010000) CPUTYPE("Cortex-M3") CLOCK(12000000) ELITTLE</Cpu>
|
||||
<FlashUtilSpec></FlashUtilSpec>
|
||||
<StartupFile></StartupFile>
|
||||
@ -139,7 +139,7 @@
|
||||
</Flash1>
|
||||
<bUseTDR>1</bUseTDR>
|
||||
<Flash2>BIN\UL2CM3.DLL</Flash2>
|
||||
<Flash3>"" ()</Flash3>
|
||||
<Flash3></Flash3>
|
||||
<Flash4></Flash4>
|
||||
<pFcarmOut></pFcarmOut>
|
||||
<pFcarmGrp></pFcarmGrp>
|
||||
@ -177,7 +177,7 @@
|
||||
<GenPPlst>0</GenPPlst>
|
||||
<AdsCpuType>"Cortex-M3"</AdsCpuType>
|
||||
<RvctDeviceName></RvctDeviceName>
|
||||
<mOS>0</mOS>
|
||||
<mOS>1</mOS>
|
||||
<uocRom>0</uocRom>
|
||||
<uocRam>0</uocRam>
|
||||
<hadIROM>1</hadIROM>
|
||||
@ -191,7 +191,7 @@
|
||||
<hadIRAM2>0</hadIRAM2>
|
||||
<hadIROM2>0</hadIROM2>
|
||||
<StupSel>8</StupSel>
|
||||
<useUlib>0</useUlib>
|
||||
<useUlib>1</useUlib>
|
||||
<EndSel>0</EndSel>
|
||||
<uLtcg>0</uLtcg>
|
||||
<nSecure>0</nSecure>
|
||||
@ -424,6 +424,57 @@
|
||||
<FileName>CS5552.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>.\Source\CS5552.c</FilePath>
|
||||
<FileOption>
|
||||
<CommonProperty>
|
||||
<UseCPPCompiler>2</UseCPPCompiler>
|
||||
<RVCTCodeConst>0</RVCTCodeConst>
|
||||
<RVCTZI>0</RVCTZI>
|
||||
<RVCTOtherData>0</RVCTOtherData>
|
||||
<ModuleSelection>0</ModuleSelection>
|
||||
<IncludeInBuild>0</IncludeInBuild>
|
||||
<AlwaysBuild>2</AlwaysBuild>
|
||||
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||
<PublicsOnly>2</PublicsOnly>
|
||||
<StopOnExitCode>11</StopOnExitCode>
|
||||
<CustomArgument></CustomArgument>
|
||||
<IncludeLibraryModules></IncludeLibraryModules>
|
||||
<ComprImg>1</ComprImg>
|
||||
</CommonProperty>
|
||||
<FileArmAds>
|
||||
<Cads>
|
||||
<interw>2</interw>
|
||||
<Optim>0</Optim>
|
||||
<oTime>2</oTime>
|
||||
<SplitLS>2</SplitLS>
|
||||
<OneElfS>2</OneElfS>
|
||||
<Strict>2</Strict>
|
||||
<EnumInt>2</EnumInt>
|
||||
<PlainCh>2</PlainCh>
|
||||
<Ropi>2</Ropi>
|
||||
<Rwpi>2</Rwpi>
|
||||
<wLevel>0</wLevel>
|
||||
<uThumb>2</uThumb>
|
||||
<uSurpInc>2</uSurpInc>
|
||||
<uC99>2</uC99>
|
||||
<uGnu>2</uGnu>
|
||||
<useXO>2</useXO>
|
||||
<v6Lang>0</v6Lang>
|
||||
<v6LangP>0</v6LangP>
|
||||
<vShortEn>2</vShortEn>
|
||||
<vShortWch>2</vShortWch>
|
||||
<v6Lto>2</v6Lto>
|
||||
<v6WtE>2</v6WtE>
|
||||
<v6Rtti>2</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath></IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
</FileArmAds>
|
||||
</FileOption>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>AD7190.c</FileName>
|
||||
@ -477,12 +528,12 @@
|
||||
<filter>
|
||||
<targetInfos/>
|
||||
</filter>
|
||||
<package name="CMSIS-Compiler" vendor="ARM">
|
||||
<package name="CMSIS-RTX" vendor="ARM">
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</package>
|
||||
<package name="CMSIS-RTX" vendor="ARM">
|
||||
<package name="CMSIS-RTX" schemaVersion="1.7.36" url="https://www.keil.com/pack/" vendor="ARM" version="5.9.0">
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
@ -492,7 +543,12 @@
|
||||
<targetInfo name="Moisture" versionMatchMode="fixed"/>
|
||||
</targetInfos>
|
||||
</package>
|
||||
<package name="STM32F1xx_DFP" vendor="Keil" version="2.4.1">
|
||||
<package name="ARM_Compiler" vendor="Keil">
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</package>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0">
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture" versionMatchMode="fixed"/>
|
||||
</targetInfos>
|
||||
@ -520,49 +576,49 @@
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="ADC" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="ADC" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="Framework" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="Framework" Cvendor="Keil" Cversion="3.5.1" condition="STM32F1xx STDPERIPH">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="GPIO" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="GPIO" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="RCC" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="RCC" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="SPI" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="SPI" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="TIM" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="TIM" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</component>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="USART" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="http://www.keil.com/pack/" vendor="Keil" version="2.4.0"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="USART" Cvendor="Keil" Cversion="3.5.0" condition="STM32F1xx STDPERIPH RCC">
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
@ -580,7 +636,7 @@
|
||||
<file attr="config" category="header" name="RTE_Driver\Config\RTE_Device.h" version="1.1.2">
|
||||
<instance index="0">RTE\Device\STM32F103C8\RTE_Device.h</instance>
|
||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
@ -588,15 +644,15 @@
|
||||
<file attr="config" category="source" condition="STM32F1xx MD ARMCC" name="Device\Source\ARM\startup_stm32f10x_md.s" version="1.0.1">
|
||||
<instance index="0">RTE\Device\STM32F103C8\startup_stm32f10x_md.s</instance>
|
||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
</file>
|
||||
<file attr="config" category="source" name="Device\StdPeriph_Driver\templates\stm32f10x_conf.h" version="3.6.0">
|
||||
<instance index="0">RTE\Device\STM32F103C8\stm32f10x_conf.h</instance>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="Framework" Cvendor="Keil" Cversion="3.6.0" condition="STM32F1xx STDPERIPH"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
|
||||
<component Cclass="Device" Cgroup="StdPeriph Drivers" Csub="Framework" Cvendor="Keil" Cversion="3.5.1" condition="STM32F1xx STDPERIPH"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
@ -604,7 +660,7 @@
|
||||
<file attr="config" category="source" name="Device\Source\system_stm32f10x.c" version="1.0.1">
|
||||
<instance index="0">RTE\Device\STM32F103C8\system_stm32f10x.c</instance>
|
||||
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
|
||||
<package name="STM32F1xx_DFP" schemaVersion="1.4.0" url="http://www.keil.com/pack/" vendor="Keil" version="2.2.0"/>
|
||||
<targetInfos>
|
||||
<targetInfo name="Moisture"/>
|
||||
</targetInfos>
|
||||
|
||||
Binary file not shown.
2047
Objects/Moisture.hex
2047
Objects/Moisture.hex
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* UVISION generated file: DO NOT EDIT!
|
||||
* Generated by: uVision version 5.40.0.0
|
||||
* Generated by: uVision version 5.42.0.0
|
||||
*
|
||||
* Project: 'Moisture'
|
||||
* Target: 'Moisture'
|
||||
@ -17,20 +17,20 @@
|
||||
|
||||
/* ARM::CMSIS:RTOS:Keil RTX@4.82.0 */
|
||||
#define RTE_CMSIS_RTOS /* CMSIS-RTOS */
|
||||
#define RTE_CMSIS_RTOS_RTX /* CMSIS-RTOS Keil RTX */
|
||||
/* Keil::Device:StdPeriph Drivers:ADC@3.6.0 */
|
||||
#define RTE_CMSIS_RTOS_RTX /* CMSIS-RTOS Keil RTX */
|
||||
/* Keil::Device:StdPeriph Drivers:ADC@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_ADC
|
||||
/* Keil::Device:StdPeriph Drivers:Framework@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:Framework@3.5.1 */
|
||||
#define RTE_DEVICE_STDPERIPH_FRAMEWORK
|
||||
/* Keil::Device:StdPeriph Drivers:GPIO@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:GPIO@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_GPIO
|
||||
/* Keil::Device:StdPeriph Drivers:RCC@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:RCC@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_RCC
|
||||
/* Keil::Device:StdPeriph Drivers:SPI@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:SPI@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_SPI
|
||||
/* Keil::Device:StdPeriph Drivers:TIM@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:TIM@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_TIM
|
||||
/* Keil::Device:StdPeriph Drivers:USART@3.6.0 */
|
||||
/* Keil::Device:StdPeriph Drivers:USART@3.5.0 */
|
||||
#define RTE_DEVICE_STDPERIPH_USART
|
||||
|
||||
|
||||
|
||||
396
Source/AD7190.c
396
Source/AD7190.c
@ -1,6 +1,8 @@
|
||||
#include "spi.h"
|
||||
#include "APPDEF.H"
|
||||
#include "math.h"
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
// AD7190寄存器地址定义
|
||||
#define AD7190_REG_COMM 0x00 << 3
|
||||
#define AD7190_REG_STAT 0x00 << 3
|
||||
@ -15,26 +17,39 @@
|
||||
#define AD7190_CMD_RD 0x40
|
||||
|
||||
// AD7190配置寄存器位掩码
|
||||
#define AD7190_CONF_CH_MASK 0x000F
|
||||
#define AD7190_CONF_BURNOUT 0x0800
|
||||
#define AD7190_CONF_REFSEL 0x0400
|
||||
#define AD7190_CONF_GAIN_MASK 0x0038
|
||||
#define AD7190_CONF_MODE_MASK 0x0C00
|
||||
|
||||
#define AD7190_CONF_CHOP 0x800000
|
||||
#define AD7190_CONF_REFSEL2 0x100000
|
||||
// AD7190配置寄存器通道选择
|
||||
#define AD7190_CONF_CH7 0x008000
|
||||
#define AD7190_CONF_CH6 0x004000
|
||||
#define AD7190_CONF_CH5 0x002000
|
||||
#define AD7190_CONF_CH4 0x001000
|
||||
#define AD7190_CONF_CH3 0x000800
|
||||
#define AD7190_CONF_CH2 0x000400
|
||||
#define AD7190_CONF_CH1 0x000200
|
||||
#define AD7190_CONF_CH0 0x000100
|
||||
// AD7190配置寄存器
|
||||
#define AD7190_CONF_BURNOUT 0x000080
|
||||
#define AD7190_CONF_REFDET 0x000040
|
||||
#define AD7190_CONF_BUF 0x000010
|
||||
#define AD7190_CONF_UB 0x000008
|
||||
// AD7190配置寄存器增益定义
|
||||
#define AD7190_CONF_GAIN_1 0x00
|
||||
#define AD7190_CONF_GAIN_8 0x08
|
||||
#define AD7190_CONF_GAIN_16 0x10
|
||||
#define AD7190_CONF_GAIN_32 0x18
|
||||
#define AD7190_CONF_GAIN_64 0x20
|
||||
#define AD7190_CONF_GAIN_128 0x28
|
||||
#define AD7190_CONF_GAIN_256 0x30
|
||||
#define AD7190_CONF_GAIN_1 0x000000
|
||||
#define AD7190_CONF_GAIN_8 0x000003
|
||||
#define AD7190_CONF_GAIN_16 0x000004
|
||||
#define AD7190_CONF_GAIN_32 0x000005
|
||||
#define AD7190_CONF_GAIN_64 0x000006
|
||||
#define AD7190_CONF_GAIN_128 0x000007
|
||||
|
||||
// AD7190配置寄存器工作模式定义
|
||||
#define AD7190_CONF_MODE_CONT 0x000000
|
||||
#define AD7190_CONF_MODE_ZEROSEL 0x800000
|
||||
#define AD7190_CONF_MODE_FullSEL 0xA00000
|
||||
#define AD7190_CONF_MODE_FS9_0 0x0003FF
|
||||
#define AD7190_CONF_MODE_FS9_0 0x0003FF // 4.7Hz
|
||||
#define AD7190_CONF_MODE_FS9_02 0x0001E0//10Hz
|
||||
#define AD7190_CONF_MODE_FS9_03 0x000096//50Hz
|
||||
|
||||
#define AD7190_CONF_MODE_InCLK 0x080000// 4.92 MHz内部时钟 MCLK2引脚为三态
|
||||
// AD7190 电桥开关
|
||||
#define AD7190_GPOCON_BDPSW 0x40
|
||||
|
||||
@ -71,11 +86,7 @@ uint8_t AD7190_ReadRegisterOnce(uint8_t regAddr)
|
||||
bool AD7190_WaitForReady(uint32_t timeout)
|
||||
{
|
||||
uint32_t count = 0;
|
||||
// SPI1_ReadWrite(AD7190_CMD_RD | AD7190_REG_STAT);
|
||||
// while ((SPI1_ReadWrite(0xFF) & 0x80) && (count < timeout)) {
|
||||
// delay_us(1);
|
||||
// count++;
|
||||
// }
|
||||
|
||||
while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) && (count < timeout))
|
||||
{
|
||||
delay_us(1);
|
||||
@ -98,24 +109,89 @@ bool AD7190_WaitForReady(uint32_t timeout)
|
||||
// // 获取 ADC 参考电压值(一般为 3.3V)
|
||||
// float Vref = 3.3; // 参考电压值(V)
|
||||
//float TemperatureIn;
|
||||
|
||||
uint8_t ErrCount;
|
||||
uint32_t AD7190_ReadData()
|
||||
uint16_t DifErrCount;
|
||||
uint32_t lastdata = 0;
|
||||
uint32_t UseuLBuf[20];
|
||||
uint32_t UseuLBuf2[20];
|
||||
uint16_t BufIndex = 0;
|
||||
// 计算一组数字的平均值
|
||||
float calculateAverage(uint32_t arr[], int size)
|
||||
{
|
||||
double sum = 0.0;
|
||||
|
||||
// 计算总和
|
||||
int i;
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
sum += arr[i];
|
||||
}
|
||||
|
||||
// 计算平均值
|
||||
double average = sum / size;
|
||||
|
||||
return average;
|
||||
}
|
||||
|
||||
void bubbleSort(uint32_t *arr, int n) {
|
||||
int i, j, temp;
|
||||
for (i = 0; i < n-1; i++) {
|
||||
for (j = 0; j < n-i-1; j++) {
|
||||
if (arr[j] > arr[j+1]) {
|
||||
// 交换 arr[j] 和 arr[j+1]
|
||||
temp = arr[j];
|
||||
arr[j] = arr[j+1];
|
||||
arr[j+1] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
***********************************************************
|
||||
* @brief printf函数默认打印输出到显示器,如果要输出到串口,
|
||||
必须重新实现fputc函数,将输出指向串口,称为重定向
|
||||
* @param
|
||||
* @return
|
||||
***********************************************************
|
||||
*/
|
||||
int fputc(int ch, FILE *f)
|
||||
{
|
||||
while (!(READ_BIT(USART1->SR, USART_SR_TXE))) {
|
||||
delay_us(100);
|
||||
}
|
||||
USART1->DR = ch;
|
||||
return ch;
|
||||
}
|
||||
|
||||
|
||||
float average;
|
||||
float center;
|
||||
int ErrcountAdd = 0;
|
||||
int DifErrCountAdd = 0;
|
||||
uint32_t AD7190_ReadData( void )
|
||||
{
|
||||
uint32_t data = 0;
|
||||
//uint16_t TempI;
|
||||
|
||||
if(AD7190_WaitForReady(50000))
|
||||
{
|
||||
data = AD7190_ReadRegister(AD7190_REG_DATA);
|
||||
// TempI = Read_Internal_Temperature();
|
||||
// // 将 ADC 值转换为电压值
|
||||
// float V_ADC = (TempI * Vref) / 4095;
|
||||
|
||||
// // 计算温度值(摄氏度)
|
||||
// TemperatureIn = ((V25 - V_ADC)*1000 / Avg_Slope) + 25.0;
|
||||
if(data > 15000000)
|
||||
if(fabs((int)data - (int)lastdata) > 100000 )
|
||||
{
|
||||
DifErrCount ++;
|
||||
DifErrCountAdd++;
|
||||
}
|
||||
else
|
||||
{
|
||||
DifErrCount = 0;
|
||||
}
|
||||
lastdata = data;
|
||||
if((data > 8388608) || (data < 100 ))
|
||||
{
|
||||
ErrCount++;
|
||||
ErrcountAdd++;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -125,76 +201,53 @@ uint32_t AD7190_ReadData()
|
||||
else
|
||||
{
|
||||
ErrCount++;
|
||||
ErrcountAdd++;
|
||||
}
|
||||
if(ErrCount > 10)
|
||||
if(ErrCount > 3 || DifErrCount > 20)
|
||||
{
|
||||
uint32_t modeReg;
|
||||
|
||||
SPI1_Configuration();
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF); // 40个脉冲复位ADC
|
||||
osDelay(50);
|
||||
uint32_t modeReg;
|
||||
// 配置寄存器:通道选择、参考电压源、增益和工作模式
|
||||
// 打开PSW
|
||||
uint8_t GPOC = AD7190_ReadRegisterOnce(AD7190_REG_GPOC);
|
||||
GPOC |= AD7190_GPOCON_BDPSW;
|
||||
AD7190_WriteRegisterOnce(AD7190_REG_GPOC, GPOC);
|
||||
osDelay(5);
|
||||
uint32_t config = 0x0000011F;
|
||||
uint32_t config = AD7190_CONF_GAIN_128 | AD7190_CONF_UB | AD7190_CONF_BUF | AD7190_CONF_CH0;// 0x0000011F;
|
||||
AD7190_WriteRegister(AD7190_REG_CONF, config);
|
||||
osDelay(5);
|
||||
modeReg |= AD7190_CONF_MODE_FS9_0; // 滤波器最低速率输出
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
// 执行上电校准
|
||||
modeReg = AD7190_ReadRegister(AD7190_REG_MODE);
|
||||
modeReg &= ~0x00E00000;
|
||||
modeReg |= AD7190_CONF_MODE_ZEROSEL;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
AD7190_WaitForReady(1000000);
|
||||
modeReg &= ~0x00E00000;
|
||||
modeReg |= AD7190_CONF_MODE_FullSEL;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
AD7190_WaitForReady(1000000);
|
||||
// 校准完成 切换回连续转换模式
|
||||
modeReg = 0x000803FF;
|
||||
|
||||
// 连续转换模式
|
||||
modeReg = AD7190_CONF_MODE_FS9_0 | AD7190_CONF_MODE_InCLK;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
|
||||
|
||||
ErrCount = 0;
|
||||
osDelay(500);
|
||||
if(AD7190_WaitForReady(50000))
|
||||
{
|
||||
data = AD7190_ReadRegister(AD7190_REG_DATA);
|
||||
}
|
||||
|
||||
}
|
||||
return data;
|
||||
}
|
||||
// AD7190函数:读取AD转换结果并转换为实际电压值
|
||||
// static void bubbleSort2(float *num)
|
||||
//{
|
||||
// float temp;
|
||||
// int i, j;
|
||||
// for (i = 0; i < 5; i++) {
|
||||
// for (j = 0; j < 5 - i; j++) {
|
||||
// if (num[j] > num[j + 1]) {
|
||||
// // 交换相邻元素的值
|
||||
// temp = num[j];
|
||||
// num[j] = num[j + 1];
|
||||
// num[j + 1] = temp;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//} // 定义卡尔曼滤波器的参数结构体
|
||||
|
||||
// 定义卡尔曼滤波器的参数结构体
|
||||
typedef struct
|
||||
{
|
||||
float x; // 状态估计值
|
||||
float P; // 状态协方差
|
||||
float Q; // 过程噪声协方差
|
||||
float R; // 观测噪声协方差
|
||||
float K; // 卡尔曼增益
|
||||
double x; // 状态估计值
|
||||
double P; // 状态协方差
|
||||
double Q; // 过程噪声协方差
|
||||
double R; // 观测噪声协方差
|
||||
double K; // 卡尔曼增益
|
||||
} KalmanFilter;
|
||||
KalmanFilter kf2;
|
||||
|
||||
@ -220,27 +273,50 @@ void kalman_filter_update2(KalmanFilter *kf, float measurement)
|
||||
kf->P = (1 - kf->K) * P_pred; // 更新状态协方差
|
||||
}
|
||||
|
||||
float WeightData2 = 0.0f;
|
||||
float ADvalue2filter = 0.0f;
|
||||
// static float bufferdata2[5];
|
||||
// static float dataout2[5];
|
||||
static float WeightData2Temp = 0.0f;
|
||||
int32_t ADvalue2filterOld = 0;
|
||||
int32_t ADvalue2 = 0;
|
||||
uint8_t ic2 = 0;
|
||||
|
||||
uint8_t FollowCount = 0; // 零点跟踪计数
|
||||
uint8_t TimeCount = 0; // 蠕变时间计数
|
||||
uint32_t FliterCount = 0; // 长期抑制计数
|
||||
uint16_t SetZeroCount = 0; // 卸载归零计数
|
||||
|
||||
int32_t ADvalue2 = 0; // ADC采样原始值
|
||||
|
||||
double ADvalue2filter = 0.0f; // ADC采样卡尔曼滤波值
|
||||
double ADvalue2filterOld = 0; // 上次ADC采样卡尔曼滤波值
|
||||
|
||||
double WeightData2Temp = 0.0f; // 本次ADvalue2filter计算重量值
|
||||
double WeightData2TempOld; // 上次ADvalue2filter计算重量值
|
||||
|
||||
double WeightData2Finally = 0.0f; // 最终输出前重量值
|
||||
|
||||
double UninstiallRefWeight= 0.0f; // 卸载重物时的重量值
|
||||
|
||||
double WeightZeroOld = 0; // 上次稳定状态时零点值
|
||||
struct uCalibrateWeight CalibrateWeight2; //传感器 斜率 零点
|
||||
|
||||
double WeightData2 = 0.0f; // 最终输出重量值
|
||||
bool weightChanging = false; // 传感器稳定标志
|
||||
bool weight11g = false; // 传感器稳定标志
|
||||
float ZeroWeightOld;
|
||||
float ZeroWeightChange;
|
||||
|
||||
float LowFecAlpha = 0.95f; // 超低频波动抑制系数,发生突变时偏向跟踪新值,相对稳定时跟踪旧值
|
||||
float WeightRefStart = 0;
|
||||
|
||||
uint8_t i;
|
||||
int32_t data2 = 0;
|
||||
struct uCalibrateWeight CalibrateWeight2;
|
||||
uint8_t FollowCount = 0;
|
||||
uint8_t TimeCount = 0;
|
||||
int32_t WeightZeroOld = 0;
|
||||
uint32_t modeRega;
|
||||
uint32_t configa;
|
||||
uint32_t configao;
|
||||
bool weightChanging = false;
|
||||
#include "APPDEF.H"
|
||||
|
||||
#define ChangeMax 10
|
||||
#define ZeroTrackMax 0.050f
|
||||
#define FollowMax 0.030f
|
||||
#define FliterCountMax 200
|
||||
#define FollowDlteaMax 0.001f
|
||||
#define FollowAlpha 0.9999f // 长期数据跟踪系数
|
||||
void AD7190_Run(const void *p_arg)
|
||||
{
|
||||
uint8_t FilterQOld, SensorQOld, ZeroTrackOld, RuBianLiangOld, ruBianTimeOld;
|
||||
int8_t RubianLiang, RubianTime;
|
||||
float ZeroTrackTime, ZeroTrackRange;
|
||||
|
||||
osDelay(600);
|
||||
ADvalue2 = AD7190_ReadData();
|
||||
osDelay(200);
|
||||
@ -248,10 +324,6 @@ void AD7190_Run(const void *p_arg)
|
||||
ADvalue2filterOld = ADvalue2filter = ADvalue2;
|
||||
kalman_filter_init2(&kf2, ADvalue2, 1.0, 0.001, 0.1);
|
||||
WeightZeroOld = CalibrateWeight2.WeightZero;
|
||||
|
||||
uint8_t FilterQOld, SensorQOld, ZeroTrackOld, RuBianLiangOld, ruBianTimeOld;
|
||||
int8_t RubianLiang, RubianTime;
|
||||
float ZeroTrackTime, ZeroTrackRange;
|
||||
for (;;)
|
||||
{
|
||||
if (FilterQOld != Set.FilterQ)
|
||||
@ -338,8 +410,8 @@ void AD7190_Run(const void *p_arg)
|
||||
switch (ZeroTrackOld)
|
||||
{
|
||||
case 0:
|
||||
ZeroTrackTime = 20;
|
||||
ZeroTrackRange = 0;
|
||||
ZeroTrackTime = 20; // 连续20秒
|
||||
ZeroTrackRange = 0; // 相邻两次采样数据小于0.000g
|
||||
break;
|
||||
case 1:
|
||||
ZeroTrackTime = 15;
|
||||
@ -463,13 +535,74 @@ void AD7190_Run(const void *p_arg)
|
||||
}
|
||||
}
|
||||
|
||||
osDelay(190);
|
||||
ADvalue2 = AD7190_ReadData();
|
||||
kalman_filter_update2(&kf2, ADvalue2); // 更新步骤
|
||||
ADvalue2filter = kf2.x;
|
||||
|
||||
WeightData2Temp = CalibrateWeight2.WeightSlope * ((int32_t)ADvalue2filter - (int32_t)CalibrateWeight2.WeightZero);
|
||||
if( RubianLiang != 0 )
|
||||
osDelay(200);
|
||||
ADvalue2 = AD7190_ReadData(); //4.7Hz 213ms
|
||||
kalman_filter_update2(&kf2, ADvalue2); // 更新步骤
|
||||
if(fabs(ADvalue2filter - kf2.x) < ChangeMax )
|
||||
{
|
||||
LowFecAlpha = 0.95; // 数据处于稳定状态 未有重量突变或小幅度连续单向改变时信任上次值
|
||||
}
|
||||
else
|
||||
{
|
||||
LowFecAlpha = 0.5; // 数据处于较大波动状态 有重量突变或小幅度连续单向改变时信任本次值
|
||||
}
|
||||
ADvalue2filter = kf2.x *(1-LowFecAlpha)+ADvalue2filter*LowFecAlpha;
|
||||
// if(pageNum != 1)
|
||||
// {
|
||||
|
||||
// if(WeightData2TempOld - WeightData2Temp > 0.500f) // 卸载重物
|
||||
// {
|
||||
// if(UninstiallRefWeight < 0.005f) // 如果未触发归零条件
|
||||
// {
|
||||
// UninstiallRefWeight = WeightData2TempOld;
|
||||
// WeightZeroOld = CalibrateWeight2.WeightZero; // 备份零点原始值,以备不稳定状态下重新加载重物导致数据不准确
|
||||
// }
|
||||
// }
|
||||
// else if(WeightData2TempOld - WeightData2Temp < -0.500f)//加载重物
|
||||
// {
|
||||
// UninstiallRefWeight = 0.0f;
|
||||
// if( WeightZeroOld != CalibrateWeight2.WeightZero)
|
||||
// {
|
||||
// CalibrateWeight2.WeightZero = WeightZeroOld; // 置零未完成或零点跟踪未完成,恢复至改变前零点值,防止数据不准确
|
||||
// }
|
||||
// SetZeroCount = 0;
|
||||
// }
|
||||
// if(UninstiallRefWeight > 0.005f) // 卸载重物后接近归零时进行归零操作
|
||||
// {
|
||||
// if(SetZeroCount++ > 50 ) // 归零后重置触发归零条件
|
||||
// {
|
||||
//
|
||||
// UninstiallRefWeight = 0.0f;
|
||||
// WeightZeroOld = CalibrateWeight2.WeightZero;
|
||||
// SetZeroCount = 0;
|
||||
// }
|
||||
// if(fabs(WeightData2Temp) < 0.100f && fabs(WeightData2Temp) > 0.004f) // 符合归零区间范围则缓慢归零
|
||||
// {
|
||||
// SetZeroCount = 0;
|
||||
// CalibrateWeight2.WeightZero += WeightData2Temp / CalibrateWeight2.WeightSlope / 10;
|
||||
// ZeroWeightChange = CalibrateWeight2.WeightSlope * (ADvalue2filter - CalibrateWeight2.WeightZero);
|
||||
// }
|
||||
// ZeroWeightOld = CalibrateWeight2.WeightSlope * (ADvalue2filter - WeightZeroOld);
|
||||
// if( fabs(ZeroWeightOld) <= fabs(ZeroWeightChange) )
|
||||
// {
|
||||
// weight11g=0;
|
||||
// CalibrateWeight2.WeightZero = WeightZeroOld;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// weight11g=1;
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
WeightData2TempOld = WeightData2Temp;
|
||||
WeightData2Temp = CalibrateWeight2.WeightSlope * (ADvalue2filter - CalibrateWeight2.WeightZero);
|
||||
|
||||
// printf("%f,%f,%f,%.4f\n",Temperature,ADvalue2filter,WeightData2Temp,WeightData2Finally);
|
||||
|
||||
if( RubianLiang != 0 ) // 蠕变
|
||||
{
|
||||
if (TimeCount++ > 4 * RubianTime) // 动态称重时蠕变跟踪
|
||||
{
|
||||
@ -482,13 +615,14 @@ void AD7190_Run(const void *p_arg)
|
||||
}
|
||||
}
|
||||
|
||||
if (fabs(WeightData2 - WeightData2Temp) < ZeroTrackRange)
|
||||
if (fabs(WeightData2TempOld - WeightData2Temp) < ZeroTrackRange && fabs(WeightData2Temp) < ZeroTrackMax && ( pageNum != 1)) // 符合跟踪范围 型评 当示值为零或相当于毛重为0时 负的净重值,且未运行,且水分测定仪处于平衡稳定状态 才允许运行
|
||||
{
|
||||
if (FollowCount++ > 4 * ZeroTrackTime) // 零点动态跟踪
|
||||
{
|
||||
FollowCount = 0;
|
||||
TimeCount = 0;
|
||||
CalibrateWeight2.WeightZero += ADvalue2filter - ADvalue2filterOld;
|
||||
WeightZeroOld = CalibrateWeight2.WeightZero;
|
||||
ADvalue2filterOld = ADvalue2filter;
|
||||
}
|
||||
}
|
||||
@ -497,7 +631,23 @@ void AD7190_Run(const void *p_arg)
|
||||
FollowCount = 0;
|
||||
ADvalue2filterOld = ADvalue2filter;
|
||||
}
|
||||
if (fabs(WeightData2 - WeightData2Temp) > 0.01f)
|
||||
|
||||
if ( fabs(WeightData2Temp) > ZeroTrackMax && fabs(WeightData2TempOld - WeightData2Temp) < FollowDlteaMax && fabs(WeightData2Temp - WeightRefStart) < FollowMax && ( pageNum != 1)) //重量不变且大于零点跟踪范围未加热进行长期数据跟踪
|
||||
{
|
||||
if(FliterCount < FliterCountMax)
|
||||
FliterCount++;
|
||||
else
|
||||
FliterCount = FliterCountMax;
|
||||
WeightData2Finally = WeightData2Finally + (WeightData2Temp - WeightData2Finally) * ( 1.00000f - FollowAlpha * FliterCount / FliterCountMax);
|
||||
}
|
||||
else
|
||||
{
|
||||
WeightData2Finally = WeightRefStart = WeightData2Temp;
|
||||
FliterCount = 0;
|
||||
}
|
||||
|
||||
|
||||
if (fabs(WeightData2 - WeightData2Finally) > 0.006f) // 变化大于50mg/s 置位传感器不稳定标志
|
||||
{
|
||||
weightChanging = 1;
|
||||
}
|
||||
@ -505,12 +655,17 @@ void AD7190_Run(const void *p_arg)
|
||||
{
|
||||
weightChanging = 0;
|
||||
}
|
||||
if (fabs(WeightData2 - WeightData2Temp) > 0.001f) // 数据滤波
|
||||
{
|
||||
|
||||
WeightData2Temp = (int32_t)(WeightData2Temp * 10000) / 10000.0f;
|
||||
WeightData2 = WeightData2Temp;
|
||||
|
||||
if (fabs(WeightData2 - WeightData2Finally) > 0.0002f) // 数据滤波
|
||||
{
|
||||
WeightData2 = (int32_t)(WeightData2Finally * 10000) / 10000.0f;
|
||||
}
|
||||
else if(fabs(WeightData2Finally) < 0.001f)
|
||||
{
|
||||
WeightData2 = (int32_t)(WeightData2Finally * 10000) / 10000.0f;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -518,44 +673,33 @@ osThreadDef(AD7190_Run, osPriorityNormal, 1, 0);
|
||||
// AD7190函数:初始化AD7190
|
||||
void AD7190_Init()
|
||||
{
|
||||
uint32_t modeReg;
|
||||
|
||||
SPI1_Configuration();
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF);
|
||||
SPI1_ReadWrite(0xFF); // 40个脉冲复位ADC
|
||||
osDelay(50);
|
||||
uint32_t modeReg;
|
||||
// 配置寄存器:通道选择、参考电压源、增益和工作模式
|
||||
// 打开PSW
|
||||
uint8_t GPOC = AD7190_ReadRegisterOnce(AD7190_REG_GPOC);
|
||||
GPOC |= AD7190_GPOCON_BDPSW;
|
||||
AD7190_WriteRegisterOnce(AD7190_REG_GPOC, GPOC);
|
||||
osDelay(5);
|
||||
uint32_t config = 0x0000011F;
|
||||
uint32_t config = AD7190_CONF_GAIN_128 | AD7190_CONF_UB | AD7190_CONF_BUF | AD7190_CONF_CH0;// 0x0000011F;
|
||||
AD7190_WriteRegister(AD7190_REG_CONF, config);
|
||||
osDelay(5);
|
||||
modeReg |= AD7190_CONF_MODE_FS9_0; // 滤波器最低速率输出
|
||||
modeReg = AD7190_CONF_MODE_FS9_0 ;// 滤波器最低速率输出 执行上电校准
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
// 执行上电校准
|
||||
modeReg = AD7190_ReadRegister(AD7190_REG_MODE);
|
||||
modeReg &= ~0x00E00000;
|
||||
modeReg |= AD7190_CONF_MODE_ZEROSEL;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
AD7190_WaitForReady(1000000);
|
||||
modeReg &= ~0x00E00000;
|
||||
modeReg |= AD7190_CONF_MODE_FullSEL;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
osDelay(5);
|
||||
AD7190_WaitForReady(1000000);
|
||||
// 校准完成 切换回连续转换模式
|
||||
modeReg = 0x000803FF;
|
||||
//连续转换模式
|
||||
modeReg = AD7190_CONF_MODE_FS9_0 | AD7190_CONF_MODE_InCLK;
|
||||
AD7190_WriteRegister(AD7190_REG_MODE, modeReg);
|
||||
|
||||
CalibrateWeight2.WeightSlope = 0.0000818f;
|
||||
CalibrateWeight2.WeightZero = 745430;
|
||||
CalibrateWeight2.WeightSlope = 0.0001530345f;
|
||||
// CalibrateWeight2.WeightZero = 745430;
|
||||
|
||||
osThreadCreate(osThread(AD7190_Run), NULL);
|
||||
}
|
||||
|
||||
@ -52,21 +52,7 @@ extern uint8_t ucRegCoilsBuf[];
|
||||
*******************************************************************************/
|
||||
extern void delay_us(uint32_t us);
|
||||
|
||||
/******************************** 功能说明 *************************************
|
||||
*
|
||||
*******************************************************************************/
|
||||
extern float UltrasoundData;
|
||||
|
||||
extern float H, S, V;
|
||||
extern int sR, sG, sB;
|
||||
struct ColorH {
|
||||
float A; // 三次方
|
||||
float B; // 二次方
|
||||
float C; // 一次方
|
||||
float D; // 常数
|
||||
};
|
||||
extern struct ColorH ColorHSV;
|
||||
extern float ColorOut;
|
||||
/******************************** 功能说明 *************************************
|
||||
*
|
||||
*******************************************************************************/
|
||||
@ -80,18 +66,22 @@ extern void AD7190_Init(void);
|
||||
extern void AD7190_ReadVoltage(void);
|
||||
|
||||
extern void WeightCtrl_Init(void);
|
||||
extern uint8_t pageNum;
|
||||
|
||||
struct uCalibrateWeight {
|
||||
double WeightSlope; // 斜率
|
||||
int32_t WeightZero; // 零点
|
||||
double WeightZero; // 零点
|
||||
};
|
||||
extern struct uCalibrateWeight CalibrateWeight;
|
||||
extern struct uCalibrateWeight CalibrateWeight2;
|
||||
extern uint32_t HX711Data; // 原始数据
|
||||
extern uint32_t HX711Zero; // 原始数据
|
||||
extern float WeightData; // 重量数据
|
||||
extern float WeightData2; // 重量数据
|
||||
extern float ADvalue2filter;
|
||||
extern double WeightData2; // 重量数据
|
||||
extern double ADvalue2filter;
|
||||
extern double WeightZeroOld;
|
||||
extern double WeightData2Finally;
|
||||
extern float Temperature;
|
||||
|
||||
extern void MAX6675_Init(void);
|
||||
extern void USARTHMIInit(void);
|
||||
@ -130,7 +120,7 @@ struct Pset {
|
||||
bool SW0; // 自定义开关1
|
||||
bool SW1; // 自定义开关2
|
||||
bool SW2; // 自定义开关3
|
||||
bool PercentChange; // 含水量含固量
|
||||
uint8_t PercentType; // 含水量含固量
|
||||
uint8_t Title[32]; // 标题
|
||||
uint8_t TitleOne[32]; // 标题1
|
||||
uint8_t TitleTwo[32]; // 标题2
|
||||
@ -147,7 +137,7 @@ extern void FM24_Write(uint16_t addr, uint8_t *data, uint8_t len);
|
||||
extern void FM24_Read(uint16_t addr, uint8_t *data, uint8_t len);
|
||||
#define CalibrateWeight2Set 0x0140u
|
||||
#define RW_Set 0x0200u
|
||||
#define CRCHead 0x55AAu
|
||||
#define CRCHead 0x5A5Au
|
||||
// #define RW_WeightSlope 0x0104u
|
||||
// #define RW_WeightZero 0x0108u
|
||||
// #define RW_ColorHSV_A 0x010Cu
|
||||
|
||||
358
Source/HMI.c
358
Source/HMI.c
@ -16,16 +16,19 @@ uint8_t MaxWeight;
|
||||
uint8_t MaxTemp;
|
||||
float Resolution;
|
||||
float ResolutionWater;
|
||||
|
||||
float SHIZHONG;
|
||||
float HUICHAO;
|
||||
float StartWeight = 0;
|
||||
float StopWeight = 0;
|
||||
float WaterPercent = 0.0f;
|
||||
float PercentData = 0.0f;
|
||||
float WaterPercentData = 0.0f;
|
||||
float WeightOld = 0.0f;
|
||||
uint16_t CountNochange = 0;
|
||||
uint16_t CountDelay = 0;
|
||||
uint8_t SCount = 0;
|
||||
uint16_t SRange = 100;
|
||||
float DisData = 0;
|
||||
float FinishDisData;
|
||||
uint8_t NameBuf[40];
|
||||
uint8_t startTime[20];
|
||||
bool Finisflag = false;
|
||||
@ -35,10 +38,6 @@ void FM24DataCRC()
|
||||
{
|
||||
FM24_Read(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
FM24_Read(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
FM24_Read(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||||
if (CalibrateWeight2.WeightSlope < 0.0000001) {
|
||||
CalibrateWeight2.WeightSlope = 0.0000001;
|
||||
}
|
||||
if ((CRCHead != Set.CRC_Head) || (CRCEnd != Set.CRC_Tail)) { // 如果EEPROM中的数据未初始化或异常,则重新写入默认值
|
||||
Set.CRC_Head = CRCHead;
|
||||
Set.AutoTimeStop = 60; // 60秒
|
||||
@ -50,16 +49,16 @@ void FM24DataCRC()
|
||||
Set.FilterQ = 5; // 滤波器信任度
|
||||
Set.SensorQ = 2; // 传感器信任度
|
||||
Set.HoldTime = 5; // 稳定时间 5秒
|
||||
Set.RuBianLiang = 6; // 蠕变量
|
||||
Set.RuBianTime = 8; // 蠕变时间
|
||||
Set.ZeroTrack = 0; // 零点跟踪
|
||||
Set.RuBianLiang = 5; // 蠕变量
|
||||
Set.RuBianTime = 0; // 蠕变时间
|
||||
Set.ZeroTrack = 1; // 零点跟踪
|
||||
Set.TempDelta = 0; // 校准温度差
|
||||
Set.WeightSet = 0; // 校准重量
|
||||
Set.BaudRate = 9600; // 波特率
|
||||
Set.SW0 = false; // 自定义开关1
|
||||
Set.SW1 = false; // 自定义开关2
|
||||
Set.SW2 = false; // 自定义开关3
|
||||
Set.PercentChange = false; // 默认显示含水量
|
||||
Set.PercentType = 0; // 默认显示含水量
|
||||
sprintf((char *)Set.Title, "测试结果"); // 标题
|
||||
sprintf((char *)Set.TitleOne, "山东云唐智能科技有限公司"); // 标题1
|
||||
sprintf((char *)Set.TitleTwo, ""); // 标题2
|
||||
@ -67,11 +66,16 @@ void FM24DataCRC()
|
||||
sprintf((char *)Set.UserName, "实验室"); // 用户名
|
||||
sprintf((char *)Set.UserPwd, "123456"); // 密码
|
||||
Set.CRC_Tail = CRCEnd;
|
||||
// FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||||
}
|
||||
FM24_Read(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||||
if (CalibrateWeight2.WeightSlope < 0.0000001)
|
||||
{
|
||||
CalibrateWeight2.WeightSlope = 0.0000818f;
|
||||
CalibrateWeight2.WeightZero = 745430;
|
||||
// FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||||
}
|
||||
|
||||
}
|
||||
//bool t17Dis = false;
|
||||
//uint16_t t17DisCount =0;
|
||||
@ -137,7 +141,7 @@ void DataUnpack(const void *p_arg)
|
||||
NameBuf[i] = DataInbuf[i + 9];
|
||||
}
|
||||
break;
|
||||
case 0x0016: // 定时停机时间
|
||||
case 0x0013: // 定时停机时间
|
||||
{
|
||||
uint16_t TimeSt = DataInbuf[3] + (DataInbuf[4] << 8);
|
||||
if (TimeSt == 0) {
|
||||
@ -152,7 +156,7 @@ void DataUnpack(const void *p_arg)
|
||||
}
|
||||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
break;
|
||||
case 0x0017: // 干燥温度
|
||||
case 0x0014: // 干燥温度
|
||||
{
|
||||
uint16_t TempSe = DataInbuf[3] + (DataInbuf[4] << 8);
|
||||
if (TempSe < 40) {
|
||||
@ -167,17 +171,23 @@ void DataUnpack(const void *p_arg)
|
||||
}
|
||||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
break;
|
||||
case 0x0014: // 称重调零
|
||||
case 0x0015: // 称重调零
|
||||
if( fabs(WeightData2) <= MaxWeight * 0.04 ) // 型评 置零装置的效果不得大于总秤量的4%
|
||||
{
|
||||
i = 0;
|
||||
osDelay(100);
|
||||
sprintf((char *)buf, "tsw b1,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
do {
|
||||
i++;
|
||||
if (fabs(CalibrateWeight2.WeightZero - ADvalue2filter) > 10) {
|
||||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
if (fabs(CalibrateWeight2.WeightZero - ADvalue2filter) > 5)
|
||||
{
|
||||
WeightZeroOld = CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
osDelay(600);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
WeightZeroOld = CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
sprintf((char *)buf, "t18.txt=\"调零成功\"\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
t18Dis = true;
|
||||
@ -185,7 +195,12 @@ void DataUnpack(const void *p_arg)
|
||||
break;
|
||||
}
|
||||
} while (i < 12);
|
||||
if( i >= 12)
|
||||
}
|
||||
else
|
||||
{
|
||||
i = 12;
|
||||
}
|
||||
if( i >= 12 )
|
||||
{
|
||||
sprintf((char *)buf, "t18.txt=\"调零失败\"\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
@ -213,7 +228,22 @@ void DataUnpack(const void *p_arg)
|
||||
}
|
||||
break;
|
||||
case 0x0129: // 保存
|
||||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercent, 100.0f - WaterPercent);
|
||||
if( (SHIZHONG == 999) && (HUICHAO == 999))
|
||||
{
|
||||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%^-----%%^-----%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData);
|
||||
}
|
||||
if( (SHIZHONG == 999) && (HUICHAO != 999))
|
||||
{
|
||||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%^-----%%^%.2f%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, HUICHAO);
|
||||
}
|
||||
if( (SHIZHONG != 999) && (HUICHAO == 999))
|
||||
{
|
||||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%^%.2f%%^-----%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, SHIZHONG);
|
||||
}
|
||||
if( (SHIZHONG != 999) && (HUICHAO != 999))
|
||||
{
|
||||
sprintf((char *)buf, "DataDeal.DataLog.insert(\"%s^%s^%.3fg^%.3fg^%.2f%%^%.2f%%^%.2f%%^%.2f%%\")\xFF\xFF\xFF\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, SHIZHONG, HUICHAO);
|
||||
}
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.t8.txt=\"保存成功!\"\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
@ -233,7 +263,25 @@ void DataUnpack(const void *p_arg)
|
||||
sprintf((char *)buf, " %s\r\n\0", Set.TitleThree);
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
}
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n \0", NameBuf, startTime, StartWeight, StopWeight, WaterPercent, 100.0f - WaterPercent);
|
||||
|
||||
if( (SHIZHONG == 999) && (HUICHAO == 999))
|
||||
{
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n 湿重率: -----%%\r\n 回潮率: -----%%\r\n\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData);
|
||||
}
|
||||
if( (SHIZHONG == 999) && (HUICHAO != 999))
|
||||
{
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n 湿重率: -----%%\r\n 回潮率: %.2f%%\r\n\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, HUICHAO);
|
||||
}
|
||||
if( (SHIZHONG != 999) && (HUICHAO == 999))
|
||||
{
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n 湿重率: %.2f%%\r\n 回潮率:-----%%\r\n\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, SHIZHONG);
|
||||
}
|
||||
if( (SHIZHONG != 999) && (HUICHAO != 999))
|
||||
{
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%.3fg\r\n 结束重量: %.3fg\r\n 含水量: %.2f%% \r\n 含固量: %.2f%%\r\n 湿重率: %.2f%%\r\n 回潮率: %.2f%%\r\n\0", NameBuf, startTime, StartWeight, StopWeight, WaterPercentData, 100.0f - WaterPercentData, SHIZHONG, HUICHAO);
|
||||
}
|
||||
|
||||
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "/****************************/\r\n\r\n\r\n\r\n \0");
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
@ -241,7 +289,9 @@ void DataUnpack(const void *p_arg)
|
||||
case 0x012B: // 查询
|
||||
break;
|
||||
case 0x012C://含固量含水量
|
||||
Set.PercentChange = !Set.PercentChange;
|
||||
Set.PercentType = Set.PercentType + 1;
|
||||
if(Set.PercentType >= 4 )
|
||||
Set.PercentType = 0;
|
||||
FM24_Write(RW_Set, (uint8_t *)&Set, sizeof(Set));
|
||||
break;
|
||||
case 0x0201: // 称重设置
|
||||
@ -310,8 +360,7 @@ void DataUnpack(const void *p_arg)
|
||||
{
|
||||
Set.AutoTimeStop = 5;
|
||||
}
|
||||
else
|
||||
if(DataInbuf[3] > 120)
|
||||
else if(DataInbuf[3] > 120)
|
||||
{
|
||||
Set.AutoTimeStop = 120;
|
||||
}
|
||||
@ -326,8 +375,7 @@ void DataUnpack(const void *p_arg)
|
||||
{
|
||||
Set.AutoWeightChange = 5;
|
||||
}
|
||||
else
|
||||
if(DataInbuf[3] > 200)
|
||||
else if(DataInbuf[3] > 200)
|
||||
{
|
||||
Set.AutoWeightChange = 200;
|
||||
}
|
||||
@ -349,7 +397,7 @@ void DataUnpack(const void *p_arg)
|
||||
FM24_Write(CalibrateWeight2Set, (uint8_t *)&CalibrateWeight2, sizeof(CalibrateWeight2));
|
||||
break;
|
||||
case 0x0406:
|
||||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
WeightZeroOld = CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
break;
|
||||
case 0x040A: // 返回
|
||||
pageNum = 2;
|
||||
@ -442,6 +490,8 @@ void DataUnpack(const void *p_arg)
|
||||
uint8_t StopWeightSelect[20];
|
||||
uint8_t WaterPercentSelect[20];
|
||||
uint8_t WaterPercentSelect_1[20];
|
||||
uint8_t SHIZHONGSelect[20];
|
||||
uint8_t HUICHAOSelect[20];
|
||||
i = 0;
|
||||
j = 0;
|
||||
do {
|
||||
@ -471,6 +521,16 @@ void DataUnpack(const void *p_arg)
|
||||
j = 0;
|
||||
do {
|
||||
WaterPercentSelect_1[j++] = DataLogValue[i++];
|
||||
} while (DataLogValue[i] != '^');
|
||||
i++;
|
||||
j = 0;
|
||||
do {
|
||||
SHIZHONGSelect[j++] = DataLogValue[i++];
|
||||
} while (DataLogValue[i] != '^');
|
||||
i++;
|
||||
j = 0;
|
||||
do {
|
||||
HUICHAOSelect[j++] = DataLogValue[i++];
|
||||
} while (i < strlen((const char *)DataLogValue));
|
||||
sprintf((char *)buf, "/****************************/\r\n %s\r\n\0", Set.Title);
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
@ -490,7 +550,7 @@ void DataUnpack(const void *p_arg)
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
osDelay(200);
|
||||
}
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%s\r\n 结束重量: %s\r\n 含水量: %s \r\n 含固量: %s\r\n \0", NameBufSelect, startTimeSelect, StartWeightSelect, StopWeightSelect, WaterPercentSelect, WaterPercentSelect_1 );
|
||||
sprintf((char *)buf, " 样品名:%s\r\n 测试时间:%s\r\n 起始重量:%s\r\n 结束重量: %s\r\n 含水量: %s\r\n 含固量: %s\r\n 湿重率: %s\r\n 回潮率: %s\r\n \0", NameBufSelect, startTimeSelect, StartWeightSelect, StopWeightSelect, WaterPercentSelect, WaterPercentSelect_1, SHIZHONGSelect, HUICHAOSelect );
|
||||
USART2Print(buf, strlen((const char *)buf));
|
||||
osDelay(200);
|
||||
sprintf((char *)buf, "/****************************/\r\n\r\n\r\n\r\n \0");
|
||||
@ -584,17 +644,27 @@ void DataUnpack(const void *p_arg)
|
||||
}
|
||||
|
||||
#include "math.h"
|
||||
extern float OutputMax; uint32_t LastTick, lostTick;
|
||||
extern float OutputMax;
|
||||
uint32_t LastTick, lostTick;
|
||||
uint8_t Err = 0;
|
||||
float WeightDataBuf[410];
|
||||
float DiffWeight= 0;
|
||||
uint16_t DataBufIndex = 0;
|
||||
uint16_t DataOld;
|
||||
uint16_t LCount = 200;
|
||||
_Bool StartFirst = true;
|
||||
void Moisturing(const void *p_arg)
|
||||
{
|
||||
static uint8_t buf[150]__attribute__((at(0x20000000 + 0x1200)));
|
||||
uint8_t TempRefresh = 0;
|
||||
uint16_t SRangeTemp = 100;
|
||||
bool PercentChg = Set.PercentChange;
|
||||
FM24DataCRC();
|
||||
Set.PercentType = 0;
|
||||
osDelay(1000);
|
||||
if(fabs(ADvalue2filter - CalibrateWeight2.WeightZero) * CalibrateWeight2.WeightSlope < MaxWeight *0.2f )
|
||||
{
|
||||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
}
|
||||
BIOS_USART2_Init(Set.BaudRate);
|
||||
float WeightDataS = 0;
|
||||
sprintf((char *)buf, "main.t6.txt=\"Max=%dg D=%1.3fg\"\xFF\xFF\xFF\0", MaxWeight, Resolution);
|
||||
@ -660,7 +730,7 @@ void Moisturing(const void *p_arg)
|
||||
}
|
||||
|
||||
WeightDataS = (float)(((int32_t)((WeightData2+Resolution / 2) / Resolution)) * Resolution);
|
||||
if (WeightDataS <= MaxWeight) {
|
||||
if (WeightDataS <= MaxWeight+Resolution*9) {
|
||||
sprintf((char *)buf, "main.t0.txt=\"%3.3f\"\xFF\xFF\xFF\0", WeightDataS);
|
||||
} else {
|
||||
sprintf((char *)buf, "main.t0.txt=\"---.---\"\xFF\xFF\xFF\0");
|
||||
@ -676,8 +746,13 @@ void Moisturing(const void *p_arg)
|
||||
}
|
||||
if (pageNum == 1) // 运行界面
|
||||
{
|
||||
|
||||
LCount = Set.AutoTimeStop * 1000.0f / 300.0f - 1;
|
||||
StartFirst = true;
|
||||
CountDelay = 0;
|
||||
CountNochange = 0;
|
||||
DataBufIndex = 0;
|
||||
memset(WeightDataBuf,0,410);
|
||||
WeightDataS = (float)(((int32_t)((WeightData2+Resolution / 2) / Resolution)) * Resolution);
|
||||
StartWeight = WeightDataS;
|
||||
switch (Set.FastStyle) {
|
||||
@ -693,8 +768,25 @@ void Moisturing(const void *p_arg)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
sprintf((char *)buf, "RunPage.t7.txt=\"%s\"\xFF\xFF\xFF\0", Set.PercentChange?"含固量":"含水量");
|
||||
|
||||
switch( Set.PercentType )
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含水量\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 1:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含固量\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 2:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"回潮率\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 3:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"湿重率\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
}
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
|
||||
sprintf((char *)buf, "RunPage.t5.txt=\"%s\"\xFF\xFF\xFF\0", Set.UserName);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.t14.txt=\"%s\"\xFF\xFF\xFF\0", NameBuf);
|
||||
@ -707,7 +799,8 @@ void Moisturing(const void *p_arg)
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.n3.val=%d\xFF\xFF\xFF\0", Set.TimeStop);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
if (SafeCheck()) { // 请关闭加热仓
|
||||
if (SafeCheck())
|
||||
{ // 请关闭加热仓
|
||||
sprintf((char *)buf, "play 1,8,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
do {
|
||||
@ -726,15 +819,22 @@ void Moisturing(const void *p_arg)
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tm0.en=1\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw b0,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw b3,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw cb0,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw cb1,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
|
||||
DisData = WeightOld = WeightDataS;
|
||||
// 定间隔延时
|
||||
const uint32_t oneTick = osKernelSysTickMicroSec(1000u); // 微秒计时 oneTick 1ms
|
||||
|
||||
LastTick = osKernelSysTick();
|
||||
// osDelay(60000);
|
||||
// lostTick = (osKernelSysTick() - LastTick)/oneTick;
|
||||
do {
|
||||
if (SafeCheck()) { // 请关闭加热仓
|
||||
if (SafeCheck())
|
||||
{ // 请关闭加热仓
|
||||
sprintf((char *)buf, "play 1,8,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
Pump_OutCmd(false);
|
||||
@ -746,7 +846,8 @@ void Moisturing(const void *p_arg)
|
||||
// 计算已经逝去的tick计时单位
|
||||
lostTick = (uint32_t)(osKernelSysTick() + oneTick / 2 - LastTick) / oneTick;
|
||||
// 计算余下需要的延时周期(设定间隔时间:300ms)
|
||||
if (lostTick < 300u) {
|
||||
if (lostTick < 300u)
|
||||
{
|
||||
osDelay(300u - lostTick);
|
||||
LastTick = osKernelSysTick();
|
||||
} else { // 已经逝去的时间超过设定的间隔,重新计算时间起点后少量延时。
|
||||
@ -755,9 +856,10 @@ void Moisturing(const void *p_arg)
|
||||
}
|
||||
|
||||
StopWeight = DisData;
|
||||
switch (Set.AutoStyle) {
|
||||
switch (Set.AutoStyle)
|
||||
{
|
||||
case 0: // 自动模式
|
||||
if (CountNochange++ > Set.AutoTimeStop * (1000 / 300)) // 当计数器大于设定时间时,停止加热
|
||||
if(CountNochange > 3 * 20 ) // 停止加热
|
||||
{
|
||||
Finisflag = true;
|
||||
}
|
||||
@ -765,7 +867,7 @@ void Moisturing(const void *p_arg)
|
||||
case 1: // 手动模式
|
||||
break;
|
||||
case 2: // 定时模式
|
||||
if (CountDelay++ > Set.TimeStop * 60 * (1000 / 300)) // 当计数器大于设定时间时,停止加热)
|
||||
if (CountDelay++ > Set.TimeStop * 60 * 1000.0f / 300.0f) // 当计数器大于设定时间时,停止加热)
|
||||
{
|
||||
Finisflag = true;
|
||||
}
|
||||
@ -773,7 +875,9 @@ void Moisturing(const void *p_arg)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (Finisflag) {
|
||||
if (Finisflag)
|
||||
{
|
||||
FinishDisData = DisData;
|
||||
sprintf((char *)buf, "RunPage.tm0.en=0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
Pump_OutCmd(false);
|
||||
@ -785,59 +889,187 @@ void Moisturing(const void *p_arg)
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw b3,1\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw b1,1\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
// sprintf((char *)buf, "tsw b1,1\xFF\xFF\xFF\0");
|
||||
// DataPrint(buf, strlen((const char *)buf));
|
||||
HUICHAO = (float)(((uint32_t)(((StartWeight - DisData) / DisData * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
if(HUICHAO > 999)
|
||||
{
|
||||
HUICHAO = 999;
|
||||
}
|
||||
SHIZHONG = (float)(((uint32_t)((StartWeight / DisData * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
if(SHIZHONG > 999)
|
||||
{
|
||||
SHIZHONG = 999;
|
||||
}
|
||||
|
||||
|
||||
do {
|
||||
switch( Set.PercentType )
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含水量\"\xFF\xFF\xFF\0");
|
||||
PercentData = WaterPercentData;
|
||||
break;
|
||||
case 1:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含固量\"\xFF\xFF\xFF\0");
|
||||
PercentData = 100 - WaterPercentData;
|
||||
break;
|
||||
case 2:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"回潮率\"\xFF\xFF\xFF\0");
|
||||
PercentData = HUICHAO;
|
||||
break;
|
||||
case 3:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"湿重率\"\xFF\xFF\xFF\0");
|
||||
PercentData = SHIZHONG;
|
||||
break;
|
||||
}
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
if(PercentData >= 999)
|
||||
{
|
||||
sprintf((char *)buf, "RunPage.t3.txt=\"-----%\"\xFF\xFF\xFF\0");
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf((char *)buf, "RunPage.t3.txt=\"%.2f%%\"\xFF\xFF\xFF\0", PercentData);
|
||||
}
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
osSemaphoreWait(semDataChange, osWaitForever);
|
||||
} while (pageNum == 1);
|
||||
sprintf((char *)buf, "tsw cb0,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "tsw cb1,0\xFF\xFF\xFF\0");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
|
||||
}
|
||||
WeightDataS = (float)(((int32_t)((WeightData2 + Resolution / 2) / Resolution)) * Resolution);
|
||||
if( WeightData2 >= 0)
|
||||
{
|
||||
if (WeightOld - WeightDataS > Resolution) // 当重量变化大于0.001g时,更新数据 (只能减不能加)
|
||||
{
|
||||
DisData = WeightDataS;
|
||||
}
|
||||
if (WeightOld - WeightDataS > Set.AutoWeightChange / 1000) // 当重量变化大于x.xxxg时,计数器清零
|
||||
{
|
||||
CountNochange = 0;
|
||||
DisData = WeightOld = WeightDataS;
|
||||
}
|
||||
if (StartWeight != 0) {
|
||||
WaterPercent = (float)(((uint32_t)(((StartWeight - DisData) / StartWeight * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
/* */
|
||||
WeightDataBuf[DataBufIndex++] = WeightData2;
|
||||
if(DataBufIndex >= 405)
|
||||
DataBufIndex = 0;
|
||||
if(!StartFirst)
|
||||
{
|
||||
DataOld = DataBufIndex - LCount;
|
||||
if(DataBufIndex < LCount )
|
||||
{
|
||||
DataOld = DataBufIndex + 405 - LCount;
|
||||
}
|
||||
DiffWeight = WeightDataBuf[DataOld] - WeightData2;
|
||||
if( DiffWeight > Set.AutoWeightChange / 1000.0f )
|
||||
{
|
||||
CountNochange = 0;
|
||||
// DisData = WeightOld = WeightDataS;
|
||||
}
|
||||
else
|
||||
{
|
||||
CountNochange ++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(DataBufIndex > LCount)
|
||||
StartFirst = false;
|
||||
}
|
||||
/* */
|
||||
|
||||
|
||||
|
||||
if ((StartWeight != 0) && (DisData != 0))
|
||||
{
|
||||
switch( Set.PercentType )
|
||||
{
|
||||
default:
|
||||
case 0://含水量
|
||||
PercentData = (float)(((uint32_t)(((StartWeight - DisData) / StartWeight * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
break;
|
||||
case 1://含固量
|
||||
PercentData = (float)(((uint32_t)(( DisData / StartWeight * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
break;
|
||||
case 2://回潮率
|
||||
PercentData = (float)(((uint32_t)(((StartWeight - DisData) / DisData * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
if(PercentData > 999)
|
||||
{
|
||||
PercentData = 999;
|
||||
}
|
||||
break;
|
||||
case 3://湿重率
|
||||
PercentData = (float)(((uint32_t)((StartWeight / DisData * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
if(PercentData > 999)
|
||||
{
|
||||
PercentData = 999;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
WaterPercentData =(float)(((uint32_t)(((StartWeight - DisData) / StartWeight * 100.0f) / ResolutionWater)) * ResolutionWater);
|
||||
}
|
||||
sprintf((char *)buf, "RunPage.t0.txt=\"%3.3f\"\xFF\xFF\xFF\0", DisData);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.t12.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
if( PercentChg != Set.PercentChange )
|
||||
|
||||
switch( Set.PercentType )
|
||||
{
|
||||
PercentChg = Set.PercentChange;
|
||||
sprintf((char *)buf, "RunPage.t7.txt=\"%s\"\xFF\xFF\xFF\0", Set.PercentChange?"含固量":"含水量");
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
default:
|
||||
case 0:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含水量\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 1:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"含固量\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 2:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"回潮率\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
case 3:
|
||||
sprintf((char *)buf, "RunPage.b1.txt=\"湿重率\"\xFF\xFF\xFF\0");
|
||||
break;
|
||||
}
|
||||
sprintf((char *)buf, "RunPage.t17.txt=\"%2.2f%%\"\xFF\xFF\xFF\0", Set.PercentChange?100.0f-WaterPercent:WaterPercent);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.j0.val=%d\xFF\xFF\xFF\0", (uint8_t)WaterPercent);
|
||||
if(PercentData >= 999)
|
||||
{
|
||||
sprintf((char *)buf, "RunPage.t3.txt=\"-----%\"\xFF\xFF\xFF\0");
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf((char *)buf, "RunPage.t3.txt=\"%.2f%%\"\xFF\xFF\xFF\0", PercentData);
|
||||
}
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
if (SCount++ >= 3) {
|
||||
|
||||
sprintf((char *)buf, "RunPage.t17.txt=\"%2.2f%%\"\xFF\xFF\xFF\0", WaterPercentData);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "RunPage.j0.val=%d\xFF\xFF\xFF\0", (uint8_t)WaterPercentData);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
|
||||
|
||||
if (SCount++ >= 3)
|
||||
{
|
||||
SCount = 0;
|
||||
if (WaterPercent <= 38.0f) {
|
||||
|
||||
|
||||
if (WaterPercentData <= 38.0f) {
|
||||
SRangeTemp = 200;
|
||||
}
|
||||
if (WaterPercent > 38.0f && WaterPercent < 76.0f) {
|
||||
if (WaterPercentData > 38.0f && WaterPercentData <= 76.0f) {
|
||||
SRangeTemp = 100;
|
||||
}
|
||||
if (WaterPercent > 76.0f) {
|
||||
if (WaterPercentData > 76.0f && WaterPercentData <= 100.0f) {
|
||||
SRangeTemp = 70;
|
||||
}
|
||||
if( WaterPercentData > 100.0f) {
|
||||
SRangeTemp = 50;
|
||||
}
|
||||
if (SRangeTemp != SRange) {
|
||||
SRange = SRangeTemp;
|
||||
sprintf((char *)buf, "s0.dis=%d\xFF\xFF\xFF\0", SRange);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
}
|
||||
sprintf((char *)buf, "add s0.id,0,%d\xFF\xFF\xFF\0", (uint8_t)(WaterPercent / 100.0f * 255));
|
||||
sprintf((char *)buf, "add s0.id,0,%d\xFF\xFF\xFF\0", (uint8_t)(( WaterPercentData > 100.0f? 100.0f:WaterPercentData ) / 100.0f * 255));
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
}
|
||||
} while (pageNum == 1);
|
||||
@ -870,7 +1102,7 @@ void Moisturing(const void *p_arg)
|
||||
}
|
||||
if (pageNum == 4) // 校准设置
|
||||
{
|
||||
sprintf((char *)buf, "Calibration.t8.txt=\"%3.4f\"\xFF\xFF\xFF\0", WeightData2);
|
||||
sprintf((char *)buf, "Calibration.t8.txt=\"%3.4f\"\xFF\xFF\xFF\0", WeightData2Finally);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
sprintf((char *)buf, "Calibration.t6.txt=\"%3.0f\"\xFF\xFF\xFF\0", Temperature);
|
||||
DataPrint(buf, strlen((const char *)buf));
|
||||
|
||||
@ -22,7 +22,6 @@ int main(void)
|
||||
// INIT_CS555X();
|
||||
osDelay(1000); // 3Ãë
|
||||
AD7190_Init();
|
||||
CalibrateWeight2.WeightZero = ADvalue2filter;
|
||||
switch (InstrumentTypeRead()) {
|
||||
case 0x01: // ¹ú²ú 40-180 ÂÁ 0.005-50 0.02
|
||||
MaxWeight = 50;
|
||||
@ -37,7 +36,7 @@ int main(void)
|
||||
MaxTemp = 180;
|
||||
break;
|
||||
case 0x03: // ¹ú²ú 40-180 ÂÁ 0.001-100 0.01
|
||||
MaxWeight = 100;
|
||||
MaxWeight = 120;
|
||||
Resolution = 0.001;
|
||||
ResolutionWater = 0.01;
|
||||
MaxTemp = 180;
|
||||
@ -85,6 +84,7 @@ int main(void)
|
||||
MaxTemp = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
USARTHMIInit();
|
||||
HMICMDInit();
|
||||
while (1) {
|
||||
|
||||
@ -80,7 +80,7 @@ void DataPrint(uint8_t *buffer, uint8_t lenth)
|
||||
UART1_Send(*buffer++);
|
||||
|
||||
while (!READ_BIT(USART1->SR, USART_SR_TC))
|
||||
delay_us(50u);
|
||||
delay_us(5u);
|
||||
}
|
||||
// SET_BIT(USART1->CR1, USART_CR1_RXNEIE);
|
||||
osMutexRelease(USART_Mutex_ID);
|
||||
|
||||
26
Source/spi.c
26
Source/spi.c
@ -129,9 +129,9 @@ void SPI1_Configuration(void)
|
||||
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
|
||||
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
|
||||
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
|
||||
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
|
||||
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
||||
SPI_InitStructure.SPI_CRCPolynomial = 7;
|
||||
// SPI_InitStructure.SPI_CRCPolynomial = 7;
|
||||
SPI_Init(SPI1, &SPI_InitStructure);
|
||||
|
||||
// 使能SPI1
|
||||
@ -176,16 +176,32 @@ uint8_t bus_SPIxShift1(uint8_t OutByte)
|
||||
// 定义SPI读取函数
|
||||
uint8_t SPI1_ReadWrite(uint8_t data)
|
||||
{
|
||||
uint16_t retry = 0;
|
||||
// 等待发送缓冲区为空
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
|
||||
;
|
||||
{
|
||||
retry++;
|
||||
if(retry>=0XFFFE)
|
||||
return 0; //超时退出
|
||||
}
|
||||
retry = 0;
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET)
|
||||
{
|
||||
retry++;
|
||||
if(retry>=0XFFFE)
|
||||
return 0; //超时退出
|
||||
}
|
||||
|
||||
// 通过SPI发送数据
|
||||
SPI_I2S_SendData(SPI1, data);
|
||||
|
||||
retry = 0;
|
||||
// 等待接收缓冲区非空
|
||||
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
|
||||
;
|
||||
{
|
||||
retry++;
|
||||
if(retry>=0XFFFE)
|
||||
return 0; //超时退出
|
||||
}
|
||||
|
||||
// 从SPI接收数据
|
||||
return SPI_I2S_ReceiveData(SPI1);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user