模拟外调制器偏置电压自动控制实现之软件部分
三、偏置电压自动控制的实现
两路导频信号 |
单片机 |
外调制器 |
高精度DA转换正负电压调节电路 |
CSO分量 |
运放电路 |
1/99光纤(第2路) |
光接收及相敏检波 |
图3.
2.软件设计目的
2.1扫描得到半波电压,计算理想最佳偏置电压点;
2.2通过PID算法来调节DC偏置电压,自动跟随最佳偏置电压;
2.3出现异常偏压自动重新开始第1步。
3.软件方案概述
3.1 差频有效值与偏压函数如下
Vdao=C*SIN (Vdc*π/Vπ)
C是实际差频电压有效值。
最佳点附近函数如下图红线所示(黑线表示偏离的函数):
偏压Vdc(V) |
差频C(mV) |
V1 |
V0 |
V2 |
图4 |
如果要使偏置电压工作在最佳点处(V0是理想最佳点;V0,V1,V2都是不同时刻的最佳点),则需要通过判断当前DC电压值的正负值来对DC输出电压增减做定性判断:
当曲线偏移使C变大时,说明曲线往左移动,这时就要调整Vdc跟随往左移动。
为保证精度和稳定性,增加和减少的方法采用PID调节方法。由于位置式增量调节方式因为输出的是一个直接控制外调制器偏压的量,如果一次计算出错就会出现一次参数劣化现象,所以这里选用增量式PID算法,每次运算只是产生偏置电压调整的增加或减少的量。
3.2控制原理框图如下:
增量式 PID算法 |
积分 |
运放电路 |
外调制器 |
r(t) |
p(t) |
c(t) |
u(t) |
Δu(t) |
检测 |
图5.
其中:
r(t)为系统设定值,在这里是半波电压工作点的差频有效值。
p(t)是偏差。
Δu(t)是一次运算输出的偏压控制值的增量。
u(t)是Δu(t)的积分。
这里令Kp为比例系数;Ki为积分系数;Kd为微分系数;设定值r(t)=0,即半波电压点的差频有效值;
差频有效值Pad[0],Pad[1],Pad[2]分别为,上上次,上一次,当前采样的差频有效值。
由于偏差=设定值-采样值,有:
P(t)=A/2-Pad[0],当前采样的偏差;
P(t-1)=A/2-Pad[1] ,上一次采样的偏差;
P(t-2)=A/2-Pad[2],上上次采样的偏差;
根据增量式PID控制算法:
Δu(t)=Kp*[P(t)-P(t-1)]+Ki*P(t)+Kd[P(t)-2P(t-1)+P(t-2)]……………………….式4
对式4求和模拟积分有:
u(t)=ΣT0Δu(t)
最后输出给运放电路去控制外调制器偏压值。
通过判断偏差变化趋势来确定输出是否正在接近目标值来取消或加入积分项。
当u(t)>0时
Δu(t)>0,表示输出正在偏离设置值r(t),需要加入积分项使其稳定;
Δu(t)<0,表示输出正在接近设置值r(t),需要去除积分项使其较快接近设定值;
当u(t)<0时
Δu(t)>0,表示输出正在接近设置值r(t),需要去除积分项使其较快接近设定值;
Δu(t)<0,表示输出正在偏离设置值r(t),需要加入积分项使其稳定;
结合DC偏置电压上下限判定(-1V,+1V),若判断门限超出正常范围则重新扫描。
4.主要程序流程如下:
CPU初始化 |
DC输出置0,等待主控单元连接 |
寻找半波中点电压并输出 |
对DC电压进行一次PID调节 |
喂狗 |
定时采样时间到 |
检测失锁标志 |
到 |
没到 |
异常 |
正常 |
采样DC电压并校0 |
DC电压扫描,采样计算半波电压,光功率峰峰值 |
5.关键PID调节程序如下:
void PID_CSO(void) //Kp*(Pt.Curr-Pt.Last)+Ki*(Pt.Curr)+Kd*(Pt.Curr-2*Pt.Last+Pt.LLast)
{
long int buf_p,buf_i,buf_d,buf_deltCUt;// 以下三步在主程序中实现。
//Ct.LLast=Ct.Last; //上次的给上上次的。即刷新上上次的偏差。
//Ct.Last=Ct.Curr; //当前的给上次的。即刷新上次的偏差。
//Ct.Curr=CRt;//-CCurr; //刷新当前的偏差值。设定值-当前值。
//Ct.Curr-=CCurr;
//--------------------//比例项
buf_p=Ct.Curr;
buf_p-=Ct.Last;
deltCt=buf_p; //CSO偏差变化的方向。
buf_p*=Cp;
buf_p/=10;//比例系数2.1
//-------------------//积分项
//if(((Ct.Curr>0)&&(deltCt<0))||((Ct.Curr<0)&&(deltCt>0)))////当前偏差<0&&偏差的变化方向deltCt>0表示接近目标//cso=2.5-cso_ad
//Ci_sign=0;
//else
//Ci_sign=1;
buf_i=Ct.Curr;
buf_i*=Ci;
buf_i/=10;//积分系数0.5//
//-------------------//微分项
buf_d=Ct.Curr;
buf_d-=(Ct.Last<<1);
buf_d+=Ct.LLast;
buf_d*=Cd;
buf_d/=1000;////0.125//
//-------------------//计算增量输出
buf_deltCUt=buf_p;
buf_deltCUt+=buf_i;
buf_deltCUt+=buf_d;
buf_deltCUt=-buf_deltCUt;
//DAV和Vdc之间的关系DAV=-1024/10*Vdc+512//去控制DA//的输出值调节Vdc,间接调节光功率,DA输出增大,Vdc减小,光功率变小。
deltCUt=buf_deltCUt;
if(deltCUt<deltCUt_min)//增量限幅
deltCUt=deltCUt_min;
if(deltCUt>deltCUt_max)
deltCUt=deltCUt_max;
Ut+=deltCUt;//--------------------//对增量进行积分
if((Ut>49152)||(Ut<16384))
Ut=32768;
}
参考文献
蒋民华 《晶体物理》
李现勇 《Visual C++串口通信技术与工程实践》(第二版)
刘海成 《AVR单片机原理及测控工程应用》
施国强、黄吴明、张万书、黄如星等 《有线电视网络技术手册》
谷德露 《外调制器关键技术研究》
卢剑平 《九州外调制1550光发射机技术介绍》
胡仲秋 《一种相敏检波电路的实验和研究》
浙江省广电科技股份有限公司
浙江省有线数字电视网络技术重点实验室
黄松正
2010-8-20
用户1725311 2013-11-29 11:14
你好 请加下我的QQ。766461402. 有问题请教您。谢谢哈
用户426369 2012-8-31 17:02
用户1566783 2012-7-26 09:55
用户1621526 2012-3-19 21:22