当前位置:文档之家› SpartanIIE 内部锁相环(DLL)的使用

SpartanIIE 内部锁相环(DLL)的使用

SpartanIIE 内部锁相环(DLL)的使用
SpartanIIE 内部锁相环(DLL)的使用

SpartanIIE 内部锁相环(DLL)的使用

作者: chain79 发布日期: 2005-9-25 出自: https://www.doczj.com/doc/589151445.html,

以下是一个实验,讲述如何使用器件内部锁相环(DLL),很有实际意义,所以拿出

来,大家一起学习,一起进步!

实验 SpartanIIE 内部锁相环(DLL)的使用

一、实验目的

1.进一步熟悉FPGA 软硬件开发环境;

2.了解FPGA 的内部结构;

3.初步掌握DLL 的使用。

二、设计任务

FPGA 中的DLL 是一种很好的资源,特别是较高频率的时候,应用较广。它可以对时

钟进行倍频、锁相等操作。通过设计掌握DLL 的各种应用:倍频,分频,锁相,以及

移相的操作,编程演示,通过示波器观察和比较波形。下面先对DLL 做一个简单的介

绍。

1.概述

XILINX 公司的Spartan-IIE 系列提供四个延迟锁相环(Delay-Locked Loop),分别

位于芯片内部的四个脚。这些DLL 可以被用来实现一些电路以完善和简化系统级设计

,比如提供零传播延迟,低时钟相位差和高级时钟区域控制等。随着FPGA 尺寸的增

加,芯片上时钟的分布质量就变得越来越重要。时钟相位差和时钟延迟严重影响设备

的性能,在大的设备中用传统的时钟网络控制时钟相位差和时钟延迟变得十分困难,

XILINX 公司的Spartan-IIE 系列的四个延迟锁定环(Delay-Locked Loop)恰好解决

了这个问题。每一个DLL 可以驱动两个全局时钟,全局时钟分布网络可以根据不同的

负载,将时钟相位差最小化。通过观察一个DLL 输出时钟,它可以在网络中补偿延迟

,有效的消除了设备内从外部输入端口到时钟装载的延迟。

除了根据用户的原时钟信号提供零延迟,DLL 还可以提供原时钟信号的若干倍频段。

DLL 可以使时钟加倍,二倍频或四倍频。还可以对时钟信号进行分频,

1.5,2,

2.5,3

,4,5,8,16 分频。DLL 还可以提供固定相位差的时钟,如90°、180°、270°,另外

,DLL 可以被用作时钟镜像,通过驱动DLL 芯片外的输出,然后反馈,DLL 可以降低

多个设备间的时钟相位差。

2.基本原理

如图4-1-1 所示,一个最简单的DLL 包括一个“variable delay line”和“control

logic”. “variable delay line”产生一个输入信号CLKIN 延迟了的版本。时钟

分布网络在所有内部寄存器时钟和CLKFB脚反馈时钟之间布线。“Control logic”.

要检测输入时钟和反馈时钟好来调节延迟线。延迟线可以通过电压控制的延迟或一系

列离散延迟成分建立。最适用于Virtex DLL 的性能的方法是使用一个离散的数字延

迟线。一个DLL 的工作原理是:在输入时钟和反馈时钟中插入延迟,直到两个时钟上

升沿相同,使得他们同步。在输入时钟和反馈时钟边沿在一条直线上后,DLL 锁存。

电路直到DLL 锁存之后才开始初始,所

以两个时钟无区别。所以DLL 的输出时钟补偿了时钟信号在网络的分布延迟,有效的

消除了源时钟和负载之间的延迟。

图4-1-2 所示是XILINX 公司一个简化了的DLL 宏符号,BUFGDLL 这个宏使用快速有效

的方法在设备内部提供零传播延迟的系统时钟。

使用BUFGDLL 这个宏,是最简单的由外部时钟产生芯片上的零传播延迟时钟的方法。

这个宏使用了IBUFG,CLKDLL,BUFG 来实现最基本的DLL 应用。I 脚提供用户源时钟,

DLL 对这个时钟进行操作。对BUFGDLL 输入的源时钟必须在数据表的低频段。时钟输

出O 提供已经进行了延迟补偿的时钟。这个输出时钟占空比为1:1,如需要其他占空

比,可在属性中对其进行修改。需要注意的是,这个宏符号并不能用于时钟加倍或时

钟分频,也不提供 RESET , LOCKED 管脚。如果需要这些功能,必须使用下面的CLKDLL

.CLKDLL 提供了DLL 完整的功能。当要用DLL 进行复杂应用时,通常使用CLKDLL。

以下介绍各个管脚:

?源时钟输入----CLKIN: CLKIN 提供用户源时钟,CLKIN 的频率必须在数据表所列范

围内。

?反馈时钟输入----CLKFB: DLL需要一个参考信号或反馈信号来提供延迟补偿输出。

将DLL 的输出CLK0或CLK2X 连到反馈时钟输入CLKFB端,给DLL 提供必要的反馈。

?RESET—RST:当RST 有效时,LOCKED 信号是源时钟信号无效。RST 高电平有效,

必须连在热键或直接接地。

?二倍频输出----CLK2X: CLK2X 自动提供占空比为1:1 的倍频信号。

分频输出----CLKDV:分频信号提供源信号的低频输出。CLKDV_DIVIDE 属性控制分频

比,可以为1.5,2,2.5,3,4,5,8 和16。

?一倍信号输出— CLK[0|90|180|270]---CLK0 提供已经进行了延迟补偿的时钟,同时

提供三个相移信号输出。

?输出锁存----LOCKED:为了完成锁存,DLL 可能要检测上千个时钟周期。当DLL 完成

锁存之后,LOCKED有效。

DLL 的输出特性如下图所示:

注意:

DLL 位置限制:

器件的每个脚有一个DLL,使用时要对它进行分配。位置限制LOC 语句控制有哪个DLL

来工作。

LOC 属性使用下面的形式:

INST LOC = dll。这里是0,1,2,3。

例: INST MY_DLL LOC = dll1。

3. DLL 使用的常见问题

输入时钟的最小频率是多少?

由实验知,最小频率取决于所使用的DLL。作为时钟分频,最小频率至少是15MHz,作

为时钟倍频,最少为20MHz。

我们从DLL 可以生成什么?

由XILINX 公司的APPLICATION NOTE 可知,DLL 可提供分频或倍频,以及90°、180

°、270°相移的时钟信号。

并不推荐级联使用DLL!

由于DLL 对最低输入时钟频率有限制,所以多次倍频会产生高频信号,很可能导致执

行工具失败。

BUFG 是什么?

BUFG 是与时钟分布网络相联的全局时钟缓冲器。

如果需要发送三个时钟信号,出现:

ERROR:“ Place:1727 - Xilinx requires using

locate constraints to preplace such connected

GCLK/GCLKIO/DLL components.”

这种情况,你的UCF 文件必须清晰必须标明他们的位置。例如:

INST dll0 LOC = DLL0;

INST bg0 LOC = GCLKBUF0;

INST bg1 LOC = GCLKBUF1;

INST bg2 LOC = GCLKBUF2;

