看板 ASM 關於我們 聯絡資訊
※ [本文轉錄自 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
stool100:建議使用硬體功能來完成 軟體做 PWM 除了成本低 沒好處 03/03 17:22
MasterChang:用DAQ卡玩PWM實在太閒... 03/03 20:54
stool100:推薦有 16 個PWM 輸出的工業版. 5K 可得 03/04 09:50
squidman:因為參考的論文是用DAQ卡去做 所以才想說這樣看能不能 03/04 16:23
squidman:就這樣繼續搞下去 有問過研華也聽說過有PWM專門的DAQ卡 03/04 16:25
squidman:只是附的都是其它軟體去寫的界面 03/04 16:27