<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業(yè)以太網 | 現場總線 | 顯示調節(jié)儀表 | 數據采集 | 數傳測控 | 工業(yè)安全
          電 源 | 嵌入式系統(tǒng) | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        基于TMS320F2812的永磁同步電動機控制
        萬國機械
        收藏本文     查看收藏

        第7章  基于TMS320F2812的永磁同步電動機控制

         

        http://v.youku.com/v_show/id_XNzU4MTEzMDMy.html

        例1、空間矢量算法實現

         

        SVGEN_DQ對象結構體定義

        typedef struct {

        _iq Ualpha;      // 輸入: 軸參考電壓

        _iq Ubeta;        // 輸入: 軸參考電壓

        _iq Ta;             // 輸出:參考相位a開關函數

        _iq Tb;             // 輸出:參考相位b開關函數

        _iq Tc;             // 輸出:參考相位c開關函數

        void (*calc)(); //        函數指針

        } SVGENDQ;

        typedef SVGENDQ *SVGENDQ_handle;

        SVGEN_DQ模塊調用方法:

        main()

        {

        }

        void interrupt periodic_interrupt_isr()

        {

        svgen_dq1.Ualpha = Ualpha1;          // 提供輸入參數:svgen_dq1

        svgen_dq1.Ubeta = Ubeta1;              // 提供輸入參數:svgen_dq1

        svgen_dq2.Ualpha = Ualpha2;          // 提供輸入參數:vgen_dq2

        svgen_dq2.Ubeta = Ubeta2;              // 提供輸入參數:svgen_dq2

        svgen_dq1.calc(&svgen_dq1);          // 調用函數模塊svgen_dq1

        svgen_dq2.calc(&svgen_dq2);          // 調用函數模塊svgen_dq2

        Ta1 = svgen_dq1.Ta;                        // 訪問運算結果svgen_dq1

        Tb1 = svgen_dq1.Tb;                        // 訪問運算結果svgen_dq1

        Tc1 = svgen_dq1.Tc;                        // 訪問運算結果svgen_dq1

        Ta2 = svgen_dq2.Ta;                        // 訪問運算結果svgen_dq2

        Tb2 = svgen_dq2.Tb;                        // 訪問運算結果 svgen_dq2

        Tc2 = svgen_dq2.Tc;                        // 訪問運算結果svgen_dq2

        }

        為進一步了解空間矢量算法的基本原理,下面給出空間矢量模塊的源代碼:

        void svgendq_calc(SVGENDQ *v)

        {

         

           _iq Va,Vb,Vc,t1,t2;

           _iq sector = 0;  /*設相位置(sector)等于Q0   */

        /*逆clarke變換 */

            Va = v->Ubeta;

            Vb = _IQmpy(_IQ(-0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualfa);  /* 0.8660254 = sqrt(3)/2 */

            Vc = _IQmpy(_IQ(-0.5),v->Ubeta) - _IQmpy(_IQ(0.8660254),v->Ualfa);   /* 0.8660254 = sqrt(3)/2 */

         

        /* 60度sector的確定*/

            if (Va>_IQ(0))

               sector = 1;

            if (Vb>_IQ(0))

               sector = sector + 2;

            if (Vc>_IQ(0))

               sector = sector + 4;

            

        /* X,Y,Z (Va,Vb,Vc)的計算  */

            Va = v->Ubeta;                                                  /* X = Va */

            Vb = _IQmpy(_IQ(0.5),v->Ubeta) + _IQmpy(_IQ(0.8660254),v->Ualfa);   /* Y = Vb */

            Vc = _IQmpy(_IQ(0.5),v->Ubeta) - _IQmpy(_IQ(0.8660254),v->Ualfa);   /* Z = Vc */

            

            if (sector==1)  /* sector 1: t1=Z and t2=Y (abc ---> Tb,Ta,Tc) */

            {

               t1 = Vc;

               t2 = Vb;

               v->Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* tbon = (1-t1-t2)/2 */

               v->Ta = v->Tb+t1;           /* taon = tbon+t1 */

               v->Tc = v->Ta+t2;           /* tcon = taon+t2 */

            }

            else if (sector==2)  /* sector 2: t1=Y and t2=-X (abc ---> Ta,Tc,Tb) */

            {

               t1 = Vb;

               t2 = -Va;

               v->Ta = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* taon = (1-t1-t2)/2 */

               v->Tc = v->Ta+t1;           /* tcon = taon+t1 */

               v->Tb = v->Tc+t2;           /* tbon = tcon+t2 */

            }   

            else if (sector==3)  /* sector 3: t1=-Z and t2=X (abc ---> Ta,Tb,Tc) */

            {

               t1 = -Vc;

               t2 = Va;

               v->Ta = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* taon = (1-t1-t2)/2 */

               v->Tb = v->Ta+t1;           /* tbon = taon+t1 */

               v->Tc = v->Tb+t2;           /* tcon = tbon+t2 */

            }

            else if (sector==4)  /* sector 4: t1=-X and t2=Z (abc ---> Tc,Tb,Ta) */

            {

               t1 = -Va;

               t2 = Vc;

               v->Tc = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* tcon = (1-t1-t2)/2 */

               v->Tb = v->Tc+t1;           /* tbon = tcon+t1 */

               v->Ta = v->Tb+t2;           /* taon = tbon+t2 */

            }

            else if (sector==5)  /* sector 5: t1=X and t2=-Y (abc ---> Tb,Tc,Ta) */

            {

               t1 = Va;

               t2 = -Vb;

               v->Tb = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* tbon = (1-t1-t2)/2 */

               v->Tc = v->Tb+t1;           /* tcon = tbon+t1 */

               v->Ta = v->Tc+t2;           /* taon = tcon+t2 */

            }

            else if (sector==6)  /* sector 6: t1=-Y and t2=-Z (abc ---> Tc,Ta,Tb) */

            {

               t1 = -Vb;

               t2 = -Vc;

               v->Tc = _IQmpy(_IQ(0.5),(_IQ(1)-t1-t2));      /* tcon = (1-t1-t2)/2 */

               v->Ta = v->Tc+t1;           /* taon = tcon+t1 */

               v->Tb = v->Ta+t2;           /* tbon = taon+t2 */

            }

            

            v->Ta = _IQmpy(_IQ(2),(v->Ta-_IQ(0.5)));

            v->Tb = _IQmpy(_IQ(2),(v->Tb-_IQ(0.5)));

            v->Tc = _IQmpy(_IQ(2),(v->Tc-_IQ(0.5)));     

        }

        在相位置(sector)3中的一個矢量的例子:

        圖  相位置(sector)PWM 實例及其占空比

        例2、事件管理器配置

         

        EvaRegs.T1PR = p->n_period;                                      /* SYSTEM_FREQUENCY*1000000*T/2     */

                                 /*初始化Timer 1周期寄存器                         */

        /* 預定標器X1 (T1),ISR周期= T x 1         */

        EvaRegs.T1CON.all = PWM_INIT_STATE;          /* 對稱操作模式                                     */

        EvaRegs.DBTCONA.all = DBTCON_INIT_STATE;

        EvaRegs.ACTRA.all = ACTR_INIT_STATE;

        EvaRegs.COMCONA.all = 0xA200;

        EvaRegs.CMPR1 = p->n_period;

        EvaRegs.CMPR2 = p->n_period;

        EvaRegs.CMPR3 = p->n_period;

        EALLOW;

        GpioMuxRegs.GPAMUX.all |= 0x003F;

         

        例3、TMS320F2812電流及DC母線電壓檢測

        //******************************************************************************

        //    TMS320F2812電流及DC母線電壓檢測

        //    文件名稱:F28XILEG_VDC.C

        //******************************************************************************

        #include "DSP28_Device.h"

        #include "f28xileg_vdc.h"

        #include "f28xbmsk.h"

        #define CPU_CLOCK_SPEED      6.6667L   //  CPU時鐘速度150MHz

        #define ADC_usDELAY 5000L

        #define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L)

        / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)

        extern void DSP28x_usDelay(unsigned long Count);

        void F28X_ileg2_dcbus_drv_init(ILEG2DCBUSMEAS *p)

        {

            DELAY_US(ADC_usDELAY);     

            AdcRegs.ADCTRL1.all = ADC_RESET_FLAG;        /*復位ADC模塊                 */

              asm(" NOP ");

              asm(" NOP "); 

            AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;            /* 為bandgap和參考電路供電*/

              DELAY_US(ADC_usDELAY);                                  /*為ADC其他單元上電前延時 */

         

            AdcRegs.ADCTRL3.bit.ADCPWDN = 1;                  /*為ADC其他單元上電     */

            AdcRegs.ADCTRL3.bit.ADCCLKPS = 3;               /* 設置ADCTRL3寄存器  */

        DELAY_US(ADC_usDELAY);     

         

            AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE;           /*設置ADCTRL1寄存器 */

            AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE;            /*設置ADCTRL2寄存器    */

        AdcRegs.ADCMAXCONV.bit.MAX_CONV = 2;                      /* 確定3個轉換                  */

            AdcRegs.ADCCHSELSEQ1.all = p->Ch_sel;                 /* 配置通道選擇                  */

         

        EvaRegs.GPTCONA.bit.T1TOADC = 1;                /*設置采用Timer1 UF觸發(fā)ADC轉換 */

        }

         

        void F28X_ileg2_dcbus_drv_read(ILEG2DCBUSMEAS *p)

        {

               int dat_q15;

               long tmp;

                /* 等待ADC轉換結束*/

                while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)

                {};

         

                dat_q15 = AdcRegs.ADCRESULT0^0x8000;     /*將轉換結果變成Q15格式雙極性數據*/

                tmp = (long)(p->Imeas_a_gain*dat_q15);

                p->Imeas_a = (int)(tmp>>13);

                p->Imeas_a += p->Imeas_a_offset;

                p->Imeas_a *= -1;                                /*正向,電流流向電動機*/

               

                dat_q15 = AdcRegs.ADCRESULT1^0x8000;   /*將轉換結果變成Q15格式雙極性數據*/

                tmp = (long)(p->Imeas_b_gain*dat_q15);

                p->Imeas_b = (int)(tmp>>13);

                p->Imeas_b += p->Imeas_b_offset;

                p->Imeas_b *= -1;                                /*正向,電流流向電動機*/

         

                dat_q15 = (AdcRegs.ADCRESULT2>>1)&0x7FFF;   /*將轉換結果變成Q15格式雙極性數據*/

                tmp = (long)(p->Vdc_meas_gain*dat_q15);

                p->Vdc_meas = (int)(tmp>>13);

                p->Vdc_meas += p->Vdc_meas_offset;

         

                p->Imeas_c = -(p->Imeas_a + p->Imeas_b);

         

                AdcRegs.ADCTRL2.all |= 0x4040;                 /* 復位排序器                                        */

         

        }

         

         

        例4、電動機位置檢測

        /******************************************************************************

        //    TMS320F2812電動機位置檢測  QEP電路初始化及應用

        //    文件名稱:F28XQEP.C

        //******************************************************************************

        #include "DSP28_Device.h"

        #include "f28xqep.h"

        #include "f28xbmsk.h"

         

        void  F28X_EV1_QEP_Init(QEP *p)

        {

         

                  EvaRegs.CAPCON.all = QEP_CAP_INIT_STATE;     /*設置捕捉單元 */

                  EvaRegs.T2CON.all = QEP_TIMER_INIT_STATE;    /*設置捕捉定時器*/

                  EvaRegs.T2PR = 0xFFFF;

                  EvaRegs.EVAIFRC.bit.CAP3INT = 1;                         /*清除CAP3標志*/

                  EvaRegs.EVAIMRC.bit.CAP3INT = 1;                        /*使能CAP3中斷*/

                  GpioMuxRegs.GPAMUX.all |= 0x0700;                       /*配置捕捉單元的引腳*/

         

         

        void F28X_EV1_QEP_Calc(QEP *p)

        {

             long tmp;

         

             p->dir_QEP = 0x4000&EvaRegs.GPTCONA.all;

             p->dir_QEP = p->dir_QEP>>14;

          

             p->theta_raw = EvaRegs.T2CNT + p->cal_angle;

          

             tmp = (long)(p->theta_raw*p->mech_scaler);                   /* Q0*Q26 = Q26 */

             tmp &= 0x03FFF000;

             p->theta_mech = (int)(tmp>>11);                               /* Q26 -> Q15 */

             p->theta_mech &= 0x7FFF;

                   

             p->theta_elec = p->pole_pairs*p->theta_mech;                 /* Q0*Q15 = Q15 */

             p->theta_elec &= 0x7FFF;

          

        }

         

        void F28X_EV1_QEP_Isr(QEP *p)

        {

         

             p->QEP_cnt_idx = EvaRegs.T2CNT;

             EvaRegs.T2CNT = 0;

             p->index_sync_flag = 0x00F0;

         

        }

         

        //******************************************************************************

        //    TMS320F2812電動機位置檢測  QEP電路初始化參數及函數定義

        //    文件名稱:F28XQEP.H

        //******************************************************************************

        #ifndef __F28X_QEP_H__

        #define __F28X_QEP_H__

         

        #include "f28xbmsk.h"

        /*               初始化T2CON和CAPCON                */

        #define QEP_CAP_INIT_STATE    0x9004

        #define QEP_TIMER_INIT_STATE (FREE_RUN_FLAG +          \

                                  TIMER_DIR_UPDN +         \

                                  TIMER_CLK_PRESCALE_X_1 + \

                                  TIMER_ENABLE_BY_OWN +    \

                                  TIMER_ENABLE +           \

                                  TIMER_CLOCK_SRC_QEP +    \

                                  TIMER_COMPARE_LD_ON_ZERO)

         

        /*  定義QEP (正交編碼電路) 驅動的對象 */

        typedef struct {int theta_elec;               /* 輸出: 電動機電角度(Q15)                                                   */

                        int theta_mech;      /* 輸出: 電動機機械角度(Q15)                                                        */

                        int dir_QEP;      /* 輸出: 電動機轉動方向 (Q0)                                                 */

                        int QEP_cnt_idx;     /* 變量: 編碼器計數(Q0)                                                         */

                        int theta_raw;       /* 變量: 定時器2得出的角度(Q0)                              */

                        int mech_scaler;     /* 參數: 0.9999/計數最大值,計數最大值 = 4000 (Q26)       */

                        int pole_pairs;       /* 參數: 極對數(Q0)                                                                 */

                        int cal_angle;        /* 參數: 編碼器和相之間的角度偏移量 (Q0)                         */

                        int index_sync_flag; /* 輸出: Index sync status (Q0)                                                      */

                        void (*init)();       /* 初始化函數指針                                                             */

                        void (*calc)();     /* 計算函數指針                                                                   */

                        void (*isr)();      /* 中斷程序指針                                                                       */

                        }  QEP;

         

        /*                定義一個QEP_handle                            */

        typedef QEP *QEP_handle;

        #define QEP_DEFAULTS { 0x0, 0x0,0x0,0x0,0x0,16776,2,-2365,0x0,  \

                        (void (*)(long))F28X_EV1_QEP_Init,            \

                        (void (*)(long))F28X_EV1_QEP_Calc,                   \

                        (void (*)(long))F28X_EV1_QEP_Isr }

        void F28X_EV1_QEP_Init(QEP_handle);

        void F28X_EV1_QEP_Calc(QEP_handle);

        void F28X_EV1_QEP_Isr(QEP_handle);

         

        #endif /*  __F28X_QEP_H__ */

        例5、TMS320F2812實現三相永磁同步電動機的磁場定向控制

        //******************************************************************************

        //    采用TMS320F2812實現三相永磁同步電動機的磁場定向控制

        //    文件名稱:PMSM3_1.C

        //******************************************************************************

         

        #include "IQmathLib.h"         /* 包含IQmath庫函數的頭文件 */

        #include "DSP28_Device.h"

        #include "pmsm3_1.h"

        #include "parameter.h"

        #include "build.h"

         

        //   函數聲明

        interrupt void EvaTimer1(void);

        interrupt void EvaTimer2(void);

         

        // 全局變量定義

        float Vd_testing = 0;                     /* Vd testing (pu) */

        float Vq_testing = 0.25;                   /* Vq testing (pu) */

        float Id_ref = 0;                        /* Id reference (pu) */

        float Iq_ref = 0.4;                       /* Iq reference (pu) */

        float speed_ref = 0.2;                     /* Speed reference (pu) */

        float T = 0.001/ISR_FREQUENCY;   /* Samping period (sec), see parameter.h */

         

        int isr_ticker = 0;

         

        int pwmdac_ch1=0;

        int pwmdac_ch2=0;

        int pwmdac_ch3=0;

         

        volatile int enable_flg=0;

        int lockrtr_flg=1;

         

        int speed_loop_ps = 10;             // 速度環(huán)定標器

        int speed_loop_count = 1;           // 速度環(huán)計數器

         

        CLARKE clarke1 = CLARKE_DEFAULTS;

        PARK park1 = PARK_DEFAULTS;

        IPARK ipark1 = IPARK_DEFAULTS;

         

        PIDREG3 pid1_id = PIDREG3_DEFAULTS;

        PIDREG3 pid1_iq = PIDREG3_DEFAULTS;

        PIDREG3 pid1_spd = PIDREG3_DEFAULTS;

         

        PWMGEN pwm1 = PWMGEN_DEFAULTS;

        PWMDAC pwmdac1 = PWMDAC_DEFAULTS;

         

        SVGENDQ svgen_dq1 = SVGENDQ_DEFAULTS;

        QEP qep1 = QEP_DEFAULTS;

        SPEED_MEAS_QEP speed1 = SPEED_MEAS_QEP_DEFAULTS;

        DRIVE drv1 = DRIVE_DEFAULTS;

         

        RMPCNTL rc1 = RMPCNTL_DEFAULTS;

        RAMPGEN rg1 = RAMPGEN_DEFAULTS;

         

        ILEG2DCBUSMEAS ilg2_vdc1 = ILEG2DCBUSMEAS_DEFAULTS;

         

        //  主函數

        void main(void)

        {

         

        //   系統(tǒng)初始化

                 InitSysCtrl();

         

        //  HISPCP 設置

            EALLOW;

            SysCtrlRegs.HISPCP.all = 0x0000;     /* SYSCLKOUT/1  */

            EDIS;

         

        // 禁止并清除所有CPU中斷:

                 DINT;

                 IER = 0x0000;

                 IFR = 0x0000;

         

        // 初始化Pie到默認狀態(tài)

                 InitPieCtrl();

         

        // 初始化PIE相量表

                 InitPieVectTable();     

              

        // 初始化EVA  定時器1:

            //設置定時器1寄存器 (EV A)

            EvaRegs.GPTCONA.all = 0;

           //等待使能標志位

           while (enable_flg==0)

            {

        // 使能定時器1的下溢中斷

            EvaRegs.EVAIMRA.bit.T1UFINT = 1;

            EvaRegs.EVAIFRA.bit.T1UFINT = 1;

         

        // 使能CAP3中斷(定時器2)

            EvaRegs.EVAIMRC.bit.CAP3INT = 1;

            EvaRegs.EVAIMRC.bit.CAP3INT = 1;

            };

         

        // 重新分配中斷向量

                 EALLOW;

                 PieVectTable.T1UFINT = &EvaTimer1;

                 PieVectTable.CAPINT3 = &EvaTimer2;

                 EDIS;

         

        // 使能PIE組2的中斷6(T1UFINT)

            PieCtrlRegs.PIEIER2.all = M_INT6;

         

        // 使能PIE組3的中斷7(CAPINT3)

            PieCtrlRegs.PIEIER3.all = M_INT7;

         

        // 使能CPU INT2(T1UFINT)和INT3(CAPINT3):

                 IER |= (M_INT2 | M_INT3);

         

        // 使能全局中斷和最高優(yōu)先級適時調試事件管理器功能:

              

                 EINT;      //使能全局中斷INTM

                 ERTM;       // 使能適時調試中斷DBGM

         

        /*      模塊初始化        */

            pwm1.n_period = SYSTEM_FREQUENCY*1000000*T/2;  /* 預定標器X1 (T1), ISR周期 = T x 1 */

                 pwm1.init(&pwm1);

         

            pwmdac1.pwmdac_period = 2500;  /* PWM頻率 = 30 kHz */

            pwmdac1.PWM_DAC_IPTR0 = &pwmdac_ch1;

            pwmdac1.PWM_DAC_IPTR1 = &pwmdac_ch2;

            pwmdac1.PWM_DAC_IPTR2 = &pwmdac_ch3;

                 pwmdac1.init(&pwmdac1);

         

            qep1.init(&qep1);

         

            drv1.init(&drv1);

         

            ilg2_vdc1.init(&ilg2_vdc1);

         

        /* 初始化SPEED_FRQ模塊 */

            speed1.K1 = _IQ21(1/(BASE_FREQ*T));

            speed1.K2 = _IQ(1/(1+T*2*PI*30));  /* 低通截至頻率 = 30 Hz */

            speed1.K3 = _IQ(1)-speed1.K2;

            speed1.rpm_max = 120*BASE_FREQ/P;

         

        /*初始化RAMPGEN模塊 */

            rg1.step_angle_max = _IQ(BASE_FREQ*T);

         

        /* 初始化PID_REG3  Id調節(jié)模塊 */

                 pid1_id.Kp_reg3 = _IQ(0.75);

                 pid1_id.Ki_reg3 = _IQ(T/0.0005);                                 

                 pid1_id.Kd_reg3 = _IQ(0/T);                                                    

                 pid1_id.Kc_reg3 = _IQ(0.2);

            pid1_id.pid_out_max = _IQ(0.30);

            pid1_id.pid_out_min = _IQ(-0.30); 

         

        /* 初始化PID_REG3  Iq調節(jié)模塊 */

                 pid1_iq.Kp_reg3 = _IQ(0.75);

                 pid1_iq.Ki_reg3 = _IQ(T/0.0005);

                 pid1_iq.Kd_reg3 = _IQ(0/T);

                 pid1_iq.Kc_reg3 = _IQ(0.2);

            pid1_iq.pid_out_max = _IQ(0.95);

            pid1_iq.pid_out_min = _IQ(-0.95);

         

        /*初始化PID_REG3  速度調節(jié)模塊 */

             pid1_spd.Kp_reg3 = _IQ(1);

                 pid1_spd.Ki_reg3 = _IQ(T*speed_loop_ps/0.1);

                 pid1_spd.Kd_reg3 = _IQ(0/(T*speed_loop_ps));   

                pid1_spd.Kc_reg3 = _IQ(0.2);

            pid1_spd.pid_out_max = _IQ(1);

            pid1_spd.pid_out_min = _IQ(-1);

         

        // 循環(huán)等待

                 for(;;);

         

        }   

         

        interrupt void EvaTimer1(void)

        {

         

            isr_ticker++;

         

            if (speed_loop_count==speed_loop_ps)

             {

                     pid1_spd.pid_ref_reg3 = _IQ(speed_ref);

                     pid1_spd.pid_fdb_reg3 = speed1.speed_frq;

                        pid1_spd.calc(&pid1_spd);

                     speed_loop_count=1;

             }

            else speed_loop_count++;

         

                       pid1_iq.pid_ref_reg3 = pid1_spd.pid_out_reg3;

                          pid1_iq.pid_fdb_reg3 = park1.qe;

                          pid1_iq.calc(&pid1_iq);

         

                       pid1_id.pid_ref_reg3 = _IQ(Id_ref);

                          pid1_id.pid_fdb_reg3 = park1.de;

                          pid1_id.calc(&pid1_id);

         

                       ipark1.de = pid1_id.pid_out_reg3;

                       ipark1.qe = pid1_iq.pid_out_reg3;

                       ipark1.ang = speed1.theta_elec;

                       ipark1.calc(&ipark1);

         

               svgen_dq1.Ualfa = ipark1.ds;

                         svgen_dq1.Ubeta = ipark1.qs;

                        svgen_dq1.calc(&svgen_dq1);

         

            pwm1.Mfunc_c1 = (int)_IQtoIQ15(svgen_dq1.Ta); /* Mfunc_c1 is in Q15 */

                       pwm1.Mfunc_c2 = (int)_IQtoIQ15(svgen_dq1.Tb); /* Mfunc_c2 is in Q15 */

            pwm1.Mfunc_c3 = (int)_IQtoIQ15(svgen_dq1.Tc); /* Mfunc_c3 is in Q15 */

                          pwm1.update(&pwm1);

              

        ilg2_vdc1.read(&ilg2_vdc1);

              

                clarke1.as = _IQ15toIQ((long)ilg2_vdc1.Imeas_a);

                        clarke1.bs = _IQ15toIQ((long)ilg2_vdc1.Imeas_b);

                          clarke1.calc(&clarke1);

              

                       park1.ds = clarke1.ds;

                       park1.qs = clarke1.qs;

                       park1.ang = speed1.theta_elec;

                       park1.calc(&park1);

         

                       qep1.calc(&qep1);

         

                       speed1.theta_elec = _IQ15toIQ((long)qep1.theta_elec);

                       speed1.dir_QEP = (long)(qep1.dir_QEP);

                       speed1.calc(&speed1);

         

                       pwmdac_ch1 = (int)_IQtoIQ15(svgen_dq1.Ta);

                       pwmdac_ch2 = (int)_IQtoIQ15(clarke1.as); 

                       pwmdac_ch3 = (int)_IQtoIQ15(speed1.theta_elec); 

         

                       drv1.enable_flg = enable_flg;

                       drv1.update(&drv1);

         

                          pwmdac1.update(&pwmdac1);

         

        // 使能定時器中斷

                          EvaRegs.EVAIMRA.bit.T1UFINT = 1;

                          EvaRegs.EVAIFRA.all = BIT9;

                          PieCtrlRegs.PIEACK.all |= PIEACK_GROUP2;

        }

         

        interrupt void EvaTimer2(void)

        {

             qep1.isr(&qep1);

                 EvaRegs.EVAIMRC.bit.CAP3INT = 1;

                 EvaRegs.EVAIFRC.all = BIT2;

                 PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;

          }

         


         

        狀 態(tài): 離線

        會員簡介

        會員代號: citi
        聯(lián) 系 人: 張高
        電  話: 020-326585
        傳  真:
        地  址: 偌還餓16號
        郵  編: 523620
        主  頁:
         
        該廠商相關技術文摘:
        基于TMS320F2812的永磁同步電動機控制
        更多文摘...
        立即發(fā)送詢問信息在線聯(lián)系該技術文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網會員
        請留下您的有效聯(lián)系方式,以方便我們及時與您聯(lián)絡

        關于我們 | 聯(lián)系我們 | 廣告服務 | 本站動態(tài) | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 老熟妇国产一区二区三区| 国产高颜值不卡一区二区| 国内精品伊人久久久久影院对白 | 91色老久久精品偷偷性色| 国产一区二区内射最近更新| 亚洲国产成人精品女人久久久| 国产精品中文字幕自拍| 91精品免费久久久| 国产精品美腿一区在线看| 国产91丝袜在线播放动漫| 欧美和黑人xxxx猛交视频| 永久国产盗摄一区二区色欲| 国产网红无码福利在线播放| 中文字幕乱码一区二区免费| 国产在线无码免费视频2021| 变态另类视频一区二区三区 | 国产超高清麻豆精品传媒麻豆精品| 国产香蕉尹人综合在线观看| 国产普通话刺激视频在线播放| 国产日韩一区二区四季| 性夜久久一区国产9人妻| 精品国产一区二区三区蜜臀| 视频一区二区不中文字幕| 免费无码黄十八禁网站| 国产成人8x视频一区二区| 大香伊蕉在人线国产免费| 精品一区二区成人精品| 在线a人片免费观看| 国产不卡在线一区二区| 亚洲人成日本在线观看| 免费国产一区二区不卡| 一区二区三区鲁丝不卡| 亚洲国产中文在线有精品| 51精品国产人成在线观看| 亚洲 成人 无码 在线观看| 人妻夜夜爽天天爽三区丁香花| 全免费A级毛片免费看无码| 久久日韩精品一区二区五区| 国产精品分类视频分类一区| 成年视频人免费网站动漫在线| 国产日产欧产精品精品|