最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

视频信号发生器设计方案

日期:2021-04-21  类别:最新范文  编辑:一流范文网  【下载本文Word版

视频信号发生器设计方案 本文关键词:设计方案,信号发生器,视频

视频信号发生器设计方案 本文简介:视频信号发生器设计方案(1)感谢到访我的主页:http://www.jsfw8.com/hechaoscut(文档西游)本文档格式为WORD,若不是word文档,则说明不是原文档。若图片过大,下载后拉小即可。在光电测量系统中,需要图像处理器进行图像采集、处理。目前检测图像处理器的信号发生器多是标准的

视频信号发生器设计方案 本文内容:

视频信号发生器设计方案

(1)

感谢到访我的主页:http://www.jsfw8.com/hechaoscut(文档西游)

本文档格式为WORD,若不是word文档,则说明不是原文档。

若图片过大,下载后拉小即可。

在光电测量系统中,需要图像处理器进行图像采集、处理。目前检测图像处理器的信号发生器多是标准的模拟视频输出,如文献提出的模拟视频发生器,有的虽然能产生数字视频但内容是固定的,如果对内容进行更改则需要对数字视频信号发生器重新编程以达到要求,比较麻烦,不能满足日益复杂的要求。因此灵活改变视频内容的数字视频信号发生器的研制变得十分迫切。本文提出一种数字视频信号发生器的设计方法,此方法可以同时得到LVDS和CamerLink制式的视频,供数字化图像处理器检测使用。本文提出的设计方法除可以脱离计算机独立使用外,如果想实时更改信号发生器输出视频的各项参数,无需重新改写程序,只需把该信号发生器通过串口连接到计算机上,即可通过人机交互的方式对视频中的目标灰度、背景灰度,目标大小、目标运动速度进行更改。此外目标的背景还可以从板卡上的SDRAM中选取。与以往的视频信号发生器相比,本文提出的信号发生器除能产生多种数字化视频外,还能灵活更改所产生的视频各项参数,因此具有一定应用价值。

1

硬件组成

数字视频发生器主要卣FPGA模块、单片机模块、串行通信模块、TTL转L,VDS模块、FTL转CamerL,ink模块、SDRAM模块组成,整个系统框图如图1所示。

1.1

工作原理

数字式视频信号主要由行同步、帧同步、像素时钟、图像数据组成。其中行同步决定一行的起始位置,帧同步决定一帧图像的起始位置,像素时钟决定一行有多少列图像数据。根据数字图像的组成,可以看出如果想要生成一幅数字图像,必须包含上述要素。其行帧信号同图像的关系如图2所示,其中VSYN表示帧同步信号,HSYN表示行同步信号。

其中图像的采集是从行同步上升沿开始后,按像素时钟采集的。

本文根据数字视频产生所需的各要素进行信号发生器的设计。主要通过FPGA产生行同步信号、帧同步信号、像素时钟;通过单片机+串口通信模块实现目标参数的更改,并把更改后的参数传递给FPGA,供FPGA产生相应运动的视频信号;通过视频制式转换模块把FPGA生成的视频数据及视频控制信号转换成LVDS和CamerLink制式的数字视频信号。

2

FPGA控制模块

FPGA具有高集成度、高可靠性以及开发工具智能化等特点,目前逐步成为复杂数字电路设计的理想首选。此外FPGA可以通过编程实现硬件的逻辑功能,大大减少了硬件设计的复杂程度。因此本文以FPGA为核心器件产生视频信号,这里选用ALTERA公司的SycloncII系列的EP2C8

F25618N,采用VHDL语言编程生成与数字视频有关的各个信号,与单片机通信接收视频修改参数的模块及得到SDRAM内部图像的模块。其结构框图如图3所示。

信号发生器上电后,FPGA通过与单片机通信的模块得到初始视频各项参数,根据参数进行目标大小、目标灰度、目标运动速度、背景灰度的设置,然后根据各项设置产生视频数据,FPGA帧同步模块、行同步模块、像素时钟模块分别产生帧同步、行同步、像素时钟,图像数据按以上控制信号从FPGA中发送出去。

在本文中FPGA各功能模块根据基准时钟生成帧同步、行同步、像素时钟。这里以50M时钟为基准时钟信号,根据图像处理平台对输入信号的要求,设计的帧同步高电平占33ms,低电平占1.2ms,行同步高电平占35

μm,低电平占8.4μm。这里把50M基准时钟输入像素时钟模块经过锁相后依然以50M的时钟频率输出,作为像素时钟。由于一行较多,可在程序中进行限位,控制每行像素数。像素的产生主要有两种方式,一种是通过与单片机通信得到目标像素灰度及背景像素灰度,根据这两种灰度产生像素数据。另一种方式是通过从连接在FPGA上的SDRAM内读出图像作为背景,从与单片机通信得到目标灰度,共同形成像素数据。

2.1

单片机控制模块及通信模块

在本设计中单片机作为通信管理芯片。它主要实现与计算机的通信,更改信号发生器所产生信号的各个参数,把各个参数经过整合送给FPGA,以便FPGA根据参数控制目标的运动速度、目标大小、目标灰度及背景灰度。为了保证信号发生器能够方便地和计算连接,实现人机交互,实时更改产生的视频信号,并且从通信稳定可靠出发,这里采用RS232通信接口。但是因为计算机每次发的数据较多,这里没有直接应用电平转换芯片把计算机和单片机的串口连在一起,而是通过一片16C650把电平转换芯片和单片机连在一起,这样的好处在于16C650内部具有32字节的FIFO,可起到数据缓存的作用,使单片机能够稳定可靠地接收数据。

2.2

视频制式转换模块

因为FPGA产生的视频信号为TTL电平,而目前数字视频信号以LVDS制式和CamerLink制式为主,因此需要进行电平转换。这里主要采用把FPGA产生的TTL电平的数字视频信号接入SN75LVDS387得到LVDS制式的视频信号,同时可把该TTL数字信号接入DS90CR285得到CamerLink制式信号。

3

软件设计

本文软件设计主要对单片机和FPGA进行编程。其中对单片机编程主要应用C语言进行编程,对FPGA主要应用VHDL语言编写。其中单片机程序框图如图4所示。FPGA程序流程框图如图5所示。

4

结论

本文介绍了一种基于FPGA的数字视频信号发生器,具有一定应用价值。

欢迎到访:http://www.jsfw8.com/mydoc-2194684-1.html

您还在到处查找电子电路设计?电子电路论文?方案吗?在这里可以找到http://www.jsfw8.com/hechaoscut,更多资源或疑问查看可站内联系

免费阅读西游文档:ADI发布支持赛灵思7系列的数模转换用FMC子卡

基于FPGA

NiosII的MPEG-4视频播放器

赛灵思增强型实时视频引擎加速新代视频处理设备投产

BBC

RD采用赛灵思FPGA设计全新摄相机后背

赛灵思显示目标设计平台加速超高分辨率

4K2K

显示器开发

基于CPLD的线阵CCD数据采集系统的开发

视频

赛灵思7系列AMS技术在Embedded

World

2012上的演示

视频

Virtex-7

X690T

GTH收发器性能演示

FPGA方案:SoC数字显示系统

基于FPGA和DSP的高速图像处理系统

基于FPGA的OLED真彩色显示的设计方案

本文档若侵害你在权益,请留言或者站内联系。

篇2:函数信号发生器课程设计报告

函数信号发生器课程设计报告 本文关键词:函数,课程设计,信号发生器,报告

函数信号发生器课程设计报告 本文简介:课程设计报告书专用纸淮海工学院课程设计报告书课程名称:电子技术课程设计题目:函数信号发生器学院:电子工程学院学期:2012-2013-2专业班级:通信工程111姓名:彭孟瑶学号:2011120688评语:成绩:签名:日期:函数信号发生器1.引言在人们认识自然、改造自然的过程中,经常需要对各种各样的电

函数信号发生器课程设计报告 本文内容:

课程设计报告书

课程名称:

电子技术课程设计

目:

函数信号发生器

院:

电子工程学院

期:

2012-2013-2

专业班级:

通信工程111

名:

彭孟瑶

号:

2011120688

评语:

成绩:

签名:

日期:

函数信号发生器

1.引言

在人们认识自然、改造自然的过程中,经常需要对各种各样的电子信号进行测量,因而如何根据被测量电子信号的不同特征和测量要求,灵活、快速的被测电路提供所需要的已知信号(各种波形),然后用其它仪表测量感兴趣的参数。可见信号源在各种实验应用和实验测试处理中,它不是测量仪器,而是根据使用者的要求,作为激励源,仿真各种测试信号,提供给被测电路,以满足测量需要。

波形发生器就是信号源的一种,能够给被测电路提供所需要的波形,传统的波形发生器多采用模拟电子技术,由分立元件或模拟集成电路构成,其电路结构复杂,不能根据实际需要灵活扩展。随着微电子技术的发展,运用单片机技术,通过巧妙的软件设计和简易的硬件电路,产生数字式的正弦波、方波、三角波、锯齿等幅值可调的信号。与现有各类型波形发生器比较而言,产生的数字信号干扰小,输出稳定,可靠性高,特别是操作简单方便。

2.设计要求

设计一个能够输出正弦波、三角波和矩形波的信号源电路,电路形式自行选择。输出信号的频率可通过开关进行设定,具体要求如下:

输出信号的频率范围为1000~2000Hz,步进为50Hz。

要求输出信号无明显失真,特别是正弦波信号。

图1

函数信号发生器方框图

3.函数信号发生器的方案

3.1

方案一

由555定时器组成的多谐振荡器产生方波,然后由积分电路将方波转化为三角波,最后用低通滤波器将方波转化为正弦波。

低通滤波器

积分电路

555多谐振荡器

图2

方波、三角波、正弦波、信号发生器的原理框图

但这样的输出将造成负载的输出正弦波波形变形,因为负载的变动将拉动波形的崎变。

3.2方案二

先通过RC正弦波振荡电路产生正弦波,再通过电压比较器产生方波,最后通过积分电路形成三角波。

积分电路

电压比较器

RC正弦波振荡电路

图3

正弦波、方波、三角波信号发生器的原理框图

此电路具有良好的正弦波和方波信号。但经过积分器电路产生的同步三角波信号,存在难度。原因是积分器电路的积分时间常数是不变的,而随着方波信号频率的改变,积分电路输出的三角波幅度同时改变。若要保持三角波幅度不变,需同时改变积分时间常数的大小。

