完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
各位老师好,我有几个问题想不通,还望不吝赐教。我用ti的controlSUITE 调试Sensorless FOC of ACI_2833x例程,LEVEL从1到6都调试通过了。电机的速度只能手动设置SpeedRef的值来更改,现在我想实现电机自动在一段时间正转然后另一段时间反转的功能。
1、我在程序的开头只定义了_iq SpeedRef;但去掉了赋值,然后在MainISR函数里加了一段程序,自定义了int 32 cnt1变量,想在一段时间内给SpeedRef赋正值,一段时间赋负值,实现电机自动正反转的功能。但是编译之后warning显示variable "SpeedRef" was declared but never referenced,下载运行之后也没有实现想要的功能。程序如下: interrupt void MainISR(void) [ IsrTicker++; cnt1++; if (0
[ _iq SpeedRef = _IQ(0.3); else if (3000000<=cnt1<6000000) [_iq SpeedRef = _IQ(-0.3); else if(cnt1>=6000000) [cnt1=1; _iq SpeedRef = _IQ(0); 但是如果我直接在MainISR里赋定值的话电机可以按照给定的速度来运转。我想请问既然这里的SpeedRef没有被引用那么值是从哪里给出的?怎么样才能实现电机自动正反转的功能? 2、通过设置变量我了解到,先是执行main函数初始化部分然后进入for循环等待,中断先执行offsetISR然后在IsrTicker大于20000时跳到MainISR中断函数执行。直接在状态机函数里对SpeedRef赋值也显示warning为variable "SpeedRef" was declared but never referenced,实际运行对电机也是没有影响。那么我想请教这几个问题:for循环里的状态机函数起了什么作用?offsetISR应该是用来补偿ADC的偏移量,既然IsrTicker大于20000后就只执行MainISR函数,为什么不在main函数直接补偿? 谢谢各位老师! |
|
相关推荐
5 个讨论
|
|
|
if(cnt1<400000) [ SpeedRef = _IQ(0.3); ] else [ if(400000<=cnt1<800000) [ SpeedRef = _IQ(-0.3); ] if(cnt1>=800000) // else //用else不能把SpeedRef写进去 [ SpeedRef = _IQ(0.3); cnt1=1; ] ] 添加上述代码之后电机可以正常的正反转。之前的问题出在_iq SpeedRef = _IQ(-0.3)对SpeedRef重复定义了,还有if函数写的有问题,写在else里的SpeedRef不能被读取。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1757浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:31 , Processed in 0.808817 second(s), Total 66, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3736