//////////////////////////////////////////////////////////////////////
//********************************************************************
//******************** FOC Functions **********************
//********************************************************************
//////////////////////////////////////////////////////////////////////
#include "main.h"
//****************************************************************************
// @Imported Global Variables
//****************************************************************************
extern bit gb_Once;
extern bit gb_Trap;
extern bit gb_EnableFOC;
extern bit gb_On;
extern bit gb_Off;
extern data unsigned char guc_StartupCounter;
extern data unsigned char guc_SpeedControlCounter;
extern data int gi_I_phaseA;
extern data int gi_I_phaseB;
extern data int gi_I_alpha;
extern data int gi_I_beta;
extern data int gi_I_d;
extern data int gi_I_q;
extern data int gi_V_alpha;
extern data int gi_V_beta;
extern data int gi3_Flux_alpha[3];
extern data int gi3_Flux_beta[3];
extern data int gi_angle_mem;
extern data int gi_angle;
extern data int gi2_Speed[2];
extern data int gi_PI_output_Id;
extern data int gi_PI_output_Iq;
extern data int gi_Amplitude;
extern data int gi_Iq_reference;
extern data int gi_Iq_startup;
extern data int gi_Speed_reference;
extern data int gi_Speed_reference_user;
extern data int gi_Speed_startup;
extern idata PI_parameter gt_Id_control;
extern idata PI_parameter gt_Iq_control;
extern idata PI_parameter gt_Speed_control;
extern bit bitNewCMD0;
extern bit bitNewCMD1;
extern data unsigned char ucNewCMD0;
extern data unsigned char ucNewCMD1;
extern pdata unsigned char CANTrxBuf0[];
extern pdata unsigned char CANTrxBuf1[];
extern data unsigned char ucT2state;
extern data unsigned char ucAutoCycle;
extern bdata unsigned char Status_word;
#pragma asm
extrn code (Sinus60_tab)
extrn data (guc_sector, guc_sector_s, gi_I_alpha, gi_I_beta, gi_I_phaseA)
extrn data (gi_I_phaseB, gi_V_alpha, gi_V_beta )
#pragma endasm
void MotorControl_vInit( void )
{
// Startup values for controllers
gi_Iq_startup = DEFAULT_IQ_STARTUP;
gi_Speed_startup = DEFAULT_SPEED_STARTUP;
// PI speed controller initialization
gt_Speed_control.ki = DEFAULT_SPEED_KI;
gt_Speed_control.kp = DEFAULT_SPEED_KP;
gi_Speed_reference_user = DEFAULT_SPEED_REFERENCE;
// PI current controller initialization
gt_Iq_control.ki = DEFAULT_IQ_KI;
gt_Iq_control.kp = DEFAULT_IQ_KP;
gt_Id_control.ki = DEFAULT_ID_KI;
gt_Id_control.kp = DEFAULT_ID_KP;
// CAN communication initialization
ucNewCMD0 = 0;
bitNewCMD0 = 0;
ucNewCMD1 = 0;
bitNewCMD1 = 0;
// slow CAN transfer (every CANTrxBuf0Rate T2 tick)
// sent at CAN-ID 7
CANTrxBuf0[0] = (unsigned char) &Status_word;
CANTrxBuf0[1] = (unsigned char) &ucAutoCycle;
CANTrxBuf0[2] = (unsigned char) &gi_I_q;
CANTrxBuf0[3] = (unsigned char) &gi_I_q+1;
CANTrxBuf0[4] = (unsigned char) &gi2_Speed[0];
CANTrxBuf0[5] = (unsigned char) &gi2_Speed[0]+1;
CANTrxBuf0[6] = (unsigned char) &gi_Amplitude;
CANTrxBuf0[7] = (unsigned char) &gi_Amplitude+1;
// fast CAN transfer (every T2 tick)
// sent at CAN-ID 77
CANTrxBuf1[0] = (unsigned char) &gi_I_d;
CANTrxBuf1[1] = (unsigned char) &gi_I_d+1;
CANTrxBuf1[2] = (unsigned char) &gi_I_q;
CANTrxBuf1[3] = (unsigned char) &gi_I_q+1;
CANTrxBuf1[4] = (unsigned char) &gi2_Speed[0];
CANTrxBuf1[5] = (unsigned char) &gi2_Speed[0]+1;
CANTrxBuf1[6] = (unsigned char) &gi_Amplitude;
CANTrxBuf1[7] = (unsigned char) &gi_Amplitude+1;
// Speed profile and autostart initialization
ucT2state=STATEAUTO;
ucAutoCycle=0;
} // End of function MotorControl_vInit();
void MotorStart(void)
{
if(gb_Once == 0)
{
if(gi_Speed_reference_user > 0)
{
gi_PI_output_Iq = gi_Iq_startup;
gi_Speed_reference = gi_Speed_startup;
}
else
{
gi_PI_output_Iq = -gi_Iq_startup;
gi_Speed_reference = -gi_Speed_startup;
}
gi2_Speed[0] = 0;
gi2_Speed[1] = 0;
guc_SpeedControlCounter = 0;
gi_Iq_reference = 0;
gi_angle = 0;
gi_angle_mem = 0;
gb_EnableFOC = 0;
guc_StartupCounter = 0;
gi_PI_output_Id = 0;
gt_Id_control.yn[0] = 0;
gt_Id_control.yn[1] = 0;
gt_Id_control.yn[2] = 0;
gt_Iq_control.yn[0] = 0;
gt_Iq_control.yn[1] = 0;
gt_Iq_control.yn[2] = 0;
gt_Speed_control.yn[0] = 0;
gt_Speed_control.yn[1] = 0;
gt_Speed_control.yn[2] = 0;
gi3_Flux_beta[0] = 0;
gi3_Flux_beta[1] = 0;
gi3_Flux_beta[2] = 0;
gi3_Flux_alpha[0] = 0;
gi3_Flux_alpha[1] = 0;
gi3_Flux_alpha[2] = 0;
gb_Once = 1; // Set flag
gb_On = 1; // Status update
gb_Off = 0;
gb_Trap = 0;
SFR_PAGE(_cc0, noSST); // switch to page 0
CCU6_TCTR4L = 0x06; // load CCU6 timer control register 4 T12 Reset
// T12 Run --> MotorStart PWM
SFR_PAGE(_pp2, noSST); // switch to page 2
P3_ALTSEL0 |= 0x3F; // set AltSel0
P3_ALTSEL1 &= ~0x3F; // set AltSel1
SFR_PAGE(_pp0, noSST); // switch to page 0
#if ENABLE_CTRAP == 1
SFR_PAGE(_cc2, noSST); // switch to page 2
CCU6_TRPCTRH |= 0x80; // CCU6 trap_enable control register
// gb_Trap enable
#endif
}
} // End of function MotorStart
void MotorStop(void)
{
SFR_PAGE(_cc2, noSST); // switch to page 2
CCU6_TRPCTRH &= 0x7F; // CCU6 trap_enable control register
// gb_Trap disable
SFR_PAGE(_pp0, noSST); // switch to page 0
P3_DATA |= 0xBF;
SFR_PAGE(_pp2, noSST); // switch to page 2
P3_ALTSEL0 &= ~0xBF; // set AltSel0
P3_ALTSEL1 &= ~0xBF; // set AltSel1
SFR_PAGE(_pp0, noSST); // switch to page 0
SFR_PAGE(_cc0, noSST); // switch to page 0
CCU6_TCTR4L = 0x05; // CCU6 timer control register 4
// T12 Reset, T12 MotorStop --> No PWM active
CCU6_TCTR4H = 0x05; // CCU6 timer control register 4
// T13 Reset, T13 MotorStop --> No PWM active
CCU6_CC60SRL = PWMPDL; // load CCU6 capture/compare shadow register
// low for channel 0
CCU6_CC60SRH = PWMPDH; // load CCU6 capture/compare shadow register
CCU6_CC61SRL = PWMPDL; // load CCU6 capture/compare shadow register
// low for channel 0
CCU6_CC61SRH = PWMPDH; // load CCU6 capture/compare shadow register
CCU6_CC62SRL = PWMPDL; // load CCU6 capture/compare shadow register
// low for channel 0
CCU6_CC62
XC800_FOC_KEIL.rar_8位单片机FOC_bldc keil_foc_foc控制器_英飞凌BLDC
版权申诉
33 浏览量
2022-07-14
01:18:57
上传
评论 1
收藏 112KB RAR 举报
四散
- 粉丝: 49
- 资源: 1万+
最新资源
- 基于matlab开发的全面详解LTE:MATLAB建模、仿真与实现-simulink.rar
- 自动驾驶定位系列教程二:系统架构.pdf
- 整站程序8优技巧网-8ujq.rar
- 世界各个国家或地区国际域名缩写
- 基于matlab开发的根据rvm回归模型自己编的matlab程序.rar
- 基于matlab开发的该程序为国内一所大学编写的LTE链路层仿真程序,根据LTE标准协议编写的,很容易看懂.rar
- 高效C++学生成绩管理系统:教育技术+C++17编程+数据管理+教务自动化
- 搜索链接要广告分类系统 v2.0-yad20.rar
- 基于matlab开发的Tipping的相关向量机RVM的回归MATLAB程序,有英文注释,可以运行.rar
- 一个点击正反转程序实例,可实现案件电机正反转
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0