作者joy830 (joy)
看板Electronics
标题Re: [问题] 利用DSP2407开发版写SPWM调变讯号
时间Tue Sep 28 20:43:50 2010
看不太懂你在干嘛
不过你是不是没有用中断来写
你三相 程式码的for回圈里面 有三行成式
两相的程式码 for回圈 里面只有两行程式
所以实际上他跑的速度不一样
不废话
for(i=0;i<360;i++)
{
CMPR1=sine_table[i]+20;
CMPR2=sine_table[i+180]+20;
nop;
nop;
}
多加几个nop 可以把频率调成一样(执行一行nop;的时间 等於一个cpu周期)
※ 引述《shineboss (小E)》之铭言:
: 各位大大我在利用DSP撰写spwm调变讯号遇到一些问题
: 我选用的载波频率为21.6kHz 等於每一个角度开出一个脉波
: 而DSP设置CPUCLK为40000000(40MHz)
: 所以切换频率为PERIOD 925(40000000/2/21600=925)
: 用过DSP2407也知道因为选择上下数所以要设置载波频率的两倍
: 我再来是先建立一组SINE TABLE表总共600比其中第0~360比为第一相的spwm
: 第120~480比为第二相的spwm
: 第240~600比为第三组的spwm
: 在利用FOR回圈去抓这些data则我for回圈写法为
: for(i=0;i<364;i++)
: {
: CMPR1=sine_table[i]*ma+20;
: CMPR2=sine_table[i+120]*ma+20;
: CMPR3=sine_table[i+240]*ma+20;
: }
: 其中20为我设置deadtime为1us所以必须把此段时间考虑进去
: 结果是成功的输出60Hz三相弦波。
: 但是我利用相同方式建立一组单相spwm table表总共540比其中
: 第0~360比为an的spwm
: 第180~540比bn的spwm
: 在利用FOR回圈去抓这些data则我for回圈写法为
: for回圈写法为
: for(i=0;i<360;i++)
: {
: CMPR1=sine_table[i]+20;
: CMPR2=sine_table[i+180]+20;
: }
: 结果我出来的弦波为137Hz不清楚是哪边错了,希望大大能帮我看一下
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.84.179.231
1F:→ joy830:试试看吧 你没贴全部程式 不太清楚你要干嘛 09/28 20:44
2F:推 shineboss:我可以用站内信给你我的程式 09/28 21:55
3F:→ joy830:你先试试看+ NOP; 不行的话再寄给我 帮你看看 09/28 22:20
4F:推 shineboss:我发现问题了,就是DSP在运算上会使得输出结果不同 09/29 17:56
5F:→ shineboss:我把回圈内的CMPR=SINE_TABLE[i]+20 09/29 17:56
6F:→ shineboss:改成CMPR=sine_table[i]*1就正常了 09/29 17:57
7F:→ shineboss:就发现结果一样可是DSP多一次运算 结果出来变不一样 09/29 17:57
8F:→ shineboss:那这种问题该怎麽解决 09/29 17:58
9F:→ shineboss:上述那改成CMPR=sine_table[i]*1+20 少打一个+20 09/29 17:58
10F:→ joy830:回信里少说了 执行FOR回圈也要消耗cpu clock 09/29 22:49