单片机

在8位单片机中没有16位数的操作指令,所有的int型数据都要通过两个字节分开操作,使用的方法不用,生成的代码也不相同,当然效率也不一样,通过指针对16位数进行操作可以得到高效的代码。

比如通过串行口接收数据,或者从串行的EEPROM中读取的数据,或者从大于8位的A/D读取的数据,由于8位单片机的数据线是8位的,高于8位的数据都要分成两个字节分别读取,然后写入到RAM中去再进行计算,或者把16位的int型数据从RAM中读出再分别把高低字节存到EEPROM或者送到D/A,或者通过串行口发送出去,方法有很多种,下面用多种方法进行实现该操作,这里只演示写入到16位的情况,读取的情况非常相似,不赘述。

(1)使用联合 (union)

typedef union{unsigned int i;unsigned char c[2];}u_int;unsigned char dH = 0x11, dL=0x22;unsigned int d;u_int ud;ud.c[0] = dH;ud.c[1] = dL;d = ud.i;此时d = 0x1122;

(2) 使用移位指令

数据定义与前面相同d = ((unsigned int)dH) 或者d = dH;d d |= dL; // or: d = d | dL; 后者编译的代码可能不是最简的

(3)使用指针

unsigned char *cptr;cptr = (unsigned char*)(&d);cptr[0] = dH;cptr[1] = dL;

(4)强制指针类型转换

*((unsigned char*)(&d)) = dH;*((unsigned char*)(&d)+1) = dL;或((unsigned char*)(&d))[0] = dH;((unsigned char*)(&d))[1] = dL;

这两种方式看似相同但由Keil编译出的代码是不用的,前都有一次加法运算,而后者没有,后者生成的代码更简洁,这种方式与用联合成生的代码是完全一样的。

在这几种方法中第(1)与第(4)的第二种生成的代码是最乘洁的,是推荐使用的,从软件工程的角度出发,推荐使用方法(1),这样没有强制类型转换,没有用到指针,更不容易出错。从书写的代码来讲,第(4)的第二种方法是最好的,代码简洁而且效率最高,但语法有点儿复杂。

转自: 单片机精讲吴鉴鹰

围观 365

单片机执行指令的过程

judy的头像

单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。

计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

1.引言

数字信号处理器是一种适合于实现各种数字信号处理运算的微处理器,具有下列主要结构特点:
(1)采用改进型哈佛(Harvard)结构,具有独立的程序总线和数据总线,可同时访问指令和数据空间,允许实际在程序存储器和数据存储器之间进行传输;
(2)支持流水线处理,处理器对每条指令的操作分为取指、译码、执行等几个阶段,在某一时刻同时对若干条指令进行不同阶段的处理;
(3)片内含有专门的硬件乘法器,使乘法可以在单周期内完成;
(4)特殊的指令结构和寻址方式,满足数字信号处理FFT、卷积等运算要求;
(5)快速的指令周期,能够在每秒钟内处理数以千万次乃至数亿次定点或浮点运算;
(6)大多设置了单独的DMA总线及其控制器,可以在基本不影响数字信号处理速度的情况下进行高速的并行数据传送。

由一片DSP加上存储器、模/数转换单元和外设接口就可以构成一个完整的控制系统,但这种方案要达到高速实时控制是不可行的。因为一个实时控制系统一般需要完成数据采集、模/数转换、分析计算、数/模转换、实时过程控制以及显示等任务,单靠一片DSP来完成这些工作势必会大大延长系统对控制对象的控制周期,从而影响整个系统的性能。所以我们添加一个CPU,负责数据采集、模/数转换、过程控制以及人机接口等任务,使DSP专注于系统控制算法的实现,充分利用它的高速数据处理能力。从性能价格比的角度出发,这个CPU采用8位的51系列。这时,两个CPU之间的数据共享就成了一个重要的问题。

采用双口RAM(简称DRAM)是解决CPU之间的数据共享的有效办法。与串行通信相比,采用双口RAM不仅数据传输速度高,而且抗干扰性能好。在笔者实验室研制的电力有源滤波器中,选用了TI公司的第三代DSP芯片TMS320C32和51系列单片机89C52作为控制系统的CPU。两个CPU之间通过双口RAM CY7C133完成数据交换。但在实际使用过程中遇到了89C52 与双口RAM总线宽度不匹配的问题,需要进行接口电路的设计。

2.双口RAM CY7C133的内部结构和功能

CY7C133是CYPRESS公司研制的高速2K×16CMOS双端口静态RAM,具有两套相互独立、完全对称的地址总线、数据总线和控制总线,采用68脚 PLCC封装形式,最大访问时间可以为25/35/55 ns。采用主从模式可以方便地将数据总线扩展成32位或更宽。各引脚的功能如表1所示,内部功能框图如图1所示。

DSP与单片机的一种高速通信实现方法

  
CY7C133允许两个CPU同时读取任何存储单元(包括同时读同一地址单元),但不允许同时写或一读一写同一地址单元,否则就会发生错误。双口RAM中引入了仲裁逻辑(忙逻辑)电路来解决这个问题:当左右两端口同时写入或一读一写同一地址单元时,先稳定的地址端口通过仲裁逻辑电路优先读写,同时内部电路使另一个端口的信号有效,并在内部禁止对方访问,直到本端口操作结束。BUSY信号可以作为中断源指明本次操作非法。在主从模式中,主芯片的信号接上拉电阻作为输出,从芯片的信号作为写禁止输入。

3.DSP、单片机与双口RAM之间的接口电路

89C52的地址总线宽度为16位,数据总线为8位;TMS320C32的数据总线宽度为32位,地址总线宽度为24位。而CY7C133的数据总线宽度为16位,地址总线宽度为11位,所以TMS320C32与双口RAM的接口并无特别之处,但是89C52与双口RAM之间的接口电路中就需要对89C52进行总线扩展了。具体做法是利用锁存器74HC373的锁存功能,通过对其使能信号的控制,进行分时读写,实现数据总线的扩展,即利用锁存器作为虚拟总线。具体的读写过程、读写信号及锁存器使能信号的产生将在下面详细说明。DSP、单片机与双口RAM之间的接口电路如图2所示。

