您好!
我已经在传播延迟上发布了一些关于 Endat 库的问题。
但我遇到了一个奇怪的问题。 如果我发送命令2.2:Encoder_send_position_values_with _addition_data,它是可以的,但如果我发送命令2.1:Encoder_send_position_Values,则接收位置是可以的,但计算得出的 CRC 与接收的 CRC 不一样!
下面是初始阶段和运行阶段 I Apply、从以下示例中提取:
初始化阶段
具有复位功能的相位等... (void) PM_endat22_setupCommand (selection_of_memory_area、0xA1、0x5555、0);/* data1=MRS; Data2=any */ PM_endat22_startOperation (); Wait endat22Data.dataReady = 1 (void) PM_endat22_receiveData (selection_of_memory_area、0); CRC5_Result = PM_endat22_getCrcNorm (endat22Data.address、endat22Data.data、endat_EnDCRat_Table); -> CRC 正常 (void) PM_endat22_setupCommand (ENCODER_SEND_PARAMETER、0xD、0xAAAA、0);/* data1=address; Data2=any */ PM_endat22_startOperation (); Wait endat22Data.dataReady = 1 (void) PM_endat22_receiveData (Encoder_send_parameter、0); CRC5_Result = PM_endat22_getCrcNorm (endat22Data.address、endat22Data.data、dV_EnDCRat); -> CRC 正常 -> endat22Data.Position_Clocks = endat22Data.data 和0x0FF; (void) PM_endat22_setupCommand (Encoder_send_position_values_with _additional_data、0、0); PM_endat22_startOperation (); Wait endat22Data.dataReady = 1 (void) PM_endat22_receiveData (Encoder_send_position_values_with _additional_data、0); CRC5_Result = PM_endat22_getCrcPos (endat22Data.position_Clocks、ENDAT22、endat22_lo 和 endat22Data.Position endat22Data.position_hi、endat22Data.error1、endat22Data.error2、DV_EnDat_CRCTable); -> CRC 为"正常 " Delay1 = PM_endat22_getDelayCompVal (void) PM_endat22_setupCommand (encoder_se_position_values_with _additional_data、 start0);PM Operation 0、endat0 (start0) 等待 endat22Data.dataReady = 1 (空) PM_endat22_receiveData (编码器_send_position_values_with _additional_data、0); CRC5_Result = PM_endat22_getCrcPos (endat22Data.POSIT_Clocks、ENDAT22、endat22Data.POSITION _lo、 endat22Data.position_hi、endat22Data.error1、endat22Data.error2、DV_EnDat_CRCTable); -> CRC 为正常 Delay2 = PM_endat22_getDelayCompVal DV_EnDat_Data.delay_comp =(Delay1 + Delay2)>> 1;
那么这个初始化阶段对我来说是可以的。
之后是两个解决方案。 起作用的第一个因素是:
(void) PM_endat22_setupCommand (ENCODER_SEND_POSITION 值带有_additional_data、0、0、0); PM_endat22_startOperation (); 等待 endat22Data.dataReady = 1 (空) PM_endat22_receiveData (编码器_send_position_values_with _additional_data、0); CRC5_Result = PM_endat22_getCrcPos (endat22Data.POSIT_Clocks、ENDAT22、endat22Data.POSITION _lo、 endat22Data.position_hi、endat22Data.error1、endat22Data.error2、DV_EnDat_CRCTable); -> CRC 正常
然后我得到位置正常。
导致 CRC 比较不良的第二个因素:
(void) PM_endat22_setupCommand (ENCODER_SEND_POSITION、0、0、0); PM_endat22_startOperation (); 等待 endat22Data.dataReady == 1 void) PM_endat22_receiveData (编码器_send_position_Values、0); CRC5_Result = PM_endat22_getCrcPos (endat22Data.POSITION 时钟、ENDAT21*、endat22Data.Position_lo、 endat22Data.position_hi、endat22Data.error1、endat22Data.error2、DV_EnDat_CRCTable); -> CRC 不正常、但读取位置正常、随着电机移动而移动...
*使用 ENDAT22进行色带,结果相同。
在初始化阶段还是在使用 endat 2.1命令读取位置的序列中、我遇到了问题吗?
此命令的目的是减少 SPI 总线的使用、因为传输的字节更少、这种速度更快。 !!
谢谢