基于单片机正弦波有效值的测量

合集下载

基于单片机的工频电压(电流)表的设计

基于单片机的工频电压(电流)表的设计

检测系统实习报告题目:基于单片机的工频电压(电流)表的设计姓名:院(系):专业:指导教师:职称:评阅人:职称:年月摘要在实际中,有效值是应用最广泛的参数,电压表的读数除特殊情况外,几乎都是按正弦波有效值进行定度的。

有效值获得广泛应用的原因,一方面是由于它直接反映出交流信号能量的大小,这对于研究功率、噪声、失真度、频谱纯度、能量转换等是十分重要的;另一方面,它具有十分简单的叠加性质,计算起来极为方便。

本文详细介绍了一个数字工频电压、电流表设计,以AT89S52单片机为控制核心,由电压、电流传感器模块,真有效值测量模块,信号调理模块,AD采集模块及控制、显示模块等构成。

系统采用电压、电流互感器对输入信号进行降压处理,经AD736转换得到原信号的真有效值,由TLC549转换为数字量后送入单片机内进行简要的数据处理并将结果通过LCD实时显示,达到了较好的性能指标。

关键词:工频数字电压(电流)表真有效值AD736 TLC549 AT89S52AbstractIn practice, RMS is the most widely used parameters. Except in special circumstances,voltage meter readings almost all carried out by the RMS of sine wave . The reasons of RMS is widely available, on the one hand, because it directly reflects the size of the exchange of signal energy, which the study of power, noise, distortion, spectrum purity, energy conversion, such as it is very important; On the other hand, it has a very simple superposition of the nature of the calculation will be extremely convenient. The design of single-chip Atmel Corporation AT89S52 as control core, by the current sensor module, True RMS measurement modules, signal conditioning modules, AD acquisition and control module, display module. System uses a current sensor circuit for step-down of the input signal processing, has been converted by the original AD736 True RMS signal by the TLC549 convert into single-chip digital conducted after the brief and the results of data processing in real time through the LCD display, achieve a better performance.Keyword: Digital voltage(current) meter True RMS AD736 TLC549AT89S52目录第一章绪论 (1)§1.1 选题背景及意义 (1)§1.2 系统设计任务 (1)第二章系统总体设计 (2)§2.1 方案论证与比较 (2)2.1.1 电压、电流变换部分 (2)2.1.2 有效值测量部分 (2)§2.2 系统总体设计 (2)第三章硬件设计 (4)§3.1 传感器电路设计 (4)3.1.1 电压互感器 (4)3.1.2 电流互感器 (4)§3.2 真有效值转换电路设计 (5)3.2.1 电压、电流切换电路 (5)3.2.2 真有效值测量电路 (6)§3.3 信号调理电路设计 (7)§3.4 A/D转换电路设计 (7)§3.5 单片机及显示电路设计 (9)第四章软件设计 (10)§4.1 LCD1602液晶显示程序 (10)§4.2 A/D转换程序 (10)§4.3 主程序设计 (12)第五章系统调试及误差分析 (13)§5.1 系统调试及测试结果 (13)5.1.1 AD736测试结果 (13)5.1.2 OP07测试结果 (13)5.1.3 TLC549测试结果 (13)5.1.4 工频电压测量精度 (14)5.1.5 工频电流测量精度 (14)§5.2 误差分析 (14)§5.3 改进方法 (15)结束语 (16)致谢 (17)参考文献 (18)附录 (19)附录一完整电路图 (19)附录二程序清单 (20)第一章绪论§1.1 选题背景及意义在日常的生产、生活和科研中,工频电无处不在,所谓工频就是电力供电系统交流电的频率,我国国家规定工频为50赫兹,即周期为0.02秒,英、美等国规定的工频为60赫兹。

基于单片机正弦波有效值测量仪表设计

基于单片机正弦波有效值测量仪表设计

电子系统设计创新与实践设计报告题目:基于单片机正弦波有效值测量仪表设计院(系):信息科学与工程学院专业班级:电子信息工程学生姓名:学号:同组成员:指导老师:肖洪祥职称:副教授2012年7月摘要在实际中,有效值是应用最广泛的参数,电压表的读数除特殊情况外,几乎都是按正弦波有效值进行定度的。

有效值获得广泛应用的原因,一方面是由于它直接反映出交流信号能量的大小,这对于研究功率、噪声、失真度、频谱纯度、能量转换等是十分重要的;另一方面,它具有十分简单的叠加性质,计算起来极为方便。

本文详细介绍一个正弦波有效值测量仪表设计,以STC89C52单片机为控制核心,由交流电压采集模块,正弦波转方波模块,AD转换模块、显示模块等构成。

系统采用交流电压输入信号,经TLC372比较器和LM358放大器进行信号采集,经过AD0809进行数据采样,然后输入到89C52单片机进行交流电压有效值的计算和测量,加上CD4049进行正弦波转换为方波,输入到89C52单片机进行频率的计算和测量,结果用1602液晶显示正弦波的有效值和频率。