DSP与单片机的一种高速通信实现方法

  
TMS320C32分配给双口RAM的地址空间为0x800000h~0x8007FFh。通过三八译码器74HC138对A20~A23和STRB进行译码,给出双口RAM的片选信号CER。89C52分配给双口RAM的地址空间为0x1000h~0x1FFFh。通过二四译码器74HC139对A13~A15进行译码产生双口RAM的片选信号CEL。双口RAM每边都有两个读/写控制信号,分别控制高位字节和低位字节的读/写,在使用时可以根据需要分别对数据的高位和低位进行写入操作。在图2所示接口电路中,两边的两个读/写控制信号分别被连接在一起,也就是说此时双口RAM的读写都是同时读写16位数据。

图2中双口RAM CY7C133的读写信号以及锁存器74HC373的使能信号的产生如图3所示。其中,WR是89C52的写控制信号,RD是89C52的读控制信号,A0是89C52的地址最低位,A15是地址最高位,R/W是TMS320C32的读写控制信号,BUSYL接89C52的P1口的一个引脚(具体可根据系统实际情形自行选择,图中未画出),BUSYR接TMS320C32的READY信号。

DSP与单片机的一种高速通信实现方法

  
下面讨论一下89C52对双口RAM的读写过程。当89C52对双口RAM进行读数据时,由图3可知此时A0应为低电平,不妨假设地址为0x1000h,则存储在双口RAM中该地址处的16位数据同时被读出,由于高8位数据线与89C52的8位数据线直接相连,所以高8位数据被立即读入89C52中。同时,根据图3中各信号的相互逻辑关系不难判断,U3的使能信号LE有效(高电平),OE无效(低电平),因而低8位数据被送入U3 中锁存起来。接着89C52再进行一次读操作,这时地址变为0x1001h,由于A0变成高电平,双口RAM的读使能信号变成无效电平,所以此次读操作对双口RAM不产生影响。再来看U3的使能信号LE和OE的变化情况,显然LE变成了无效电平,而OE变成了有效电平,上次被锁存的数据(即双口RAM的低8位数据)被送入89C52。当89C52对双口RAM进行写入操作时,注意此时A0应为高电平,不妨假设地址为0x100Ch,同样可根据图3判断U2的使能信号LE和OE均为有效电平,因而数据被同时写入双口RAM中(即此时双口RAM的高8位数据和低8位相同);接着89C52再进行一次写操作,此时地址变为0x100Dh,由于A0变成低电平,U2的片选为无效电平,U2被封锁,数据写入双口RAM的高8位。从上面的分析可知,利用最低地址位A0的不同电平,89C52通过两次连续的读或写操作,成功地实现了对双口RAM中数据的读或写,只不过是读入时是先读入高8位,后读入低8位;而写入则是先写入低8位,后写入高8位。

4.软件实现方案

双口RAM必须采用一定的机制来协调左右两边CPU对它的读写操作,否则会出现读写数据的错误。通常可以用中断、硬件、令牌和软件这四种方式来协调双方,本文采用的是软件方式。从上面的分析中我们可以得知,在接口电路中实际上已经利用89C52的最低地址位A0把双口RAM的存储空间分为奇、偶地址两个空间。其中,奇地址空间专供89C52写,偶地址空间专供89C52读。那么我们只需对TMS320C32的软件作相应处理即可,也就是说,TMS320C32对双口RAM的奇地址空间只读,对偶地址空间只写。这样就避免了TMS320C32和89C52对双口RAM同一地址单元的写入操作。另外,在对双口RAM进行访问之前,CPU首先对本端的BUSY信号进行查询,只有本端/BUSY信号无效时才进行读写操作,进一步保证了数据读写的可靠性。

5.结束语

通过双口RAM实现双CPU之间的数据通信,极大地提高了数据传输速度和可靠性,满足了控制系统的实时、高速的控制要求。本文所设计的89C52与双口RAM之间的接口电路简单实用,成功解决了它们总线匹配的问题,对其他类似需要总线扩展的系统也有一定的参考价值。

来源: 捷配电子市场

围观 300

前言

STM32 提供了灵活的固件加载模式,其中大部分型号支持 DFU 加载。并且在电脑端,提供了配套的演示软件 DfuSe。

包含可视化版 DfuSeDemo.exe 和命令版 DfuSeCommand.exe。本文主要介绍 DfuSeCommand.exe 的使用。

前期步骤

1. 在电脑上安装 DfuSe(可通过“相关工具 & 链接”小节中,提供的链接获取安装包)。

2. STM32 硬件正确配置,使其能够满足进入 System Bootloader 模式。更多详细介绍请参考《AN2606 STM32 microcontroller system memory boot mode》。如果应用中,利用 IAP 实现 DFU 升级,同样可以利用 DfuSe 工具。

3. 利用 USB 数据线连接电脑和 STM32 的全速 USB 接口,等待驱动自动安装完成。如果驱动无法正确安装,可指定驱动路径,重新安装驱动。驱动位于 DfuSe 安装目录\ Bin\Driver。

4. 打开 DfuSe 安装目录下的 DfuSeCommand.exe。

5. 结合下节,使用 DfuSeCommand。

在使用 DfuSeCommand 前需要完成所列步骤,以便提供运行所需的硬件和软件环境。更多关于 DfuSe 以及固件转换等介绍,可以参考《UM0412 Getting started with DfuSe USB device firmware upgrade STMicroelectronics extension》。

DfuSeCommand 命令使用介绍

DfuSecommand 提供了几个命令,分别用于实现帮助、DFU 设备连接、加载、上传功能。
为演示需要,执行上节列出的步骤,并连接两个 DFU 设备(由 STM32 的 System Bootloader 实现 DFU 功能)到电脑。

输入红框中命令,执行帮助命令,列出了DfuSecommand.exe 支持的全部命令。
注:执行命令中对应的位置信息需要与 DfuSe 安装位置一致。

STM32单片机DfuSeCommand的使用

上传命令。命令实现:连接设备 0,上传固件并保存。

上传命令。命令实现:连接设备 1,上传固件并保存。

加载命令。命令实现:连接设备 0,加载固件到设备 0.

加载命令。命令实现:连接设备 1,加载固件到设备 1.

加载命令。命令实现:连接设备 0 (默认),加载固件到设备0.

小结

本文所列出的 DfuSeCommand 命令使用,并未涵盖全部参数情况。使用者可以参考列出部分的命令实
现,并结合 Help 下列出的全部命令参数,执行需要的命令。

DfuSeCommand.exe 相对于可视化版 DfuSeDemo.exe 功能更加精简,使用者如果只是为了验证 DFU
功能,建议使用可视化版 DfuSeDemo.exe,操作方便,并且具有更多的功能。

来源: 21ic.com/stm32/

围观 709

STM32简单介绍

一、背景

