技术论坛

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

返回主题列表
作者 主题
陆上行舟
奇侠

经验值:5240
发帖数:1190
精华帖:6
楼主    2024-04-03 08:54:42
主题:模拟量输出正旋波信号,频率、振幅可调

自己编程写:0-10V的模拟量如何输出正旋波信号,频率、振幅可调?

keep moving !
askab
侠圣

经验值:2790
发帖数:390
精华帖:5
7楼    2024-04-07 21:57:55
精华帖  主题:回复:模拟量输出正旋波信号,频率、振幅可调

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


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


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


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