关键词:交流电压有效值测量 AD0809 STC89C52AbstractIn practice, the effective value is the most widely used parameters, voltage meter except in special circumstances, are almost as effective value of sine wave for calibration. Effective value and widely applied reasons, partly because it directly reflects the AC signal energy, the study of power, noise, distortion, frequency spectrum purity, energy conversion is very important; on the other hand, it has a very simple superposition property, calculation is very convenient.This paper describes an effective value of sine wave measuring instrument design, using STC89C52SCM as control core, by the AC voltage acquisition module,sine wave to square wave module, the AD conversion module, display module. The system adopts the AC input signal, the comparator TLC372and LM358 amplifier for signal acquisition, through AD0809 data sampling, and then input to the SCM 89C52AC voltage effective value calculation and measurement, and CD4049are converted to square wave sine wave, input to the SCM 89C52frequency calculation and measurement, the results with the 1602 liquid crystal display sinusoidal RMS and frequency.Key words: Ac voltage RMS measurement AD0809 STC89C52目录1. 概述1.1 题目名称1.2 功能和指标要求1.3相关情况概述2.技术方案2.1有效值测量的方法2.2设计思路2.3总体技术方案3.硬件设计3.1信号采集电路3.2正弦波转方波电路3.3 ADC0809电路3.4单片机最小系统和1602显示电路 3.5电源电路4.软件设计4.1 频率测量4.2幅度测量4.3软件测试1. 概述1.1 题目名称基于单片机的正弦波有效值测量仪表设计。

单片机课设 正弦交流信号有效值的测量

单片机课设 正弦交流信号有效值的测量

正弦交流信号有效值的测量,需要测量正弦信号的峰值,利用正弦信号有效值的计算公式就可以得到正弦信号的有效值。

要进行基于单片机的正弦信号有效值的测量,需要先将模拟量转换为数字量,将所得的数据经由单片机处理,再将最后的结果显示出来。

设计的电路主要包括信号采集与转换电路,单片机控制电路和显示电路。

其中,有效值的计算在本次设计中主要利用软件部分的设计完成。

关键词:有效值测量,模数转换电路,单片机控制AbstractSinusoidal ac signal effective value measurement, need to measure the peak value of the sine signal, using the sine signal effective value calculation formula of the effective value of sine signal can be calculated out. Must carry on the sine signal RMS measurement based on single chip microcomputer, need to convert analog to digital quantity, will the data processed by single chip microcomputer, then the final result of display. Design the circuit mainly includes signal acquisition and conversion circuit, SCM control circuit and display circuit. Among them, the RMS calculation in the design of the main use of the design of the software part is complete.Keywords: RMS measurement, modulus conversion circuit, single chip microcomputer control1 电路设计为了测得正弦信号的有效值,硬件电路的设计应包括信号的输入采集电路,模拟量与数字量转换电路,单片机控制电路与数字显示电路。

基于单片机正弦波信号发生器

基于单片机正弦波信号发生器

