uart_TORG4BBSensor.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /**
  2. ******************************************************************************
  3. * @file uart_TORG4BBSensor.h
  4. * @author
  5. * @version V1.0.0
  6. * @date 05-02-2025
  7. * @brief TORG4BBSensor function.
  8. ******************************************************************************
  9. *
  10. * COPYRIGHT(c) 2015 STMicroelectronics
  11. *
  12. * Redistribution and use in source and binary forms, with or without modification,
  13. * are permitted provided that the following conditions are met:
  14. * 1. Redistributions of source code must retain the above copyright notice,
  15. * this list of conditions and the following disclaimer.
  16. * 2. Redistributions in binary form must reproduce the above copyright notice,
  17. * this list of conditions and the following disclaimer in the documentation
  18. * and/or other materials provided with the distribution.
  19. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  20. * may be used to endorse or promote products derived from this software
  21. * without specific prior written permission.
  22. *
  23. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  24. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  25. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  26. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  27. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  28. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  29. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  30. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  31. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  32. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  33. *
  34. ******************************************************************************
  35. */
  36. /* Includes ------------------------------------------------------------------*/
  37. #include "uart_TORG4BBSensor.h"
  38. #include "FuncLayerAPI.h"
  39. #include "mathtool.h"
  40. #include "syspar.h"
  41. /******************************
  42. *
  43. * Parameter
  44. *
  45. ******************************/
  46. static LPF_OUT scm_stTORG4BBTorLpf;
  47. TORG4BBInfo_Struct_t stTORG4BBInfo;
  48. TORG4BB_OUT stTORG4BB_stTorSensorOut;
  49. /******************************
  50. *
  51. * Functions
  52. *
  53. ******************************/
  54. /***************************************************************
  55. Function: TORG4BB_Init;
  56. Description:Data Init
  57. Call by:
  58. Input Variables: N/A
  59. Output/Return Variables: N/A
  60. Subroutine Call: N/A;
  61. Reference: N/A
  62. ****************************************************************/
  63. void TORG4BB_Init(void)
  64. {
  65. stTORG4BB_stTorSensorOut.uwTorqueRegOffset = 217;//0.7/3.3*1024
  66. stTORG4BB_stTorSensorOut.uwTorqueReg2Pu = (((SQWORD)3300 << 14) >> 10) / 35 * 10 / TORQUEBASE;
  67. stTORG4BB_stTorSensorOut.uwTorqueLPFgain = TORG4BBCADENCE_LPF_GAIN;
  68. stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt = TORG4BBTORQUE_TIMEOUT_TIME / TORG4BBTORQUE_TIMEOUT_UNIT;
  69. stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
  70. stTORG4BBInfo.uwTorqueReg = stTORG4BB_stTorSensorOut.uwTorqueRegOffset;
  71. mth_voLPFilterCoef(1000000/2, 100, &scm_stTORG4BBTorLpf.uwKx);
  72. }
  73. /***************************************************************
  74. Function: TORG4BB_USART_DataProcess;
  75. Description:Get TORG4BBSensor Data
  76. Call by:
  77. Input Variables: N/A
  78. Output/Return Variables: N/A
  79. Subroutine Call: N/A;
  80. Reference: N/A
  81. ****************************************************************/
  82. void TORG4BB_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data)
  83. {
  84. stTORG4BBInfo.ucForwardCntLast = stTORG4BBInfo.ucForwardCnt;
  85. stTORG4BBInfo.uwTorqueRegLast = stTORG4BBInfo.uwTorqueReg;
  86. stTORG4BBInfo.swTemp = (SWORD)(Data[1] - 30);
  87. stTORG4BBInfo.uwTorqueReg = (((Data[4] & 0xC0)<<2) + Data[2]);
  88. stTORG4BBInfo.ucForwardCnt = Data[3] & 0x7F;
  89. stTORG4BBInfo.uwFlyWheelSpeedCnt = (((Data[4] & 0x1F)<<8) + Data[5]);
  90. stTORG4BBInfo.uwFlyWheelSpeed = 30000/(stTORG4BBInfo.uwFlyWheelSpeedCnt*TORG4BBTORQUE_NUMBERS_PULSES);//rpm 1/(Cnt*0.2*TORG4BBTORQUE_NUMBERS_PULSES/1000/60)
  91. }
  92. /***************************************************************
  93. Function: TORG4BB_USART_RxData_Process;
  94. Description: Get Uart Data following the protocol
  95. Call by:
  96. Input Variables: N/A
  97. Output/Return Variables: N/A
  98. Subroutine Call: N/A;
  99. Reference: N/A
  100. ****************************************************************/
  101. void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD dataCount)
  102. {
  103. static UBYTE Data[255];
  104. //UWORD Cmd, ID;
  105. UWORD i;
  106. UBYTE checksum = 0;
  107. if(dataCount == 8)
  108. {
  109. if(buf[0] == 0xFF)//起始
  110. {
  111. for(i=0; i<(dataCount-1); i++)//数据
  112. {
  113. Data[i] = buf[i];
  114. checksum += buf[i];
  115. }
  116. if(checksum == buf[dataCount-1])// 校验和正常
  117. {
  118. TORG4BB_USART_DataProcess(ptUartTx, Data);
  119. }
  120. }
  121. }
  122. }
  123. /***************************************************************
  124. Function: TORG4BB_Torque_Handler;
  125. Description: Get TORG4BB_Torque Data
  126. Call by:
  127. Input Variables: N/A
  128. Output/Return Variables: N/A
  129. Subroutine Call: N/A;
  130. Reference: N/A
  131. ****************************************************************/
  132. void TORG4BB_Torque_Handler(void)
  133. {
  134. if(stTORG4BBInfo.uwTorqueReg < stTORG4BB_stTorSensorOut.uwTorqueRegOffset)
  135. {
  136. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  137. }
  138. else
  139. {
  140. stTORG4BB_stTorSensorOut.uwTorquePu = (stTORG4BBInfo.uwTorqueReg - stTORG4BB_stTorSensorOut.uwTorqueRegOffset) * stTORG4BB_stTorSensorOut.uwTorqueReg2Pu;
  141. }
  142. //通信超时,清除力矩
  143. if(stTORG4BBInfo.uwTorqueRegLast == stTORG4BBInfo.uwTorqueReg)
  144. {
  145. if(stTORG4BB_stTorSensorOut.uwTimeOutCnt < stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt)
  146. {
  147. stTORG4BB_stTorSensorOut.uwTimeOutCnt++;
  148. }
  149. else
  150. {
  151. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  152. }
  153. }
  154. else
  155. {
  156. stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
  157. }
  158. //mth_voLPFilter(stTORG4BB_stTorSensorOut.uwTorquePu, &scm_stTORG4BBTorLpf);
  159. //stTORG4BB_stTorSensorOut.uwTorqueLPFPu = scm_stTORG4BBTorLpf.slY.sw.hi;
  160. stTORG4BB_stTorSensorOut.uwTorqueLPFPuLast = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  161. stTORG4BB_stTorSensorOut.uwTorqueLPFPu = (stTORG4BB_stTorSensorOut.uwTorqueLPFPu * stTORG4BB_stTorSensorOut.uwTorqueLPFgain +
  162. stTORG4BB_stTorSensorOut.uwTorquePu * (100 - stTORG4BB_stTorSensorOut.uwTorqueLPFgain)) /
  163. 100;
  164. torsensor_stTorSensorOut.uwTorqueReg = stTORG4BBInfo.uwTorqueReg;
  165. torsensor_stTorSensorOut.uwTorquePu = stTORG4BB_stTorSensorOut.uwTorquePu;
  166. torsensor_stTorSensorOut.uwTorqueLPFPu = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  167. }
  168. /***************************************************************
  169. Function: TORG4BB_Get_CAD_PORT;
  170. Description: Get TORG4BB_Candance pulse timing
  171. Call by:
  172. Input Variables: N/A
  173. Output/Return Variables: N/A
  174. Subroutine Call: N/A;
  175. Reference: N/A
  176. ****************************************************************/
  177. uint32_t TORG4BB_Get_CAD_PORT(void)
  178. {
  179. if((stTORG4BBInfo.ucForwardCnt > stTORG4BBInfo.ucForwardCntLast) || ((stTORG4BBInfo.ucForwardCnt == 1) && (stTORG4BBInfo.ucForwardCntLast == 127)))
  180. {
  181. return 0x0000;
  182. }
  183. else
  184. {
  185. return 0x0200;
  186. }
  187. }
  188. /***************************************************************
  189. Function: TORG4BB_Get_Temp;
  190. Description: Get TORG4BB temp
  191. Call by:
  192. Input Variables: N/A
  193. Output/Return Variables: N/A
  194. Subroutine Call: N/A;
  195. Reference: N/A
  196. ****************************************************************/
  197. SWORD TORG4BB_Get_Temp(void)
  198. {
  199. return stTORG4BBInfo.swTemp;
  200. }
  201. /************************ (C) END OF FILE *********************************/