TI公司官网源代码基于TMS320F2812的永磁同步电动机空间矢量控制的算法实现
往链点点通共享资源,了解更多请登录第7章基于TMS320F2812的永磁同步电动机控制例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_dq1svgen_dq1.Ubeta = Ubeta1; // 提供输入参数:svgen_dq1svgen_dq2.Ualpha = Ualpha2; // 提供输入参数:vgen_dq2svgen_dq2.Ubeta = Ubeta2; // 提供输入参数:svgen_dq2svgen_dq1.calc(&svgen_dq1); // 调用函数模块svgen_dq1svgen_dq2.calc(&svgen_dq2); // 调用函数模块svgen_dq2Ta1 = svgen_dq1.Ta; // 访问运算结果svgen_dq1Tb1 = svgen_dq1.Tb; // 访问运算结果svgen_dq1Tc1 = svgen_dq1.Tc; // 访问运算结果svgen_dq1Ta2 = svgen_dq2.Ta; // 访问运算结果svgen_dq2Tb2 = svgen_dq2.Tb; // 访问运算结果svgen_dq2Tc2 = 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中的一个矢量的例子:PWM1PWM3PWM5图相位置(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;CONA.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触发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.EV AIFRC.bit.CAP3INT = 1; /*清除CAP3标志*/EvaRegs.EV AIMRC.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; // 速度环定标器int speed_loop_count = 1; // 速度环计数器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){// 系统初始化InitSysCtrl();// HISPCP 设置EALLOW;SysCtrlRegs.HISPCP.all = 0x0000; /* SYSCLKOUT/1 */ EDIS;// 禁止并清除所有CPU中断:DINT;IER = 0x0000;IFR = 0x0000;// 初始化Pie到默认状态InitPieCtrl();// 初始化PIE相量表InitPieVectTable();// 初始化EV A 定时器1://设置定时器1寄存器(EV A)EvaRegs.GPTCONA.all = 0;//等待使能标志位while (enable_flg==0){// 使能定时器1的下溢中断EvaRegs.EV AIMRA.bit.T1UFINT = 1;EvaRegs.EV AIFRA.bit.T1UFINT = 1;// 使能CAP3中断(定时器2)EvaRegs.EV AIMRC.bit.CAP3INT = 1;EvaRegs.EV AIMRC.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);// 使能全局中断和最高优先级适时调试事件管理器功能:EINT; //使能全局中断INTMERTM; // 使能适时调试中断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调节模块*/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调节模块*/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 速度调节模块*/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);// 循环等待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.EV AIMRA.bit.T1UFINT = 1;EvaRegs.EV AIFRA.all = BIT9;PieCtrlRegs.PIEACK.all |= PIEACK_GROUP2;}interrupt void EvaTimer2(void){qep1.isr(&qep1);EvaRegs.EV AIMRC.bit.CAP3INT = 1;EvaRegs.EV AIFRC.all = BIT2;PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;}。
基于DSP TMS320F2812的永磁同步电机直接转矩控制
( eh ncl n l tcl n i e n ol eo hn ot nvr t, h n sa 1 0 3 C ia M c aia adEe r a E g e r gC l g f iaSuhU i s y C agh 0 8 , h ) ci n i e C ei 4 n
SM ULI I NK.I s s o d t a hes t m s sg e ih l ti h we h tt ys e Wa de in d rg ty.Th n t e c n r ls t m a ee pei n t . e h o to ys e C b x r n me e d Ke r s:d e t t r ue c n r l y wo d r i c o q o to ;pema e tma e yn h o o s mo o ; P r n n g t s c n u t r DS n r
Die tTo q n r lS s e r c r ueCo to y t m.a Dii lDTC o to ys e b s d o P TM 3 0F 1 s pr po e gt a c n r ls t m a e n DS s 2 28 2 i o s d i n
0 引言
二 十世 纪八 十年代 德 国 D p n rc ee bok教授 和 日本 学 者 T k hsi aa ah 分别 提 出直 接转 矩控 制算 法 , 然在 理 论 虽
子 相绕组 O轴 的转 子 空 间位 置 角 ; L 为定 、 子 磁链 转 与 问夹 角 , 电机 功 角 。转 子 d 一q 坐 标 系下 即 的永磁 同步 电机 的数学模 型 可表示 为 :
推导 和实现 方法上 有所不 同 , 但是 基 本思 想是 一 致 的 , 即放 弃 了 矢 量 控 制 中 电 流 解 耦 的控 制 思 想 , 掉 了 去 P WM脉宽 调制器 和 电流反馈 环 节 , 转而 通 过检 测 母 线 电压 和定子 电流 , 接计算 出电机 的磁 链 和转 矩 , 利 直 并 用两 个滞环 比较 器直 接实 现对 定子 磁链 和 转矩 的解耦 控制 J 。因此 , 与矢量 控制 相 比 , 直接 转 矩控 制具 有 转 矩响应 快 、 制结构 简单 、 控 易于 实现全 数字 化等 特点 。
基于TMS320F2812的全数字交流伺服系统设计
能 D P芯片 T 3 0 2 1 S MS 2 F 8 2实现 数 字化双 闭环 系统 , 即速度环 、 电流 环 的控 制系 统 , 计 了具 有完 整保 护 设 和 监控功 能 的 P M伺 服系 统 MS
23 辅助 电路设 计 .
231 位 置 / 度 信 号检 测 电路 .. 速
而 算 出 实 际 电流 大 小 ,实现 电机 V相 电流 信 号 反
馈 , 过坐标变换 、 经 比较 、 电流 调 节 器及 S P V WM 输 出. 构成 电流 闭环
定 稿 日期 :0 9 1 — 3 2 0 — 0 1
波 电路 。 变 电路采 用智 能功 率模 块 P 287 接 收 逆 S 16 .
D P输 出的经过缓冲 电路及 高速 光耦 6 3 S N17隔离后 的SP V WM 波 , 优 点如下 : 其 采用 第 5代 I B G T工艺 , 内置优 化后 的栅级 驱动和 过流 保护 、 欠压保 护 电路 , 超 小 型体积 , 出功率 强劲 的三 相波 形 , 输 供给永 磁 同
( MS P M)i cm l e yueo eit le t o e m d l(P s o pe db s f h n lgn w r oue IM)adT 30 2 S .hsat l dsr e h t t ei p n MS 2 F 8 D PT i rc eci st 1 2 ie b e
中事件 管 理器 ( V) 具 有 的捕 获 口及 正 交 解 码 电 E 所
到 电机 的 定 子 V相 绕 组 上 ,经 过采 样 电 阻后 得 到 20mV 以 内的 采 样 电压信 号输 入 到 感 应 输 入 引脚 6 V 。P B是 功 率智 能 模 块 的 V相 输 出 , 入 到 V . D 输 m
基于TMS320F28335的永磁同步电机矢量控制器设计
基于TMS320F28335的永磁同步电机矢量控制器设计严勤;李永聪【摘要】为了提高电动汽车用永磁同步电机控制性能,设计了一款以浮点型TMS320F28335数字信号处理器(DSP)为控制核心的数字化矢量控制器.与采用TMS320LF2407、TMS320F2812等传统定点型DSP为控制核心的永磁同步电机控制器相比,其具有编程简单、运算速度快、片内A/D精度高等优势.文章详细介绍了IGBT模块、温度模块以及各信号采集与调理电路等硬件部分的设计;软件部分,以C语言和汇编语言混合编程,基于TI公司提供的开发系统编写了电机控制程序.该控制器与传统的以定点型DSP芯片为控制核心的驱动控制器相比,提高了运算速度和控制精度,且易于编程,保护功能完善.【期刊名称】《贵州电力技术》【年(卷),期】2018(021)006【总页数】7页(P63-69)【关键词】永磁同步电机;矢量控制;控制器;TMS320F28335【作者】严勤;李永聪【作者单位】贵阳职业技术学院,贵州贵阳550081;贵州大学机械工程学院,贵州贵阳550025【正文语种】中文【中图分类】U271永磁同步电动机(PMSM)因其优良的性能在电动汽车牵引电机上被广泛应用[1-2],文章以电动汽车用内置式永磁同步电动机为对象,研究设计了电动汽车用永磁同步电动机的驱动控制器。
在分析PMSM矢量控制理论与方法的基础上,设计了驱动控制器硬件电路,以及控制逻辑和程序等软件部分。
该控制器以浮点型DSPTMS320F28335芯片为核心,与传统定点型DSP相比,能够执行更复杂的浮点运算,A/D转换精度更高和速度更快,且具有性能稳定、集成度好的优点。
1 总体方案设计此次设计的PMSM驱动控制器的硬件系统主要由两部分组成,即主控制板部分和驱动板部分。
在此系统中,主控制板是核心部分,它主要实现三相电流的信号采集,主电路电压信号采集,位置信号采集,温度信号采集,数据处理,控制系统的输出,通过CAN总线接口电路对外通信等功能。
基于Matlab_Simulink的TMS320F2812代码开发
LEARNING GARDEN 学习园地基于Matlab /Simulink 的TMS320F2812代码开发广东工业大学卢小锦曾岳南摘 要T M S320F2812DSP 是运动控制系统很好的硬件支撑平台,但传统的DSP 代码开发周期较长,效率不高。
M at lab 公司的Embedded T arget for T I C2000DSP 可解决上述问题,用户通过使用该模块,不仅可以进行电路的系统级仿真,还可编译生成相应的C 语言代码,进行算法的探索与设计思路的验证。
文章以三相异步电动机的VV VF 结合SVPWM 控制算法的开环控制系统为例,给出了M atlab/Simulink 平台上DSP 代码开发的设计流程。
关键词自动代码生成 T M S320F2812 M at lab/Simulink RT W 代码生成引 言随着现代电力电子技术的迅猛发展,兼有高运算速度和强控制能力的DSP 在逆变器、电机等电力电子设备的控制领域得到了广泛应用。
通用DSP 的源代码开发都可以采用两种方法:一种是直接利用其提供的汇编指令编写源代码,然后经汇编器和链接器进行汇编链接后生成目标可执行代码;另一种方法是利用标准C/C ++语言编写源代码,然后经C/C ++编译器、汇编器和链接器进行编译链接,最后生成目标可执行代码。
这两种代码开发方法都使得开发人员不得不花费大量的时间在代码的编写上面,增大产品开发难度,延长产品开发周期,从而影响开发效率[1]。
M at h Works 公司和T I 公司联合开发的工具包 M at lab L ink for CCS Development T ools,已经能把M at lab 和T I 公司的DSP 集成开发环境CCS(Code Composer St adiu)及目标DSP 连接起来。
利用此工具可以像操作M at lab 变量一样来操作T I DSP 的存储器或寄存器,即整个目标DSP 对于M at lab 像透明的一样,开发人员在M at lab 环境下,就可以完成对CCS 的操作。
基于TMS320F2812的永磁同步直线电机伺服控制系统设计
Z ENG un, ZENG e n n,W U Yix a g H J YH — a —in
( a ut o tmain,Gu n d n iest f e h oo yGu n z o F c l fAuo t y o a g o gUnv ri o c n lg a gh u,Gu n d n 0 6,Chn ) y T a g o g5 0 1 0 ia
p o e t o o n t lpo ii n tsi g i c u ae,h ve g o y a i e f r a c n o r lp e ii n. r v he r tr i ii sto e tn s a c r t a a o d d n m c p ro m n e a d c nto r c so
第 3期 21 0 2年 3月
组 合 机 床 与 自 动 化 加 工 技 术
M o l a hi o du ar M c ne To l& Aut m atc M a f c u i g Te hn que o i nu a t r n c i
NO. 3 M ar .20 2 1
Pe m a e a ne ne r Sy hr o o o e v nt o y t m e i n Ba e n TM S3 0F2 2 r n ntM g t Li a nc on us M t r S r o Co r lS s e D sg s d o 2 81
c o e - o e v o t o y t m e i n i i h d・ x s c r n f s a o s s tt e z r n t e r t r fu - l s d-o p s r o c n r ls s e d s g n wh c ・ i ure to t t r i e o b e o i h o o l x- l a
基于DSPTMS320F2812和DS18B20的温度测量系统设计
基于DSP TMS320F2812和DS18B20的温度测量系统设计摘要:本文介绍了一种基于TI公司DSP TMS320F2812 的高精度温度测量系统的设计。
该系统采用TMS320F2812为微处理器,配合高精度DS18B20数字温度传感器和外部扩展的模数转换器采集温度数据,并经过滤波算法处理控制输出,能够得到比较精确的温度值。
主要介绍了系统的结构、工作原理、软硬件的设计,并对系统设计的特点进行了详细的说明。
关键词: TMS320F2812;DS18B20;温度测量;模数转换1 概述温度在航空、航天领域中是个重要的物理量,由于温度变化对设备可能产生影响,包括降低系统的成像质量,影响分辨率,因此,在这些系统中对温度的实时采集测量十分重要。
以传统的单片机为核心的温度测量控制系统,由于受到处理器自身硬件资源和速度的限制,硬件电路设计复杂,数据实时处理能力差,温度测量时间长。
而随着计算机技术尤其是招超大规模集成电路技术的发展,具有更强处理能力的DSP芯片,以其运算速度快、实时性强、功耗低、抗干扰能力强等特点,越来越多地被应用。
采用了DS18B20数字温度传感器、外部扩展ADC模数转换器,使用内部集成外设功能的DSP TMS320F2812 微处理器作为整个系统的核心控制单元,简化了硬件电路设计;在温度采集控制软件上采用“通道滤波”温度采集控制算法,使得温度采集具有速度快、精度高的特点。
2 系统方案设计温度测量系统设计以DSP TMS320F2812为中央处理器为核心,采用DS18B20型号数字温度传感器为温度传感器,使用AD7892型号的ADC模数转换器进行A/D 转换,并将采集结果代入温度曲线方程计算出当前温度值,并且将温度值通过通信系统发送到上位机。
高精度温度测量控制系统由两大部分组成,第1部分为以DSP TMS320F2812为核心处理器的数据采集及处理部分,主要由产品温度环境、温度传感器、ADC模数转换器、DSP TMS320F2812、电源构成;第2部分由温度采集处理软件构成,完成对DSP采集到的数据进行分析、处理等任务。
基于TMS320F2812全数字三相PWM整流器的设计
基于TMS320F2812全数字三相PWM整流器的设计唐勇奇 赵葵银(湖南工程学院,湘潭 411101)摘要:本文针对三相电压型PWM整流器,在建立了其数学模型的基础上,对整流器电流解耦控制策略进行研究,使用TMS320F2812数字处理芯片进行系统的硬件和软件设计,充分利用TMS320F2812丰富接口资源和快速的运算能力,使整流器硬件更简单;实验结果表明:整流器实现了单位功率因数控制,具有优越动态和静态性能。
关键词:三相PWM整流器;DSP; 电流解耦控制中图分类号:TP461 文献标识码:AThree-phase PWM Rectifier Based on TMS320F2812Tang-Yongqi Zhao-Kuiyin(Hunan institute of Engineering , Xiangtan 411101)Abstract:Aiming at the three phase PWM rectifier,this paper study on the control method of rectifier current decoupled control based on setting up rectifier mathematical mode , designs system hardware and software with TMS320F2812 chip, utilizes completely the wealthy peripherals and high— speed calculation function of DSP, simplifies design of rectifier's hardware . The experiment indicates the rectifier has realized control of the unit's power factor and has better dynamic and static characters.Keywords:Three-phase PWM Rectifier;DSP;Current Decoupled Controll 引言近年来,PWM整流器以其突出的优点(网侧电流正弦化,功率因数可调等)广泛应用于功率因数补偿、高性能整流器、电能回馈、有源滤波等电力电子变流领域,同时也成为电力电子学术界研究的热点。
基于TMS320F2812的程序从FLASH到RAM的移植
.text:LOAD=FLASH—AB。PAGE=0 RUN=RAM—HOLOLl,PAGE=0
LOAD_-sTART(jexLI∞dS协rt), RUN—STARTLtexL,unstart), SIZELte)(t—size) 2软件测试
.sect”RAMfuncs”改变为.te)(t段,使DSP281 x-usDelay.弱m 定位在.te)(【段。
6)从DSP281X-SysclrLc文件代码中移去#pragma CODE —SECTION(1nitFLASH。”RAMfuncs”)。这将重新定位InitFIash() 函数到.te)(t段上来代替原来的RAMfuncs段。
intemaI FlAM.so.direct OperaCe.n F|鸽h for the ha晤h app¨ation,aften can not meeC the requ订ementS.TherefOre,there e×ist a
need to copy the code to RAM 10 enhance the Operating speed.This appIicaliOn repOrt and associated cOde fileS pravide
CMD文件的第二部分是段在存储器中的分配。这时实际 编译的段被链接到存储区中。本文中所有的段被加载和运行在 FLASH存储区。分配如下所示。
codestan:>BEGlN—FLASH。PAGE=0 wddisabIe:>FLASH-AB.PAGE=0
∞pysectjons:>Fb气SH—AB.PAGE=O 其它的初始化段被加载到FIash空间,却在内部RAM中运
基于CAN和TMS320F2812的永磁同步电机控制器的研究
输入最大电流 5 , 0 最高电压 6 0 推荐使用条 A 0 件如下: 逆变 电压不超过 4 0 工作 电流不超过 0
其 中, , 为定 子 磁链 ;
为转 子 磁 链 ;L ,q dL
为 d/ 轴 电感 分 量; , 为 d/ 轴 电流 分量 . i q 留 定子 线 圈上 的 电压 方程 为 :
f / d d ~ 0+ , 3 l p + ' + . “ q  ̄ 0 g d 3 ,
第2 卷 第4 ,0 1 1N 4 期 2 1年 0
V 4No4 Oc . Ol l .. t 2 1 2
宁 波 大 学 学 报 (理 工 版 )
J R LOF NG O U V R I Y( E OU NA N1 B NI E ST NS E)
首届中国高校优秀科技期刊奖
_
宁波大学学报 ( 理工版 )
流 及控 制部分 4路 1 V独立 直流 , 电流检 测 、 5 向 位
置检测及系统板提供4 2 - 1 v、+ 直流. 5 v 系统具体 硬件如图 1 所示.
和过热等故 障检测 电路, 并可将 故障检测信号输 出到控制单元, 功能非常完善. 本次设计采用三菱 第五代 IM 模块 P 0 L B 6 . M5 C 1 00 P M5 C 1 00 P 0 L B 6
浙江省秀科技期刊一等奖
基于 C N和 T 30 2 A MS 2 F 8 1 2的永磁 同步 电机控制器 的研究
梅 义成,俞建定
( 宁波大学 信息科学与工程学院,浙江 宁波 3 5 1 ) 12 1
摘 要 :基 于永磁 同步 电机 的 矢量控 制 理论 、C N 总线和 T 30 2 1, A MS 2F 82 从硬 件 和软件 提 出了一
基于DSP的永磁同步电机控制系统硬件设计
基于DSP的永磁同步电机控制系统硬件设计胡宇;张兴华【摘要】以小功率永磁同步电机(PMSM)为研究对象,结合数字信号处理器TMS320F2812功能特点,给出了一套PMSM驱动控制系统硬件设计方案.详细阐述了功率驱动主电路、反馈信号检测电路以及供电电路的设计,介绍了主要元器件选型和参数计算方法.基于设计的硬件平台,对PMSM调速控制系统进行了测试.试验结果表明,所设计的控制系统硬件设计可靠、性能稳定、控制精度高.%Based on the controlled object of small power permanent magnet synchronous motor (PMSM),combined with the main features of digital signal processor TMS320F2812,an overall hardware design scheme had been put forward for the PMSM drive control system.Design of the power driven main circuit had illustrated,signal detection circuit and power supply circuit in detail,meanwhile introduced the main components selection and parameters calculation method.Based on the designed hardware platform,the control system of PMSM had been performed a functional test.Experimental results showed that the hareware design of control system had good reliability with stable performance and high control precision.【期刊名称】《电机与控制应用》【年(卷),期】2017(044)012【总页数】7页(P19-24,80)【关键词】永磁同步电机;功率驱动主电路;信号检测电路【作者】胡宇;张兴华【作者单位】南京工业大学电气工程与控制科学学院,江苏南京211816;南京工业大学电气工程与控制科学学院,江苏南京211816【正文语种】中文【中图分类】TM351永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)因其体积小、损耗低、功率密度高和效率高等优点,在机械制造、工业控制、航空航天等领域得到广泛应用[1]。