如果你正为项目的处理器而进行艰难的选择:一方面抱怨16位单片机有限的指令和性能,另一方面又抱怨32位处理器的高成本和高功耗,那么,基于 ARM Cortex-M3内核的STM32系列处理器也许能帮你解决这个问题。使你不必在性能、成本、功耗等因素之间做出取舍和折衷。即使你还没有看完STM32的产品手册,但对于这样一款融合ARM和ST技术的“新生儿”相信你和我一样不会担心这款针对16位MCU应用领域 的32位处理器的性能,但是从工程的角度来讲,除了芯片本身的性能和成本之外,你或许还会考虑到开发工具的成本和广泛度;存储器的种类、规模、性能和容 量;以及各种软件获得的难易,我相信你看完本专题会得到一个满意的答案。

对于在16位MCU领域用惯专用在线仿真器(ICE)的工程师可能会担心开发工具是否能够很快的上手?开发复杂度和整体成本会不会增加?产品上 市时间会不会延长?没错,对于32位嵌入式处理器来说,随着时钟频率越来越高,加上复杂的封装形式,ICE已越来越难胜任开发工具的工作,所以在32位嵌 入式系统开发中多是采用JTAG仿真器而不是你熟悉的ICE。但是STM32采用串行单线调试和JTAG,通过JTAG调试器你可以直接从CPU获取调试 信息,从而将使你的产品设计大大简化,而且开发工具的整体价格要低于ICE,何乐而不为?

有意思的是STM32系列芯片上印有一个蝴蝶图像,据ST微控制器产品部Daniel COLONNA先生说,这是代表自由度,意在给工程师一个充分的创意空间。我则“曲解”为预示着一种蝴蝶效应,这种蝴蝶效应不仅会对方案提供商以及终端产 品供应商带来举足轻重的影响,而且会引起竞争对手策略的改变……翅膀已煽动,让我们一起静观其变!

二、STM32市面上流通的型号

截至2010年7月1日,市面流通的型号有:
基本型:STM32F101R6,STM32F101C8,STM32F101R8,STM32F101V8 ,STM32F101RB,STM32F101VB增强型:STM32F103C8STM32F103R8,STM32F103V8,STM32F103RB,STM32F103VB,STM32F103VE,STM32F103ZE

三、STM32系列的作用

ARM公司的高性能”Cortex-M3”内核
1.25DMips/MHz,而ARM7TDMI只有0.95DMips/MHz

一流的外设

1μs的双12位ADC,4兆位/秒的UART,18兆位/秒的SPI,18MHz的I/O翻转速度低功耗在72MHz时消耗36mA(所有外设处于工作状态),待机时下降到2μA

最大的集成度复位电路、低电压检测、调压器、精确的RC振荡器等简单的结构和易用的工具。

四、STM32F10x重要参数

2V-3.6V供电
容忍5V的I/O管脚
优异的安全时钟模式
带唤醒功能的低功耗模式
内部RC振荡器
内嵌复位电路
工作温度范围:-40℃至+85℃或105℃

五、性能特点

基本型STM32F101:36MHz CPU,多达16K字节SRAM,1x12位ADC温度传感器增强型STM32F103:72MHz CPU,多达20K字节SRAM,2x12位ADC 温度传感,PWM定时器,CAN,USB

六、STM32互联型系列简介:

全新STM32互连型(Connectivity)系列微控制器增加一个全速USB(OTG)接口,使终端产品在连接另一个USB设备时既可以 充当USB主机又可充当USB从机;还增加一个硬件支持IEEE1588精确时间协议(PTP)的以太网接口,用硬件实现这个协议可降低CPU开销,提高 实时应用和联网设备同步通信的响应速度。全新互连型系列还是STM32家族中首款集成两个CAN2.0B控制器的产品,让开发人员能够研制可连接两条工业标准CAN(控制器区域网)总 线的网关设备。

此外,新系列微控制器还支持以太网、USB OTG和CAN2.0B外设接口同时工作,因此,开发人员只需一颗芯片就能设计整合所有这些外设接口的网关设备。

STM32互连型系列产品强化了音频性能,采用一个先进的锁相环机制,实现音频级别的I2S通信。结合USB主机或从机功能,STM32可以从外部存储器(U盘或MP3播放器)读取、解码和输出音频信号。设计人员还可以在新系列微控制器上开发人机界面(HMI)功能,如播放和停止按键,以及显示 器界面。这个功能使其可用于各种家庭音响设备,如音响底座系统、闹钟/音乐播放器和家庭影院。

新系列产品整合先进的面向连接的外设,标准的STM32外设(包括一个PWM定时器),高性能的32位ARM Cortex-M3 CPU,这些特性使开发人员可以在设备上(如家电、楼宇或工业自动化)整合多种功能,如马达控制、用户界面控制和设备互连功能。其它目标应用包括需要联网、数据记录或USB外设扩展功能的系统,如病患监视、销售终端机、自动售货机和保安系统。包括新的互连型系列在内的STM32系列微控制器具有多种配套软件和开发工具,其中包括意法半导体免费提供的软件库以及第三方工具厂商的广泛支持。

意法半导体还将推出一个新的评估板,目前正在向大客户提供STM32F105和STM32F107互连型系列的样片。

七、STM32新系列产品的功能:

STM32互连型系列产品分为两个型号:STM32F105和STM32F107。STM32F105具有USB OTG 和CAN2.0B接口。STM32F107在USB OTG 和CAN2.0B接口基础上增加了以太网10/100 MAC模块 。片上集成的以太网MAC支持MII和RMII,因此,实现一个完整的以太网收发器只需一个外部PHY芯片。只使用一个25MHz晶振即可给整个微控制器 提供时钟频率,包括以太网和USB OTG外设接口。微控制器还能产生一个25MHz或50MHz的时钟输出,驱动外部以太网PHY层芯片,从而为客户节省了一个附加晶振。

音频功能方面,新系列微控制器提供两个I2S音频接口,支持主机和从机两种模式,既用作输入又可用作输出,分辨率为16位或32位。音频采样频 率从8kHz到96kHz。利用新系列微控制器强大的处理性能,开发人员可以用软件实现音频编解码器,从而消除了对外部组件的需求。把U盘插入微控制器的USB OTG接口,可以现场升级软件;也可以通过以太网下载代码进行软件升级。这个功能可简化大型系统网络(如远程控制器或销售终端设备)的管理和维护工作。

八、充分发挥 STM32架构的优势:

