You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.5 KiB
137 lines
4.5 KiB
/*
|
|
* msp_strain_gauge.c
|
|
*
|
|
* Created on: 2025年11月25日
|
|
* Author: akeguo
|
|
*/
|
|
#include "msp_strain_gauge.h"
|
|
//应变片采集模块
|
|
|
|
Strain_Gauge_Struct *strainGaugeValue;
|
|
uint8_t strain_gauge_slave_id = 0x32; //默认为1
|
|
int SAVE_Register9=0; //设置55 保存KD
|
|
int SAVE_Register23=0; //设置KD
|
|
struct UARTHandler *strain_gauge_handler;
|
|
|
|
DispacherController *strain_gauge_dispacherController;
|
|
void strain_gauge_loop();
|
|
void decode_strain_gauge_01(uint8_t *buffer, uint16_t length);
|
|
void decode_strain_gauge_09(uint8_t *buffer, uint16_t length);
|
|
void strain_gauge_intialize(struct UARTHandler *Handler)
|
|
{
|
|
//strain_gauge_slave_id=slave_id;
|
|
strain_gauge_handler = Handler;
|
|
strain_gauge_handler->Wait_time = 10; //等待10ms 最低不要低于4;
|
|
strain_gauge_dispacherController = Handler->dispacherController;
|
|
strain_gauge_dispacherController->Dispacher_Enable = 1;
|
|
//不周期性发送
|
|
strain_gauge_dispacherController->Add_Dispatcher_List(
|
|
strain_gauge_dispacherController, strain_gauge_loop);//Dispatcher_List_Add_t bsp com helper.c
|
|
|
|
HardWareErrorController->Add_PCOMHardWare(HardWareErrorController,
|
|
"strain_gauge", 0, ComError_Strain_Gauge);
|
|
|
|
LOG("strain_gauge_intialize");
|
|
}
|
|
void strain_gauge_intialize_with_slaveid(struct UARTHandler *Handler,
|
|
int slave_id)
|
|
{
|
|
strain_gauge_intialize(Handler);
|
|
strain_gauge_slave_id = slave_id;
|
|
}
|
|
|
|
void strain_gauge_loop()
|
|
{
|
|
// 必须要初始化 strainGaugeValue
|
|
|
|
//读取力
|
|
MB_ReadHoldingReg(&strain_gauge_handler->Tx_Buf,
|
|
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 1, 1); //03 command ; read 3 registers 从1 开始 读取1个
|
|
strain_gauge_handler->AddSendList(strain_gauge_handler,
|
|
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime,
|
|
decode_strain_gauge_01);
|
|
|
|
//推杆控制
|
|
MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf,
|
|
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 0,
|
|
strainGaugeValue->MotorControl);//strainGaugeValue->MotorControl 电机控制,=0 停止,=1 前进,=2 后退
|
|
strain_gauge_handler->AddSendList(strain_gauge_handler,
|
|
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime,
|
|
NULL);
|
|
|
|
/*写寄存器2 3 KD**/
|
|
if(SAVE_Register23==1)
|
|
{
|
|
/*写寄存器2 K**/
|
|
MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf,
|
|
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 2,
|
|
strainGaugeValue->HX711_K);
|
|
strain_gauge_handler->AddSendList(strain_gauge_handler,
|
|
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime,
|
|
NULL);
|
|
/*写寄存器3 D**/
|
|
MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf,
|
|
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 3,
|
|
strainGaugeValue->HX711_D);
|
|
strain_gauge_handler->AddSendList(strain_gauge_handler,
|
|
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime,
|
|
NULL);
|
|
SAVE_Register23=0;
|
|
}
|
|
|
|
/*写寄存器9 设置为55保存KD**/
|
|
if(SAVE_Register9==1)
|
|
{
|
|
|
|
MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf,
|
|
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 9,
|
|
strainGaugeValue->Save);
|
|
strain_gauge_handler->AddSendList(strain_gauge_handler,
|
|
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime,
|
|
NULL);
|
|
SAVE_Register9=0;
|
|
}
|
|
|
|
}
|
|
int16_t decoded_strain_gauge_holdingReg_value[20];
|
|
//读取 00-02的寄存器
|
|
void decode_strain_gauge_01(uint8_t *buffer, uint16_t length)
|
|
{
|
|
|
|
// uint8_t data1[length];
|
|
// memcpy(data1, buffer, length);
|
|
|
|
int decoded_result = MB_Decode_HoldingRegs(buffer, length, 1,
|
|
&decoded_strain_gauge_holdingReg_value[1]);
|
|
if (decoded_result == 1)
|
|
{
|
|
strainGaugeValue->Pressure = decoded_strain_gauge_holdingReg_value[1];
|
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,
|
|
"strain_gauge", 1);
|
|
// LOG("Battery_sensor succeeded and the force is %d", *CMCU06_ForceValue);
|
|
}
|
|
else
|
|
{
|
|
LOGFF(DL_ERROR, "strain_gauge_decoding failed");
|
|
}
|
|
}
|
|
//读取 09的寄存器
|
|
void decode_strain_gauge_09(uint8_t *buffer, uint16_t length)
|
|
{
|
|
|
|
// uint8_t data1[100];
|
|
// memcpy(data1, buffer, length);
|
|
int decoded_result = MB_Decode_HoldingRegs(buffer, length, 2,
|
|
&decoded_strain_gauge_holdingReg_value[9]);
|
|
if (decoded_result == 1)
|
|
{
|
|
strainGaugeValue->Save = decoded_strain_gauge_holdingReg_value[9];
|
|
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,
|
|
"strain_gauge", 1);
|
|
// LOG("Battery_sensor succeeded and the force is %d", *CMCU06_ForceValue);
|
|
}
|
|
else
|
|
{
|
|
LOGFF(DL_ERROR, "strain_gauge_decoding failed");
|
|
}
|
|
}
|
|
|