Эх сурвалжийг харах

I2C中断+DMA方式OK
放在tbc中断电机启动异常,AD采集异常
放在定时器空闲中断电机运行正常
无感启动正常

dd 6 өдөр өмнө
parent
commit
559621acbb

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

@@ -282,7 +282,7 @@ int  main(void)
           ACnt++;
 //          Tempe = tmag5273_GetTemp();
 //          DL_GPIO_setPins(GPIO_B_LED_PORT, GPIO_B_LED_PIN_LED_B_EN_PIN);
-          Tmag5273_out.Angle = tmag5273_GetAngle();
+//          Tmag5273_out.Angle = tmag5273_GetAngle();
 //          Tmag5273_out.MagX = tmag5273_GetXData();
 //          Tmag5273_out.MagY = tmag5273_GetYData();
 //          Tmag5273_out.MagZ = tmag5273_GetZData();

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

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

+ 20 - 20
2.MotorDrive/Source/spdctrFSM.c

@@ -326,7 +326,7 @@ void ClzLoop_TbcdownHook(void)
         {
             temptheta += cof_sl360DegreePu;
         }
-//        scm_uwAngRefPu=temptheta;
+        scm_uwAngRefPu=temptheta;
         tstThetaCorrect = scm_uwAngRefPu - rtY.Angle_Filtered;
     }
     else if(cp_stFlg.ThetaGetModelSelect == ANG_RESOLVER)
@@ -353,25 +353,25 @@ void ClzLoop_TbcdownHook(void)
     /*======================================================================= 
              Set Iq limit and Id reference for Constant Voltage Break
     =======================================================================*/
-//    cvb_stBrakeIn.uwVdcLpfPu = (SWORD)adc_stUpOut.uwVdcLpfPu;
-//    cvb_stBrakeIn.swIdRefPu = scm_swIdRefPu;
-//    cvb_stBrakeIn.swIqRefPu = swCurRefrompu; //scm_swIqRefPu;
-//    cvb_stBrakeIn.swSpdPu = scm_stSpdFbkLpf.slY.sw.hi;
-//    cvb_stBrakeIn.uwAngelPu = scm_uwAngRefPu;
-//    cvb_stBrakeIn.uwSpdLpfAbsPu = scm_uwSpdFbkLpfAbsPu;
-//    cvb_voBrake(&cvb_stBrakeIn,&cvb_stBrakeCoef,&cvb_stBrakeOut);
-//
-//    scm_swIqRefPu = cvb_stBrakeOut.swIqRefPu;
-//    scm_uwAngRefPu = cvb_stBrakeOut.uwAngelPu;
-
-    scm_swIqRefPu = -500;
-    static UWORD AngleCnt;
-    AngleCnt += 200;
-    if(AngleCnt > 32767)
-    {
-        AngleCnt = 0;
-    }
-    scm_uwAngRefPu = AngleCnt;
+    cvb_stBrakeIn.uwVdcLpfPu = (SWORD)adc_stUpOut.uwVdcLpfPu;
+    cvb_stBrakeIn.swIdRefPu = scm_swIdRefPu;
+    cvb_stBrakeIn.swIqRefPu = swCurRefrompu; //scm_swIqRefPu;
+    cvb_stBrakeIn.swSpdPu = scm_stSpdFbkLpf.slY.sw.hi;
+    cvb_stBrakeIn.uwAngelPu = scm_uwAngRefPu;
+    cvb_stBrakeIn.uwSpdLpfAbsPu = scm_uwSpdFbkLpfAbsPu;
+    cvb_voBrake(&cvb_stBrakeIn,&cvb_stBrakeCoef,&cvb_stBrakeOut);
+
+    scm_swIqRefPu = cvb_stBrakeOut.swIqRefPu;
+    scm_uwAngRefPu = cvb_stBrakeOut.uwAngelPu;
+
+//    scm_swIqRefPu = -500;
+//    static UWORD AngleCnt;
+//    AngleCnt += 200;
+//    if(AngleCnt > 32767)
+//    {
+//        AngleCnt = 0;
+//    }
+//    scm_uwAngRefPu = AngleCnt;
 
     if(cvb_stBrakeIn.uwVdcLpfPu >= cvb_stBrakeCoef.uwVdcStartCvbPu)
     {

+ 8 - 5
3.BasicFunction/Source/tmag5273.c

@@ -51,7 +51,7 @@ enum I2cControllerStatus {
     I2C_STATUS_RX_STARTED,
     I2C_STATUS_RX_INPROGRESS,
     I2C_STATUS_RX_COMPLETE,
-    I2C_STATUS_ERROR,
+    I2C_STATUS_ERROR
 } gI2cControllerStatus;
 
 void I2C_0_INST_IRQHandler(void)
@@ -87,11 +87,9 @@ void I2C_0_INST_IRQHandler(void)
             break;
         case DL_I2C_IIDX_CONTROLLER_EVENT1_DMA_DONE:
             /* I2C DMA Done on TX */
-            /* Do nothing here */
             break;
         case DL_I2C_IIDX_CONTROLLER_EVENT2_DMA_DONE:
             /* I2C DMA Done on RX */
-            /* Do nothing here */
             break;
         default:
             break;
@@ -121,6 +119,8 @@ void TMAG5273_WriteReg(UBYTE regaddr, UBYTE num, UBYTE *regdata)
     DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, gTxLen);
     DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
 