除新增的功能强化型外设接口外,STM32互连系列还提供与其它STM32微控制器相同的标准接口,这种外设共用性提升了整个产品家族的应用灵 活性,使开发人员可以在多个设计中重复使用同一个软件。新STM32的标准外设包括10个定时器、两个12位1-Msample/s 模数转换器 (交错模式下2-Msample/s)、两个12位数模转换器、两个I2C接口、五个USART接口和三个SPI端口。新产品外设共有12条DMA通道, 还有一个CRC计算单元,像其它STM32微控制器一样,支持96位唯一标识码。新系列微控制器还沿续了STM32产品家族的低电压和节能两大优点。2.0V到3.6V的工作电压范围兼容主流的电池技术,如锂电池和镍氢电 池,封装还设有一个电池工作模式专用引脚Vbat。以72MHz频率从闪存执行代码,仅消耗 27mA电流。低功耗模式共有四种,可将电流消耗降至两微安。从低功耗模式快速启动也同样节省电能;启动电路使用STM32内部生成的8MHz信号,将微 控制器从停止模式唤醒用时小于6微秒。

九、存储器和封装选项:

在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列和 增强型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32 平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。

如何保证ADC精度之STM32的ADC

共有最多3个ADC模块,最多21个ADC输入通道

特性

12位分辨率
自校准
转换结束,注入转换结束和发生模拟看门狗事件时产生中断
带内嵌数据一致的数据对齐
非常丰富的操作模式
双重模式(带2个或以上ADC的器件)
ADC转换时间:
1μs:ADC时钟为14MHz时达到最快
14个时钟周期,转换周期可调:14、20、26、41、54、68、84、252
ADC供电要求:2.4V~3.6V
ADC输入范围:VREF-≤VIN≤VREF+
规则通道转换期间有DMA请求产生
模拟看门狗
ADC输入通道映射
STM32的双ADC操作模式

ADC的误差种类
(1) 理想ADC转换曲线
(2) 实际ADC转换曲线
(3) 实际ADC两终点连线

ET 总误差:实际ADC转换曲线与理想曲线间的最 大偏离
EO 偏移误差:实际转换曲 线上第一次跃迁与理想 曲线中第一次跃迁之差
EG 增益误差:实际转换曲 线上最后一次跃迁与理 想曲线中最后一次跃迁 之差
ED 微分线性误差:实际转 换曲线上步距与理想步 距(1LSB)之差
EL 积分线性误差:实际转 换曲线与终点曲线间最大偏离

消除影响ADC精度的因素

1、ADC模块自身的误差

积分线性误差(ILE)和微分线性误差(DLE)依赖于ADC模块的设计,校准它们是困难的。进行多次转换再做平均可以减小它们的影响。偏移和增益误差可以简单地使用ADC模块的自校准功能补偿。

2、电源噪声,尤其是开关电源(SMPS)的高频噪声

线性稳压器具有较好的输出。强烈建议在整流输出端连接滤波电容。如果使用开关型电源,建议使用一个线性稳压器为模拟部分供电。建议在电源线和地 线之间连接具有良好高频特性的电容,即在靠近电源一端应放置一个0.1μF和一个1~10μF的电容。每一对VDD和VSS管脚都需要使用单独的去藕电 容。VDDA管脚必须连接到2个外部的去藕电容器(10nF瓷介电容+1μF的钽电容或瓷介电容)对于100脚和144脚封装的产品,可以在VREF+上 连接一个外部的ADC的参考输入电压,从而改善对输入低电压的精度。

1、电源输出不稳,随负载变化

ADC模块使用VREF+或VDDA作为模拟参考,数字数值的输出是这个参考电压与模拟输入信号的比值,VREF+必须在各种负载情况下保持稳定。可以使用诸如LM236作为VREF+的参考电压,这是一个2.5V的电压参考二极管

2、模拟输入信号的噪声

平均值方法:适合处理不频繁变化的模拟输入信号,增加一个外部滤波器消除高频噪声。

3、将最大的信号幅度与ADC动态范围匹配

选择参考电压(仅适合于具有VREF+引脚的产品),使用一个外部的前级放大器。

4、I/O引脚间的串扰(临近数字信号的翻转)

模拟信号线的周围布置地线产生屏蔽,能有效地减小串扰干扰噪声。
消除影响ADC精度的因素
VDD与VDDA的处理

供电引脚

STM32共有7种封装规格,共有多组VDD/VSS引脚,以及一组VDDA/VSSA引脚。
尽管所有VDD和所有VSS在内部相连,在芯片外部仍然需要连接上所有的VDD和VSS。因为导线较细,内部连接负载能力较差,抗干扰的能力也较差,如果漏接VDD或VSS,容易造成内部线路损坏,同时抗干扰能力下降。

VDD与VSS的去藕电容

每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个10nF~100nF的高频瓷介电容。在靠近VDD3和VSS3的地方放置一个4.7μF~10μF的钽电容或瓷介电容。
VDD与VDDA的关系

VDDA为所有的模拟电路部分供电,包括:
ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等。即使不 使用ADC功能,也需要连接VDDA,强烈建议VDD和VDDA使用同一个电源供电。VDD与VDDA之间的电压差不能超过300mV,VDD与VDDA 应该同时上电或调电。

供电方案

如何达到最优功耗水准

低功耗模式

I/O引脚的处理

1、如果需要减小I/O端口的电流消耗,可以根据具体情况配置I/O端口的状态:
输入端口配置为浮空输入,带外部上拉的输出端口配置为推挽输出并输出’1’,带外部下拉的输出端口配置为推挽输出并输出’0’。

2、未用的内部外设:
保持为关闭和默认的复位状态:
不要进行重映射,复位寄存器RCC_APB1RSTR和RCC_APB2RSTR。关闭对应的时钟,时钟使能寄存器:RCC_AHBENR、RCC_APB2ENR和RCC_APB1ENR。

进入SLEEP模式的省电操作

1、为了降低系统功耗,进入SLEEP模式时,执行如下操作流程:
关闭无需等待中断或事件的外设时钟;设置进入机制(Sleep-Now或Sleep-on-Exit);设置系统进入SLEEP模式。

2、退出睡眠模式的方式:
WFI(等待中断),可由任一外设中断触发,WFE(等待事件),可由任一外设事件触发。

进入STOP省电模式的操作

为了降低系统功耗,进入STOP模式的操作流程:

