DSP无刷直流电动机驱动控制程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.4 无刷直流电动机驱动控制程序

//########################################################################## ###///

//无刷电机控制源程序

//TMS320F2812

//

//########################################################################## ###

//=====================================================================

//头文件调用

//=====================================================================

#include "DSP28_Device.h"

#include "math.h"

#include "float.h"

//=====================================================================

//常量附值

//=====================================================================

#define Idc_max 3000 //电流给定最大值

#define Idc_min 0 //电流给定最小值

//=====================================================================

//标志位

//=====================================================================

char Iab_Data=0;

struct Flag_Bits { // bits description

Uint16 Send:1; // 0 串口发数

Uint16 Test:1; // 1 串口测试

Uint16 Vflag:1; // 2 转速更新

Uint16 SendEnd:1; // 3 串口发送结束

Uint16 Sign1:1; // 4 上一次给定转向标志

Uint16 Sign2:1; // 5 本次给定转向标志

Uint16 Openint:1; // 6 启动标志

Uint16 Adfrist:1; // 7 保留

Uint16 Spdoff:1; // 8 保留

Uint16 Zero:1; // 9 转速过零标志

Uint16 Mode:3; // 10-12 保留

Uint16 Dshow:1; // 13 保留

Uint16 Sign:1; // 14 当前转向标志

};

union Flag_Reg {

Uint16 all;

struct Flag_Bits bit;

}FlagRegs;

//===================================================================== //全局变量

//===================================================================== //串口通信变量

unsigned int Sci_Rx[8]={0,0,0,0,0,0,0,0}; //接收数据数组

unsigned int Sci_Tx[8]={0,0,0,0,0,0,0,0}; //发送数据数组

char T_pointer=0; //发送数据数组指针

char R_pointer=0; //接收数据数组指针

char T_length=1; //发送数据长度

char R_length=0; //接收数据长度

char a2=0;

//控制参数

unsigned int spd_kp=0; //转速环P参数unsigned int spd_ki=0; //转速环I参数unsigned int id_kp=0,id_ki=0; //电流PI参数

signed int spd_given=0; //转速给定

signed int spd_given1=0; //转速给定

signed int spd_given2=0; //转速给定

//控制变量

unsigned int cap1=0; //前次换向标志位unsigned int cap2=0; //本次换向标志位unsigned int intruptcount=0; //定时器1下溢中断次数unsigned int speed_given = 1000; //转速给定

signed int Idc_given2=0; //算得本次电流给定值signed int speed_e1=0; //前次转速误差

signed int speed_e2=0; //本次转速误差

signed int Ia_e1=0; //前次电流误差

signed int Ia_e2=0; //本次电流误差

char t2first=0;

signed int COMP2=0; //装比较寄存器值

//转速反馈

char Spd_Data=0; //滤波计数

int speed_counter=0; //速度环计数器

unsigned int cap_a; //本次捕获单元数据

unsigned int cap_b; //上次捕获单元数据

long cap_c; //捕获单元数据差

signed int BLDC_SPD[10]={0,0,0,0,0,0,0,0,0,0};//转速滤波

signed int spd_fd_q1=0; //转速反馈临时变量

unsigned int spd_fd_q0=0; //转速检测值

char cc=0;

//电流反馈

unsigned int ia[6]={0,0,0,0,0,0}; //A相电流反馈值

unsigned int ib[6]={0,0,0,0,0,0}; //B相电流反馈值

signed int ia_fd=0,ib_fd=0; //电流反馈

signed int Temp_filter=0; //临时变量

unsigned int t1per=0; //周期寄存器数值

//临时变量

signed long long1_tmp=0;

signed long long2_tmp=0;

signed int u16_tmp1=0;

signed int u16_tmp2=0;

//===================================================================== //子程序声明

//===================================================================== interrupt void t1uf_int(void);

相关文档
最新文档