[問題] 如何輸出多個PWM訊號

看板ASM (組合語言)作者 (嘿嘿)時間15年前 (2010/03/03 05:44), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串1/1
※ [本文轉錄自 C_and_CPP 看板] 作者: squidman (嘿嘿) 看板: C_and_CPP 標題: [問題] 如何輸出多個PWM訊號 時間: Wed Mar 3 10:54:16 2010 遇到的問題: (題意請描述清楚) 不太清楚可不可以在這版問 如果有違反版規先抱歉 小弟是做控制的C語言新手 有點程式上的問題不知道可不可以在這問 程式是在Dev-C++上編輯 採用WATCOM C在DOS 32bits下執行 主要是要命令電腦上的DAQ卡的digital output port去產生pwm訊號 這是程式裡產生輸出訊號的部分 在每個取樣時間會執行一次 int x_pwm(int xu) { float Tpwm=pwm_period; if ( xu>=100) { xu=100; da=(int)(xu*(Tpwm/100.)); } if ( xu<100 && xu>=0 ) { da=(int)((xu)*(Tpwm/100.)); } dout |= 0x01; outp(port,dout); delay(da); dout &= ~0x01; outp(port,dout); delay(Tpwm-(da)); return da; } 前半段主要是根據控制訊號xu去計算每個pwm週期開啟時間da 然後利用delay輸出成pwm訊號 我主要問題是 如果我要把程式改成可以一次輸出多個pwm訊號 我該怎樣修改會比較好 最一開始很直接的想說依樣畫葫蘆做兩個函式 int x_pwm(int xu); int y_pwm(int yu); 但出來的結果是兩個訊號互相切換 想想這樣寫根本不是同時產生 而且delay會影響到另一個函式 後來想說全寫在一起 然後先根據xu,yu算出da,db後 再用if去判斷da,db大小關係去湊接下來的動作(我只會這些基本的方法...) ex:當db>da時就是 dout |= 0x01; dout |= 0x02; outp(port,dout); delay(da); dout &= ~0x01; outp(port,dout); delay(db-da); dout &= ~0x02; outp(port,dout); delay(Tpwm-(db)); 但這樣寫下去會有一大堆的判斷式...如果要產生更多組訊號那.... 不知道有沒有更簡易更有效率的方式可以達到我的需求 先感謝各位前輩了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.27.174 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.27.174

03/03 17:22, , 1F
建議使用硬體功能來完成 軟體做 PWM 除了成本低 沒好處
03/03 17:22, 1F

03/03 20:54, , 2F
用DAQ卡玩PWM實在太閒...
03/03 20:54, 2F

03/04 09:50, , 3F
推薦有 16 個PWM 輸出的工業版. 5K 可得
03/04 09:50, 3F

03/04 16:23, , 4F
因為參考的論文是用DAQ卡去做 所以才想說這樣看能不能
03/04 16:23, 4F

03/04 16:25, , 5F
就這樣繼續搞下去 有問過研華也聽說過有PWM專門的DAQ卡
03/04 16:25, 5F

03/04 16:27, , 6F
只是附的都是其它軟體去寫的界面
03/04 16:27, 6F
文章代碼(AID): #1BZVTC9e (ASM)
文章代碼(AID): #1BZVTC9e (ASM)