第一范文网 - 专业文章范例文档资料分享平台

dsp30代码

来源:用户分享 时间:2025/6/7 16:46:57 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

// 根据编码器累计计数值来计算转速 CalcVel();

// 执行转速控制环

PIParmQref.qInMeas = EncoderParm.qVelMech; PIParmQref.qInRef = CtrlParm.qVelRef; CalcPI(&PIParmQref);

CtrlParm.qVqRef = PIParmQref.qOut; }

#endif

// Q的 PI控制

PIParmQ.qInMeas = ParkParm.qIq; PIParmQ.qInRef = CtrlParm.qVqRef; CalcPI(&PIParmQ);

ParkParm.qVq = PIParmQ.qOut;

// D的 PI控制

PIParmD.qInMeas = ParkParm.qId; PIParmD.qInRef = CtrlParm.qVdRef; CalcPI(&PIParmD);

ParkParm.qVd = PIParmD.qOut; } }

//--------------------------------------------------------------------// ADC中断服务程序执行速度计算以及电压矢量更新循环。 // ADC采样和转换由 PWM周期触发。

// 速度计算假定计算之间的间隔时间是固定的。 //--------------------------------------------------------------------

void __attribute__((__interrupt__)) _ADCInterrupt(void)

{

IFS0bits.ADIF = 0;

// 递增控制显示和按钮功能执行的计数变量。 //

iDispLoopCnt++;

// 累计自上一次中断后的编码器计数 CalcVelIrp();

if( uGF.bit.RunMotor ) {

// 置位用于诊断的 LED1 pinLED1 = 1;

// 使用 TMR1来测量用于诊断的中断时间 TMR1 = 0;

iLoopCnt = TMR1;

MeasCompCurr();

// 根据 qSin、 qCos、 qIa、 qIb计算 qId、 qIq ClarkePark();

// 计算控制值 DoControl();

// 根据 qAngle计算 qSin、 qCos SinCos();

// 根据 qSin、 qCos、 qVd、 qVq计算 qValpha、InvPark();

// 根据 qValpha、 qVbeta计算 Vr1、 Vr2、 Vr3。CalcRefVec();

qVbeta

// 根据 Vr1、 Vr2、 Vr3计算和设定 PWM占空比 CalcSVGen();

// 测量循环时间

iLoopCnt = TMR1 - iLoopCnt; if( iLoopCnt > iMaxLoopCnt )

iMaxLoopCnt = iLoopCnt;

// 清零用于诊断的 LED1 pinLED1 = 0; } }

//--------------------------------------------------------------------// SetupBoard //

// 初始化控制板

//--------------------------------------------------------------------

void SetupBoard( void ) {

BYTE b;

//禁止 ADC中断 IEC0bits.ADIE = 0;

// 复位电机控制功率模块上的所有故障。 pinFaultReset = 1; for(b=0;b<10;b++)

Nop();

pinFaultReset = 0;

// 确保 PFC开关是关闭的。 pinPFCFire = 0;

// 确保制动开关是关闭的。 pinBrakeFire = 0; }

//--------------------------------------------------------------------// Dis_RPM //

// 显示 RPM

//--------------------------------------------------------------------

void Dis_RPM( BYTE bChrPosC, BYTE bChrPosR ) {

if (EncoderParm.iDeltaCnt < 0)

Wrt_S_LCD(\ else

Wrt_S_LCD(\

iRPM = EncoderParm.iDeltaCnt*60/

(MotorParm.fLoopPeriod*MotorParm.iIrpPerCalc*EncoderParm.iCntsPerRev);

Wrt_Signed_Int_LCD( iRPM, bChrPosC+1, bChrPosR); }

//--------------------------------------------------------------------bool SetupParm(void) {

// 开启抗饱和功能以确保能够平滑处理溢出。 CORCONbits.SATA = 0;

搜索更多关于: dsp30代码 的文档
dsp30代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1sqcv57k9u7wp9920sys_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top