uart_TORG4BBSensor.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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. #if (TORG4BBTORQU_ENABLE == 1)
  66. stTORG4BB_stTorSensorOut.uwTorqueRegOffset = 217;//0.7/3.3*1024
  67. stTORG4BB_stTorSensorOut.uwTorqueReg2Pu = (((SQWORD)3300 << 14) >> 10) / 35 * 10 / TORQUEBASE;
  68. stTORG4BB_stTorSensorOut.uwTorqueLPFgain = TORG4BBCADENCE_LPF_GAIN;
  69. stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt = TORG4BBTORQUE_TIMEOUT_TIME / TORG4BBTORQUE_TIMEOUT_UNIT;
  70. stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
  71. stTORG4BBInfo.uwTorqueReg = stTORG4BB_stTorSensorOut.uwTorqueRegOffset;
  72. mth_voLPFilterCoef(1000000/2, 100, &scm_stTORG4BBTorLpf.uwKx);
  73. #endif
  74. }
  75. /***************************************************************
  76. Function: TORG4BB_USART_DataProcess;
  77. Description:Get TORG4BBSensor Data
  78. Call by:
  79. Input Variables: N/A
  80. Output/Return Variables: N/A
  81. Subroutine Call: N/A;
  82. Reference: N/A
  83. ****************************************************************/
  84. void TORG4BB_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data)
  85. {
  86. stTORG4BBInfo.ucForwardCntLast = stTORG4BBInfo.ucForwardCnt;
  87. stTORG4BBInfo.uwTorqueRegLast = stTORG4BBInfo.uwTorqueReg;
  88. stTORG4BBInfo.swTemp = (SWORD)(Data[1] - 30);
  89. stTORG4BBInfo.uwTorqueReg = (((Data[4] & 0xC0)<<2) + Data[2]);
  90. stTORG4BBInfo.ucForwardCnt = Data[3] & 0x7F;
  91. stTORG4BBInfo.uwFlyWheelSpeedCnt = (((Data[4] & 0x1F)<<8) + Data[5]);
  92. stTORG4BBInfo.uwFlyWheelSpeed = 30000/(stTORG4BBInfo.uwFlyWheelSpeedCnt*TORG4BBTORQUE_NUMBERS_PULSES);//rpm 1/(Cnt*0.2*TORG4BBTORQUE_NUMBERS_PULSES/1000/60)
  93. }
  94. /***************************************************************
  95. Function: TORG4BB_USART_RxData_Process;
  96. Description: Get Uart Data following the protocol
  97. Call by:
  98. Input Variables: N/A
  99. Output/Return Variables: N/A
  100. Subroutine Call: N/A;
  101. Reference: N/A
  102. ****************************************************************/
  103. void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD dataCount)
  104. {
  105. #if (TORG4BBTORQU_ENABLE == 1)
  106. static UBYTE Data[255];
  107. //UWORD Cmd, ID;
  108. UWORD i;
  109. UBYTE checksum = 0;
  110. if(dataCount == 8)
  111. {
  112. if(buf[0] == 0xFF)//起始
  113. {
  114. for(i=0; i<(dataCount-1); i++)//数据
  115. {
  116. Data[i] = buf[i];
  117. checksum += buf[i];
  118. }
  119. if(checksum == buf[dataCount-1])// 校验和正常
  120. {
  121. TORG4BB_USART_DataProcess(ptUartTx, Data);
  122. }
  123. }
  124. }
  125. #endif
  126. }
  127. /***************************************************************
  128. Function: TORG4BB_Torque_Handler;
  129. Description: Get TORG4BB_Torque Data
  130. Call by:
  131. Input Variables: N/A
  132. Output/Return Variables: N/A
  133. Subroutine Call: N/A;
  134. Reference: N/A
  135. ****************************************************************/
  136. void TORG4BB_Torque_Handler(void)
  137. {
  138. if(stTORG4BBInfo.uwTorqueReg < stTORG4BB_stTorSensorOut.uwTorqueRegOffset)
  139. {
  140. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  141. }
  142. else
  143. {
  144. stTORG4BB_stTorSensorOut.uwTorquePu = (stTORG4BBInfo.uwTorqueReg - stTORG4BB_stTorSensorOut.uwTorqueRegOffset) * stTORG4BB_stTorSensorOut.uwTorqueReg2Pu;
  145. }
  146. //通信超时,清除力矩
  147. if(stTORG4BBInfo.uwTorqueRegLast == stTORG4BBInfo.uwTorqueReg)
  148. {
  149. if(stTORG4BB_stTorSensorOut.uwTimeOutCnt < stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt)
  150. {
  151. stTORG4BB_stTorSensorOut.uwTimeOutCnt++;
  152. }
  153. else
  154. {
  155. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  156. }
  157. }
  158. else
  159. {
  160. stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
  161. }
  162. //mth_voLPFilter(stTORG4BB_stTorSensorOut.uwTorquePu, &scm_stTORG4BBTorLpf);
  163. //stTORG4BB_stTorSensorOut.uwTorqueLPFPu = scm_stTORG4BBTorLpf.slY.sw.hi;
  164. stTORG4BB_stTorSensorOut.uwTorqueLPFPuLast = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  165. stTORG4BB_stTorSensorOut.uwTorqueLPFPu = (stTORG4BB_stTorSensorOut.uwTorqueLPFPu * stTORG4BB_stTorSensorOut.uwTorqueLPFgain +
  166. stTORG4BB_stTorSensorOut.uwTorquePu * (100 - stTORG4BB_stTorSensorOut.uwTorqueLPFgain)) /
  167. 100;
  168. torsensor_stTorSensorOut.uwTorqueReg = stTORG4BBInfo.uwTorqueReg;
  169. torsensor_stTorSensorOut.uwTorquePu = stTORG4BB_stTorSensorOut.uwTorquePu;
  170. torsensor_stTorSensorOut.uwTorqueLPFPu = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  171. }
  172. /***************************************************************
  173. Function: TORG4BB_Get_CAD_PORT;
  174. Description: Get TORG4BB_Candance pulse timing
  175. Call by:
  176. Input Variables: N/A
  177. Output/Return Variables: N/A
  178. Subroutine Call: N/A;
  179. Reference: N/A
  180. ****************************************************************/
  181. uint32_t TORG4BB_Get_CAD_PORT(void)
  182. {
  183. if((stTORG4BBInfo.ucForwardCnt > stTORG4BBInfo.ucForwardCntLast) || ((stTORG4BBInfo.ucForwardCnt == 1) && (stTORG4BBInfo.ucForwardCntLast == 127)))
  184. {
  185. return 0x0000;
  186. }
  187. else
  188. {
  189. return 0x0200;
  190. }
  191. }
  192. /***************************************************************
  193. Function: TORG4BB_Get_Temp;
  194. Description: Get TORG4BB temp
  195. Call by:
  196. Input Variables: N/A
  197. Output/Return Variables: N/A
  198. Subroutine Call: N/A;
  199. Reference: N/A
  200. ****************************************************************/
  201. SWORD TORG4BB_Get_Temp(void)
  202. {
  203. return stTORG4BBInfo.swTemp;
  204. }
  205. /************************ (C) END OF FILE *********************************/