2973|1

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

InstaSPIN-FOC lab2a与lab2b请教 [复制链接]

以下分别为InstaSPIN-FOC lab 2a与lab 2b的中断服务函数:

lab 2a:

interrupt void mainISR(void)
{
HAL_PwmData_t negPwmData = {_IQ(0.0), _IQ(0.0), _IQ(0.0)};

// toggle status LED
if(gLEDcnt++ > (uint_least32_t)(USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz))
{
HAL_toggleLed(halHandle,(GPIO_Number_e)HAL_Gpio_LED2);
gLEDcnt = 0;
}


// acknowledge the ADC interrupt
HAL_acqAdcInt(halHandle,ADC_IntNumber_1);


// convert the ADC data
HAL_readAdcData(halHandle,&gAdcData);


// run the controller
CTRL_run(ctrlHandle,halHandle,&gAdcData,&negPwmData);


// negate PwmData generated by SVGEN module in ROM
gPwmData.Tabc.value[0] = _IQmpy(negPwmData.Tabc.value[0], _IQ(-1.0));
gPwmData.Tabc.value[1] = _IQmpy(negPwmData.Tabc.value[1], _IQ(-1.0));
gPwmData.Tabc.value[2] = _IQmpy(negPwmData.Tabc.value[2], _IQ(-1.0));


// write the PWM compare values
HAL_writePwmData(halHandle,&gPwmData);


// setup the controller
CTRL_setup(ctrlHandle);


return;
} // end of mainISR() function

——————————————————————————————————————

lab 2b:

interrupt void mainISR(void)
{
// toggle status LED
if(gLEDcnt++ > (uint_least32_t)(USER_ISR_FREQ_Hz / LED_BLINK_FREQ_Hz))
{
HAL_toggleLed(halHandle,(GPIO_Number_e)HAL_Gpio_LED2);
gLEDcnt = 0;
}


// acknowledge the ADC interrupt
HAL_acqAdcInt(halHandle,ADC_IntNumber_1);


// convert the ADC data
HAL_readAdcData(halHandle,&gAdcData);


// run the controller
CTRL_run(ctrlHandle,halHandle,&gAdcData,&gPwmData);


// write the PWM compare values
HAL_writePwmData(halHandle,&gPwmData);


// setup the controller
CTRL_setup(ctrlHandle);


return;
} // end of mainISR() function

标红的部分为二者不同的地方,但是在lab user guide中说这两个例程的mainISR()一致,请问为何会有这种区别呢?如果2a的占空比没问题,那2b的占空比岂不是就有问题了?

我跑2a可以跑,2b却没法跑起来,调试发现跑2b时,恒定输出50%的占空比(电机辨识全过程都是这样),但是watch window显示控制器和估算器的状态改变正常。请问原因会不会是mainISR()跟2a不同造成的?

最新回复

本帖最后由 zh471021698 于 2016-8-30 21:36 编辑 一个是在RAM运行,一个是在FLASH运行,两个CTRL_run调用的函数不一样。你用的是哪一个平台?  详情 回复 发表于 2016-8-30 21:33
 
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
本帖最后由 zh471021698 于 2016-8-30 21:36 编辑

一个是在RAM运行,一个是在FLASH运行,两个CTRL_run调用的函数不一样。你用的是哪一个平台?
 
个人签名开心开心
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表