21 changed files with 460 additions and 197 deletions
@ -0,0 +1,16 @@ |
|||
syntax = "proto3"; |
|||
//从机地址0x32; |
|||
message Strain_Gauge_Struct |
|||
{ |
|||
int32 MotorControl=1;//寄存器0: 电机控制,=0 停止,=1 前进,=2 后退 |
|||
int32 Pressure=2;// 寄存器1: 输出的传感器最终数据 |
|||
int32 HX711_K=3; //寄存器2 HX711_K |
|||
int32 HX711_D=4; //寄存器3 HX711_D |
|||
int32 Save=5;//寄存器9: 设置为55时,把当前寄存器输入存入flash,写入成功自动变成1 |
|||
int32 RawPressure=6;// 寄存器1: 输出的传感器原始数据 |
|||
int32 Read_K=7; |
|||
int32 Read_D=8; |
|||
|
|||
}; |
|||
|
|||
//protoc --nanopb_out=. *.proto |
|||
@ -0,0 +1,176 @@ |
|||
/*
|
|||
* 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
|
|||
struct UARTHandler *strain_gauge_handler; |
|||
|
|||
uint16_t to_send_bytes[50]; |
|||
|
|||
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 decode_strain_gauge_56(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; |
|||
} |
|||
|
|||
int SAVE_Register9=0; |
|||
int SAVE_Register23=0; |
|||
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, |
|||
(uint16_t) strainGaugeValue->HX711_K); |
|||
strain_gauge_handler->AddSendList(strain_gauge_handler, |
|||
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, |
|||
OneLineWaitTime, |
|||
NULL); |
|||
/*写寄存器3 and 4 D**/ |
|||
memcpy(&to_send_bytes[3],&strainGaugeValue->HX711_D,4); |
|||
|
|||
to_send_bytes[3]=SWAP_ENDIAN_16(to_send_bytes[3]); |
|||
to_send_bytes[4]=SWAP_ENDIAN_16(to_send_bytes[4]); |
|||
MB_WriteNumHoldingReg(&strain_gauge_handler->Tx_Buf, |
|||
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 3, 2, |
|||
&to_send_bytes[3]); |
|||
|
|||
strain_gauge_handler->AddSendList(strain_gauge_handler, |
|||
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, |
|||
OneLineWaitTime, |
|||
NULL); |
|||
// read 5 -6 holidng registers
|
|||
MB_ReadHoldingReg(&strain_gauge_handler->Tx_Buf, |
|||
&strain_gauge_handler->TxCount, strain_gauge_slave_id, 5, 2); //03 command ; read 2 registers 从1 开始 读取1个
|
|||
strain_gauge_handler->AddSendList(strain_gauge_handler, |
|||
strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, |
|||
OneLineWaitTime, decode_strain_gauge_56); |
|||
SAVE_Register23 = 0; |
|||
} |
|||
|
|||
/*写寄存器9 设置为55保存KD**/ |
|||
if (SAVE_Register9 == 1) |
|||
{ |
|||
strainGaugeValue->Save=55; |
|||
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 = (int16_t)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"); |
|||
} |
|||
} |
|||
/*origin value*/ |
|||
void decode_strain_gauge_56(uint8_t *buffer, uint16_t length) |
|||
{ |
|||
int decoded_result = MB_Decode_HoldingRegs(buffer, length, 2, |
|||
&decoded_strain_gauge_holdingReg_value[5]); |
|||
if (decoded_result == 1) |
|||
{ |
|||
|
|||
// decoded_strain_gauge_holdingReg_value[5]=SWAP_ENDIAN_16(decoded_strain_gauge_holdingReg_value[5]);
|
|||
// decoded_strain_gauge_holdingReg_value[6]=SWAP_ENDIAN_16(decoded_strain_gauge_holdingReg_value[6]);
|
|||
memcpy(&strainGaugeValue->RawPressure,&decoded_strain_gauge_holdingReg_value[5],4); |
|||
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, 1, |
|||
&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"); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue