作者squidman (嘿嘿)
看板ASM
标题[问题] 如何输出多个PWM讯号
时间Wed Mar 3 13:44:43 2010
※ [本文转录自 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
1F:推 stool100:建议使用硬体功能来完成 软体做 PWM 除了成本低 没好处 03/03 17:22
2F:→ MasterChang:用DAQ卡玩PWM实在太闲... 03/03 20:54
3F:推 stool100:推荐有 16 个PWM 输出的工业版. 5K 可得 03/04 09:50
4F:→ squidman:因为参考的论文是用DAQ卡去做 所以才想说这样看能不能 03/04 16:23
5F:→ squidman:就这样继续搞下去 有问过研华也听说过有PWM专门的DAQ卡 03/04 16:25
6F:→ squidman:只是附的都是其它软体去写的界面 03/04 16:27