其中dll0 时你的DLL 实例的名字,bg0,bg1,bg2 时你的BUFG 实例的名字。IBUFG 是什么?

IBUFG 是与时钟管脚相连的出入时钟缓冲器。

当DLL 锁存之后,为什么我们不能用DLLLOCK 信号RESET 系统?

因为DLL 锁存之后,DLL LOCK 信号并不能保证随时都能插入LOCK 信号。

DLL 还有其他的频率限制吗?这些频率限制

是怎样发现的?

这些限制是在仿真和硬件调试中发现的对时间仿真:i/p 频率〉=25 MHz.

对硬件调试:

时钟倍频i/p freq >= 20 MHz

时钟分频i/p freq >= 15 MHz

三、设计实现

DLL 可以实现倍频,分频,锁相,以及移相等操作,下面分别介绍这些操作的设计实

现。

1.锁相

DLL 的锁相用法就是DLL 的标准用法,其原理图如下所示:

【DLL 标准用法源程序】

dll_standard.v

/**********************************************

模块名称 dll_standard()

模块功能锁相

输入输出

CLKIN:输入时钟

RESET:复位信号

CLK0:输出时钟

LOCKED:输出锁存信号

**********************************************/

module dll_standard (CLKIN, RESET, CLK0, LOCKED);

input CLKIN, RESET;

output CLK0, LOCKED;

wire CLKIN_w, RESET_w, CLK0_dll, LOCKED_dll;

IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));

IBUF rstpad (.I(RESET), .O(RESET_w));

CLKDLL dll (.CLKIN(CLKIN_w), .CLKFB(CLK0), .RST(RESET_w),

.CLK0(CLK0_dll), .CLK90(), .CLK180(), .CLK270(),

.CLK2X(), .CLKDV(), .LOCKED(LOCKED_dll));

BUFG clkg (.I(CLK0_dll), .O(CLK0));

OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));

Endmodule

dll_standard.ucf

NET "CLKIN" LOC = "p80";

NET "CLK0" LOC = "p205";

NET "LOCKED" LOC = "p147";

NET "RESET" LOC="P3";

INST dll LOC=DLL0;

INST clkg LOC =GCLKBUF0;

2.移相

移相用法的原理图与倍频用法的原理图很类似,只用把CLK2X 输出端的输出缓存移到

CLK90、CLK180 或者CLK270 端即可。这里给出的例子中输出时钟是移相90°。

【DLL 移相用法源程序】

dll_phaseshift.v

/**********************************************

模块名称 dll_phaseshift()

模块功能移相

输入输出

CLKIN:输入时钟

RESET:复位信号

CLK90:输出时钟

LOCKED:输出锁存信号

**********************************************/

module dll_phaseshift(CLKIN, RESET, CLK0, CLK90, LOCKED);

input CLKIN, RESET;

output CLK0, CLK90, LOCKED;

wire CLKIN_w, RESET_w, CLK0_dll, CLK90_dll, LOCKED_dll;

IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));

IBUF rstpad (.I(RESET), .O(RESET_w));

CLKDLL dll (.CLKIN(CLKIN_w), .CLKFB(CLK0), .RST(RESET_w),

.CLK0(CLK0_dll), .CLK90(CLK90_dll), .CLK180(), .CLK270(),

.CLK2X(), .CLKDV(), .LOCKED(LOCKED_dll));

BUFG clkg (.I(CLK0_dll), .O(CLK0));

BUFG clk90g (.I(CLK90_dll), .O(CLK90));

OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));

endmodule

dll_phaseshift.ucf

NET "CLKIN" LOC = "p80";

NET "CLK0" LOC = "p201";

NET "CLK90" LOC = "p205";

NET "LOCKED" LOC = "p145";

NET "RESET" LOC="P3";

INST dll LOC=DLL0;

INST clkg LOC = GCLKBUF0;

INST clk90g LOC = GCLKBUF1;

3.倍频

通过使用DLL 可以使源信号为50M 工作在100M。这一技术可以简化设计板的设计,因

为板子上的时钟路径不用考虑高频信号。时钟加倍也提供了时域相乘的另一选择,每

个时钟周期使用同一电路两次,比画两个相同电路少占面积。二倍频电路原理图如下

图所示:

【DLL 二倍频用法源程序】

dll_freq_mul.v

/**********************************************

模块名称 dll_freq_mul()

模块功能二倍频

输入输出

CLKIN:输入时钟

RESET:复位信号

CLK2X:输出时钟

LOCKED:输出锁存信号

**********************************************/

module dll_standard (CLKIN, RESET, CLK0, CLK2X, LOCKED);

input CLKIN, RESET;

output CLK0, CLK2X, LOCKED;

wire CLKIN_w, RESET_w, CLK0_dll, CLK2X_dll, LOCKED_dll;

IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));

IBUF rstpad (.I(RESET), .O(RESET_w));

CLKDLL dll (.CLKIN(CLKIN_w), .CLKFB(CLK0), .RST(RESET_w),

.CLK0(CLK0_dll), .CLK90(), .CLK180(), .CLK270(),

.CLK2X(CLK2X_dll), .CLKDV(), .LOCKED(LOCKED_dll));

BUFG clkg (.I(CLK0_dll), .O(CLK0));

BUFG clk2xg (.I(CLK2X_dll), .O(CLK2X));

OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));

endmodule

dll_freq_mul.ucf

NET "CLKIN" LOC = "p80";

NET "CLK2X" LOC = "p205";

NET "LOCKED" LOC = "p145";

NET "RESET" LOC="P3";

INST dll LOC=DLL0;

INST clkg LOC = GCLKBUF0;

INST clk2xg LOC = GCLKBUF1;

通过将两个时钟加倍的DLL 串联,可以得到四倍后的时钟。其原理图如下所示:

【DLL 四倍频用法源程序】

dll_freq4x.v

/**********************************************

模块名称 dll_freq4x()

模块功能四倍频

输入输出

CLKIN:输入时钟

RESET:复位信号

CLK2X:二倍频时钟输出

CLK4X:四倍频时钟输出

LOCKED: 输出锁存信号

**********************************************/

module dll_standard (CLKIN, RESET, CLK2X, CLK4X, LOCKED);

input CLKIN, RESET;

output CLK2X, CLK4X, LOCKED;

wire CLKIN_w, RESET_w, CLK2X_dll, CLK4X_dll, LOCKED2X;

wire LOCKED2X_delay, RESET4X;

wire logic1;

assign logic1 = 1'b1;

IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));

IBUF rstpad (.I(RESET), .O(RESET_w));

CLKDLL dll2x (.CLKIN(CLKIN_w), .CLKFB(CLK2X), .RST(RESET_w),

.CLK0(), .CLK90(), .CLK180(), .CLK270(),

.CLK2X(CLK2X_dll), .CLKDV(), .LOCKED(LOCKED2X));

BUFG clk2xg (.I(CLK2X_dll), .O(CLK2X));

SRL16 rstsrl (.D(LOCKED2X), .CLK(CLK2X), .Q(LOCKED2X_delay),

.A3(logic1), .A2(logic1), .A1(logic1), .A0(logic1));

assign RESET4X = !LOCKED2X_delay;

