123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /**
- ******************************************************************************
- * @file uart_TORG4BBSensor.h
- * @author
- * @version V1.0.0
- * @date 05-02-2025
- * @brief TORG4BBSensor function.
- ******************************************************************************
- *
- * COPYRIGHT(c) 2015 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "uart_TORG4BBSensor.h"
- #include "FuncLayerAPI.h"
- #include "mathtool.h"
- #include "syspar.h"
- /******************************
- *
- * Parameter
- *
- ******************************/
- static LPF_OUT scm_stTORG4BBTorLpf;
- TORG4BBInfo_Struct_t stTORG4BBInfo;
- TORG4BB_OUT stTORG4BB_stTorSensorOut;
- /******************************
- *
- * Functions
- *
- ******************************/
- /***************************************************************
- Function: TORG4BB_Init;
- Description:Data Init
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void TORG4BB_Init(void)
- {
- stTORG4BB_stTorSensorOut.uwTorqueRegOffset = 217;//0.7/3.3*1024
- stTORG4BB_stTorSensorOut.uwTorqueReg2Pu = (((SQWORD)3300 << 14) >> 10) / 35 * 10 / TORQUEBASE;
- stTORG4BB_stTorSensorOut.uwTorqueLPFgain = TORG4BBCADENCE_LPF_GAIN;
- stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt = TORG4BBTORQUE_TIMEOUT_TIME / TORG4BBTORQUE_TIMEOUT_UNIT;
- stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
- stTORG4BBInfo.uwTorqueReg = stTORG4BB_stTorSensorOut.uwTorqueRegOffset;
- mth_voLPFilterCoef(1000000/2, 100, &scm_stTORG4BBTorLpf.uwKx);
- }
- /***************************************************************
- Function: TORG4BB_USART_DataProcess;
- Description:Get TORG4BBSensor Data
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void TORG4BB_USART_DataProcess(USART_Buf_TypeDef* ptUartTx, UBYTE* Data)
- {
- stTORG4BBInfo.ucForwardCntLast = stTORG4BBInfo.ucForwardCnt;
- stTORG4BBInfo.uwTorqueRegLast = stTORG4BBInfo.uwTorqueReg;
- stTORG4BBInfo.ucTemp = ((Data[1]>>2) + 71);
- stTORG4BBInfo.uwTorqueReg = (((Data[1] & 0x03)<<8) + Data[2]);
- stTORG4BBInfo.ucForwardCnt = Data[3] & 0x7F;
- stTORG4BBInfo.uwMotorSpeed = (((Data[4] & 0x7F)<<8) + Data[5]);
- }
- /***************************************************************
- Function: TORG4BB_USART_RxData_Process;
- Description: Get Uart Data following the protocol
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void TORG4BB_USART_RxData_Process(USART_Buf_TypeDef* ptUartTx, UBYTE* buf, UWORD dataCount)
- {
- static UBYTE Data[255];
- //UWORD Cmd, ID;
- UWORD i;
- UBYTE checksum = 0;
-
- if(dataCount == 7)
- {
- if(buf[0] == 0xFF)//起始
- {
- for(i=0; i<(dataCount-1); i++)//数据
- {
- Data[i] = buf[i];
- checksum += buf[i];
- }
- if(checksum == buf[dataCount-1])// 校验和正常
- {
- TORG4BB_USART_DataProcess(ptUartTx, Data);
- }
- }
- }
- }
- /***************************************************************
- Function: TORG4BB_Torque_Handler;
- Description: Get TORG4BB_Torque Data
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- void TORG4BB_Torque_Handler(void)
- {
- if(stTORG4BBInfo.uwTorqueReg < stTORG4BB_stTorSensorOut.uwTorqueRegOffset)
- {
- stTORG4BB_stTorSensorOut.uwTorquePu = 0;
- }
- else
- {
- stTORG4BB_stTorSensorOut.uwTorquePu = (stTORG4BBInfo.uwTorqueReg - stTORG4BB_stTorSensorOut.uwTorqueRegOffset) * stTORG4BB_stTorSensorOut.uwTorqueReg2Pu;
- }
- //通信超时,清除力矩
- if(stTORG4BBInfo.uwTorqueRegLast == stTORG4BBInfo.uwTorqueReg)
- {
- if(stTORG4BB_stTorSensorOut.uwTimeOutCnt < stTORG4BB_stTorSensorOut.uwMaxTimeOutCnt)
- {
- stTORG4BB_stTorSensorOut.uwTimeOutCnt++;
- }
- else
- {
- stTORG4BB_stTorSensorOut.uwTorquePu = 0;
- }
- }
- else
- {
- stTORG4BB_stTorSensorOut.uwTimeOutCnt = 0;
- }
- //mth_voLPFilter(stTORG4BB_stTorSensorOut.uwTorquePu, &scm_stTORG4BBTorLpf);
- //stTORG4BB_stTorSensorOut.uwTorqueLPFPu = scm_stTORG4BBTorLpf.slY.sw.hi;
- stTORG4BB_stTorSensorOut.uwTorqueLPFPuLast = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
- stTORG4BB_stTorSensorOut.uwTorqueLPFPu = (stTORG4BB_stTorSensorOut.uwTorqueLPFPu * stTORG4BB_stTorSensorOut.uwTorqueLPFgain +
- stTORG4BB_stTorSensorOut.uwTorquePu * (100 - stTORG4BB_stTorSensorOut.uwTorqueLPFgain)) /
- 100;
- torsensor_stTorSensorOut.uwTorqueReg = stTORG4BBInfo.uwTorqueReg;
- torsensor_stTorSensorOut.uwTorquePu = stTORG4BB_stTorSensorOut.uwTorquePu;
- torsensor_stTorSensorOut.uwTorqueLPFPu = stTORG4BB_stTorSensorOut.uwTorqueLPFPu;
- }
- /***************************************************************
- Function: TORG4BB_Get_CAD_PORT;
- Description: Get TORG4BB_Candance pulse timing
- Call by:
- Input Variables: N/A
- Output/Return Variables: N/A
- Subroutine Call: N/A;
- Reference: N/A
- ****************************************************************/
- uint32_t TORG4BB_Get_CAD_PORT(void)
- {
- if((stTORG4BBInfo.ucForwardCnt > stTORG4BBInfo.ucForwardCntLast) || ((stTORG4BBInfo.ucForwardCnt == 1) && (stTORG4BBInfo.ucForwardCntLast == 127)))
- {
- return 0x0000;
- }
- else
- {
- return 0x0200;
- }
- }
- /************************ (C) END OF FILE *********************************/
|