|
楼主 |
发表于 2018-2-25 13:49:48
|
显示全部楼层
上面计算Vm及fs使用近似估算法,所得Vm精度差一点,所以r值计算不够准确。完全计算又过于复杂,所以写成代码计算。把下面代码保存为htm即可
<htm>
<head>
<title>晶振扫频计算器</title>
</head>
<body style="font-face:宋体">
<b>晶振扫频计算器</b><br>
Vd<input type=text size=5 id=Cvd value=1330>mV,单位下同 fe<input type=text size=5 id=Cfe value=0.6 >Hz 频率计误差修正量<br>
V1<input type=text size=5 id=Cv1 value=150 > fs-1时电压<br>
V2<input type=text size=5 id=Cv2 value=202 > fs+0时电压 fs<input type=text size=5 id=Cfs value=32762 >Hz<br>
V3<input type=text size=5 id=Cv3 value=90 > fs+1时电压<br>
Vp<input type=text size=5 id=Cvp value=2.8 > fp+0时电压 fp<input type=text size=5 id=Cfp value=32801 >Hz<br>
<input type=button value="确定" onclick="calc()"><br>
<br>
<div id=Cout>
</div>
<script type="text/javascript">
function calc(){
var v1 = document.getElementById("Cv1").value-0;
var v2 = document.getElementById("Cv2").value-0;
var v3 = document.getElementById("Cv3").value-0;
var vd = document.getElementById("Cvd").value-0;
var vp = document.getElementById("Cvp").value-0;
var fs = document.getElementById("Cfs").value-0;
var fp = document.getElementById("Cfp").value-0;
var fe = document.getElementById("Cfe").value-0;
var y1=1/v1/v1, y2=1/v2/v2, y3=1/v3/v3;
var a=y2-y1, b=y3-y2, c=b-a;
var xm = -(a+b)/(2*c);
var ym = y2-(a+b)*(a+b)/(8*c);
var Co,CL,bz,r,A,Q;
A = Math.sqrt(1/ym);
r = 10*(vd-A)/A;
fs += xm+fe;
Q = Math.sqrt(c/8)*A*fs;
bz = fs/(fp-fs)/2; //Co/Cs的值
Co = 5000/(10*vd/vp);
CL = Co*(fp-fs)/(32768-fs);
document.getElementById("Cout").innerHTML = '结果<br>'
+'xm='+xm.toFixed(2)+'Hz 峰值点频偏<br>'
+'fs='+fs.toFixed(2)+'Hz (改正后的fs,加上xm+fe)<br>'
+'fp='+fp.toFixed(0)+'Hz<br>'
+'A=' +A.toFixed(0)+'mV<br>'
+'r=' +r.toFixed(0)+'千欧<br>'
+'Co='+Co.toFixed(2)+'pF<br>'
+'CL='+CL.toFixed(2)+'pF 含Co<br>'
+'Co/Cs='+bz.toFixed(0)+'<br>'
+'3dbQ='+Q.toFixed(0)+'<br>';
}
</script>
</body>
</html> |
|