3.3方案三

8038集成函数发生器是一种多用途的波形发生器,可以直接用来产生正弦波、方波、三角波和锯齿波。

图4

利用ICL8038芯片构成8038集成函数发生器

综上所述,我们选择方案二。

4.单元电路的设计

4.1正弦波发生器

RC振荡电路由RC串并联选频网络和反向相放大电路组成,图中RC选频网络形成负反馈电路。

图5-1

正弦波波发生电路

在图5-1电路中,当R1

=

R2

=

R,C1=

C2

=

C时

(5-1)

当频率时,,根据幅度平衡条件,只有

电路才能维持振荡。

令C=100Nf,R4<1.592千欧。

图5-1-1

正弦波仿真图

由图可知

Umax=6v,f=1.041KHZ。

4.2方波发生器

电压比较器由比较器741的反相输入端接电压构成,在实用电路中为了满足负载需要,常在集成运算的输出端加稳压管限幅电路。限幅电路的作用是把输出信号幅度限定在一定的范围内,亦即当输入电压超过或低于某一参考值后,输出电压将被限制在某一电平(称作限幅电平),且不随输入电压变化。

图5-2

方波发生电路

经过阈值UTH1时,输出电平由高电平(Uz)跳变为低电平(-Uz)。当输入电压由高向低变化,经过阈值UTH2时,输出电平由低电平(-Uz)跳变为高电平(Uz)。

UTH1=R5*UZ/(R5+R6)

(5-2)

UTH2=-R5*UZ/(R5+R6)

+

(5-3)

图5-2-1

方波仿真图

由图可知Umax=5.2V,f=1.041KHZ。

4.3三角波的设计

三角波的产生是由积分电路实现的,积分电路将方波转换成三角波。积分电路中,由于集成运放的反相输入端“虚地”,又由于“虚断”,运放反相输入端的电流为零。

图5-3

三角波发生器

积分器元件参数计算如下:

Ui/R=-C*dU0/dt

(5-4)

令C=100nf,R用可变电阻R8表示。

图5-3-1

三角波仿真图

由图可知,Umax=8v,f=1.044KHZ。

5.总电路图

图6

总电路图

5.1正弦波-方波

图6-1

正弦-方波仿真图

5.2方波-三角波

图6-2

方波-三角波仿真图

5.3总波形

图6-3

总波形仿真图

第8

共9页

6.收获与体会

在这次设计过程中我对抽象的理论有了进一步的认识。通过这次课程设计,我了解了常用元件的识别和测试;熟悉了常用的仪器仪表;了解了电路的连接方法;以及如何提高电路的性能等等。虽然这次实验使得我纠结了近三天,但收获的确很多。

在这次实验中,总结了很多感触体会,我们不能盲目的图快,一定要在心底有个具体的谱然后下手去设计,这样能让我们少走弯路,更加节省时间。在实验过程中,我也遇到了不少的问题,如波形失真或者完全没有波形这样的问题。在老师和同学的帮助下,自己的总结思索下,把问题一一解决。实验中暴露出我们在理论学习中所存在的问题,有些理论知识还处于懵懂状态,这次实验让我对过去未理解的很多知识有了明了的认识。这次课程设计让我体会到了在接好电路后测试出波形的喜悦与如重释负的轻松。

此课程的设计,真的让我认识到了实践能力的的重要性与真实性。这能让我们很好的加深对不知道的理论知识的理解,同时也巩固了以前知道的知识。明白老师为什么要求我们做好这个课程设计的原因。这次课程设计让我意识到运用所学的知识去解决实际的问题的重要性,我们学理工科的同学应更多的锻炼提高我们的动手能力。

7.参考文献

[1]

冯军.电子线路基础[M].北京:高等教育出版社,1979.

[2]

康华光.电子技术基础[M].浙江:华中工学院电子学院高等教育出版,1997.

[3]

谢自美.电子线路设计[M].江苏:华中科技大学出版社,1990.

[4]

程开明.模拟电子技术[M].四川:重庆大学出版社,1992.

[5]

劳五一.模拟电子电路分析、设计与仿真[M].西安:西安电子科技大学出版社,2007.

[6]

劳五.电子电路分析与设计[M].北京:北京清华大学出版,2007.

第9

共9页

篇3:北京邮电大学课设基于MSP430的简单信号发生器的设计

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文关键词:北京,邮电大学,信号发生器,简单,设计

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文简介:基于MSP430的信号发生器设计报告学院:电子工程学院班级:2013211212组员:唐卓浩(2012211069)王旭东(2013211134)李务雨(2013211138)指导老师:尹露课程设计报告——基于MSP430的信号发生器的设计学院:电子工程学院班级:2013211212小组成员:唐卓浩

北京邮电大学课设基于MSP430的简单信号发生器的设计 本文内容:

基于MSP430的信号发生器

设计报告

学院:电子工程学院

班级:2013211212

组员:唐卓浩(2012211069)

王旭东(2013211134)

李务雨(2013211138)

指导老师:尹露

课程设计报告——基于MSP430的信号发生器的设计

学院:电子工程学院班级