CLKDLL dll4x (.CLKIN(CLK2X), .CLKFB(CLK4X), .RST(RESET4X),

.CLK0(), .CLK90(), .CLK180(), .CLK270(),

.CLK2X(CLK4X_dll), .CLKDV(), .LOCKED(LOCKED_dll));

BUFG clk4xg (.I(CLK4X_dll), .O(CLK4X));

OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));

endmodule

dll_freq4x.ucf

NET "CLK2X" LOC = "P201";

NET "CLK4X" LOC = "P205";

NET "LOCKED" LOC = "P147";

NET "RESET" LOC = "P3";

INST dll2X LOC = DLL0;

INST dll4X LOC = DLL1;

4.分频

移相用法的原理图与倍频用法的原理图很类似,只用把CLK2X 输出端的输出缓存移到

CLKDV 端即可。CLKDV_DIVIDE 属性控制分频比,可以为1.5,2,2.5,3,4,5,8

和16,其默认值是2。

【DLL 分频用法源程序】

dll_freq_div.v

/**********************************************

模块名称 dll_freq_div()

模块功能分频

输入输出

CLKIN:输入时钟

RESET:复位信号

CLK2X:输出时钟

LOCKED:输出锁存信号

**********************************************/

module dll_freq_div(CLKIN, RESET, CLK0, CLKDV, LOCKED);

input CLKIN, RESET;

output CLK0, CLKDV, LOCKED;

wire CLKIN_w, RESET_w, CLK0_dll, CLKDV_dll, LOCKED_dll;

IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));

IBUF rstpad (.I(RESET), .O(RESET_w));

CLKDLL dll (.CLKIN(CLKIN_w), .CLKFB(CLK0), .RST(RESET_w),

.CLK0(CLK0_dll), .CLK90(), .CLK180(), .CLK270(),

.CLK2X(), .CLKDV(CLKDV_dll), .LOCKED(LOCKED_dll));

BUFG clkg (.I(CLK0_dll), .O(CLK0));

BUFG clkdvg (.I(CLKDV_dll), .O(CLKDV));

OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));

endmodule

dll_freq_div.ucf

NET "CLKIN" LOC = "p80";

NET "CLK0" LOC = "p201";

NET "CLKDV" LOC = "p205";

NET "LOCKED" LOC = "p145";

NET "RESET" LOC="P3";

INST dll LOC=DLL0;

INST clkg LOC = GCLKBUF0;

INST clkdvg LOC = GCLKBUF1;

四、实验仪器及设备

1.EITS2003 实验平台一块

2.并口DB25 线一条

3.带WebPack+ModelSim 开发平台PC 机一台

4.交流9V 电源一只

5.双踪示波器一台

五、实验内容及步骤

以DLL 的锁相使用为例:

1.在Xilinx WebPack 平台下,建立项目DLL,写源程序dll_standard.v;2.进行逻辑综合验证;

3.按源程序输入dll_standard.ucf,注意要与dll_standard 模块进行关联; 4.执行Implement Design;

5.执行Generate Programmming File;

6.使用iMPACT 工具进行下载;

7.观察结果。

六、使用示波器观察波形

1.锁相

示波器测P80:

FRE=50.06MHz PERIOD=20.05ns DUTY=51.2%

RISETIME=4.9ns FALLTIME=5.2ns

示波器测P205:

FRE=50.00MHz PERIOD=20.02ns DUTY=49.6%

RISETIME=5.2ns FALLTIME=4.9ns

2.倍频

二倍频:

示波器测P205,结果如下:

FRE=101.0MHz PERIOD=9.900ns DUTY=50.5%

RISETIME=2.950ns FALLTIME=3.000ns

四倍频:

示波器测P205,结果如下:

FRE=200.0MHz PERIOD=5.000ns DUTY=47.5%

RISETIME=1.000ns FALLTIME=1.450ns

七、练习与思考

1.为什么CLKDLL 的输入输出都要加上缓存?

2.试编写16 倍频时钟的源程序。

3. CLKDLL 用作分频时,CLKDV_DIVIDE 属性控制分频比,其默认值为2,即输出时

钟是二分频。如何改变参数CLKDV_DIVIDE 的值,使得输出时钟获得不同的分频?

安全培训考核合格证书式样及说明

附件1 安全培训考核合格证书式样及说明一、安全培训考核合格证书式样 安全培训考核合格证书 单位名称 员工姓名 证书编号 所属县市区 德州市安全生产监督管理局 (封皮)

姓名:性别: 彩色照片出生日期: 文化程度: 身份证号: 工作单位: 现任岗位: 证书编号: 培训考核单位:(盖章) 发证日期: (第二页)

取证及岗前培训考核记录 序培训内容学成培训日期考核日期 每年再培训考核记录 序培训内容学成培训日期考核日期 注:取证培训考核记录是指员工第一次取得本证时的培训考核记录;岗前培训考核记录是指新录用、轮岗换岗、“四新”等人员的上岗前培训考核记录;每年再培训考核记录是 (第三页)

说明 一、本证书为德州市安全生产监督管理局设计、各县(市、区)安全生产监督管理局监制,由危险化学品生产经营单位制发。 二、除主要负责人、安全生产管理人员和特种作业人员以外的其他作业人员(包括其他负责人、其他管理人员、技术人员和各岗位的工人以及临时聘用的人员)必须通过安全培训,并经考核合格,取得本证书。 三、本证书各栏目内容的填写要真实、完整,盖章后有效,不得擅自涂改。 四、安监部门监督检查时,应向安监部门出示,作为“全员培训考核、持证上岗”的依据。 (第四页)

二、安全培训考核合格证书说明 1.证书格式:尺寸大小为115mm×165mm,封皮颜色为绿色。 2.证书编号规则:共12位号码。 第1-4位为发证年份。 第5、6 行政区域代码 德城区01 陵城区02 禹城市03 乐陵市04 宁津县05 齐河县06 临邑县07 平原县08 武城县09 夏津县10 庆云县11 经济技术开发区12 运河经济开发区13 第7位为单位类型。其中,1代表危化品生产企业;2代表危化品储存企业;3代表危化品使用企业;4代表危化品经营企业。

C C++动态链接库的创建与调用

C/C++中动态链接库的创建和调用 1.动态链接库的创建步骤: 创建Non-MFC DLL动态链接库 1.打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo 2.新建一个.h文件DllDemo.h 并添加如下代码: #ifdef DllDemo_EXPORTS #define DllAPI _declspec(dllexport) #else #define DllAPI _declspec(dllimport) extern “C” // 原样编译 { DllAPI int _stdcall Max(int a,int b); //_stdcall使非C/C++语言内能够调用API } #endif 3.新建一个.cpp文件,并添加如下代码 #include "DllDemo.h" DllAPI int __stdcall Max(int a,int b) { if(a==b) return NULL; else if(a>b) return a; else return b; } 4.编译程序生成动态链接库 1.2 用.def文件创建动态连接库DllDemo.dll 1、删除DllDemo工程中的DllDemo.h文件。 2、在DllDemo.cpp文件头,删除#include DllDemo.h语句。 3、向该工程中加入一个文本文件,命名为DllDemo.def并写入如下语句: LIBRARY MyDll EXPORTS Max@1 4、编译程序生成动态连接库。 2.动态链接库的调用步骤 2.1 隐式调用 1.建立DllCnsTest工程 2.将文件DllDemo.dll、DllDemo.lib拷贝到DllCnsTest工程所在的目录 3.在DllCnsTest中添加如下语句: #define DllAPI _declspec(dllimport) #pragma comment(lib,”DllDemo.lib”) extern “C” { DllAPI int _stdcall Max(int a,int b);