目录目录 (1)一、设计要求 (2)二、设计方案与论证 (2)三、设计原理及电路图(设计原理及流程图) (3)四、元器件清单 (6)五、元器件识别与检测 (6)六、硬件制作与调试(软件编程与调试 (10)七、设计心得 (14)八、参考文献 (15)一、设计要求本文介绍一种由直接数字频率合成芯片AD9835设计的正弦信号发生器,该芯片支持高达50MHZ的时钟频率,可以产生最高达25MHZ 的正弦波形。

通过单片机控制完全可以满足设计所要求的正弦波信号的生成。

本次设计的基于单片机的信号发生器设计就是一个单片机控制系统,对信号发生芯片进行的控制。

通过单片机对信号发生芯片经行精密控制,实现对波形的频率和幅度的控制。

这些控制可以通过键盘设定,这就要求对选择的信号发生芯片,选用的单片机有初步的了解,并对整个系统的结构有个合理的分配。

二、设计方案与论证方案一:直接利用单单片机编程产生正弦波优点:简化了产生正弦波的硬件和软件,电路结构简单。

缺点:编程复杂,波形失真较大,不能达到要求输出的高频信号。

方案二:利用单片机控制直接数字频率合成芯片DDS产生的正弦波,通过单片机,键盘LED数码显示管显示实现波形的数字控制。

优点:控制简单,波形效果好,频率带宽。

缺点:硬件电路复杂。

为了满足设计要求,取得较好的效果,显然方案二更为合理。

三、设计原理及电路图3.1 DDS的基本原理DDS的基本原理是:在高速存储器中放入正弦函数——相位数据表格,经过查表操作将读出的数据送到高速DAC产生正弦波。

可编程DDS系统原理如图所示:图1 DDS的基本原理图图2 总体设计原理图3.2 AD9835芯片主要技术指标如下:频率范围: 0.1HZ-10MHZ频率分辨率:0.1HZ频率稳定度:1*10ˉ7输出幅度:0-±10v可调AD9835的相位累加器为32位,取其高十二位为读取余弦波形存储器的地址。

每一次,时钟使相位累加器的输出也即余弦ROM寻址地址递增频率设定数据K,对应的波形相位变化为△P=2^n *K/232因此,改变相位累加器设定值K,就可以改变相位值△P,从而改变合成信号频率f。

基于单片机正弦波有效值的测量

基于单片机正弦波有效值的测量

基于单片机正弦波有效值的测量一.简介本作品以单片机STC12C5A60S2为主控芯片并以此为基础,通过二极管1N5819实现半波整流,使用单片机内部自带10位AD对整流后的输入信号进行采样,从而实现对峰值的检测;同时通过运放LM837对输入信号进行放大,之后通过施密特触发器,将原始信号整形成可被单片机识别的标准脉冲波形,之后配合内部计数器(定时器)达到测量其频率的目的;这样,整流和AD采样实现对输入信号峰值的检测;通过放大、整形实现对输入信号频率的检测。

二.基本功能与技术指标要求(1)输入交流电压:1mV~50V,分五档:①1mV~20mV,②20mV~200mV,③200mV~2V,④2V~20V,⑤20v~50V。

(2)正弦频率;1Hz~100kHz;(3)检测误差:≤2%;(4)具有检测启动按钮和停止按钮,按下启动按钮开始检测,按下停止按钮停止检测;(5)显示方式:数字显示当前检测的有效是,在停止检测状态下,显示最后一次检测到的有效值;(6)显示:LCD,显示分辨率:每档满量程的0.1%;三.理论分析本文要求输入交流信号,通过电路测量其峰值,频率,有效值以及平均值,因为输入的交流信号为模拟信号,而一般处理数据使用的主控芯片单片机处理的是数字信号,所以我们选择使用数模转换器AD(Analog to Digital Converter)将输入的模拟信号转换为数字信号,并进行采样;由于要求输入交流信号电压峰峰值Vpp为50mV~10V,所以如果我们采用AD为8位,则最小采样精度为,因此会产生78.4%的误差,并且题目要求输入交流信号的频率范围为40Hz~50kHz,所以为了保证对高频率信号的单周期内采样个数,我们需要选择尽量高速度的AD;因此我们选用使用单片机STC12C5A60S2,其内部自带AD为8路10位最高速度可达到250KHz,所以我们可以将最小采样精度缩小到,并且在输入交流信号频率最大时(50KHz)在单个周期内可采集5个点,因此可保证测量精度。

(完整word版)基于单片机的正弦波信号发生器的设计

(完整word版)基于单片机的正弦波信号发生器的设计

(完整word版)基于单片机的正弦波信号发生器的设计毕业设计论文题目:基于单片机的正弦波信号发生器的设计系部:电子信息工程系专业名称:电子信息工程技术班级: 08431 学号:33姓名:顾伟国指导教师:郑莹完成时间:2011 年 5 月12 日(完整word版)基于单片机的正弦波信号发生器的设计基于单片机的正弦波信号发生器的设计摘要:信号发生器的应用越来越广,对信号发生器的频率稳定度、频谱纯度、频率范围和输出信号的频率微调分辨率提出越来越高的要求,普通的频率源已经不能满足现代电子技术的高标准要求。

因而本设计采用了AT89C51单片机为控制核心,通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生1HZ—180HZ的正弦波波形。

通过键盘来控制波形频率变化,并通过液晶屏1602显示其波形以及频率和幅度值的大小。

关键字:信号发生器;AT89C51;D/A转换器DAC0832Based on SCM sine wave signal generator designAbstract:Signal generator used more and more widely, to signal generator frequency stability, the spectrum purity,frequency range and output signal frequency fine-tune resolution higher and higher demands are proposed,the average frequency source cannot have satisfied the high standard requirement of modern electronic technology. So this design USES A AT89C51 as control core,through the D/A converter DAC0832 converts digital signals into analog signals, filter and amplification, finally shown by oscilloscope 1HZ — 180HZ, can produce the sine wave。

基于单片机50hz正弦波有效值的测量

基于单片机50hz正弦波有效值的测量
设置三组开关,分别为 0~5V、5~10V、10~15V,当仿真的时候,输入相 应区间的幅度便要将开关拨到相应的位置上,以便能够将电压降低转换芯片的安 全电压范围之内,在后面的电路中在进行相应的放大就可以将电压值还原了。 当电压值小于 5V 的时候,连接到第一个开关上面,直接输出至 TLC549 的输入端; 当电压值在 5~10V 的时候,接到第二个开关上面,通过分压了之后,输出 R4 两端的电压,起到了降压的目的(电压减半);当电压值在 10~15V 的时候,连 接到第三个开关,分压之后,电压值降到了原来的三分之一,仍就满足了转换芯 片的电压要求。
关键词:正弦波、有效值 、A/D 转换、AT89C52
I
武汉理工大学《单片机原理与应用》课程设计说明书
Abstract
In the description of the sine wave, typically from three aspects, namely, frequency, phase, maximum value, when measuring the general measurement is the instantaneous value of the sine wave, can generally through the relationship between the effective value and the maximum effective value. RMS widely be used in our daily life, the reason lies in the effective value directly reflects the size of the energy of the ac signal, at the same time, due to the nature can be stacked, convenient to calculate, for power, noise, energy conversion research is very helpful.

基于单片机MSP430的正弦输出波形设计

基于单片机MSP430的正弦输出波形设计

Ξ 收稿日期:2006-03-14;修回日期:2006-04-15作者简介:陈古波(1975-),男,重庆人,主要从事实验教学工作.【计算机与自动化】基于单片机MSP430的正弦输出波形设计Ξ陈古波,向险峰,李 双(重庆工学院电工电子技术实验中心,重庆 400050)摘要:根据电力系统模拟测试继电保护的需要,采用MSP430单片机产生正弦信号来控制需要输出的模拟量.介绍了该方法的硬件组成和软件编程,并给出了具体的程序.最后介绍了该设计在实际的测试系统中的应用.关 键 词:正弦波;MSP430F1611;在线编程;象限;继电保护中图分类号:TP21 文献标识码:A 文章编号:1671-0924(2006)08-0087-03The Design of Sinusoidal W ave ’s Output B ased on SCM MSP 430CHE N G u-bo ,XI ANG X ian-feng ,LI Shuang(E lectrical &E lectronic T echnology Lab Center ,Chongqing Institute of T echnology ,Chongqing 400050,China )Abstract :Based on demand of electric power system for simulated relay protection test ,SC M MC U (MSP430)is used to produce sinus oidal signal s o as to control the output of simulative variables.This paper introduces the hardware com ponents and s oftware programming and puts forward specific programs ,and final 2ly introduces the application of the design in actual testing systems.K ey w ords :sinus oidal wave ;MSP430F1611;On-line programming ;quadrant ;relaying protection0 引言 随着工业技术的迅猛发展,人们对电力的运行提出了更高的要求.要保证电力的运行可靠,必须配备先进的检测手段.以往检测电力设备,多采用模拟装置产生正弦信号进行调试,这种方法可控性不强,操作比较繁琐,无法实现自动化测试,精度也不能满足要求.本文中基于单片机MSP430的正弦输出波形设计,采用数字式的方式产生正弦信号,保证了输出的可控性和操作的简单性,能完全实现了自动化测试功能.本文中采用的TI 公司的MSP430单片机,由于指令少,编程语言采用C 语言编程(C430),具有在线编程的功能,可以大大缩短开发周期,降低开发成本.相对于系统机而言,基于单片机的设备由于携带方便,性能可靠,且具有价格优势,更适合于基层的检测调试.1 正弦波的特征 正弦函数的表达式为y =A sin (ωt +θ),由该函数表达式可以得知正弦函数有3个量:幅值A ,初始相位θ,角频率ω(转化为频率f ,其关系式为ω=2πf ).如果这3个量是确定的,正弦函数就只是一个与时间有关的周期函数.2 单片机的选型 单片机选型主要应从以下几个方面入手:①单片机系列产品的完整性是否利于后续产品的升级;②其管脚能否兼容;③RAM 的空间容量;④程序空间的大小;⑤端口及中断的数量;⑥编程方式是否容易;⑦有无硬件乘法器.参数的选择需要根据项目的要求而定,在笔者开发的这个项目中,选用的是TI 公司的MSP430F1611单片机,其主要参数、结构和功能如下:①低电源电压范围:1.8~3.6V ;②从等待到唤醒时间:6μs ;③基本时钟模块配置:第20卷 第8期Vol.20 No.8重 庆 工 学 院 学 报Journal of Chongqing Institute of T echnology2006年8月Aug.2006高速晶体(最高10MH z )、低速晶体(32768H z )、DC O 具有3/7个捕获/比较寄存器的16位定时器T imer-A3/T imer-B7;④两通道串行通信接口可用于异步与同步(软件选择US ART /SPI 模式);⑤具有一个硬件乘法器和12位A/D 转换器———ADC12;⑥2个具有中断功能的8位并行端口———P1和P2;⑦多达48K B 的F LASH ROM 和10K B RAM ;⑧具有串行在线编程和安全熔丝的程序代码保护功能.3 项目的实现3.1 硬件部分.由单片机MSP430的P1和P4口(具有控制I/O 方向、输出、输入的功能)输出16位的正弦函数数值,经过D/A 转换,输出正弦波形.D/A 选用16位、有4路输出的DAC7644.图1为该项目硬件框图:图1 硬件实现电路框图 其中键盘为项目的功能选择部分,通过旋转编码器实现数值输入,开入量采集为继电保护的触点引入处理电路,保护电路用于仪器出口出现故障时切断输出,D/A (DAC7644)将单片机输出的数值转化为所需的正弦波形,滤波放大是将D/A 输出波形进行放大、平整光滑处理,功率模块是将小信号放大,目的是能够提供强负载的大电流、电压,通过外接高精度的检测仪表可以自动调节仪器的输出精度.3.2 软件部分.由于单片机处理的是数字信号,而正弦波是一个连续变化的模拟量,所以就必须对一个周期内的正弦波形进行点数选择(斩波处理).周期内选择的点数越多,得到的波形就越接近真实的波形;但另一方面,由于单片机处理的速度有限,点数如果选取过多,单片机就无法处理其它程序,进而导致死机.本文中在一个周期内(一个周期360°)选择100点,即每隔3.6°计算一个正弦函数值,由单片机中断送出.图2为该程序流程图.由于单片机处理正弦函数的计算会耗去很长时间,如果单片机一边中断送数,一边计算下一个点的正弦函数值,这样在速度响应上就会存在问题.因此该项目采用先计算好一个周期为100点的正弦函数值,存放在RAM 中,在中断送数的过程中只负责取出数据即可.根据正弦函数的特点有:当0°ΦαΦ180° sin α=sin (180°-α)当180°<α<360° sin α=-sin (360°-α)所以,只要0°ΦαΦ90°求出的函数值,周期内其它函数值也就相应确定(在此用sinn[]数组存储以0.1°为步长、0°ΦαΦ90°的正弦函数值),其目的是为了节约单片机的程序空间,如果以0.1°(分辩率)存储一个点(2个字节),90°需要占用1.8K 字节,360°就需要占用7.2K 字节,这会对单片机的有限空间将造成极大浪费.图2 MSP430输出正弦波形程序流程图 由于sinn[]数组只存储了0°ΦαΦ90°的函数值,所以在求整个周期内的函数值时,需要判断该点所处的象限,再进行查表计算.以下为在RAM 中存放周期内100个点的正弦函数值的实现程序:v oid zxcx w (long fz ,float g ,int zero )∥正弦函数初始相位判断及计算{ int n ,n0,t ;float g f ;xx1:∥计算初始相位0°~90°的正弦函数数组n0=g f 310;∥初始点for (n =0;n <100;n ++) ∥总点数为100,正弦波两个点之间相差3.6°, { t =n0+363n ; ∥而sinn[]存储的两个点间隔0.1°if (t >900)g oto c11; ∥第1象限an[n]=0x7fff +zero +(fz 3sinn[t ]>>15);return ; c11: if (t >1800)g oto c22; ∥第2象限t =1800-t ;an[n]=0x7fff +zero +(fz 3sinn[t ]>>15);return ; c22: if (t >2700)g oto c33; ∥第3象限t =t -1800;an[n]=0x7fff +zero -(fz 3sinn[t ]>>15);return ;88重庆工学院学报 c33: if(t>3600)g oto c44; ∥第4象限t=3600-t;an[n]=0x7fff+zero-(fz3sinn[t]>>15);return; c44:∥第1象限 t=t-3600;an[n]=0x7fff+zero+(fz3sinn[t]>>15);return; }}v oid zxa(float vifa,float ga,int zeroa)∥A相正弦函数(幅值、相位、零点){ long a; int n;∥满度为30000 a=vifa32003iF LASH-Valuea+0.5;∥iF LASH-Valuea为修正系数 zxcx w(a,ga,zeroa); for(n=0;n<100;n++) {bn1[23n]=an[n]>>8; bn1[23n+1]=an[n];}}如果一个周期频率f=50H z,则T=1/f=20ms,根据项目要求在一个周期内单片机送出100个点,那么单片机每隔200μs就需送出一个点,下面为定时器中断定时间隔设定的程序.如果要改变周期的频率,只需改变CCR0的值即可,程序如下:∥定时器timer-A设置T ACT L=0x0214; ∥设timer-A时钟源为系统主时钟MC LK(10MHZ),0x0200∥设timer-A为增记数模式,0x0010∥设timer-A定时器清0,0x0004CCT L0=CCIE; ∥中断允许CCR0=2000; ∥定时器设定值,2000=200uS为了得到连续的正弦波形,单片机在送数的过程不能被其他程序中断,只要当定时器的值满足设定值时,就按既定点的顺序送出正弦波的函数值.以下为中断函数程序:#pragma vector=TI MERA0-VECT ORinterrupt v oid T imer-A0(v oid)∥定时器A中断函数{ P5OUT=0X0F; ∥选A通道和W P4OUT=bn1[n1];∥P4口输出高8位 n1++; P1OUT=bn1[n1];∥P1口输出低8位 n1++; if(n1>199)n1=0;∥送完100点后n1置0重新下一个周期送数 P6OUT=0XF0;∥DA片选变低 P6OUT=0XF7;}4 项目的应用 通过单片机实现正弦波的输出,外接电压、电流功率放大模块,就可方便地实现对电压、电流幅值的自由调节、频率大小的改变和相位的随意控制,可广泛应用于电力系统中的继电保护的测试.如可用于电流、电压、频率动作值测试,相位动作边界测试,触点动作时间的测试,整祖传动测试(瞬时故障、永久故障),低周减载测试等等.参考文献:[1] 胡大可.MSP430系列F LASH型超低功耗16位单片机[M].北京:北京航空航天大学出版社,2001.[2] 胡大可.MSP430系列单片机C语言程序设计与开发[M].北京:北京航空航天大学出版社,2003:56-177.[3] 魏小龙.MSP430系列单片机接口技术及系统设计实例[M].北京:北京航空航天大学出版社,2002.[4] 尹项根.电力系统继电保护原理与应用[M].武汉:华中科技大学出版社,2001.[5] 张举.微型机继电保护原理[M].北京:中国水利水电出版社,2004.(责任编辑 刘 舸)98陈古波,等:基于单片机MSP430的正弦输出波形设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于单片机正弦波有效值的测量一.简介本作品以单片机STC12C5A60S2为主控芯片并以此为基础,通过二极管1N5819实现半波整流,使用单片机内部自带10位AD对整流后的输入信号进行采样,从而实现对峰值的检测;同时通过运放LM837对输入信号进行放大,之后通过施密特触发器,将原始信号整形成可被单片机识别的标准脉冲波形,之后配合内部计数器(定时器)达到测量其频率的目的;这样,整流和AD采样实现对输入信号峰值的检测;通过放大、整形实现对输入信号频率的检测。

二.基本功能与技术指标要求(1)输入交流电压:1mV~50V,分五档:①1mV~20mV,②20mV~200mV,③200mV~2V,④2V~20V,⑤20v~50V。

(2)正弦频率;1Hz~100kHz;(3)检测误差:≤2%;(4)具有检测启动按钮和停止按钮,按下启动按钮开始检测,按下停止按钮停止检测;(5)显示方式:数字显示当前检测的有效是,在停止检测状态下,显示最后一次检测到的有效值;(6)显示:LCD,显示分辨率:每档满量程的0.1%;三.理论分析本文要求输入交流信号,通过电路测量其峰值,频率,有效值以及平均值,因为输入的交流信号为模拟信号,而一般处理数据使用的主控芯片单片机处理的是数字信号,所以我们选择使用数模转换器AD(Analog to Digital Converter)将输入的模拟信号转换为数字信号,并进行采样;由于要求输入交流信号电压峰峰值Vpp为50mV~10V,所以如果我们采用AD为8位,则最小采样精度为,因此会产生78.4%的误差,并且题目要求输入交流信号的频率范围为40Hz~50kHz,所以为了保证对高频率信号的单周期内采样个数,我们需要选择尽量高速度的AD;因此我们选用使用单片机STC12C5A60S2,其内部自带AD为8路10位最高速度可达到250KHz,所以我们可以将最小采样精度缩小到,并且在输入交流信号频率最大时(50KHz)在单个周期内可采集5个点,因此可保证测量精度。

由于该AD只能接受0~5V的模拟信号输入,所以当我们直接输入一个双极性信号时可能损坏AD,因此当信号进入AD之前我们要进行半波整流,为此我们设计了整流电路,在交流信号通过整流电路输入AD后,由AD实时输出对应模拟信号大小的二进制数,并存入变量MAX中,随着信号的不断输入MAX中只保存AD输出过的最大值,这样既可测出输入信号的峰值;由交流信号有效值表达式可知检波器应当首先把输入的瞬时电压平方, 然后在一定平均时间内取平均值再开方。

即可得到交流信号的有效值,然后通过比较峰值和有效值的关系即可知道该交流信号的波形;由于要检测交流信号的频率,所以我们使用单片机内部定时器和计数器,而计数器只能由上升沿或是下降沿触发,所以我们想通过施密特触发器将输入交流信号变为高低电平,以便检测其频率,而施密特触发器CD40106在常温5V供电下门限电压=1.4V,而输入交流信号的峰值最小时为25mV,所以不能保证输入信号为正的时候施密特触发器就能发生跳变,因此我们要对输入交流信号进行放大,为此我们设计了放大电路。

四.电路设计1.电源电路的设计本次实验我们采用+5V,—5V,+12V,—12V的电源,故采用了7805,7905,7812,7912这四块芯片组成电源电路对作品进行供电。

如图一所示:图一经过测量实际输出电压为:+5.12V -5.06V +12.67V -12.02V 2.分档设计由于直接对信号测量时,对小信号的测量产生很大的误差,为了更有效的利用单片机的资源,故要对待测信号进行分档处理,但在实际运行中,由于进入放大器之前存在大量电阻产生了很多的噪声干扰,使输出波形严重失真,不能有效的利用,故我们舍弃了该部分的电路。

3.整流电路的设计我们使用整流二极管5819实现半波整流,但通过此电路输出波形会出现一个负电压,因此在此基础上,我们在二极管后加了一个上拉电阻,实现最大程度的消除输入波形的负电压,使其在单片机STC12C5A60S2内部AD的可接收信号范围内(0-5V)。

输入信号经过整流后进入AD,由AD输出10位数字信号,再有单片机进行处理,得出信号的有效值。

电路如图二所示:图二在实际的测试中,证明该方案可行,能够实现对信号的半波整流处理。

4.正弦波转方波电路设计在该电路的设计中,我们一开始采用555芯片把正弦波转换为方波,但在实际的测试中发现555只能对高于6V的信号才能使正弦波转换为放波,与我们实习要求不符合,故舍弃了该方案。

在老师的指导下,我们采用了滞回比较器来产生方波。

本方案检测输入信号频率的核心电路,信号通过由三个运放LM324组成的运放电路后放大100倍,然后输入施密特触发器使其波形变为高低电平,将此波形输入到单片机主控芯片,利用单片机内部的计数器和定时器完成对频率的测量。

大部分采用运放LM324构成放大100倍电路,位于图下方由5V电源供电的运放可以产生一个2.5V的直流电压,将此2.5V的直流电压输入到第一级运放后,会使输入的交流信号上偏2.5V,变为0-5V,再经过100000pF的电容C3滤掉被放大的噪声以及2.5V直流后,变为-2.5—+2.5的交流信号,之后进入二级放大;如图所示第二级运放在加入+2.5V直流电压后输出为0—5V的交流信号,至此外加交流信号已被放大100倍;在外加交流信号被放大100倍之后进入施密特触发器CD40106,该触发器在常温5V供电下门限电压=1.4V ,输出高电平,低电平,此部分电路输出即为这个高低电平。

电路如图三所示:图三在实际的检测中发现放大器并不能将信号放大100倍,故幅值较小的信号不能正常显示频率,只要当信号的峰峰值大于1.5V时才能使单片机正常显示信号的频率。

5.单片机电路采用STC12C5A60S2单片机,作为整个系统的控制器,控制各个模块协调工作。

运用其内部集成的一个AD作为数模转换器。

如图四所示图四6.系统整体电路图如图五所示图五四.软件设计AD流程图如图六图七所示图六图七1.正弦波有效值的测量方法工频正弦电压信号)2sin(2)2sin()(ϕπϕπ+=+=ft U ft U t u mt频率f 和初相位角ψ已知,且ψ=0,现以t=0时可作为基准时间,并在t=0时刻开始进行等间隔采样,共得到正弦波u(t)的N 个测量值(采样数据)u(0),u(1),……,u(N-1),希望利用这N 个测量值来计算正弦波的幅值Um (有效值U )。

设采样周期为T S ,如果不存在噪音,且测量无偏差,则有0)0sin()0(==m U u)2sin()0(S m T f U u ⋅⋅=π……)2sin()(S m T K f U k u ⋅⋅⋅=π……))1(2sin()1(S m T N f U N u ⋅-⋅⋅=-π我们可以设法利用测量值求解出正弦波参数。

实际上,我们的测量存在误差,同时信号存在噪音,因此,对每一个测量信号u(k),它与对应时刻t=k ·T S 的正弦波)2sin()(ft U t u m π=的值)2sin()(s m T k f U t u ⋅⋅⋅=π存在一个误差)(k e ,其中k=0,1,…,N-1。

定义)()2sin()(k u T k f U k e S m -⋅⋅⋅=π为了利用N 个测量值来尽可能准确的计算正弦波幅值Um ,我们定义指标函数为:∑∑-=-=-⋅⋅⋅⋅==102102)]()2sin([)(21)(N k s m N k m k u T k f U k e U πε 它是频率f ,幅值Um ,初相位角ψ的函数。

我们的目的就是求频率f ,幅值Um ,初相位角ψ使得目标函数ε最小。

为此,令)1(0)2sin()()2(sin )}2sin()]()2sin({[)(101021-------------------------------------------------=⋅⋅⋅⋅-⋅⋅⋅⋅=⋅⋅⋅⋅-⋅⋅⋅⋅=∂∂∑∑∑-=-=-=N k s N k s m N k s S m m m T k f k u T k f U T k f k u T k f U U U ππππε可以得到正弦波的幅值∑∑-=-=⋅⋅⋅⋅⋅⋅⋅=10210)2(sin )2sin()(N k s N k sm T k f T k f k u U ππ 为了与正弦波的真正幅值Um 表示上的区别,用U mC 表示利用N 个采样数据获得的正弦波幅值计算值,既)2()2(sin )2sin()(10210∑∑-=-=⋅⋅⋅⋅⋅⋅⋅=N k s N k smC T k f T k f k u U ππ 对于f ≈50Hz(以前面的测量值为准,这里仅为举例),选择采样周期T S ≈20/200=0.1ms=100us ,既每个周期采样200点(每半个周波100次采样),199,...,1,0)10sin()2sin(=⋅=⋅⋅⋅k k T k f S ππ是确定的(可以预先求出,存于sin 表中),sin 2(2π·f ·k ·T S )同样作为常数表,而且C T k f N k s =⋅⋅⋅∑-=102)2(sinπ本身是一个常数,因此公式(2)变为)3()2sin()(10C T k f k u U N k smC ∑-=⋅⋅⋅⋅=π当采样周期很小时,数值积分系数C 可以用)4()()(sin 1202t d t T C S ωωπ⎰⋅=来替代(可以认为C 是一个周期类的数值积分,当采样周期很小时,就用积分项来表示)。

就可利用N 个等间隔测量值计算出正弦信号的峰值Um 。

正弦波的有效值与峰值的关系)5(2mCC U U =半波绝对值电路:在待测交流信号的正半波,输出待测信号送AD 变换电路,在待测信号的负半波,输出0.正半波时,Px.y=0,单片机利用该信号识别是正半波信号,进行AD 转换,获得N 个采样值。

在Px.y=1时,单片机暂停AD 变换,利用正半波获得的N个检测信号计算正弦波的有效值U,频率f。

2.数据测量幅值的测量表1频率的测量表23.数据分析由上图可知在输入信号vpp在0.7v到5v的区域内,实验作品的误差较小能够实现有效值的测量,当频率在100Hz到40KHz时,在误差允许范围内,作品基本能完成对该信号的准确测量。

4.软件部分代码:#include <reg52.h>#include <intrins.h>#define FOSC 12000000L#define BAUD 9600typedef unsigned char BYTE;typedef unsigned int WORD;sbit LCM_E=P2^5;//定义接口sbit LCM_RW=P2^6;sbit LCM_RS=P2^7;sfr ADC_CONTR = 0xBC;sfr ADC_RES = 0xBD;sfr ADC_LOW2 = 0xBE;sfr P1ASF = 0x9D;sfr AUXR = 0x8e;#define ADC_POWER 0x80#define ADC_FLAG 0x10#define ADC_START 0x08#define ADC_SPEEDLL 0x00#define ADC_SPEEDL 0x20#define ADC_SPEEDH 0x40#define ADC_SPEEDHH 0x60#define LCM_Data P0//数据接口void InitUart();void SendData(BYTE dat);void Delay(unsigned int n);void IO_ADinit() ;void ADC_Power_On() ;void get_ad_result() ;void ADCONVERT() ;void WriteDataLCM(BYTE WDLCM);void WriteCommandLCM(BYTE WCLCM,BuysC);BYTE ReadDataLCM(void);BYTE ReadStatusLCM(void);unsigned int GetADCResult(BYTE ch);void LCMInit(void);void DisplayOneChar(BYTE X, BYTE Y, BYTE DData);void DisplayListChar(BYTE X, BYTE Y, BYTE code *DData); void Delay5Ms(void);void Delay400Ms(void);void Disp_number(unsigned int num,BYTE n);void ShowResult(BYTE ch);unsigned int GetADCResult(BYTE a);unsigned int data_max = 0;unsigned long data_max1,count =0;unsigned int data_change = 150;//0.7Vunsigned char code VP[4]={"Amp:"},Freq[5]={"Freq:"};unsigned int Counter = 0;unsigned int data_last = 0;BYTE ch = 0;unsigned int Frequency = 0;unsigned int nn =0,flag = 0,flag1 = 0,nn1=0; unsigned int PrintFre[5] ;unsigned int Print[4];unsigned int number[4];unsigned int D;void main(){unsigned int n=0;Delay400Ms();//启动等待,等LCM讲入工作状态LCMInit();//LCM初始化Delay5Ms();//延时片刻(可不要)ET1 = 1;EA=1;InitUart();TMOD = 0x15;//均为16位计数器TH0 = 0x00;TH1 = 0x3C;TL1 = 0xAF;TCON = 0x50;//T1,T0均工作,t1做定时器,t0做计数器;while(1){ADCONVERT();n++;if(n>10000){data_max=0;n=0;}}}void To_interrupt(void)interrupt 3 using 1{int i ,j;unsigned int Change1,Print[4];unsigned long int Change2;TL1 = 0xAF;Counter = Counter++;if(Counter == 20){Frequency = (TH0<<8)+TL0;//读取此时计数器0的读数if(Frequency>=2000)Change1 = (Frequency/100)*92;else if (Frequency>=200)Change1 = ((Frequency/10)*92)/10; else Change1 = (Frequency*97)/100;for( i=0;i<5;i++){PrintFre[i] = Change1 % 10;Change1 = Change1 / 10;}for(i=4;i>=0;i--){if(i>0)DisplayOneChar(4-i,0,PrintFre[i]+48);else{DisplayOneChar(4-i,0,PrintFre[i]+48);DisplayListChar(5-i,0,"Hz");}}Change2 = data_max*50;Change2 = Change2/10/1.414;for(j=0;j<=3;j++){Print[j] = Change2 % 10;Change2 = Change2 / 10;}for(j=3;j>=0;j--){if(j>0) DisplayOneChar(10-j,0,Print[j]+48);else { DisplayOneChar(10-j,0,Print[j]+48);DisplayListChar(11-j,0,"mV");}}TH1 = 0x3C;TL1 = 0xAF;TH0 = 0xFF;TL0 = 0xFC;Counter = 0;}}void IO_ADinit(){ADC_CONTR=0xe0; //设置P1.0为输入AD转换口_nop_(); //ADC_CONTR需要四个指令延时_nop_();_nop_();_nop_();}void ADC_Power_On(){ADC_CONTR|=0x80;_nop_();_nop_();_nop_();_nop_();}void get_ad_result(){unsigned int q=0,ad_average_result;ADC_RES=0;ADC_LOW2=0;ADC_CONTR|=0x08;while(!(ADC_FLAG&ADC_CONTR)) ;ADC_CONTR&=0xE7;ad_average_result=(ADC_RES<<2)+ADC_LOW2;if(data_max<ad_average_result)data_max=ad_average_result;}void ADCONVERT(){ADC_Power_On();IO_ADinit();get_ad_result();}void InitUART(){SCON = 0x5a;PCON|= 0x80;}void SendData(BYTE dat){while(!TI);TI = 0; SBUF = dat; }void Delay(unsigned int i){unsigned char j;for(i; i > 0; i--)for(j = 200; j > 0; j--) ;}void WriteDataLCM(BYTE WDLCM){ReadStatusLCM(); //检测忙LCM_Data = WDLCM;LCM_E = 0;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; //若晶振速度太高可以在这后加小的延时LCM_E = 1;LCM_E = 0;}void WriteCommandLCM(BYTE WCLCM,BuysC) //BuysC为0时忽略忙检测{if (BuysC) ReadStatusLCM(); //根据需要检测忙LCM_Data = WCLCM;LCM_E = 0;LCM_RS = 0;LCM_RW = 0;LCM_E = 1;LCM_E = 0;}BYTE ReadDataLCM(void){LCM_E = 0;LCM_RS = 1;LCM_RW = 1;LCM_E = 1;LCM_E = 0;return(LCM_Data);}BYTE ReadStatusLCM(void){LCM_Data = 0xFF;LCM_E = 0;LCM_RS = 0;LCM_RW = 1;LCM_E = 1;LCM_E = 0;while (LCM_Data & 0x80) //检测忙信号{ LCM_E=0;LCM_E=1;}return(LCM_Data);}void LCMInit(void) //LCM初始化{LCM_Data = 0;WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,0);Delay5Ms();WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号WriteCommandLCM(0x08,1); //关闭显示WriteCommandLCM(0x01,1); //显示清屏WriteCommandLCM(0x06,1); // 显示光标移动设置WriteCommandLCM(0x0C,1); // 显示开及光标设置}void DisplayOneChar(BYTE X, BYTE Y, BYTE DData){Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码0x40;X += 0x80; // 算出指令码WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码WriteDataLCM(DData);}void DisplayListChar(BYTE X, BYTE Y, BYTE code *DData) {BYTE ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1while (DData[ListLength]) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符}ListLength++ ;X++ ;}}void Disp_number(unsigned int num,BYTE n){BYTE a; //个位BYTE b; //十位BYTE c; //百位BYTE d; //千位// BYTE e; //万位switch(n){case 1:WriteDataLCM(num);break;case 2:b=num/10;a=num%10;WriteDataLCM(number[b]);WriteDataLCM(number[a]);break;case 3:c=num/100;b=num%100/10;a=num%10; WriteDataLCM(number[c]); WriteDataLCM(number[b]); WriteDataLCM(number[a]); break;case 4:d=num/1000;c=num%1000/100;b=num%1000%100/10;a=num%10; WriteDataLCM(number[d]); WriteDataLCM(number[c]); WriteDataLCM(number[b]); WriteDataLCM(number[a]); break;}}//5ms延时void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}//400ms延时void Delay400Ms(void){BYTE TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}五.实习总结:匆匆的4周过去了,我们的实习也将步入结束。

相关文档
最新文档