作者 | 主题 |
---|---|
陆上行舟 奇侠 ![]() ![]() 经验值:5623 发帖数:1263 精华帖:7 |
楼主
![]() 主题:模拟量输出正旋波信号,频率、振幅可调 自己编程写:0-10V的模拟量如何输出正旋波信号,频率、振幅可调?
keep moving !
|
askab 侠圣 ![]() 经验值:2862 发帖数:396 精华帖:5 |
7楼
![]() ![]() (*首先需要考虑你的数学参数。 幅值:是在某一特定频率下的最大振幅 振幅: 是振动过程中振动的最大偏离平衡位置的距离。 y=Asin(wt+q) : 其中 A :幅值, w: 角频率 w=2πf f:频率 q: 初相角。 所以针对你给定的信号,一个连续的模拟量值(连续的时间函数),希望输出为一个正弦波(周期函数)。 所以幅值 -10 V : -27647 +10v : 27647 考虑采样频率 例如选用OB38 则t= 10ms 每隔10ms中断一次 f= 100HZ (最高采样频率 ) 那么我们设定的频率 0<Fset<= 100HZ *) FUNCTION_BLOCK FB101 TITLE = 'Block Title' // // 三角函数输出 // VERSION: '1.0' AUTHOR: baikai NAME: out FAMILY: use_group know_how_protect VAR_INPUT amplitude_IN:REAL; // 幅值输入 frequency_IN:REAL; // 频率输入 END_VAR VAR_OUTPUT Sine:REAL; // 正旋输出 END_VAR VAR // Static Variables angle_data:REAL; //角度 DATA1:REAL; radian_data:REAL; //弧度 END_VAR angle_data:= 360.0* 100.0/(1000.0/frequency_IN); //1000=1000ms 我在OB35调用,则 此数据为100ms一次的角度叠加量 DATA1:= angle_data + DATA1; //角度积分 IF DATA1 >= 360.0 THEN // 角度复位 DATA1:= 0.0; END_IF; radian_data:= DATA1 / 180.0 * 3.1415926; //角度转化为弧度
Sine:= amplitude_IN* SIN( radian_data); // 这个放大系数,如果要做在画面上看,则任意,幅值根据你的要求来定,如果输出到模拟量AO 则为-27647 27647 END_FUNCTION_BLOCK DATA_BLOCK DB101 FB101 // // Block Comment... // BEGIN END_DATA_BLOCK //结论: 我测试是放在OB35 t=100ms f= 10HZ(最大采样周期) 给定频率为了看清数据为 0.05HZ 周期为20秒. 附两张图片,但请清楚,这些都是离散的数序,也就是阶跃变化的,真实图形类似与台阶
大家同行,you ok ? me !
|
|
欢迎您来到西门子数字化工业支持中心网站!我们使用cookies来确保您能最好地使用我们的网站,进行网站分析并根据您的兴趣定制内容。我们有时会与第三方共享cookie数据。继续浏览本网站,即表示您同意我们使用cookies。您亦可以参考西门子数据隐私政策以了解更多相关信息。