Forráskód Böngészése

增加XY轴归一处理,软件模式I2C在tbc中断运行异常。

dd 1 hete
szülő
commit
eb7744c571

+ 7 - 4
1.FrameLayer/Source/main.c

@@ -141,7 +141,6 @@ SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_COPY_init(void) {
 
 }
 
-UWORD Angle;
 int  main(void)
 {
     SCB->VTOR =APP_START_Address;//
@@ -280,9 +279,13 @@ int  main(void)
 //          PROFILER_BG();
           ACnt++;
 //          Tempe = tmag5273_GetTemp();
-          DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
-          Angle = tmag5273_GetAngle();
-          DL_GPIO_clearPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+//          DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
+//          Tmag5273_out.Angle = tmag5273_GetAngle();
+//          Tmag5273_out.MagX = tmag5273_GetXData();
+//          Tmag5273_out.MagY = tmag5273_GetYData();
+//          Tmag5273_out.MagZ = tmag5273_GetZData();
+//          Tmag5273_out.Temp = tmag5273_GetTemp();
+//          DL_GPIO_clearPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
 //          MagX = tmag5273_GetXData();
 //          MagY = tmag5273_GetYData();
 //          MagZ = tmag5273_GetZData();

+ 1 - 1
1.FrameLayer/Source/tbc.c

@@ -94,7 +94,7 @@ void tbc_voUpIsr(void)
 //      LoadObsTheta_U.IqFbkPu = scm_swIqFdbLpfPu;
 //      LoadObsTheta_U.ThetamPu = switchhall_stOut.uwLowThetaPu;
 //      LoadObsTheta_step();
-//    switchhall_stOut.uwLowThetaPu = tmag5273_GetAngle();
+    Tmag5273_out.Angle = tmag5273_GetAngle();
     /* Full Order Observer: Hall Angle Filter */
     rtU.AngleIn = switchhall_stOut.uwLowThetaPu;
     Trigger();

+ 14 - 0
3.BasicFunction/Include/tmag5273.h

@@ -10,6 +10,20 @@
 
 #include "typedefine.h"
 
+typedef struct
+{
+    UWORD uwOriginOffset;
+    SLONG MagX;      //uT
+    SLONG MagY;      //uT
+    SLONG MagZ;      //uT
+    SWORD Temp;      //0.01℃
+    UWORD Angle;     //Q15
+    SWORD AngleErr;
+    UWORD Speed;     //Q15
+} TMAG5273_OUT;
+
+extern TMAG5273_OUT Tmag5273_out;
+
 extern UBYTE tmag5273_GetDevID(void);
 extern UWORD tmag5273_GetMANUFACTURER_ID(void);
 extern SBYTE tmag5273_Init(void);

+ 2 - 2
3.BasicFunction/Source/i2c_analog.c

@@ -13,7 +13,7 @@
 
 void I2C_Delay(void)
 {
-    delay_cycles(20); //SCL周期1us
+    delay_cycles(10); //20 SCL周期1us
 }
 
 void I2C_Init(void)
@@ -82,7 +82,7 @@ void I2C_SendByte(UBYTE sendDAT)
    I2C_Delay();
    SET_SDA_IN();
    SCL_H();
-   delay_cycles(5);
+   delay_cycles(2);
    revack = (UBYTE)SDAM();
    I2C_Delay();
    SCL_L();

+ 19 - 10
3.BasicFunction/Source/tmag5273.c

@@ -41,6 +41,8 @@
 #define MAGNITUDE_RESULT               0x1B
 #define DEVICE_STATUS                  0x1C
 
+TMAG5273_OUT Tmag5273_out;
+
 void TMAG5273_WriteReg(UBYTE RAddr, UBYTE WData)
 {
     I2C_Start();
@@ -96,8 +98,10 @@ SBYTE tmag5273_Init(void)
     TMAG5273_WriteReg(DEVICE_CONFIG_2, tmp);
     tmp = 0x7C;
     TMAG5273_WriteReg(SENSOR_CONFIG_1, tmp);
-    tmp = 0x04;
+    tmp = 0x14; //Ax < Ay
     TMAG5273_WriteReg(SENSOR_CONFIG_2, tmp);
+    tmp = 196;  //Ax = 20.623mT, Ay = 26.873mT, Ax / Ay * 256
+    TMAG5273_WriteReg(MAG_GAIN_CONFIG, tmp);
     tmp = 0x01;
     TMAG5273_WriteReg(T_CONFIG, tmp);
 
@@ -173,18 +177,23 @@ SWORD tmag5273_GetTemp(void) //0.01℃
 UWORD tmag5273_GetAngle(void) //Q15
 {
     UBYTE agMLSB[2] = {0, 0};
+    UWORD anData = 0;
     UWORD Result;
 
     TMAG5273_ReadData(ANGLE_RESULT_MSB, 2, agMLSB);
-    Result = 32767 - (((agMLSB[1] + (agMLSB[0] << 8)) * 728) >> 7);
+    anData = agMLSB[1] + (agMLSB[0] << 8);
+    if(anData > 5760)
+        anData = 5760;
+    Result = 32767 - ((anData * 728) >> 7);
 
-    if(Result < 1469)
-    {
-        return (Result + 32767 - 1469);
-    }
-    else
-    {
-        return (Result - 1469);
-    }
+    return Result;
+//    if(Result < 1469)
+//    {
+//        return (Result + 32767 - 1469);
+//    }
+//    else
+//    {
+//        return (Result - 1469);
+//    }
 
 }