关闭设置为普通IO功能的GPIO口时钟;
关闭已开启时钟的外设的使能位(尤其是ADC、DAC、USB等带模拟模块的外设);
关闭已开启时钟的外设的时钟;
关闭预取缓冲区,并将Flash等待周期置为0;
设置PWR_CR中LPDS位选择电压调节器的模式:
正常模式:电压调节器处于正常供电状态;
低功耗模式:可降低电压调节器自身的功耗,
将MCU从STOP模式唤醒的时间有所增加;
设置系统进入STOP模式。

退出STOP省电模式的操作

1、退出停止模式:

以WFI进入时:任意外部中断线的中断;
以WFE进入时:任意外部中断线的事件;
不包括PVD和USB唤醒事件。

2、从STOP模式恢复后,时钟的配置返回到复位时的状态(系统时钟为HSI),用户程序必须重新配置整个时钟系统,包括PLL。

1、ADC模块自身的误差

积分线性误差(ILE)和微分线性误差(DLE)依赖于ADC模块的设计,校准它们是困难的。进行多次转换再做平均可以减小它们的影响。偏移和增益误差可以简单地使用ADC模块的自校准功能补偿。

2、电源噪声,尤其是开关电源(SMPS)的高频噪声

线性稳压器具有较好的输出。强烈建议在整流输出端连接滤波电容。如果使用开关型电源,建议使用一个线性稳压器为模拟部分供电。建议在电源线和地 线之间连接具有良好高频特性的电容,即在靠近电源一端应放置一个0.1μF和一个1~10μF的电容。每一对VDD和VSS管脚都需要使用单独的去藕电容。

VDDA管脚必须连接到2个外部的去藕电容器(10nF瓷介电容+1μF的钽电容或瓷介电容)对于100脚和144脚封装的产品,可以在VREF+上 连接一个外部的ADC的参考输入电压,从而改善对输入低电压的精度。

消除影响ADC精度的因素

1、电源输出不稳,随负载变化

ADC模块使用VREF+或VDDA作为模拟参考,数字数值的输出是这个参考电压与模拟输入信号的比值,VREF+必须在各种负载情况下保持稳定。可以使用诸如LM236作为VREF+的参考电压,这是一个2.5V的电压参考二极管。

2、模拟输入信号的噪声

平均值方法:适合处理不频繁变化的模拟输入信号,增加一个外部滤波器消除高频噪声。
3、将最大的信号幅度与ADC动态范围匹配

选择参考电压(仅适合于具有VREF+引脚的产品),使用一个外部的前级放大器。

4、I/O引脚间的串扰(临近数字信号的翻转)模拟信号线的周围布置地线产生屏蔽,能有效地减小串扰干扰噪声。消除影响ADC精度的因素

VDD与VDDA的处理

供电引脚

STM32共有7种封装规格,共有多组VDD/VSS引脚,以及一组VDDA/VSSA引脚。

尽管所有VDD和所有VSS在内部相连,在芯片外部仍然需要连接上所有的VDD和VSS。因为导线较细,内部连接负载能力较差,抗干扰的能力也较差,如果漏接VDD或VSS,容易造成内部线路损坏,同时抗干扰能力下降。

VDD与VSS的去藕电容

每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个10nF~100nF的高频瓷介电容。在靠近VDD3和VSS3的地方放置一个4.7μF~10μF的钽电容或瓷介电容。

VDD与VDDA的关系

VDDA为所有的模拟电路部分供电,包括:

ADC模块,复位电路,PVD(可编程电压监测器),PLL,上电复位(POR)和掉电复位(PDR)模块,控制VBAT切换的开关等。即使不 使用ADC功能,也需要连接VDDA,强烈建议VDD和VDDA使用同一个电源供电。VDD与VDDA之间的电压差不能超过300mV,VDD与VDDA 应该同时上电或调电。

1、如果需要减小I/O端口的电流消耗,可以根据具体情况配置I/O端口的状态:

输入端口配置为浮空输入,带外部上拉的输出端口配置为推挽输出并输出’1’,带外部下拉的输出端口配置为推挽输出并输出’0’。

2、未用的内部外设:

保持为关闭和默认的复位状态:

不要进行重映射,复位寄存器RCC_APB1RSTR和RCC_APB2RSTR。关闭对应的时钟,时钟使能寄存器:RCC_AHBENR、RCC_APB2ENR和RCC_APB1ENR。

进入SLEEP模式的省电操作

1、为了降低系统功耗,进入SLEEP模式时,执行如下操作流程:

关闭无需等待中断或事件的外设时钟;设置进入机制(Sleep-Now或Sleep-on-Exit);设置系统进入SLEEP模式。

2、退出睡眠模式的方式:

WFI(等待中断),可由任一外设中断触发,WFE(等待事件),可由任一外设事件触发。

进入STOP省电模式的操作

为了降低系统功耗,进入STOP模式的操作流程:

关闭设置为普通IO功能的GPIO口时钟;
关闭已开启时钟的外设的使能位(尤其是ADC、DAC、USB等带模拟模块的外设);
关闭已开启时钟的外设的时钟;
关闭预取缓冲区,并将Flash等待周期置为0;
设置PWR_CR中LPDS位选择电压调节器的模式:
正常模式:电压调节器处于正常供电状态;
低功耗模式:可降低电压调节器自身的功耗,
将MCU从STOP模式唤醒的时间有所增加;
设置系统进入STOP模式。

退出STOP省电模式的操作

1、退出停止模式:

以WFI进入时:任意外部中断线的中断;
以WFE进入时:任意外部中断线的事件;
不包括PVD和USB唤醒事件。

2、从STOP模式恢复后,时钟的配置返回到复位时的状态(系统时钟为HSI),用户程序必须重新配置整个时钟系统,包括PLL。

转自: 开源嵌入式

围观 412

本文详细介绍了基于PIC单片机的CAN总线扩展技术,给出了CAN网关的硬件设计原理及软件设计框图,通过CAN网关增加了CAN总线的容量、提高了CAN总线的通信速率、扩展了CAN总线的传输距离。

CAN总线是一种串行多主站局域网总线,被广泛应用于汽车控制系统、自动控制、楼宇自动化、医学设备等各个领域。其传输距离远,最远可达10km,传输速率高,最高可达1Mb/s,容错性能好,可靠性能高。但是由于CAN驱动器的驱动能力有限,CAN总线能够驱动的节点数有限,一般在100个左右,同时会随着传输距离的增加,最高传输速率会下降,如果距离过长会引起信号丢失、反射等故障。在实验室条件下测得在5Kb/s的通信速率下最远通信距离能达到10km;在18Kb/s的通信速率下最远通信距离只能达到2km;而在42b/s的通信速率下,最远通信距离只能达到1km。测试条件:线缆采用线径为0.75mm2的屏蔽双绞线,线缆为盘装,室内测试。在实验中,发现随着随着通信距离的增加,通信速率迅速下降,而CAN总线的驱动节点数量也次第下降。而在通信距离远,通信节点多的大空间场所,比如矿井、电力监控等系统需要CAN总线来传输数据和监控信息的场所,CAN总线不能满足要求。