锁相环原理及应用

锁相电路(PLL)及其应用 自动相位控制(APC)电路,也称为锁相环路(PLL),它能使受控振荡器的频率和相位均与输入参考信号保持同步,称为相位锁定,简称锁相。它是一个以相位误差为控制对象的反馈控制系统,是将参考信号与受控振荡器输出信号之间的相位进行比较,产生相位误差电压来调整受控振荡器输出信号的相位,从而使受控振荡器输出频率与参考信号频率相一致。在两者频率相同而相位并不完全相同的情况下,两个信号之间的相位差能稳定在一个很小的围。 目前,锁相环路在滤波、频率综合、调制与解调、信号检测等许多技术领域获得了广泛的应用,在模拟与数字通信系统中已成为不可缺少的基本部件。 一、锁相环路的基本工作原理 1.锁相环路的基本组成 锁相环路主要由鉴频器(PD)、环路滤波器(LF)和压控振荡器(VCO)三部分所组成,其基本组成框图如图3-5-16所示。 图1 锁相环路的基本组成框图 将图3-5-16的锁相环路与图1的自动频率控制(AFC)电路相比较,可以看出两种反馈控制的结构基本相似,它们都有低通滤波器和压控振荡器,而两者之间不同之处在于:在AFC环路中,用鉴频器作为比较部件,直接利用参考信号的频率与输出信号频率的频率误差获取控制电压实现控制。因此,AFC系统中必定存在频率差值,没有频率差值就失去了控制信号。所以AFC系统是一个有频差系统,剩余频差的大小取决于AFC系统的性能。 在锁相环路(PLL)系统中,用鉴相器作为比较部件,用输出信号与基准信号两者的相位进行比较。当两者的频率相同、相位不同时,鉴相器将输出误差信号,经环路滤波器输出

控制信号去控制VCO ,使其输出信号的频率与参考信号一致,而相位则相差一个预定值。因此,锁相环路是一个无频差系统,能使VCO 的频率与基准频率完全相等,但二者间存在恒定相位差(稳态相位差),此稳态相位差经鉴相器转变为直流误差信号,通过低通滤波器去控制VCO ,使0f 与r f 同步。 2.锁相环路的捕捉与跟踪过程 当锁相环路刚开始工作时,其起始时一般都处于失锁状态,由于输入到鉴相器的二路信号之间存在着相位差,鉴相器将输出误差电压来改变压控振荡器的振荡频率,使之与基准信号相一致。锁相环由失锁到锁定的过程,人们称为捕捉过程。系统能捕捉的最大频率围或最大固有频带称为捕捉带或捕捉围。 当锁相环路锁定后,由于某些原因引起输入信号或压控振荡器频率发生变化,环路可以通过自身的反馈迅速进行调节。结果是VCO 的输出频率、相位又被锁定在基准信号参数上,从而又维持了环路的锁定。这个过程人们称为环路的跟踪过程。系统能保持跟踪的最大频率围或最大固有频带称为同步带或同步围,或称锁定围。 捕捉过程与跟踪过程是锁相环路的两种不同的自动调节过程。 由此可见,自动频率控制(AFC )电路,在锁定状态下,存在着固定频差。而锁相环路控制(PLL )电路,在锁定状态下,则存在着固定相位差。虽然锁相环存在着相位差,但它和基准信号之间不存在频差,即输出频率等于输入频率.这也表明,通过锁相环来进行频率控制,可以实现无误差的频率跟踪.其效果远远优于自动频率控制电路. 3.锁相环路的基本部件 1)鉴相器(PD —Phase Detector ) 鉴相器是锁相环路中的一个关键单元电路,它负责将两路输入信号进行相位比较,将比较结果从输出端送出。 鉴相器的电路类型很多,最常用的有以下三种电路. (1)模拟乘法器鉴相器,这种鉴相器常常用于鉴相器的两路输入信号均为正弦波的锁相环电路中。 (2)异或门鉴相器,这种鉴相器适合两路输入信号均为方波信号的锁相环电路中,所以异或门鉴相器常常应用于数字电路锁相环路中。 (3)边沿触发型数字鉴相器,这种鉴相器也属于数字电路型鉴相器,对输入信号要求不严,可以是方波,也可以是矩形脉冲波.这种电路常用于高频数字锁相环路中。 图2 是异或门鉴相器的鉴相波形与鉴相特性曲线。

HSE培训中心证书管理制度

HSE培训中心证书管理制度 第一章总则 第一条为进一步推动HSE培训管理工作,加强HSE培训中心(以下简称中心)证书规范化管理,维护中心证书发放的权威性和严肃性,特制定本制度。 第二条本制度适用于经中心认证发放的所有证书,其证书类型主要有培训合格证、资质认定证等。 第二章管理职责 第三条中心职责: (一)中心负责除安监局统一发放的证书之外的培训合格证书的设计、印刷、制作、发放、登记、存档等; (二)中心负责证书使用过程的管理,如:监督、升级、降级、暂停或注销等; (三)中心对伪造、篡改证书等违纪行为提出处理意见,有权撤销证书资格,并追究相关单位及人员的责任。 第四条人员职责: (一)安全环保与技术监督研究院负责培训管理的主管领导负责各类证书的批准签发; (二)中心负责人负责对证书信息进行审核,对证书的使用情况进行监督管理; (三)综合管理岗负责空白证书的印刷、存放和已发放证书的登记归档; (四)培训班班主任负责该班证书的申领、制作、发放、修改、增/补和提供证书归档的信息。 第三章空白证书管理 第五条国家安监总局或四川省安监局统一印制的相关安全管理、特种作业、培训资格证的证书由中心派专人到四川省安监局领取空白证书。

第六条培训中心自行设计制作的相关合格证,报上级主管部门备案后印制,并由专人负责管理。 第七条空白证书应由综合管理岗进行统一管理,并建立账簿锁于保险柜中。领取时,按要求填写《HSE培训空白证书领取登记表》(参见附件1),避免证书遗失。 第三章证书发放程序 第八条中心证书发放按照以下程序管理: (一)申领空白证书 a)在考核成绩发布后5个工作日内,班主任填写《HSE培训中心证书申领审批表》(参见附件2,以下简称审批表); b)审批表后应附上参训学员信息表及考试成绩汇总表(参见附件2-1,2-2); c)审批表及两个附表由中心主任审核通过后,交由安全环保与技术监督研究院负责培训管理的主管领导审核,审核合格后签字批准; d)班主任在空白证书管理人员处领取空白证书,并做好领取登记。 (二)制作证书 a)班主任领取空白证书后15个工作日内,应将证书制作完成; b)证书盖章执行《用章管理制度》。 C)如证书在制作过程中,出现错误需作废的证书应在综合管理岗处加印作废章,统一销毁。 (三)发放证书 班主任负责证书发放,并做好发放记录,按要求填写好《HSE培训中心证书发放记录表》(参见附件3)。 (四)登记存档

