修改为250K-操控端

This commit is contained in:
2025-10-21 21:17:49 +08:00
parent 2153bfcd1b
commit 0bac0a1b23
5 changed files with 269 additions and 247 deletions

38
CAN.C
View File

@@ -150,19 +150,15 @@ void CAN_vInit(void)
/// General Configuration of the Node 0: /// General Configuration of the Node 0:
/// - set INIT and CCE /// - set INIT and CCE
/// - enable interrupt generation upon a change of BOFF or EWARN or upon a
/// set of LLE, LOE or INIT
/// - alert interrupt node pointer: MultiCAN SRN 0
//-----------CAN_NCR0 = 0x00000049------------------------------------- //-----------CAN_NCR0 = 0x00000041-------------------------------------
CAN_vWriteCANAddress(CAN_NCR0); // Addressing CAN_NCR0 CAN_vWriteCANAddress(CAN_NCR0); // Addressing CAN_NCR0
CAN_DATA0 = 0x49; // load NODE 0 control register[7-0] CAN_DATA0 = 0x41; // load NODE 0 control register[7-0]
CAN_vWriteEN(D0_VALID+ADR_INC); // Data0 is Valid for transmission and CAN_vWriteEN(D0_VALID+ADR_INC); // Data0 is Valid for transmission and
// Write is EnabledCAN Address pointing // Write is EnabledCAN Address pointing
// to the CAN_NSR0. // to the CAN_NSR0.
// CAN Address pointing to the CAN_NIPR0 // CAN Address pointing to the CAN_NIPR0
CAN_ADCON = ADR_INC; // Auto Increment the current address(+1) CAN_ADCON = ADR_INC; // Auto Increment the current address(+1)
@@ -198,15 +194,15 @@ void CAN_vInit(void)
/// Configuration of the Node 0 Baud Rate: /// Configuration of the Node 0 Baud Rate:
/// - required baud rate = 250.000 kbaud /// - required baud rate = 250.000 kbaud
/// - real baud rate = 250.000 kbaud /// - real baud rate = 250.000 kbaud
/// - sample point = 75.00 % /// - sample point = 83.33 %
/// - there are 11 time quanta before sample point /// - there are 9 time quanta before sample point
/// - there are 4 time quanta after sample point /// - there are 2 time quanta after sample point
/// - the (re)synchronization jump width is 2 time quanta /// - the (re)synchronization jump width is 2 time quanta
//-----------CAN_NBTR0 = 0x00003A4B------------------------------------- //-----------CAN_NBTR0 = 0x0000184F-------------------------------------
CAN_DATA0 = 0x4B; // load NBTR0_SJW, BRP CAN_DATA0 = 0x4F; // load NBTR0_SJW, BRP
CAN_DATA1 = 0x3A; // load NBTR0_DIV8, TSEG2, TSEG1 CAN_DATA1 = 0x18; // load NBTR0_DIV8, TSEG2, TSEG1
CAN_vWriteEN(D0_VALID+D1_VALID+ADR_INC); // Data0, 1 are valid for CAN_vWriteEN(D0_VALID+D1_VALID+ADR_INC); // Data0, 1 are valid for
// transmission and Write is // transmission and Write is
// Enabled with Auto // Enabled with Auto
@@ -401,11 +397,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list /// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1) /// order (like class 1)
/// - extended 29-bit identifier /// - extended 29-bit identifier
/// - identifier 29-bit: 0x12000023 /// - identifier 29-bit: 0x11000023
//--------------MOAR6 = 0xF2000023--------------------------------------- //--------------MOAR6 = 0xF1000023---------------------------------------
CAN_vWriteAMData(0xF2000023); // load MO6 arbitration register CAN_vWriteAMData(0xF1000023); // load MO6 arbitration register
// CAN Address pointing to the CAN_MODATAH6 // CAN Address pointing to the CAN_MODATAH6
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1) CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -478,11 +474,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list /// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1) /// order (like class 1)
/// - extended 29-bit identifier /// - extended 29-bit identifier
/// - identifier 29-bit: 0x11000123 /// - identifier 29-bit: 0x11000124
//--------------MOAR7 = 0xF1000123--------------------------------------- //--------------MOAR7 = 0xF1000124---------------------------------------
CAN_vWriteAMData(0xF1000123); // load MO7 arbitration register CAN_vWriteAMData(0xF1000124); // load MO7 arbitration register
// CAN Address pointing to the CAN_MODATAH7 // CAN Address pointing to the CAN_MODATAH7
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1) CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -710,11 +706,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list /// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1) /// order (like class 1)
/// - extended 29-bit identifier /// - extended 29-bit identifier
/// - identifier 29-bit: 0x12000024 /// - identifier 29-bit: 0x11000024
//--------------MOAR10 = 0xF2000024--------------------------------------- //--------------MOAR10 = 0xF1000024---------------------------------------
CAN_vWriteAMData(0xF2000024); // load MO10 arbitration register CAN_vWriteAMData(0xF1000024); // load MO10 arbitration register
// CAN Address pointing to the CAN_MODATAH10 // CAN Address pointing to the CAN_MODATAH10
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1) CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)

File diff suppressed because one or more lines are too long

View File

