原创 模拟外调制器偏置电压自动控制实现之软件部分

2011-3-22 09:41 2527 12 16 分类: MCU/ 嵌入式

attachment download


 


 


模拟外调制器偏置电压自动控制实现之软件部分



 


 


三、偏置电压自动控制的实现


 





两路导频信号

1.硬件组成部分




单片机




外调制器




高精度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


 

文章评论4条评论)

登录后参与讨论

用户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

太雪中送炭了!大赞!
相关推荐阅读
用户1270731 2010-12-10 19:53
STC90LE58AD ENC28J60 WEB
拜读了某前辈的文章,看来我找到移植UIP0.9问题的关键了。通常ENC28J60的驱动程序只考虑发送参数packet指针指向的数据区,在HTTP需要回应的数据的时候,没有将需要的数据(UIP处理后放在...
用户1270731 2010-12-10 19:29
ENC28J60提供的超小协议栈
ENC28J60提供的超小协议栈,它用一个全局的数组来做接收和发送缓冲。部分发送数据包从接收包中更改标志和校验和得到,最大化的减少内存拷贝。实现TCP/IP协议收发数据包的各个子功能,如校验和计算,标...
用户1270731 2010-12-03 07:58
单片机以太网-web网页问题
uip协议栈,STC12LE58AD单片机。问题是得不到网页数据,10延迟后退出,发送无数据。调试httpd部分串口输出如下:ip: version4 header.ip: POSSIBLE TCP ...
用户1270731 2010-06-13 15:03
VC++6.0做的 RS232 数据帧类
// ZBL232Frame1.h: interface for the CZBL232Frame class.////////////////////////////////////////////...
用户1270731 2010-06-03 16:34
铌酸锂晶体横向电光调制实验
实验六 铌酸锂晶体横向电光调制实验<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...
我要评论
4
12
关闭 站长推荐上一条 /2 下一条