VC++动态链接库创建和调用全过程详解

1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 对动态链接库,我们还需建立如下概念: (1)DLL 的编制与具体的编程语言及编译器无关 只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如Windows提供的系统DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。 (2)动态链接库随处可见 我们在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL中。kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。 一般的程序员都用过类似MessageBox的函数,其实它就包含在user32.dll这个动态链接库中。由此可见DLL对我们来说其实并不陌生。 (3)VC动态链接库的分类 Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。 非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。 由于本文篇幅较长,内容较多,势必需要先对阅读本文的有关事项进行说明,下面以问答形式给出。 问:本文主要讲解什么内容? 答:本文详细介绍了DLL编程的方方面面,努力学完本文应可以对DLL有较全面的掌握,并能编写大多数DLL程序。 问:如何看本文? 答:本文每一个主题的讲解都附带了源代码例程,可以随文下载(每个工程都经WINRAR压缩)。所有这些例程都由笔者编写并在VC++6.0中调试通过。

锁相环的基本原理和模型

1.锁相环的基本原理和模型 在并网逆变器系统中,控制器的信号需要与电网电压的信号同步,锁相环通过检测电网电压相位与输出信号相位之差,并形成反馈控制系统来消除误差,达到跟踪电网电压相位和频率的目的。一个基本的锁相环结构如图1-1所示,主要包括鉴相器,环路滤波器,压控振荡器三个部分。 图1-1 基本锁相环结构 鉴相器的主要功能是实现锁相环输出与输入的相位差检测;环路滤波器的主要作用应该是建立输入与输出的动态响应特性,滤波作用是其次;压控振荡器所产生的所需要频率和相位信息。 PLL 的每个部分都是非线性的,但是这样不便于分析设计。因此可以用近似的线性特性来表示PLL 的控制模型。 鉴相器传递函数为:)(Xo Xi Kd Vd -= 压控振荡器可以等效为一个积分环节,因此其传递函数为:S Ko 由于可以采用各种类型不同的滤波器(下文将会讲述),这里仅用)(s F 来表示滤波器的传递函数。 综合以上各个传递函数,我们可以得到,PLL 的开环传递函数,闭环传递函数和误差传递函数分别如下: S s F K K s G d o op )()(=,)()()(s F K K S s F K K s G d o d o cl +=,) ()(s F K K S S s H d o += 上述基本的传递函数就是PLL 设计和分析的基础。 2.鉴相器的实现方法 鉴相器的目的是要尽可能的得到准确的相位误差信息。可以使用线电压的过零检测实现,但是由于在电压畸变的情况下,相位信息可能受到严重影响,因此需要进行额外的信号处理,同时要检测出相位信息,至少需要一个周波的时间,动态响应性能可能受到影响。 一般也可以使用乘法鉴相器。通过将压控振荡器的输出与输入相乘,并经过一定的处理得到相位误差信息。 在实际的并网逆变器应用中还可以在在同步旋转坐标系下进行设计,其基本的目的也是要得的相差的数值。同步旋转坐标系下的控制框图和上图类似,在实际使用中,由于pq 理论在电网电压不平衡或者发生畸变使得性能较差,因而较多的使用dq 变换,将采样得到的三相交流电压信号进行变化后与给定的直流参考电压进行比较。上述两种方法都使用了近似,利用在小角度时正弦函数值约等于其角度,因而会带来误差,这个误差是人为近似导致的误差,与我们要得到的相位误差不是一个概念,最终的我们得到相位误差是要形成压控振荡器的输入信号,在次激励下获得我们所需要的频率和相位信息。 2.1乘法鉴相器

认证培训方案设计设计.doc

实用标准文案 服装设计专业认证培训方案 根据专业职业岗位和职业能力要求,并结合目前的服装艺术设计实习实训基地构建了示范性产学结合、工学结合的认证培训模式。在调研分析专业各职业岗位(群)应具备的知识、能力、素质的基础上,制定科学可行的认证培训目标、计划及方法;认证培训教学大纲; 认证培训环节;专业技能认证培训方案;专业技能教学方法认证培 训方案;认证培训考核方案和认证培训质量管理方案等。其中认证 培训大纲主要突出专业技能培训、专业技能教学法培训等内容。 根据专业认证培训要求,以市场需求为依据,构建项目导向单元能力模块化。构建体现高职教育类型特征的、符合专业技能教学要求的认证培训方案。 一、模块化认证培训方案构成 服装设计专业模块化认证培训方案按职业技能等级分为初、中、 高三个层次。服装设计专业在调研分析专业各职业岗位(群)应具 备的知识、能力、素质的基础上,将实习实训模块设有设计岗位能力 模块(梭织方向、针织方向)、制版岗位能力模块、服装生产管理岗位能力模块、服装营销岗位能力模块、服装品牌设计与企划能力模块、顶岗实习能力模块等7 个项目导向工学模块,每个岗位能力模块认证培训方案(高级)的构成主要包括:学员专业技能培训模块、教师专 业技能教学法培训模块、学员认证培训考核模块和学员认证培训管理

模块四大模块组成。通过认证培训,进一步加强学员职业道德、职业环境以及职业相关法律法规等职业素养;进一步提升和更新学员岗位的 实践操作专业技能;学员通过对相关技能的基础知识和操作考核,获取“服装设计员高级证书” 。整个方案由校企共同组织实施。 服装设计专业学员模块化认证培训方案(高)级如图所示: 学员专业技能培训模块包括设计岗位能力模块(梭织方向)、设计岗位能力模块(针织方向)、制版岗位能力模块、服装生产组织管理能力模块、服装营销岗位能力模块、服装品牌设计与企划模块、顶岗实习能力模块。各模块分别对应相关专业技能,通过校企合作,工学结合,强调“教学做合一”的培训理念,强调“工学结合”的培训过程,强调学员专业技能的培养,提高学员专业技能,从而达到模块化教学的要求。 教师专业技能教学法培训模块包括实践教学法模块和职业素养

VC++ MFC DLL动态链接库编写详解

VC++ MFC DLL动态链接库编写详解(2008-07-10 17:38:40) 标签:it分类:com技术然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建。本文将讨论如何利用VC MFC来创建不同类型的DLL,以及如何使用他们。 一、DLL的不同类型 使用VC++可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。 1、MFC扩展DLL 每个DLL都有某种类型的接口:变量、指针、函数、客户程序访问的类。它们的作用是让客户程序使用DLL,MFC扩展DLL可以有C++的接口。也就是它可以导出C++类给客户端。导出的函数可以使用C++/MFC数据类型做参数或返回值,导出一个类时客户端能创建类对象或者派生这个类。同时,在DLL中也可以使用DLL和MFC。 Visual C++使用的MFC类库也是保存在一个DLL中,MFC扩展DLL动态连接到MFC代码库的DLL,客户程序也必须要动态连接到MFC代码库的DLL。(这里谈到的两个DLL,一个是我们自己编写的DLL,一个装MFC类库的DLL)现在MFC代码库的DLL也存在多个版本,客户程序和扩展DLL都必须使用相同版本的MFC代码DLL。所以为了让MFC扩展DLL能很好的工作,扩展DLL和客户程序都必须动态连接到MFC代码库DLL。而这个DLL必须在客户程序运行的计算机上。 2、常规DLL 使用MFC扩展DLL的一个问题就是DLL仅能和MFC客户程序一起工作,如果需要一个使用更广泛的DLL,最好采用常规DLL,因为它不受MFC的某些限制。常规DLL也有缺点:它不能和客户程序发送指针或MFC派生类和对象的引用。一句话就是常规DLL和客户程序的接口不能使用MFC,但在DLL和客户程序的内部还是可以使用MFC。 当在常规DLL的内部使用MFC代码库的DLL时,可以是动态连接/静态连接。如果是动态连接,也就是常规DLL需要的MFC代码没有构建到DLL中,这种情况有点和扩展DLL类似,在DLL运行的计算机上必须要MFC代码库的DLL。如果是静态连接,常规DLL里面已经包含了需要的MFC代码,这样DLL的体积将比较大,但它可以在没有MFC代码库DLL的计算机上正常运行。 二、建立DLL 利用Visual C++提供的向导功能可以很容易建立一个不完成任何实质任务的DLL,这里就不多讲了,主要的任务是如何给DLL添加功能,以及在客户程序中利用这个DLL 1、导出类 用向导建立好框架后,就可以添加需要导出类的.cpp .h文件到DLL中来,或者用向导创建C++ Herder File/C++ Source File。为了能导出这个类,在类声明的时候要加“_declspe c(dllexport)”,如:

锁相环的组成和工作原理

锁相环的组成和工作原理 时间:2011-11-23 来源:作者: 关键字:锁相环工作原理 1.锁相环的基本组成 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路,简称锁相环(PLL)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。 因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。 锁相环通常由鉴相器(PD)、环路滤波器(LF)和压控振荡器(VCO)三部分组成,锁相环组成的原理框图如图8-4-1所示。锁相环中的鉴相器又称为相位比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成uD(t)电压信号输出,该信号经低通滤波器滤波后形成压控振荡器的控制电压uC(t),对振荡器输出信号的频率实施控制。 2.锁相环的工作原理 锁相环中的鉴相器通常由模拟乘法器组成,利用模拟乘法器组成的鉴相器电路如图8-4-2所示。 鉴相器的工作原理是:设外界输入的信号电压和压控振荡器输出的信号电压分别为: 式中的ω0为压控振荡器在输入控制电压为零或为直流电压时的振荡角频率,称为电路的固有振荡角频率。则模拟乘法器的输出电压uD为: 用低通滤波器LF将上式中的和频分量滤掉,剩下的差频分量作为压控振荡器的输入控制电压uC(t)。即uC(t)为:

式中的ωi为输入信号的瞬时振荡角频率,θi(t)和θO(t)分别为输入信号和输出信号的瞬时位相,根据相量的关系可得瞬时频率和瞬时位相的关系为: 上式等于零,说明锁相环进入相位锁定的状态,此时输出和输入信号的频率和相位保持恒定不变的状态,uc(t)为恒定值。当上式不等于零时,说明锁相环的相位还未锁定,输入信号和输出信号的频率不等,uc(t)随时间而变。 因压控振荡器的压控特性如图8-4-3所示,该特性说明压控振荡器的振荡频率ωu以ω0为中心,随输入信号电压uc(t)的变化而变化。该特性的表达式 上式说明当uc(t)随时间而变时,压控振荡器的振荡频率ωu也随时间而变,锁相环进入“频率牵引”,自动跟踪捕捉输入信号的频率,使锁相环进入锁定的状态,并保持ω0=ωi的状态不变。 8.4.2锁相环的应用 1.锁相环在调制和解调中的应用 (1)调制和解调的概念 为了实现信息的远距离传输,在发信端通常采用调制的方法对信号进行调制,收信端接收到信号后必须进行解调才能恢复原信号。 所谓的调制就是用携带信息的输入信号ui来控制载波信号uC的参数,使载波信号的某一个参数随输入信号的变化而变化。载波信号的参数有幅度、频率和位相,所以,调制有调幅(AM)、调频(FM)和调相(PM)三种。 调幅波的特点是频率与载波信号的频率相等,幅度随输入信号幅度的变化而变化;调频波的特点是幅度与载波信号的幅度相等,频率随输入信号幅度的变化而变化;调相波的特点是幅度与载波信号的幅度相等,相位随输入信号幅度的变化而变化。调幅波和调频波的示意图如图8-4-4所示。

演练:创建和使用动态链接库 (C++)

Visual C++ 指导教程 演练:创建和使用动态链接库(C++) Visual Studio 2010 其他版本 0(共1)对本文的评价是有帮助评价此主题 我们将创建的第一种类型的库是动态链接库(DLL)。使用DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练涵盖以下内容: ?创建新的动态链接库(DLL) 项目。 ?向动态链接库添加类。 ?创建引用动态链接库的应用程序。 ?在控制台应用程序中使用类库的功能。 ?运行应用程序。 系统必备 本主题假定您具备C++ 语言的基础知识。如果您是刚开始学习C++,建议您参阅Herb Schildt 编写的“C++ Beginner's Guide”(《C++ 初学者指南》),该书可从 https://www.doczj.com/doc/589151445.html,/fwlink/?LinkId=115303在线获得。 创建新的动态链接库(DLL) 项目 1.从“文件”菜单中,选择“新建”,然后选择“项目…”。 2.在“项目类型”窗格中,选择“Visual C++”下的“Win32”。 3.在“模板”窗格中,选择“Win32 控制台应用程序”。 4.为项目选择一个名称,如MathFuncsDll,并将其键入“名称”字段。为解决方案选择一个名 称,如DynamicLibrary,并将其键入“解决方案名称”字段。 5.单击“确定”启动Win32 应用程序向导。在“Win32 应用程序向导”对话框的“概述”页中, 单击“下一步”。

6.在“Win32 应用程序向导”中的“应用程序设置”页中,选择“应用程序类型”下的“DLL”(如果 可用),或者选择“控制台应用程序”(如果“DLL”不可用)。某些版本的Visual Studio 不支持通过使用向导创建DLL 项目。您可以稍后对此进行更改,以将项目编译为DLL。 7.在“Win32 应用程序向导”的“应用程序设置”页中,选择“附加选项”下的“空项目”。 8.单击“完成”创建项目。 向动态链接库添加类 1.若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。将显示“添加新项”对话框。 在“类别”窗格中,选择“Visual C++”下的“代码”。在“模板”窗格中选择“头文件(.h)”。为 头文件选择一个名称,如MathFuncsDll.h,并单击“添加”。将显示一个空白文件。 2.添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。代 码应与以下内容类似: 复制 // MathFuncsDll.h namespace MathFuncs { class MyMathFuncs { public: // Returns a + b static __declspec(dllexport) double Add(double a, double b); // Returns a - b static __declspec(dllexport) double Subtract(double a, dou ble b); // Returns a * b static __declspec(dllexport) double Multiply(double a, dou ble b); // Returns a / b // Throws DivideByZeroException if b is 0 static __declspec(dllexport) double Divide(double a, doubl e b); }; } 3.请注意此代码方法声明中的__declspec(dllexport)修饰符。这些修饰符使DLL 能够导出 该方法以供其他应用程序使用。有关更多信息,请参见dllexport, dllimport。

什么是培训合格证书,培训合格证书有什么用

什么是培训合格证书 1、概念 根据相关规定,在国家职业资格目录清单内的职业(工种),须经职业技能鉴定,取得相应职业资格证书后,凭职业资格证书申请培训补贴。在目录清单内且国家公布 实施职业技能等级认定制度的职业(工种),凭职业技能等级证书享受培训补贴。在 国家职业资格目录清单外且在该地《省职业培训补贴标准目录》内的职业(工种), 由培训机构自行组织开展理论考试和实际操作考核。结业考核结束后 5 个工作日内, 培训机构应向办班审核部门提交结业考核结果,内容包括:考场负责人、考场学员签 到册、考试试卷、考试成绩等。经办班审核部门确后5 个工作日内,培训机构再向相 应就业服务部门提交《职业培训合格证书核发名册》(附件 7)及电子数据,经就业 服务部门备案后上网生成证书编号。《职业培训合格证书》由培训机构自行印制,并 按要求发放。 2、级别 培训合格证一般不分等级。 3、培训合格证书有哪些效用及局限性 3.1培训合格证是劳动者参加职业技能培训,完成相应培训任务并达到合格水平的 证明。 3.2对符合条件的从业人员,按规定落实相关补贴政策。培训合格证书一般按初级标准享受相关补贴政策,部分地方按初级的50%标准享受补贴政策。 3.3 局限性:培训合格证书都是由培训机构考核颁发,没有查询网站,严重缺乏公信力与可信度,同时也缺乏流通性,用人单位不太认可。同时,因职业技能等级证书

与专项职业能力证书将逐步推行,培训合格证书将慢慢萎缩。再则,培训证书一般不分级别,参照初级标准执行补贴政策。 4、鉴定评价实施单位、证书颁发单位暨证书用章及证书查询网站 培训合格证书考核的实施主体是培训机构。证书由省级人社部门提供参考式样,由培训机构自行制作、用章、颁发。人社部门一般没有为培训证书提供查询网站。

(完整版)锁相环工作原理

基本组成和锁相环电路 1、频率合成器电路 频率合成器组成: 频率合成器电路为本机收发电路的频率源,产生接收第一本机信号源和发射电路的发射信号源,发射信号源主要由锁相环和VCO电路直接产生。如图3-4所示。 在现在的移动通信终端中,用于射频前端上下变频的本振源(LO),在射频电路中起着非常重要的作用。本振源通常是由锁相环电路(Phase-Locked Loop)来实现。 2.锁相环: 它广泛应用于广播通信、频率合成、自动控制及时钟同步等技术领域 3.锁相环基本原理: 锁相环包含三个主要的部分:⑴鉴相器(或相位比较器,记为PD或PC):是完成相位比较的单元,用来比较输入信号和基准信号的之间的相位.它的输出电压正比于两个输入信号之相位差.⑵低通滤波器(LPF):是个线性电路,其作用是滤除鉴相器输出电压中的高频分量,起平滑滤波的作用.通常由电阻、电容或电感等组成,有时也包含运算放大器。⑶压控振荡器(VCO):振

荡频率受控制电压控制的振荡器,而振荡频率与控制电压之间成线性关系。在PLL中,压控振荡器实际上是把控制电压转换为相位。 1、压控振荡器的输出经过采集并分频; 2、和基准信号同时输入鉴相器; 3、鉴相器通过比较上述两个信号的频率差,然后输出一个直流脉冲电压; 4、控制VCO,使它的频率改变; 5、这样经过一个很短的时间,VCO 的输出就会稳定于某一期望值。 锁相环电路是一种相位负反馈系统。一个完整的锁相环电路是由晶振、鉴相器、R分频器、N分频器、压控振荡器(VCO)、低通滤波器(LFP)构成,并留有数据控制接口。 锁相环电路的工作原理是:在控制接口对R分频器和N分频器完成参数配置后。晶振产生的参考频率(Fref)经R分频后输入到鉴相器,同时VCO的输出频率(Fout)也经N分频后输入到鉴相器,鉴相器对这两个信号进行相位比较,将比较的相位差以电压或电流的方式输出,并通过LFP滤波,加到VCO的调制端,从而控制VCO的输出频率,使鉴相器两输入端的输入频率相等。 锁相环电路的计算公式见公式: Fout=(N/R)Fref 由公式可见,只要合理设置数值N和R,就可以通过锁相环电路产生所需要的高频信号。 4.锁相环芯片 锁相环的基准频率为13MHz,通过内部固定数字频率分频器生成5KHz或6.25KHz的参考频率。VCO振荡频率通过IC1 内部的可编程分频器分频后,与基准频率进行相位比较,产生误差控制信号,去控制VCO,改变VCO的振荡频率,从而使VCO输出的频率满足要求。如图3-5所示。 N=F VCO/F R N:分频次数 F VCO:VCO振荡频率

VC++ 2017 动态链接库的创建和使用总结

Visual studio c++ 2017 动态链接库的创建和使用总结 一动态链接库的创建两种方式: 1、只有从文件->新建->项目->Windows桌面-> Windows桌面向导->选择“动态链接 库(.dll)->生成解决方案,才会生成.dll和.lib文件。 (1)在头文件声明中(注意要在头文件变量和函数声明中,而不是在变量和函数的定义中声明),不加extern “C”修饰,编译成DLL后,用depends.exe查看导出函数名。 可以看出,导出的函数名都被编译器篡改了。

(2)在头文件声明中,变量和函数名前加extern “C”修饰后,编译成DLL后,再用depends.exe查看导出函数名。 可以看出,用extern “C”修饰的函数名,编译后函数名保持不变。类及成员函数不能用extern “C”修饰,编译成DLL后,成员函数名发生了改变。 2、如果从文件->新建->项目->动态链接库(DLL)->生成解决方案,就只生成.dll,不生成.lib。

二动态链接库的调用两种方式: 1、显式调用 (1)使用显式调用的前提:创建的DLL,编译时不要篡改函数名称,定义函数名时,可用extern “C”修饰函数名,保证编译时,函数名不被篡改。否则GetProcAddress( )不能正确地获取dll中的函数名。 但是导出的类不能使用extern “C”修饰。 (2)使用显式调用的优点:不用动态链接库的.h和.lib文件,只要有.dll文件就可调用库函数,使用LoadLibrary(),在需要调用.dll中的库函数时,才动态加载到内存中,使用完毕后,可以用FreeLibrary()释放内存中的dll;使用GetProcAddress( )获取dll中的函数名。必须事先知道dll中的函数名和形式参数。 (3)使用显式调用缺点:调用每个函数时,都必须使用 GetProcAddress( )获取dll中的函数名,并转换成原来的函数,比较麻烦。而隐式调用DLL函数,由于使用了DLL的头文件.h,使用起来非常方便。 2、隐式调用 (1)隐式调用DLL函数缺点: 应用程序加载时,在内存中载入DLL动用库中的函数、变量、或类。使用完毕后,DLL 也不会从内存中释放。 .lib包含了库函数的入口,但不包含函数代码,应用程序调用时,才从dll中载入。(2)隐式调用DLL函数优点: 应用程序调用dll时,需要.lib和.h文件,在应用程序.exe文件夹debug或者release 中有DLL文件,即.h、.lib和.dll三个文件,在应用程序中直接使用DLL中的类和函数,可以不考虑编译DLL函数和变量名发生改变的问题。不需要像显式调用那样,函数需要 用 GetProcAddress( )一一获取。 隐式调用DLL中的变量、函数和类,有两种方法: (1)在主程序中包含DLL的头文件dll.h,在main( )前加上#pragma comment(lib,”dll.lib”),没有分号,再在debug或release中复制DLL.dll。 (2)在主程序中包含DLL的头文件dll.h,在项目属性->链接器->添加依赖项中加上“dll.lib;“,再在debug或release中复制DLL.dll,即可。

中国认证认可协会网络培训平台学员使用手册V1

中国认证认可协会网络培训平台学员使用手册V1.0 CCAA网络培训平台项目组 2017年12月 1

目录 1用户登录 (3) 1.1用户类型说明 (3) 1.2注册认证人员登录 (3) 1.2.1注册认证人员登录入口 (3) 1.2.2采用3.0系统的登录方式进行登录 (4) 1.3其他人员注册与登录 (5) 1.3.1其他人员注册 (5) 1.3.2其他人员登录 (7) 2课程购买 (8) 2.1查找课程 (8) 2.2加入购物车 (10) 2.3购买信息确认 (11) 2.4购买确认 (11) 2.5支付 (11) 2.6查看已购买课程 (13) 3在线学习 (13) 3.1开始学习 (13) 3.2查看学习档案 (14) 3.3获取证书 (15) 4其他功能 (15) 4.1个人信息修改 (15) 4.2密码修改 (16) 4.3头像修改 (16) 2

1用户登录 1.1用户类型说明 中国认证认可协会网络培训平台(以下简称网络培训平台)用户分为注册认证人员用户和其他人员用户。 注册认证人员指中国认证认可协会人员注册与管理系统V3.0(以下简称3.0系统)中的注册认证人员用户,其他人员是指非3.0系统注册认证人员,希望通过网络培训平台进行培训学习的用户。 1.2注册认证人员登录 注册认证人员登录无需在网络培训平台注册,可直接使用3.0系统中的档案号登录网络培训平台进行在线培训学习。 1.2.1注册认证人员登录入口 注册认证人员可通过网络培训平台首页的用户“登录入口”进入登录页面: 3

1.2.2采用3.0系统的登录方式进行登录 注册认证人员可以直接在登录页面输入档案号和验证码,点击【显示验证问题】按钮登录。 网络培训平台通过网络接口获取到3.0系统所设置的登录问题,并随机取其 一来验证用户身份。在下图相应位置输入提示问题答案,然后再次点击【登录】按钮,即可登录网络培训平台: 4

(动态链接库)DLL编写与使用方法

DLL的创建与调用 1、DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE 文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 (2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。非MFC动态库不采用MFC 类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。 2、创建一个DLL 2.1 非MFC的DLL 2.1.1声明导出函数: extern “C” __declspec(dllexport) int add(int a, int b); 其中extern “C”为声明为C编译。由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。 __declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数 从dll中声明输出函数有两种方式: (1)另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。 (2)用__declspec(dllexport)来声明函数 如果使用Visual C++来创建dll,对于同样用VC创建的exe来说,调用dll没有什么问题。而如果用其他工具来创建的exe来调用dll,就会出现问题。因为即使你不用C++编译器,Microsoft C编译器也会损害C函数。当用__stdcall将函数输出时,C编译器会将函数改为_func@1的形式。在这里需要在.def 文件中加入EXPORTS节来输出函数: EXPORTS func 这样,dll将用func函数名来输出函数。 另一种方式是用#pragma (linker, “/exports:func=_func@1”),告诉编译器输出函数func,这种方式没有前一种好。 如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++ 缺省的调用方式却为__cdecl。__stdcall方式与__cdecl对函数名最终生成符号的方式不同。若采用C编译方式(在C++中需将函数声明为extern "C"),__stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number;

锁相环基本原理

锁相环基本原理 一个典型的锁相环(PLL )系统,是由鉴相器(PD ),压控荡器(VCO )和低通滤波器(LPF )三个基本电路组成,如图1, Ud = Kd (θi –θo) U F = Ud F (s ) θi θo 图1 一.鉴相器(PD ) 构成鉴相器的电路形式很多,这里仅介绍实验中用到的两种鉴相器。 异或门的逻辑真值表示于表1,图2是逻辑符号图。 表1图2 从表1可知,如果输入端A 和B 分别送 2π 入占空比为50%的信号波形,则当两者 存在相位差?θ时,输出端F 的波形的 占空比与?θ有关,见图3。将F 输出波 形通过积分器平滑,则积分器输出波形 的平均值,它同样与?θ有关,这样,我 们就可以利用异或门来进行相位到电压 ?θ 的转换,构成相位检出电路。于是经积 图3 分器积分后的平均值(直流分量)为: U U=Vdd*?θ/π (1) Vcc 不同的?θ,有不同的直流分量Vd 。 ?θ与V 的关系可用图4来描述。 从图中可知,两者呈简单线形关 1/2Vcc 系: Ud = Kd *?θ (2) 1/2ππ?θ Kd 为鉴相灵敏度图4 F O o U K dt d =θV PD LPF VCO Ui Uo V A B F __F = A B + A B F B A

2. 边沿触发鉴相器 前已述及,异或门相位比较器在使用时要求两个作比较的信号必须是占空比为50%的波形,这就给应用带来了一些不便。而边沿触发鉴相器是通过比较两输入信号的上跳边沿(或下跳边沿)来对信号进行鉴相,对输入信号的占空比不作要求。 二. 压控振荡器(VCO ) 压控振荡器是振荡频率ω0受控制电压U F (t )控制的振荡器,即是一种电压——频率变换器。VCO 的特性可以用瞬时频率ω0(t )与控制电压U F (t )之间的关系曲线来表示。未加控制电压时(但不能认为就是控制直流电压为0,因控制端电压应是直流电压和控制电压的叠加),VCO 的振荡频率,称为自由振荡频率ωom ,或中心频率,在VCO 线性控制范围内,其瞬时角频率可表示为: ωo (t )= ωom + K 0U F (t ) 式中,K 0——VCO 控制特性曲线的斜率,常称为VCO 的控制灵敏度,或称压控灵敏度。 三. 环路滤波器 这里仅讨论无源比例积分滤波器如图5。 其传递函数为: 1 )(1 )()()(212+++== τττs s s U s U s K i O F 式中:τ1 =R1C τ2 = R2 C 图5 四. 锁相环的相位模型及传输函数 图6 图6为锁相环的相位模型。要注意一点,锁相环是一个相位反馈系统,在环路中流通的是相位,而不是电压。因此研究锁相环的相位模型就可得环路的完整性能。 由图6可知: R1 0640 V Kd KF(s)Ko/s i o e A -+

相关主题
文本预览
相关文档 最新文档