[問題] 如何輸出多個PWM訊號
※ [本文轉錄自 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
03/03 17:22, 1F
→
03/03 20:54, , 2F
03/03 20:54, 2F
推
03/04 09:50, , 3F
03/04 09:50, 3F
→
03/04 16:23, , 4F
03/04 16:23, 4F
→
03/04 16:25, , 5F
03/04 16:25, 5F
→
03/04 16:27, , 6F
03/04 16:27, 6F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章