如果要实现通信距离远、通信速率高、总线节点数量多CAN总线系统,实现CAN总线的扩展,就需要一个CAN网关进行桥接,把CAN总线划分为几个子网,增加CAN总线通信节点,延长CAN总线的传输距离,提高CAN总线的传输速率。在研究基于PIC单片机的CAN网关设计和扩展的CAN总线网络拓扑结构。

1、CAN网关总体设计及总线拓扑结构

1.1 CAN网关总体设计

CAN网关作为一种转发设备,连接在两个不同的CAN网络中,能够实时接收来自两个子网中的信息,根据需要筛选或者无条件地把接收到的信息转发到另外一个网络中。CAN总线层次结构分为物理层、数据链路层和应用层,工作于ISO/OSI参考模式下。CAN网关在物理层和数据链路层完成两个CAN网的连接。CAN网关结构图如图1所示。

基于PIC单片机的CAN总线扩展技术

CAN网关可以作为透明网关和源路由网关。透明网关完全按照接收到的帧格式转发,不改变帧结构,对于用户,网关相当于透明的。而源路由网关由用户提供路由信息,网关按照路由信息对消息进行过滤和有选择性的转发。

1.2 CAN总线网络拓扑结构

带有网关的CAN网络拓扑结构如图2所示。在这个网路中,PC机为主节点,而CAN节点作为从节点。在网络的顶层,由PC机和网关构成一个主网,在这个主网中PC机和CAN网关作为CAN节点,总线驱动器驱动能力可以带100个cAN节点左右。主网中的CAN网关再作为下一个子网中的主节点,而其他CAN网关或是CAN节点作为从节点,构成一个子网。这样通过CAN网关可以逐环把网络扩展下去,直到最底层的CAN节点。而在应用层上,用户可以把网关配置成透明网关或是源路由网光。透明网关不影响网络结构,CAN拓展网络形成一个多节点,远距离的网络。源路由网关对消息具有过滤性,根据用户的配置信息把CAN网络在应用层上划分为几个小网。

基于PIC单片机的CAN总线扩展技术

这样,解决了节点容量、通信距离、通信速率的问题。

2、网关的硬件设计

硬件电路开发采用集成电路,开发周期短,成本低。CPU采用Microchip公司的16位单片机dsPIC30F6011作为核心部件,其内部集成了两个CAN控制器,支持CAN2.0A/B协议,CPU的速度可以达到30 MIPS,程序存储器空间有132 KB,内部RAM有6144B,数据程序存储器有2048B,集成的功能强大,体积小,性价比比较高。物理层采用两个CAN驱动器PCA82C250。其中一组的PCA82C250的RXD,TXD引脚不是和CPUdsPIC30F6011直接连接,而在中间用光速光藕6N137隔离。

单片机dsPIC30F6011有两个通用的UART口,可以作为和PC机或其他上位机通信的接口来用。另外,dsPIC30F6011采用TQPF封装64引脚,利用通用I/O驱动LED灯作为指示灯,预留并行液晶显示器和 4×4行列式键盘的接口。

CAN控制器和驱动器部分采用了光电隔离器,因此电源设计部分要求有两个隔离的5V电源。考虑到可以会用到液晶显示器,因此一路电源设计采用输出容量1A的开关电源LM9076,而另外一路采用隔离DC/DC模块电源。这样CAN子网之间实现了电气隔离,如果一个网络出了问题并不影响另外一个网络的正常工作,提高了CAN网络的抗干扰性能。硬件电路设计外围电路少、设计简单、成本低。设计的CAN网关硬件设计系统框图如图3所示。

基于PIC单片机的CAN总线扩展技术

3、网关的软件设计

CAN网关作为消息的转发器,要准确、实时地接收两个CAN发送的信息,并且要实时发出去。对于不断发出信息的问题节点要及时屏蔽,避免错误信息蔓延到另一个CAN网络。如果CAN网关被设置成透明网关则直接把一个CAN网络的信息转发到另外一个网络中即可,如果CAN网关被设置成和某个区间ID相关,则要做一些信息过滤和屏蔽处理。当CAN网关检测到总线有错误时,要通过备用的UART口将错误信息上发到上位机或其他信息处理主机。

CAN网关的信息接收通过硬件中断来完成。当总线上有消息时,引起硬件中断,进入中断程序后根据中断标志位的区别把接收到的信息存放到相应的缓冲区中。缓冲区是一个FIFO的存储区。而主程序则一直检测两个CAN控制器对应的两个接收缓冲区,当检测到缓冲区不为空时则把缓冲区内的信息顺序发送到另一个网络中。从而形成一个具有一定的错误检测能力的双向通道,完成了两个CAN网络的信息转发。CAN网关的主程序框图如图4所示,中断程序框图如图5所示。

基于PIC单片机的CAN总线扩展技术

基于PIC单片机的CAN总线扩展技术

4、结语

本文详细介绍了CAN总线扩展技术的网络拓扑结构和系统构成,给出了CAN网关的硬件设计原理及软件设计框图。这样的CAN总线扩展网络,因为引入CAN网关而增加了消息的传递时间,但是这个增加的时间很小,是微秒级的,可以忽略不计。而带来的优势明显,因为把CAN网络在物理层上划分为几个网络,彼此之间不相互影响,因而增加了CAN网络的抗干扰性,同时,扩展灵活,只需要增加一个CAN网关来增加子网即可;通信速率可通过增加网关来提高,通信距离可以扩展到很远。通过CAN网关增加了CAN总线的容量、提高了CAN总线的通信速率、扩展了CAN总线的传输距离。

转自: eefocus

围观 378

众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。

图文教你理解单片机STM32时钟

其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号.

高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。

高速内部时钟(HSI): 由内部RC振荡器产生,频率为8MHz,但不稳定。

低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。

低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。