+    delay_cycles(10);
+
     gI2cControllerStatus = I2C_STATUS_TX_STARTED;
     while (!(
         DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))
@@ -135,7 +135,6 @@ void TMAG5273_WriteReg(UBYTE regaddr, UBYTE num, UBYTE *regdata)
     while (DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_BUSY_BUS);
 
     while (!(DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE));
-    delay_cycles(1000);
 }
 
 void TMAG5273_ReadData(UBYTE regaddr, UBYTE num, UBYTE* Read)
@@ -149,6 +148,8 @@ void TMAG5273_ReadData(UBYTE regaddr, UBYTE num, UBYTE* Read)
     DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, 1);
     DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);
 
+    delay_cycles(10);
+
     gI2cControllerStatus = I2C_STATUS_TX_STARTED;
     while (!(
         DL_I2C_getControllerStatus(I2C_0_INST) & DL_I2C_CONTROLLER_STATUS_IDLE))
@@ -166,13 +167,15 @@ void TMAG5273_ReadData(UBYTE regaddr, UBYTE num, UBYTE* Read)
 
     gRxLen = num;
     gRxCount = 0;
-    gI2cControllerStatus = I2C_STATUS_RX_STARTED;
 
     DL_DMA_setSrcAddr(DMA, DMA_CH1_CHAN_ID, (ULONG)(&I2C_0_INST->MASTER.MRXDATA));
     DL_DMA_setDestAddr(DMA, DMA_CH1_CHAN_ID, (uint32_t)(&gRxPacket[0]));
     DL_DMA_setTransferSize(DMA, DMA_CH1_CHAN_ID, gRxLen);
     DL_DMA_enableChannel(DMA, DMA_CH1_CHAN_ID);
 
+    delay_cycles(10);
+
+    gI2cControllerStatus = I2C_STATUS_RX_STARTED;
     DL_I2C_startControllerTransfer(I2C_0_INST, TMAG5273A1_ADDRESS, DL_I2C_CONTROLLER_DIRECTION_RX, gRxLen);
 
     while (gI2cControllerStatus != I2C_STATUS_RX_COMPLETE)

+ 5 - 1
m0g3507_int.c

@@ -40,7 +40,7 @@
 //#include "SEGGER_RTT.h"
 #include "bikelight.h"
 #include "UserGpio_Config.h"
-
+#include "tmag5273.h"
 #include "ti_msp_dl_config.h"
 /* add user code end private includes */
 
@@ -1423,6 +1423,10 @@ void TIMA1_IRQHandler(void) //void TMR1_BRK_OVF_TRG_HALL_IRQHandler(void)
                 }
                 case 3:
                 {
+                    if(cp_ulSystickCnt > 3000)
+                    {
+                        Tmag5273_out.Angle = tmag5273_GetAngle();
+                    }
                     break;
                 }
                 default:

+ 2 - 2
ti_msp_dl_config.c

@@ -300,8 +300,8 @@ SYSCONFIG_WEAK void SYSCFG_DL_I2C_0_init(void) {
 
     /* Configure Controller Mode */
     DL_I2C_resetControllerTransfer(I2C_0_INST);
-    /* Set frequency to 400000 Hz*/
-    DL_I2C_setTimerPeriod(I2C_0_INST, 7);
+    /* Set frequency to 1066666 Hz*/
+    DL_I2C_setTimerPeriod(I2C_0_INST, 2);
     DL_I2C_setControllerTXFIFOThreshold(I2C_0_INST, DL_I2C_TX_FIFO_LEVEL_BYTES_1);
     DL_I2C_setControllerRXFIFOThreshold(I2C_0_INST, DL_I2C_RX_FIFO_LEVEL_BYTES_1);
     DL_I2C_enableControllerClockStretching(I2C_0_INST);