:2013211212

小组成员:

唐卓浩(2012211069)

王旭东(2013211134)李务雨(2013211138)

一、摘要

信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。本设计介绍一款基于MSP430G2553

单片机的信号发生器。该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。本次需要完成的任务是以MSP430

LaunchPad的单片机为控制核心、DAC模块作为转换与按键电路作为输入构成的一种电子产品。MSP430

LaunchPad单片机为控制核心,能实时的进行控制;按键输入调整输出状态,DAC0832将单片机输出的数字信号转化为模拟量,经运放放大后,在示波器上输出。在本次程序设计中充分利用了单片机内部资源,涉及到了中断系统、函数调用等。

关键字:信号发生器

MSP430

单片机

数模转换

二、设计要求

以msp430单片机为核心,通过一个DA(数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。提供芯片:msp430G2553、DAC0832、REF102、LM384、OP07。参考框图如下:

图1

硬件功能框图

1、基本要求

(1)

供电电压

VDD=

5V~12V;(√)

(2)

信号频率:5~500Hz(可调);(√)

(3)

输出信号电压可调范围:≥0.5*VDD,直流偏移可调:≥0.5*VDD;(√)

(4)

完成输出信号切换;(√)

(5)

方波占空比:平滑可调20%~80%;(√)

(6)

通带内正弦波峰峰值稳定度误差:≤±10%(负载1K)。(√)

2、发挥部分

(1)

信号频率:5~2000Hz(可调);(√)

(2)

多通道同时输出同频正弦波,方波,三角波。(频率可调);

(3)

输出频率与幅度可调的正弦波与余弦波,相位误差≤±5度;

(4)

自由发挥。

三、实验器材

MSP430G2553单片机(Texas

Instrument);DAC0832模数转换芯片;REF102高精度电压基准;OP07运算放大器;阻值不同的电阻及电位器若干;电容若干;导线若干。

1、

MSP430G2553单片机

TI的MSP430G2系列Launchpad开发板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB

的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP插座,可支持多达20个引脚,从而使MSP430

Value

Line器件能够简便地插入LaunchPad电路板中。此外,其还可提供板上Flash仿真工具,以直接连接至PC

轻松进行编程、调试和评估。此外,它还提供了从MSP430G2xx器件到主机PC或相连目标板的9600波特率的UART串行连接。

MSP430G2系列Launchpad开发板的特性:

(1)USB

调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART

串行通信速度;

(2)支持所有采用PDIP14或PDIP20封装的MSP430G2xx和MSP430F20xx器件;

(3)两个按钮可实现用户反馈和芯片复位;

(4)器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板。

(5)由此易知,MSP430单片机将用于系统的控制部分。

2、

DAC0832模数转换芯片

DAC模块主要由DAC0832和OPA227PA运算放大器组成。DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。其主要参数如下:

(1)分辨率为8位;

(2)电流稳定时间1us;

(3)可单缓冲、双缓冲或直接数字输入;

(4)只需在满量程下调整其线性度;

(5)单一电源供电(+5V~+15V);

(6)低功耗,20mW

其引脚功能如下:

(1)D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

(2)ILE:数据锁存允许控制信号输入线,高电平有效;

(3)CS:片选信号输入线(选通数据锁存器),低电平有效;

(4)WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变化换,LE1的负跳变时将输入数据锁存;

(5)XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

(6)WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

(7)IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;

(8)IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

(9)Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;

(10)Vcc:电源输入端,Vcc的范围为+5V~+15V;

(11)VREF:基准电压输入线,VREF的范围为-10V~+10V;

(12)AGND:模拟信号地;

(13)DGND:数字信号地

3、

REF102高精度电压基准

REF102是高精度10V电压基准集成电路。由于REF102无需外加恒温装置,因而功耗低、升温快、稳定性好、噪声低。REF102的输出电压几乎不随供电电源电压及负载变化。通过调整外接电阻,输出电压的稳定性及温度漂移可降至最校11.4V至36V的单电源供电电压及优异的全面性能使REF102成为仪器、A/D、D/A及高精度直流电源应用的理想选择。

REF102的特点:

(1)高精度输出:+10V

0.0025V

(2)超低温度漂移:≤2.5ppm/℃

(3)高稳定性:5ppm/1000小时(典型值)

(4)高负载调整率:≤1ppm/V,≤10ppm/mA

(5)宽供电电压范围:11.4VDC至36VDC

(6)低噪声

(7)低静态电流:≤1.4Ma

REF102的引脚:(2)为芯片电源脚,电压范围是11.4V~36V;(4)为公共引脚;(5)为外接调整电阻脚,调整输出电压稳定度及温度漂移;(6)为输出引脚;(8)为输出噪声衰减。

4、

OP07运算放大器

OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。

OP07芯片引脚功能说明:1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚

6为输出,7接电源。

四、硬件电路设计

1、

整体设计思路

方案一:控制部分由MSP430G2553实现,波形产生采用单片压控函数发生器(MAX038等),可同时产生频率可控可变的正弦波、三角波、方波。

优缺点:简单易行,采用专用芯片,系统体积大大减小;但频率步进的步长很难控制,并且整个设计中MSP430G2553仅完成简单的控制功能,资源没有充分利用。

方案二:由MSP430G2553实现对专门的DDS芯片(如AD9850)的控制,产生各种波形。

优缺点:此方案产生波形的频率稳定度高,易于程控。但DDS芯片价格高,系统成本高。

方案三:由MSP430G2553结合DAC0832实现各种波形的产生。

优缺点:此方案可以充分利用MSP430G2553上的资源,降低系统成本,但是产生波形频率较低。

综上,方案三充分利用MSP430G2553的资源,外围电路简单、系统成本较低,可以满足信号发生器的要求,所以最终采用方案三。

2、

硬件控制模块

这次试验共有三个按键输入,分别作为切换波形,加频,减频。

一个滑动变阻器作为占空比的调节,一个作为幅度的调节,一个作为直流偏置的调节。按键直接采用分压法给一个高电位,当按下去的时候相当于接地也就输出了低电平。占空比的调节在于分压法,让滑动变阻器所占电压在0~2.5伏,从而输给芯片产生相应的占空比,再输出。

3、

DAC0832的模块

其八位数据输入接MSP430的八位数据输出,通过Iout1端口输出。使能端与430相连,电源接12V。Iout2接地,f不接。

4、

放大模块

采用了反向放大电路,电源输入电压是12伏,放大了5倍左右。

同时在放大电路前并联一个滑动变阻器100K,通过它来调节整个DAC对应的输出负载电阻,也就可以达到改变电压的幅度的目的。

效果如下(由于该方波是2KHz的方波,频率较高因此边沿看上去不垂直):

5、

直流偏置

采用反向加法电路通过改变直流的接入电阻调节直流电压的大小。图如下,u1为放大之后的输入,u2为-12伏的电压。R1,3,6都是5K的电阻,R2位100k的电位器。则Uout1=12*5/R2-U1,这就达到了直流偏置的效果。

效果见下图:

五、

软件程序设计

1、

设计指标与功能

(1)波形产生和切换。正弦波、三角波和方波依次切换,采样点均为100个。

(2)频率调节。从5Hz到2000Hz可调,步进5Hz,一共400个有效频率点。

(3)占空比调节。从20%到83%平滑可调,使用ADC10连续采集滑动变阻输出电压实现。

2、

软件模块介绍

(1)

变量及宏定义

#define

SWITCH_SIG_TYPE(BIT0)

//P1.0

#define

ADD_FREQ(BIT1)

//P1.1

#define

SUB_FREQ(BIT2)

//P1.2

#define

DAC_WR(BIT3)

//P1.3

#define

ADC10_IN_PORT(BIT4)

//P1.4

#define

P1_IN_PORTS

~(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ

+

ADC10_IN_PORT)

#define

P1_OUT_PORTSDAC_WR

//

3:DAC

WR

#define

P1_INTERRUPT

(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ)

#define

P2_OUT_PORTS

(0xff)

//

DAC

data

in

#define

TOTAL_SAMPLING_POINTS100

#define

MAX_FREQ_STEPS400

#define

ENABLE_WR_PORTP1OUT

//当前的波形,0表示正弦波,1是三角波,2是方波

inttccr0_now;

//表示当前的计数初值

uintccr0_idx;

//表示当前计数初值在表中的索引号

ucharpoint_now;

//表示现在采用点的索引值

intduty_circle;

//表示当前的方波高电平的点数,用于表示占空比。

const

long

tccr0_table[MAX_FREQ_STEPS]={32000,.,78,75

};

//5-2000Hz每隔5Hz频率对应的计数器初值表,一个400个频点。

const

uchar

sin_data[TOTAL_SAMPLING_POINTS]={.};

//正弦值表,100点。

const

uchar

tria_data[TOTAL_SAMPLING_POINTS]={.};

//三角波值表,100点。

(2)

基本时钟系统

MSP430x2xx家族的单片机的基本时钟系统模块如下图所示:

MSP430有四个时钟源:LFXT1CLK、XT2CLK、DCOCLK和VLOVLK,系统时钟使用BCSCTL1寄存器设置。下面的初始化代码将系统的时钟时钟源设置为16MHz,DCO的频率设置为16MHz。

void

init_DCO(){

BCSCTL1

=

CALBC1_16MHZ;

DCOCTL

=

CALDCO_16MHZ;

}

上述的每一个时钟源都可以驱动时钟信号电路产生周期时钟信号,一共有三种独立的时钟信号,分别是MCLK、SMCLK和ACLK,其时钟源可以任意指定。这些时钟由寄存器BCSCTL2设置。

BCSCTL2

=

SELM_1

+

DIVM_0;

//

SELMx位置SELM_1,选择MCLK的时钟源为DCOCLK,DIVM_0分频比为1

BCSCTL2

//

SELS位为0表示将SMCLK的时钟源设置为DCOCLK

(3)

定时器A

定时器A是一个16位的计时器,有三种计数模式,可配置任意时钟源驱动,多种capture/compares模式和寄存器。

定时器A的工作模式如下表所示

MCx

模式

工作方式

00

Stop

停止计时

01

Up

mode

从0到TACCR0循环计数

10

Continous

mode

从0到0FFFFH循环计数

11

Up/down

mode

从0计时到TACCR0再回到0循环

定时器的计数模式和时钟源的选择由寄存器TACTL设置。

定时器的中断的产生主要依赖capture/compare寄存器的设置。MSP430x2xx家族一共有三套独立的capture/compare寄存器,可以独立产生中断。

本程序使用的是连续计数模式,计数和中断产生方式如下图所示。本程序只是用了capture/compare寄存器TACCR0和TACTL0产生中断。

void

init_timer_A0(void){

TACTL

|=

TASSEL_2

+

MC_2;

//

TASSELx置TASSEL_2选择SMCLK作为时钟源,

//

MC_2设置技术模式为连续模式

TACCR0

=

tccr0_now;//设置捕获/比较寄存器0的初值

TACCTL0

|=

CCIE;//

捕获/比较寄存器0的中断使能

}

(4)

单片机ADC10

MSP430的ADC是一个十位的模数转换模块,转换出的数字范围为0~1023。转换值的计算公式为:

ADC10一共有两大类工作方式,第一种是直接转换方式,该模式主要的特点是转换后的数据直接存放在ADC10MEM寄存器中。第二种是数据传输方式,主要特点是会将数据自动存放在内存中用户定义好数组中。

在直接转换方式中又有四种模式:

CONSEGx

模式

工作方式

00

单通道单次转换

一个通道输入,只转换一次,下一次转换的触发需要用户手动设置。

01

多通道顺序转换

多通道输入,每个通道依次转换一次,下一次转换的触发需要用户手动设置。

10

单通道循环转换

一个通道输入,下一次转换的触发自动触发。

11

多通道顺序循环

多个通道输入,每个通道依次转换,下一次转换自动触发。

ADC10的中断可选择在数据在ADC10MEM里准备好后触发。

本程序使用的是单通道单次转换,并且不设置ADC10中断,而是在主函数的while(1)循环中手动处理采集数据的时序。之所以不采用中断模式是因为在MSP430中默认不能中断嵌套,当ADC10中断进入时,定时器中断就无法进入,从而影响定时器的精度,另外如果开启中断嵌套,那么中断处理将会更复杂,因此权衡考虑后选择该工作方式。这种方式下ADC10在主程序中执行转换和处理,而定时器中断可以按时进入,保证了定时器的精度。转换的流程如下图所示:

ADC10的参考电平可以有多种选择,如下所示:

本程序选择的是第二种参考电平设置。其中VREF+是ADC10内置的参考电平,将ADC10CTL0寄存器的REF2_5V位置1,表示该电平为2.5V。Vss是MSP430的20号引脚,将其接地,表示最低参考电平为0。因此转换值的计算公式为NADC=1023*Vin/2.5。

初始化函数如下:

void

init_ADC10(void){

ADC10CTL1

|=

INCH_4;

//

A4通道,P1.4输入模拟值。

ADC10CTL1

|=

SHS_0;

//

Sample-and-hold

source

select

ADC10SC

ADC10CTL1

|=

ADC10SSEL_3;//

时钟源为SMCLK

ADC10CTL1

//

数据存储格式,表示使用ADC10MEM的低十位存储数据

ADC10CTL1

|=

CONSEQ_0;//

单通道单转换模式

ADC10AE0

=

ADC10_IN_PORT;//P1.4输入模拟值

ADC10CTL0

//

屏蔽中断

ADC10CTL0

|=

SREF_1

+

ADC10SHT_0

+

REF2_5V

+

REFON;

//

VR+

=

2.5V,VR-

=

Vss

=

0

//REFON开启内部参考电平

ADC10CTL0

//

REFOUT位置1会将参考电压输出到P1.3和P1.4上,不需要因此置0.

ADC10CTL0

|=

ADC10ON;//打开ADC10

}

主程序循环如下,采集数据到占空比的转换算法为右移4位再加20:

while(1){

ADC10CTL0

//关闭采样使能

while(ADC10CTL1

//检测是否忙

ADC10CTL0

|=

ENC

+

ADC10SC;//打开采样使能,开始转换

while(ADC10CTL1

//检测是否忙

int

adc_data

=

ADC10MEM;//读取数据

duty_circle

=(adc_data

>>4)+20;

//占空比限制在

20(20%)~83(83%)之间

//采集到的数据是0~1023

//右移四位就是0~63

//加20就是20~83

//总采样点数是100点

//占空比就是20/100=20%

~

83/100=83%

之间

}

(5)

端口I/O与中断

MSP430有P1、P2一共十六个通用IO口。其功能分配如下

端口

功能

I/O方向

P2.0

P2.7

输出8位数据到DAC

输出

P1.0

按键中断,切换波形

输入

P1.1

按键中断,增加频率

输入

P1.2

按键中断,减小频率

输入

P1.3

DAC的WR信号

输出

P1.4

ADC10的模拟输入口

输入

主要初始化端口方向、功能以及中断,程序如下:

void

init_port_io(void){

P2DIR=

P2_OUT_PORTS;//

设置输出端口P2.0~P2.7

P2REN=0x00;//

不使用上/下拉电阻

P2SEL=0x00;//

端口的功能为IO

P2SEL2=0x00;//

端口的功能为IO

P1DIR//

P1.0

P1.1

p1.2

p1.4输入

P1DIR|=

P1_OUT_PORTS;//

P1.3输出给DAC

WR

P1REN=0x00;

P1SEL=0x00;

P1SEL2=0x00;

}

void

init_port_interrupt(void){

P1IES|=

P1_INTERRUPT;//相应位置1表示下降沿触发

P1IE|=

P1_INTERRUPT;//输入位中断使能

P1IFG//清除标志位

}

五、功能实现

1、

波形输出及切换

波形的输出主要靠定时器周期性触发中断,然后将波形值数组中的值依次循环写到P2上。流程图如下:

波形切换靠按键中断以及改变波形类型标志变量curr_signal_type实现,流程图如下:

获得如下结果:

2、

频率调节

波形的频率调节通过改变计时器初值TACCR0来实现,所需的频率计算公式为

波频率

=

CPU时钟频率/(采样点数*定时器初值)

流程图如下:

为了能够使得频率可达到2000Hz,需要适当减小采样点数。在没有实现最大2000Hz时,采样电视为200点,将点数减少到100点,并适当减小DAC的WR信号的宽度,以达到在更高速的情况下能够将数据写入DAC。

结果如下。

产生5Hz的正弦波:

产生2.145KHz的正弦波

3、

占空比调节

占空比的调节主要靠ADC10采集电位器输入电压并按照一定的算法算出高电平持续的点数duty_circle来表示占空比。

采集转换的流程图如下

相应的产生方波的逻辑为:

20%占空比:

80%占空比:

六、问题及解决方案

1、

三角波和方波没有波形

最开始三角波的每一个采样点的值是由程序计算出来的,程序如下所示:

case

1:

//triangle

if

(point_now

#define

SWITCH_SIG_TYPE(BIT0)

//P1.0

#define

ADD_FREQ(BIT1)

//P1.1

#define

SUB_FREQ(BIT2)

//P1.2

#define

DAC_WR(BIT3)

//P1.3

#define

ADC10_IN_PORT(BIT4)

//P1.4

#define

P1_IN_PORTS

~(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ

+

ADC10_IN_PORT)

#define

P1_OUT_PORTSDAC_WR

//

3:DAC

WR

#define

P1_INTERRUPT

(SWITCH_SIG_TYPE

+

ADD_FREQ

+

SUB_FREQ)

#define

P2_OUT_PORTS

(0xff)

//

DAC

data

in

#define

TOTAL_SAMPLING_POINTS100

#define

MAX_FREQ_STEPS400

#define

ENABLE_WR_PORTP1OUT

inttccr0_now;

uintccr0_idx;

ucharpoint_now;

intpush_key;

intduty_circle;

const

long

tccr0_table[MAX_FREQ_STEPS]={

32000,16000,10666,8000,6400,5333,4571,4000,3555,3200,2909,2666,2461,2285,2133,2000,1882,1777,1684,1600,1523,1454,1391,1333,1280,1230,1185,1142,1103,1066,1032,1000,969,941,914,888,864,842,820,800,780,761,744,727,711,695,680,666,653,640,627,615,603,592,581,571,561,551,542,533,524,516,507,500,492,484,477,470,463,457,450,444,438,432,426,421,415,410,405,400,395,390,385,380,376,372,367,363,359,355,351,347,344,340,336,333,329,326,323,320,316,313,310,307,304,301,299,296,293,290,288,285,283,280,278,275,273,271,268,266,264,262,260,258,256,253,251,250,248,246,244,242,240,238,237,235,233,231,230,228,226,225,223,222,220,219,217,216,214,213,211,210,209,207,206,205,203,202,201,200,198,197,196,195,193,192,191,190,189,188,187,186,184,183,182,181,180,179,178,177,176,175,174,173,172,172,171,170,169,168,167,166,165,164,164,163,162,161,160,160,159,158,157,156,156,155,154,153,153,152,151,150,150,149,148,148,147,146,146,145,144,144,143,142,142,141,140,140,139,139,138,137,137,136,136,135,135,134,133,133,132,132,131,131,130,130,129,129,128,128,127,126,126,125,125,125,124,124,123,123,122,122,121,121,120,120,119,119,118,118,118,117,117,116,116,115,115,115,114,114,113,113,113,112,112,111,111,111,110,110,109,109,109,108,108,108,107,107,107,106,106,105,105,105,104,104,104,103,103,103,102,102,102,101,101,101,100,100,100,100,99,99,99,98,98,98,97,97,97,96,96,96,96,95,95,95,94,94,94,94,93,93,93,93,92,92,92,91,91,91,91,90,90,90,90,89,89,89,89,88,88,88,88,87,87,87,87,86,86,86,86,86,85,85,85,85,84,84,84,84,83,83,83,83,83,82,82,82,82,82,81,81,81,81,81,80,80,80,78,75};

//

cpu_freq

//

ccr0

=

-----------------------------------

//

sig_freq

total_sampling_points

const

uchar

sin_data[TOTAL_SAMPLING_POINTS]={127,135,143,151,159,167,174,182,189,196,203,209,215,221,226,231,235,239,243,246,249,251,253,254,254,254,254,253,252,250,247,245,241,237,233,228,223,218,212,206,199,192,185,178,171,163,155,147,139,131,123,115,107,99,91,83,76,69,62,55,48,42,36,31,26,21,17,13,9,7,4,2,1,0,0,0,0,1,3,5,8,11,15,19,23,28,33,39,45,51,58,65,72,80,87,95,103,111,119,127};

const

uchar

tria_data[TOTAL_SAMPLING_POINTS]={0,5,10,15,20,26,31,36,41,46,52,57,62,67,72,78,83,88,93,98,104,109,114,119,124,130,135,140,145,150,156,161,166,171,176,182,187,192,197,202,208,213,218,223,228,234,239,244,249,255,255,249,244,239,234,228,223,218,213,208,202,197,192,187,182,176,171,166,161,156,150,145,140,135,130,124,119,114,109,104,98,93,88,83,78,72,67,62,57,52,46,41,36,31,26,20,15,10,5,0};

#pragma

vector

=

TIMER0_A0_VECTOR

__interrupt

void

timer_A0(void){

if(point_now

>=

TOTAL_SAMPLING_POINTS){

point_now

=0;

}

switch(curr_signal_type){

case0:

//

sin;

write_dac(sin_data[point_now]);

break;

case1:

//

triangle

write_dac(tria_data[point_now]);

break;

case2:

//

box

if(point_now

=3){

curr_signal_type

=0;

}

}elseif(push_key

if(ccr0_idx

>=

MAX_FREQ_STEPS){

ccr0_idx

=0;

}

tccr0_now

=

tccr0_table[ccr0_idx];

}elseif(push_key

if(ccr0_idx

>=

MAX_FREQ_STEPS){

ccr0_idx

=

MAX_FREQ_STEPS

-1;

}

tccr0_now

=

tccr0_table[ccr0_idx];

}

P1IFG

//清除标志位

}

void

init_vars(){

curr_signal_type

=0;

point_now

=0;

ccr0_idx

=

MAX_FREQ_STEPS

/2-1;//初始

1kHz

tccr0_now

=

tccr0_table[ccr0_idx];

duty_circle

=

TOTAL_SAMPLING_POINTS

/2;//初始50%

占空比

}

void

init_DCO(){

BCSCTL1=

CALBC1_16MHZ;

DCOCTL=

CALDCO_16MHZ;

BCSCTL2=

SELM_1

+

DIVM_0;

//

select

DCO

as

the

source

of

MCLK

BCSCTL2

//

select

DCO

as

the

source

of

SMCLK

}

void

init_timer_A0(void){

TACTL|=

TASSEL_2

+

MC_2;//

SMCLK

source

and

Mode

continous

TACCR0=

tccr0_now;

TACCTL0

|=

CCIE;//

interrupt

enable

_EINT();

}

void

init_port_io(void){

P2DIR=

P2_OUT_PORTS;//

P2

11111111b

all

out

P2REN=0x00;//

disable

pull

up/down

resistor

P2SEL=0x00;//

io

function

is

selected

P2SEL2

=0x00;

P1DIR

//

P1.0

P1.1

p1.2

p1.4

in

P1DIR

|=

P1_OUT_PORTS;//

P1.3

for

DAC

WR

P1REN=0x00;

P1SEL=0x00;

P1SEL2

=0x00;

}

void

init_port_interrupt(void){

P1IES|=P1_INTERRUPT;//置1,下降沿触发

P1IE|=P1_INTERRUPT;//中断使能

P1IFG//清除标志位

}

void

init_ADC10(void){

ADC10CTL1

|=

INCH_4;//

A4

channel

for

convertion,P1.4

in

ADC10CTL1

|=

SHS_0;

//

Sample-and-hold

source

select

ADC10SC

ADC10CTL1

|=

ADC10SSEL_3;//

SMCLK

16M

ADC10CTL1

//

straght

binary

format

ADC10CTL1

|=

CONSEQ_0;//

Single

channel

single

convertion

ADC10AE0=

ADC10_IN_PORT;//

P1.4

in

ADC10CTL0

//

disable

interrupt

ADC10CTL0

|=

SREF_1

+

ADC10SHT_0

+

REF2_5V

+

REFON;

//

V+

=

2.5V,V-

=

Vss

=

0

ADC10CTL0

//

diasable

refout

to

p1.3

p1.4

ADC10CTL0

|=

ADC10ON;//

enable

adc

}

void

main(void){

WDTCTL

=

WDTPW

|

WDTHOLD;//

Stop

watchdog

timer

init_vars();

init_port_io();

init_port_interrupt();

init_DCO();

init_timer_A0();

init_ADC10();

_bis_SR_register(GIE);//全局中断使能

while(1){

ADC10CTL0

//关闭采样使能

while(ADC10CTL1

//检测是否忙

ADC10CTL0

|=

ENC

+

ADC10SC;//打开采样使能,开始转换

while(ADC10CTL1

//检测是否忙

int

adc_data=

ADC10MEM;//读取数据

duty_circle=(adc_data

>>4)+20;

//占空比限制在

20(20%)~83(83%)之间

//采集到的数据是0~1023

//右移四位就是0~63

//加20就是20~83

//总点数是100点

//占空比就是20/100=20%

~

83/100=83%

之间

}

}

28

/

29

    以上《视频信号发生器设计方案》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»视频信号发生器设计方案
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《视频信号发生器设计方案》有疑问请及时反馈。All Rights Reserved