回复:模拟量输出正旋波信号,频率、振幅可调

已锁定

陆上行舟

  • 帖子

    1243
  • 精华

    7
  • 被关注

    35

论坛等级:奇侠

注册时间:2009-02-13

钻石 钻石 如何晋级?

发布于 2024-04-08 22:40:55

8楼

展开查看
以下是引用askab在2024-04-07 21:57:55的发言 >7楼

(*首先需要考虑你的数学参数。


幅值:是在某一特定频率下的最大振幅


振幅:  是振动过程中振动的最大偏离平衡位置的距离。


y=Asin(wt+q)  : 其中 A :幅值, w: 角频率  w=2πf  f:频率   q: 初相角。


所以针对你给定的信号,一个连续的模拟量值(连续的时间函数),希望输出为一个正弦波(周期函数)。


所以幅值 -10 V  :  -27647   +10v : 27647


考虑采样频率 例如选用OB38  则t= 10ms 每隔10ms中断一次  f= 100HZ (最高采样频率 )


那么我们设定的频率 0

*)


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秒.

附两张图片,但请清楚,这些都是离散的数序,也就是阶跃变化的,真实图形类似与台阶




辛苦了!感谢!

keep moving !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。