OSC_OUT和OSC_IN开始,这两个引脚分别接到外部晶振8MHz,第一个分频器PLLXTPRE,遇到开关PLLSRC(PLL entry clock source),我们可以选择其输出,输出为外部高速时钟(HSE)或是内部高速时钟(HSI)。这里选择输出为HSE,接着遇到锁相环PLL,具有倍频作用,在这里我们可以输入倍频因子PLLMUL,要是想超频,就得在这个寄存器上做手脚啦。经过PLL的时钟称为PLLCLK。

倍频因子我们设定为9倍频,也就是说,经过PLL之后,我们的时钟从原来8MHz的 HSE变为72MHz的PLLCLK。紧接着又遇到了一个开关SW,经过这个开关之后就是STM32的系统时钟(SYSCLK)了。通过这个开关,可以切换SYSCLK的时钟源,可以选择为HSI、PLLCLK、HSE。我们选择为PLLCLK时钟,所以SYSCLK就为72MHz了。

PLLCLK在输入到SW前,还流向了USB预分频器,这个分频器输出为USB外设的时钟(USBCLK)。回到SYSCLK,SYSCLK经过AHB预分频器,分频后再输入到其它外设。如输出到称为HCLK、FCLK的时钟,还直接输出到SDIO外设的
SDIOCLK时钟、存储器控制器FSMC的FSMCCLK时钟,和作为APB1、APB2的预分频器的输入端。GPIO外设是挂载在APB2总线上的, APB2的时钟是APB2预分频器的输出,而APB2预分频器的时钟来源是AHB预分频器。因此,把APB2预分频器设置为不分频,那么我们就可以得到GPIO外设的时钟也等于HCLK,为72MHz了。

SYSCLK: 系统时钟,STM32大部分器件的时钟来源。主要由AHB预分频器分配到各个部件。

HCLK: 由AHB预分频器直接输出得到,它是高速总线AHB的时钟信号,提供给存储器,DMA及cortex内核,是cortex内核运行的时钟,cpu主频就是这个信号,它的大小与STM32运算速度,数据存取速度密切相关。

FCLK: 同样由AHB预分频器输出得到,是内核的“自由运行时钟”。“自由”表现在它不来自时钟 HCLK,因此在HCLK时钟停止时 FCLK 也继续运行。它的存在,可以保证在处理器休眠时,也能够采样和到中断和跟踪休眠事件 ,它与HCLK互相同步。

PCLK1: 外设时钟,由APB1预分频器输出得到,最大频率为36MHz,提供给挂载在APB1总线上的外设,APB1总线上的外设如下:

RCC_APB1Periph_TIM2 TIM2时钟

RCC_APB1Periph_TIM3 TIM3时钟

RCC_APB1Periph_TIM4 TIM4时钟

RCC_APB1Periph_WWDG WWDG时钟

RCC_APB1Periph_SPI2 SPI2时钟

RCC_APB1Periph_USART2 USART2时钟

RCC_APB1Periph_USART3 USART3时钟

RCC_APB1Periph_I2C1 I2C1时钟

RCC_APB1Periph_I2C2 I2C2时钟

RCC_APB1Periph_USB USB时钟

RCC_APB1Periph_CAN CAN时钟

RCC_APB1Periph_BKP BKP时钟

RCC_APB1Periph_PWR PWR时钟

RCC_APB1Periph_ALL 全部APB1外设时钟

PCLK2:外设时钟,由APB2预分频器输出得到,最大频率可为72MHz,提供给挂载在APB2总线上的外设,APB2总线上的外设如下:

RCC_APB1Periph_TIM2 TIM2时钟

RCC_APB2Periph_AFIO 功能复用IO时钟

RCC_APB2Periph_GPIOA GPIOA时钟

RCC_APB2Periph_GPIOB GPIOB时钟

RCC_APB2Periph_GPIOC GPIOC时钟

RCC_APB2Periph_GPIOD GPIOD时钟

RCC_APB2Periph_GPIOE GPIOE时钟

RCC_APB2Periph_ADC1 ADC1时钟

RCC_APB2Periph_ADC2 ADC2时钟

RCC_APB2Periph_TIM1 TIM1时钟

RCC_APB2Periph_SPI1 SPI1时钟

RCC_APB2Periph_USART1 USART1时钟

RCC_APB2Periph_ALL 全部APB2外设时钟

来源: 嵌入式资讯精选

围观 664

前言

STM32 PCROP专有代码读出保护,将某个区域设置为仅允许执行,可防止代码被非法读出与修改。ST网站提供了免费的PCROP参考代码,但是例程中仅仅提供了用代码设置PCROP。为方便利用PCROP进行知识产权保护的开发和部署,这篇文章提供了方法,可在RDP级别设置为1或者0时,使用代码清除PCROP。

ST网站上的PCROP参考代码

学习使用PCROP,可从ST网站下载文档以及参考代码。文档里有一步一步的详细说明。参考代码则实现了,如何设置编译开发环境去掉文字库(Literal pool),以避免受保护区域需要被读访问;参考代码也实现了如何利用代码使能PCROP保护以及如何导出接口符号供二次开发使用。

你可以编译运行PCROP参考代码。一旦下载到开发板并运行后,扇区2会自动被设置成PCROP保护。你将无法再次下载代码到该扇区,也无法读出该扇区的内容。若想通过STLink工具解除PCROP保护,则会导致整个Flash被擦除。

使用代码清除PCROP

在熟悉ST网站上的PCROP参考代码基础之上,我们将讨论如何使用代码清除PCROP。

1. 原理

根据STM32用户手册,要想清除PCROP保护,读保护RDP级别必须从1设置成0。也就是说,即使当前RDP级别为0,我们也要使用代码将其设置成1。然后,同时关掉PCROP和将RDP设置成0。这也说明,尽管是清除PCROP保护,我们的代码必须加入RDP的设置函数, 而不能仅仅修改参考代码中的PCROP_Enable的状态字段使其变成PCROP_Disable。

解读STM32单片机:代码实现 PCROP清除

2. 材料准备

开发板: STM32F429I_Discovery

开发工具:
STM32Cube_FW_F4_V1.15.0
STM32CubeExpansion_AN4701_F4_V1.0.0(从ST网站下载的参考代码)
STM32 STLink
IAR/Keil

注:也可以选择其他支持PCROP的STM32系列,并选择相应的STM32开发板与STM32固件库。

3. 代码

• 设置RDP到级别1

该函数在RDP级别为0时,若需要清除PCROP, 必须被使用。

解读STM32单片机:代码实现 PCROP清除

• 设置RDP到级别0

