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