uart_TORG4BBSensor.c 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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.ucTemp = ((Data[1]>>2) + 71);
  87. stTORG4BBInfo.uwTorqueReg = (((Data[1] & 0x03)<<8) + Data[2]);
  88. stTORG4BBInfo.ucForwardCnt = Data[3] & 0x7F;
  89. stTORG4BBInfo.uwMotorSpeed = (((Data[4] & 0x7F)<<8) + Data[5]);
  90. }
  91. /***************************************************************
  92. Function: TORG4BB_USART_RxData_Process;
  93. Description: Get Uart Data following the protocol
  94. Call by:
  95. Input Variables: N/A
  96. Output/Return Variables: N/A
  97. Subroutine Call: N/A;
  98. Reference: N/A
  99. ****************************************************************/
  100. void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD dataCount)
  101. {
  102. static UBYTE Data[255];
  103. //UWORD Cmd, ID;
  104. UWORD i;
  105. UBYTE checksum = 0;
  106. if(dataCount == 7)
  107. {
  108. if(buf[0] == 0xFF)//起始
  109. {
  110. for(i=0; i<(dataCount-1); i++)//数据
  111. {
  112. Data[i] = buf[i];
  113. checksum += buf[i];
  114. }
  115. if(checksum == buf[dataCount-1])// 校验和正常
  116. {
  117. TORG4BB_USART_DataProcess(ptUartTx, Data);
  118. }
  119. }
  120. }
  121. }
  122. /***************************************************************
  123. Function: TORG4BB_Torque_Handler;
  124. Description: Get TORG4BB_Torque Data
  125. Call by:
  126. Input Variables: N/A
  127. Output/Return Variables: N/A
  128. Subroutine Call: N/A;
  129. Reference: N/A
  130. ****************************************************************/
  131. void TORG4BB_Torque_Handler(void)
  132. {
  133. if(stTORG4BBInfo.uwTorqueReg < stTORG4BB_stTorSensorOut.uwTorqueRegOffset)
  134. {
  135. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  136. }
  137. else
  138. {
  139. stTORG4BB_stTorSensorOut.uwTorquePu = (stTORG4BBInfo.uwTorqueReg - stTORG4BB_stTorSensorOut.uwTorqueRegOffset) * stTORG4BB_stTorSensorOut.uwTorqueReg2Pu;
  140. }
  141. //通信超时,清除力矩
  142. if(stTORG4BBInfo.uwTorqueRegLast == stTORG4BBInfo.uwTorqueReg)
  143. {
  144. if(stTORG4BB_stTorSensorOut.uwTimeOutCnt < stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt)
  145. {
  146. stTORG4BB_stTorSensorOut.uwTimeOutCnt++;
  147. }
  148. else
  149. {
  150. stTORG4BB_stTorSensorOut.uwTorquePu = 0;
  151. }
  152. }
  153. else
  154. {
  155. stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
  156. }
  157. //mth_voLPFilter(stTORG4BB_stTorSensorOut.uwTorquePu, &scm_stTORG4BBTorLpf);
  158. //stTORG4BB_stTorSensorOut.uwTorqueLPFPu = scm_stTORG4BBTorLpf.slY.sw.hi;
  159. stTORG4BB_stTorSensorOut.uwTorqueLPFPuLast = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  160. stTORG4BB_stTorSensorOut.uwTorqueLPFPu = (stTORG4BB_stTorSensorOut.uwTorqueLPFPu * stTORG4BB_stTorSensorOut.uwTorqueLPFgain +
  161. stTORG4BB_stTorSensorOut.uwTorquePu * (100 - stTORG4BB_stTorSensorOut.uwTorqueLPFgain)) /
  162. 100;
  163. torsensor_stTorSensorOut.uwTorqueReg = stTORG4BBInfo.uwTorqueReg;
  164. torsensor_stTorSensorOut.uwTorquePu = stTORG4BB_stTorSensorOut.uwTorquePu;
  165. torsensor_stTorSensorOut.uwTorqueLPFPu = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
  166. }
  167. /***************************************************************
  168. Function: TORG4BB_Get_CAD_PORT;
  169. Description: Get TORG4BB_Candance pulse timing
  170. Call by:
  171. Input Variables: N/A
  172. Output/Return Variables: N/A
  173. Subroutine Call: N/A;
  174. Reference: N/A
  175. ****************************************************************/
  176. uint32_t TORG4BB_Get_CAD_PORT(void)
  177. {
  178. if((stTORG4BBInfo.ucForwardCnt > stTORG4BBInfo.ucForwardCntLast) || ((stTORG4BBInfo.ucForwardCnt == 1) && (stTORG4BBInfo.ucForwardCntLast == 127)))
  179. {
  180. return 0x0000;
  181. }
  182. else
  183. {
  184. return 0x0200;
  185. }
  186. }
  187. /************************ (C) END OF FILE *********************************/