Re: [問題] 利用DSP2407開發版寫SPWM調變訊號

看板Electronics作者 (joy)時間13年前 (2010/09/28 20:43), 編輯推噓2(2012)
留言14則, 3人參與, 5年前最新討論串2/2 (看更多)
看不太懂你在幹嘛 不過你是不是沒有用中斷來寫 你三相 程式碼的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

09/28 20:44, , 1F
試試看吧 你沒貼全部程式 不太清楚你要幹嘛
09/28 20:44, 1F

09/28 21:55, , 2F
我可以用站內信給你我的程式
09/28 21:55, 2F

09/28 22:20, , 3F
你先試試看+ NOP; 不行的話再寄給我 幫你看看
09/28 22:20, 3F

09/29 17:56, , 4F
我發現問題了,就是DSP在運算上會使得輸出結果不同
09/29 17:56, 4F

09/29 17:56, , 5F
我把回圈內的CMPR=SINE_TABLE[i]+20
09/29 17:56, 5F

09/29 17:57, , 6F
改成CMPR=sine_table[i]*1就正常了
09/29 17:57, 6F

09/29 17:57, , 7F
就發現結果一樣可是DSP多一次運算 結果出來變不一樣
09/29 17:57, 7F

09/29 17:58, , 8F
那這種問題該怎麼解決
09/29 17:58, 8F

09/29 17:58, , 9F
上述那改成CMPR=sine_table[i]*1+20 少打一個+20
09/29 17:58, 9F

09/29 22:49, , 10F
回信裡少說了 執行FOR迴圈也要消耗cpu clock
09/29 22:49, 10F

08/13 19:04, , 11F
回信裡少說了 執行FO https://noxiv.com
08/13 19:04, 11F

09/17 22:58, , 12F
你先試試看+ NOP; https://daxiv.com
09/17 22:58, 12F

11/11 15:58, , 13F
回信裡少說了 執行FO https://noxiv.com
11/11 15:58, 13F

01/04 22:13, 5年前 , 14F
那這種問題該怎麼解決 http://yofuk.com
01/04 22:13, 14F
文章代碼(AID): #1CeUC8uq (Electronics)
文章代碼(AID): #1CeUC8uq (Electronics)