在清除PCROP保护的代码里不会直接调用这个函数。参考手册提到,PCROP的清除必须与RDP从1到0同时发生,而下列RDP_Disable函数则是完整独立的,无法与PCROP的Option bytes同时操作。不过,这个代码的中间部分,也就是实际功能部分,将在清除PCROP时被重用。

解读STM32单片机:代码实现 PCROP清除

解读STM32单片机:代码实现 PCROP清除

• 清除PCROP

下述代码清除PCROP,它基于参考代码中的PCROP_Enable函数改写而成。首先,它通过RDP_Enable将RDP设置成1。注意实验中不要将RDP设置成为2,否则所有的Option bytes将不再被允许修改。然后将RDP和PCROP都设置完毕,调用一次HAL_FLASH_OB_Launch达到同时将RDP设置成1并清除PCROP保护。

解读STM32单片机:代码实现 PCROP清除

解读STM32单片机:代码实现 PCROP清除

4.运行

在主函数中,调用PCROP_Disable可解除PCROP保护。RDP_Enable后需要关闭电源,重新启动,然后系统正常运行解除PCROP保护。解除保护后,可通过STLink确认PCROP Option bytes已恢复,同时也可以看到整个Flash内容已被擦除。

结论

本文讨论了完全使用代码控制PCROP的设置与清除。它可以使用在PCROP代码保护的开发与部署阶段。

来源: eeworld.com

围观 644

文中介绍的干扰器能够产生3种干扰信号:随机干扰、点频干扰和扫频干扰,其中点频干扰和扫频干扰是基于单片机对DDS芯片AD9852的控制产生,整个系统的控制灵活、高效。测试结果表明,系统能够准确产生所需要的干扰信号,满足抗干扰性能测试的需要。虽然本设计产生的干扰信号位于406 MHz频段,但这样的电路结构也可用于其它频段(需修改VCO、PLL等电路),例如手机通信频段,因此本电路结构对其它频段的应用同样具有借鉴意义。

随着电子设备的使用越来越普遍,电子设备之间的干扰问题也越来越突出,特别是通信设备的干扰问题,这使得电路工程师在电子产品的设计过程中不得不考虑设备的抗干扰问题,并且有必要对通信设备的抗干扰能力进行测试。文中介绍的射频信号干扰器可用于测试通信设备的抗干扰能力,能够产生如下3种干扰:

1)随机干扰。在目标频率范围内产生频率随机的干扰信号,湮没目标频率,也会降低信噪比,形成对正常通信的压制。

2)点频干扰。在已知目标频率的情况下,瞄准目标频率输出干扰信号,产生对目标通信的压制效果。

3)扫频干扰。在目标频率范围内进行频率扫描,当干扰信号频率与通信频率的碰撞概率达到一定数值时,就会影响通信的信噪比,导致误码率增加,产生有效干扰。
射频信号干扰器的设计基于DDS技术和锁相环(PLL)技术,通过单片机进行控制,能够产生分辨率极高的干扰频率,控制方便、灵活。

1硬件电路设计

射频信号干扰器原理框图如图1所示,当微波开关接通406.0~406.1 MHZVCO时,输出随机干扰噪声;当微波开关接通BPF时,输出点频干扰或扫频干扰噪声。

图1:硬件系统原理框图

1.1随机干扰

基带噪声信号源的随机电压噪声施加到VCO的电压控制端,产生噪声调频信号。406.0~406.1 MHZVCO输出信号的频率表示为:
ωvco=ωo+Kvco(Vo+Anu(t)) (1)
式中:ωo为控制电压为零时VCO输出频率,Kvco为VCO电压控制增益,Vo为直流控制电压,An为噪声放大电路增益,u(t)为基带噪声信号。
当微波开关选通随机噪声输出时,输出信号为
Vo(t)=KSKAUvcoCOS(ωo+Kvco(Vo+Anu(t)) (2)
式中:KS为微波开关增益,KA为放大器增益,Uvco为VCO输出信号幅度。干扰机的输出为调频噪声,噪声幅度为KSKAUvco,噪声的中心频率为ωo+Kvco(Vo,噪声频谱的范围取决于Anu(t)的幅度。

1.2点频干扰与扫频干扰

点频干扰与扫频干扰通过单片机控制DDS专用芯片AD9852实现,AD9852具有功耗低,相位累加器位数高,可产生高频率的正弦波等优点。
DDS输出频率:
f0=KF×fc/2N (3)
其中,KF为频率控制字,fc为外部参考时钟的频率,Ⅳ为DDS相位累加器位数。AD9852的频率控制字为48bit,即N=48。
输出频率分辨率由下列公式决定:
Δf=fc/2N (4)
根据Nyquist定理,DDS外部参考时钟频率至少是输出频率的2倍(f0/2),但工程应用中,一般将参考频率设为最高输出频率的5倍以上。本设计中参考频率为97.5MHz,将的值代入式(4),得DDS输出信号的频率分辨率为3.5 × 10-7Hz。
AD9852内置12bit DAC,其输出模拟信号频谱中除f0外还带有fc、fc±f0等频率分量(fc一f0的频率最低),需设计一个LPF将其滤除,此处采用了图2所示的七阶Butterworth低通滤波器,对该滤波器使用ADS仿真的结果如图3所示,81 MHz处的衰减达到- 80.683 dB。

图2:七阶butterwoth低通滤波器

图3:滤波器仿真结果

2软件设计

AD9852的控制一般采用SPI口,普通的MCS51单片机不带SPI 13,需要用P1 13模拟SPI口,并提供IOUD CLK和FSK信号。

AD9852 提供了5种工作模式:Single tone、FSK、Ramped FSK、Chirp、BPSK。Single tone模式输出单一频率,Ramped FSK模式和Chip模式可以产生扫频信号,本设计采用Ramped FSK模式,输出频率的波形如图4所示。

图4:Ramped FSK模式输出波形

图5:软件主程序流程图

单片机软件主程序流程图如图5所示。单片机通过微波开关来选择随机干扰模式或点频干扰,扫频干扰模式,通过向DDS写控制字来控制DDS的输出模式。对式(3)进行变换得到频率控制字:
KF=f0 × 2N/fc (5)

例如,输出频率为16.0 MHz时,KF = 46 190 765 408928=(2A02A02A02A0)16。

3测试结果

对干扰器的3种干扰模式分别进行测试,得到的结果如图6(a)~(c)所示,其中图6(b)是使用频谱仪的最大保持功能记录到的频率扫描轨迹。测试结果满足要求。

图6:测试结果

来源: 华强电子网

围观 458

页面

订阅 RSS - 单片机