作者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