@@ -281,7 +281,7 @@
<GroupNumber>1</GroupNumber> <GroupNumber>1</GroupNumber>
<FileNumber>5</FileNumber> <FileNumber>5</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>1</bDave2> <bDave2>1</bDave2>
<PathWithFileName>.\CAN.C</PathWithFileName> <PathWithFileName>.\CAN.C</PathWithFileName>

76
User.c
View File

@@ -17,9 +17,6 @@ bit FlgOneTime = 0;
ubyte uart2RxFlag = 0; ubyte uart2RxFlag = 0;
uword RgCanPerid = 50; uword RgCanPerid = 50;
ubyte can_error_cnt = 0;
ubyte can_error_flg = 0;
//PWM 20181227 //PWM 20181227
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
@@ -261,7 +258,7 @@ void sbusCanDecode(void)
SBUS2CANdecodeTemp = (float)(sbus_data.channels[0]); SBUS2CANdecodeTemp = (float)(sbus_data.channels[0]);
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*23;//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*23;//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DF_Curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD> DF_Curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD>
if( (DF_Curvature > (-50)) && (DF_Curvature < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if( (DF_Curvature > (-200)) && (DF_Curvature < 200) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
DF_Curvature = 0; DF_Curvature = 0;
} }
@@ -276,17 +273,17 @@ void sbusCanDecode(void)
} }
//<2F><><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD>
SBUS2CANdecodeTemp = (float)(sbus_data.channels[7]); SBUS2CANdecodeTemp = (float)(sbus_data.channels[11]);
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp);//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp);//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DF_Reserve = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA> DF_Reserve = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA>
if( (DF_Reserve > (-50)) && (DF_Reserve < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if( (DF_Reserve > (-50)) && (DF_Reserve < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
DF_Reserve = 0; DF_Reserve = 0;
} }
//SwA //SwA
if(sbus_data.channels[1] >= 1700)//<2F><><EFBFBD><EFBFBD> if(sbus_data.channels[12] >= 1700)//<2F><><EFBFBD><EFBFBD>
{ {
DF_SwA = 1; DF_SwA = 1;
} }
@@ -296,11 +293,11 @@ void sbusCanDecode(void)
} }
//SwB //SwB
if(sbus_data.channels[6] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(sbus_data.channels[4] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
DF_SwB = 2; DF_SwB = 2;
} }
else if(sbus_data.channels[6] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD> else if(sbus_data.channels[4] <= 500)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{ {
DF_SwB = 0; DF_SwB = 0;
} }
@@ -310,11 +307,11 @@ void sbusCanDecode(void)
} }
//SwC //SwC
if(sbus_data.channels[4] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> if(sbus_data.channels[7] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
DF_SwC = 2; DF_SwC = 2;
} }
else if(sbus_data.channels[4] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD> else if(sbus_data.channels[7] <= 500)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{ {
DF_SwC = 0; DF_SwC = 0;
} }
@@ -324,7 +321,7 @@ void sbusCanDecode(void)
} }
//SwD //SwD
if(sbus_data.channels[5] >= 1700)//<2F><><EFBFBD><EFBFBD> if(sbus_data.channels[13] >= 1700)//<2F><><EFBFBD><EFBFBD>
{ {
DF_SwD = 1; DF_SwD = 1;
} }
@@ -347,13 +344,41 @@ void sbusCanDecode(void)
SBUS2CANdecodeTemp = (float)(sbus_data.channels[3]); SBUS2CANdecodeTemp = (float)(sbus_data.channels[3]);
UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} UnRemoteControlOutput_2.bit_data.reserve1 = (uint16_t)(sbus_data.channels[10]);
UnRemoteControlOutput_2.bit_data.switch_a = P1_2;//
UnRemoteControlOutput_2.bit_data.switch_d = P1_3;// //SwB
} if(sbus_data.channels[5] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
UnRemoteControlOutput_2.bit_data.switch_b = 2;
}
else if(sbus_data.channels[5] <= 500)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{
UnRemoteControlOutput_2.bit_data.switch_b = 0;
}
else//<2F><>һ<EFBFBD><D2BB>
{
UnRemoteControlOutput_2.bit_data.switch_b = 1;
}
//SwC
if(sbus_data.channels[6] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
UnRemoteControlOutput_2.bit_data.switch_c = 2;
}
else if(sbus_data.channels[6] <= 500)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{
UnRemoteControlOutput_2.bit_data.switch_c = 0;
}
else//<2F><>һ<EFBFBD><D2BB>
{
UnRemoteControlOutput_2.bit_data.switch_c = 1;
}
}
}
//CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> //CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
void CanRXTX(void) void CanRXTX(void)
@@ -478,18 +503,11 @@ void CanRXTX(void)
} }
CanTransmit(DF_SwTx,(ubyte *)&UnRemoteControlOutput_1.arr[0]); CanTransmit(DF_SwTx,(ubyte *)&UnRemoteControlOutput_1.arr[0]);
CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]); CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]);
} }
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<32>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
{
can_error_flg = can_error_cnt;
CAN_vInit();
can_error_cnt = 0;
}
} }

1
user.H
View File

@@ -149,7 +149,6 @@ extern bit FlgCan_1;
extern ubyte rxbuf[25]; extern ubyte rxbuf[25];
extern ubyte uart2RxFlag; extern ubyte uart2RxFlag;
extern ubyte can_error_cnt;
void CanRXTX(void); void CanRXTX(void);