现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Seven Han:
请问板子使用的ti的开发套件还是自己设计的呢,你的boot模式设置正确吗?
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Liang Hu2:
回复 Seven Han:
板子是自己设计的,应该没问题,给上百个学生用过,都没问题。
boot模式:GPIO34和GPIO37用示波器测,上电瞬间都为高电平,按照官方文档就是boot to Flash,这个没错。
我在网上查,也有一些类似问题的,即连仿真器全速运行没问题,摘了仿真器重新上电就不行。他们说程序中是不是应该加一些延时?
我试了很长时间,在不同位置加延时,无效。
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Seven Han:
回复 Liang Hu2:
那检查下工程中是否缺少源文件,或者截图贴一下。
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Liang Hu2:
回复 Seven Han:
现在找到问题的所在了,如下:
我中断的算法复杂度太高了!
以10kHz的频率进中断,也就是每100uS进一次中断。
虽然用了IQmath库,但是我在中断里的算法需要160uS。
这种情况算是“跑死了”么?
除了我降低算法复杂度之外,还有什么解决方法吗?比如说我把代码拷到RAM里能以超越主频(60M)的速度运行算法吗?
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Liang Hu2:
回复 Seven Han:
还有个问题哦,IQmath里没有减法,两个IQ数做减法怎么操作?
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
bell zhao:
回复 Seven Han:
遇到相似的问题,经过反复查找定位到ADC初始化函数,加入该函数后,仿真器能运行,掉电去掉仿真器后不能运行。该函数为示例源码,不应该有问题吧??请指教。
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
bell zhao:
回复 Seven Han:
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
进一步确认是delay的原因,但是还没想明白为啥?
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
user1333144:
Liang Hu2
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
现象如下:
1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;
2、板子带电拔掉仿真器,按RESET键,程序也没问题;
3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。
这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。
程序结构大致如下:
volatile uint state=1,k=0;
void main()
{
初始化;
开epwm2中断;
while(state);//等待2秒结束(state变成0)
配置epwm2至95%占空比;
for(;;){nop;}
}
interrupt
{
k++;//中断计数
配置D随某函数变化(改变CMPA和CMPB的值);
if(k==2000) state=0;
清标志位
}
D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。
Xiaoming Wang:
回复 bell zhao:
我也是这个问题 请问你解决了吗