for( i=0;i<cycle;i++)
{
D[ i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);
}
在这里sin(( 1.0*i/(cycle-1))*2*PI)你可以理解成sin(x)(x >= 0 且 x <=2派,当i= 0时,x= 0;当i= cycle - 1时, x = 2派,x随着i的增大而增大),cycle就是sin(x)的周期,也可以说是宽度,cycle越大,正弦波的过零点距离越大。
在这里(Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)你可以理解成A * sin(x) +A,A就是正弦波的幅度也就是最大值,A*sin(x)+ A,就是将正弦波函数的向上挪移A个单位,这样就将正弦波中的负数值变为正数值,最大值变成2A,最小值变为0.
最后那个*4095/3.3,就是个模数转换,将模拟量转换成数字量,4095是12位的DAC。
这个函数一般用作模数转换或者LCD画图像。
|