单片机产生正弦波

合集下载

MSP430F169产生正弦波

MSP430F169产生正弦波

MSP430F169单片机及波形发生器设计一、MSP430F169概述MSP430F169是TI公司进入中国市场的MSP430F系列单片机中功能最强的芯片。

具有60K程序存储区、2K的数据存储区、8路快速12 位A/D 转换器、双路12 位D/A 转换器,两个通用连续同步/异步通信接口(USART)、I2C 、DMA数据传送模块和48 个I/O 口等外围模块。

结构框图如图12-1所示(见下页)。

MSP430F169单片机为64引脚封装,其中大部分引脚有复用功能,见表12-1。

在波形发生器设计中使用两路DAC通道产生任意波形。

在使用高速时钟和端口时要根据需要将其初始化。

目前,只有MSP430F15/16X系列单片机具有DAC(数模转换)模块,可以将MSP430运算处理的数字量转换为模拟量。

MSP430F169的DAC模块是12位电压输出的数模转换模块(DAC12)。

DAC模块的主要性能指标:1)分辨率:这项指标反映了数字量在最低位上变化1位时输出模拟量的最小变化。

一般用相对值来表示。

对于8位的DAC模块来说,分辨率为最大输出幅度的0.39%,即1/256。

而对于12位DAC模块来说,分辨率可以达到0.024%,即1/4096。

2)偏移误差:它是指输入数字量为0时,输出模拟量对0的偏移值。

3)线性度:是指DAC模块的实际转移特性与理想直线之间的最大偏差。

4)转换速度:即每秒钟可以转换的次数,其倒数为转换时间。

5)参考源电压源:是影响模拟量输出的基准值。

MSP430F169单片机中的D/A功能如下所述:1)MSP430F169的DAC12模块包含两个DAC转换通道:DAC12_0和DAC12_1。

这两个通道在操作上完全平等。

2)DAC12的主要特征:12位分辨率,可选用内部或外部参考电压。

输入二进制数。

若选用内部2.5V参考源电压源,当输入DAC12的数字量从0x0到0xFFF变化时,对应的输出电压量也就从0到2.5V变化。

用单片机产生正弦波程序

用单片机产生正弦波程序

用单片机产生正弦波程序(总2页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March用单片机产生正弦波程序要用到数模转换DAC0832MOV DPTR,#SINTAB ;正弦表写入内部RAM6DH-7FH MOV R0,#6DHLOOP: CLR AMOVC A,@A+DPTRMOV @R0,AINC DPTRINC R0CJNE R0,#80H,LOOPMOV DPTR,#7FFFH ;设置D/A转换器的端口地址 MOV R0,#6DH ;设置正弦表指针LOOP1: MOV A,@R0 ;查表MOVX @DPTR,A ;D/A转换ACALL DELAY ;延时,等待转换结束DEC R0 ;正弦表位移量增量CJNE R0, #6DH,LOOP1 ;第一象限输出完?LOOP2: MOV A,@R0 ;查表MOVX @DPTR,A ;D/A转换acall DELAY ;延时,等待转换结束DEC R0 ;正弦表位移量减量CJNE R0, #6DH,LOOP2 ;第二象限输出完?LOOP3: MOV A,@R0 ;查表CPL A ;表值取反MOVX @DPTR,A ;D/A转换ACALL DELAY ;延时,等待转换结束INC R0 ;正弦表位移量增量CJNE R0,#7FH,LOOP3 ;第三象限输出完?LOOP4:MOV A,@R0 ;查表CPL A ;表值取反MOVX @DPTR,A ;D/A转换ACALL DELAY ;延时,等待转换结束DEC R0 ;正弦表位移量减量CJNE R0,#6DH,LOOP4 ;第四象限输出完?SJMP LOOP1DELAY:MOV R7,#200 ; 延时50msDEL1:MOV R6,#123NOPDEL2:JNZ R6,DEL2DJNZ R7,DEL1RETSINTAB:DB80H,83H,86H,89H,8DH,90H,93H,96HDB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H DB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8H DB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9H DB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5H DB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDH DB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDH DB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6H DB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAH DB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAH DB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7H DB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1H DB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99H DB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80HDB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69HDB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51HDB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AHDB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27HDB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16HDB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AHDB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02HDB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00HDB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02HDB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09HDB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15HDB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25HDB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38HDB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EHDB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66HDB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80HEND。

基于MSP430单片机生成正弦波程序

基于MSP430单片机生成正弦波程序
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
}
void disnum(unsigned long int x)
#define ad9850_rest_up P2OUT|=BIT2 ; //P2.2口接ad9850的rest脚上升沿
#define ad9850_rest_dw P2OUT&=~BIT2; //P2.2口接ad9850的rest脚下降沿
void ad9850_reset();
void ad9850_wr_parrel(unsigned char w0,double frequence);
//写w2数据
w=(y>>16);
P5OUT=w; //w2
ad9850_w_clk_up;
ad9850_w_clk_dw;
//写w3数据
w=(y>>8);
P5OUT=w; //w3
ad9850_w_clk_up;
ad9850_w_clk_dw;
//写w4数据
w=(y>>0);
P5OUT=w; //w4
# define EN0 P3OUT&=~BIT2;
# define EN1 P3OUT|=BIT2;
# define uint unsigned int
# define uchar unsigned char
void delayms(uint n);
void busyornot();

用51单片机产生正弦波

用51单片机产生正弦波
0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86,0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a,
0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b,
0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
};
uint step =1;
float a = 1.0;
void delay(uint m);
void sinwave();
void main()
{
while(1)
{
sinwave();
}
}
void delay(uint m)
0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x10, 0x12,0x13,
0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35,
0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63,

单片机正弦波

单片机正弦波

设计频率可调的正弦波发生器,可以利用DAC0832数模转换器来实现。

具体程序如下:ORG 0000HAJMP MAINORG 000BHAJMP BRT0ORG 0100HMAIN: MOV R1,#00H ;取表格初始偏移量MOV R4,#0B1HMOV R5,#0FFHMOV A,R1MOV DPTR,#SETTABMOVC A,@A+DPTRMOV DPTR,#7FFFH ;DAC0832的选片地址MOVX @DPTR,ADELAY:MOV TMOD,#01HMOV TL0,R4MOV TH0,R5MOV IE,#82HSETB TR0LOOP: SJMP $ORG 0200HBRT0: JNB P1.0,JIAJNB P1.1,JIANAJMP NEXT1JIA: CLR CMOV A,R4ADDC A,#01HMOV R4,AMOV A,R5ADDC A,#00HMOV R5,AAJMP NEXT1JIAN: CLR CMOV A,R4SUBB A,#01HMOV R4,AMOV A,R5SUBB A,#00HMOV R5,ANEXT1:INC R1MOV A,R1MOV DPTR,#SETTABMOVC A,@A+DPTRMOV DPTR,#7FFFH ;DAC0832的选片地址MOVX @DPTR,AMOV TL0,R4MOV TH0,R5RETISETTAB:DB 80H,83H,86H,89H,8DH,90H,93H,96HDB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8HDB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9HDB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5HDB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDHDB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFHDB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDHDB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6HDB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAHDB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAHDB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7HDB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1HDB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99HDB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80HDB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69HDB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51HDB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AHDB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27HDB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16HDB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AHDB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02HDB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00HDB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02HDB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09HDB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15HDB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25HDB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38HDB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EHDB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66HDB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80HEND程序整体结构的说明:(1)程序中正弦波生成的说明:程序中CPU的地址线全译码,设定DAC0832的片选地址为7FFFH,即CPU的P0口和P2口状态为P2.7为高电平“1”其他均为低电平,这时DAC0832被选通。

毕业设计--基于单片机的正弦波信号发生器设计[管理资料]

毕业设计--基于单片机的正弦波信号发生器设计[管理资料]

目录绪论 (1)第1章系统概述和方案 (2)引言 (2) (2)DDS的理论分析与参数计算 (2)DDS的基本原理 (2)参数计算 (3)信号发生芯片选择 (4)第2章系统硬件设计 (5) (5)(DDS)连接电路 (5)单片机AT89S51介绍 (5)AD9835芯片介绍 (7) (8) (10)D∕A转换及幅度控制电路 (11)信号放大电路 (13)显示电路 (14)键盘电路 (16)电源电路 (17)第3章系统软件流程图 (19)主程序流程图 (19)键盘处理子程序流程图 (20)D/A转换子程序流程图 (21)展望 (22)致谢 (23)参考文献 (24)附录一 (25)附录二 (26)绪论基于单片机的正弦波信号发生器设计,该课题的设计目的是充分运用大学期间所学的专业知识,考察信号发生器的基本功能,完成一个基本的实际系统的设计全过程。

通过单片机控制一个有特殊功能的信号发生芯片,可以产生一系列有规律的幅度和频率可调的波形。

这样一个信号发生装置在控制领域有相当广泛的应用范围。

直接数字频率合成(DDS)是近年来发展起来的一种新的频率合成技术。

其主要优点是相对带宽很宽、频率转换时间极短(可小于20ns)、频率分辨率很高、全数字化结构便于集成、输出相位连续、频率、相位和幅度均可实现程控。

因此,能够与计算机紧密结合在一起,充分发挥软件的作用。

作为应用,现在已有DDS 产品用于接收机本振、信号发生器、通信系统、雷达系统、跳频通信系统等。

本文介绍一种由直接数字频率合成(DDS)芯片AD9835设计的正弦信号发生器,该芯片支持高达50MHz的时钟频率,可以产生最高可达25MHz的正弦波形。

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

本文主要分六大部分:绪论、系统概述和方案、硬件部分、软件部分,展望和致谢。

绪论,首先对课题研究背景和所涉及的相关技术领域进行了介绍;第一章对系统所要完成的功能和可扩展的功能进行描述,确定系统的设计方案主要元器件的选择。

单片机控制DDS模块实现正弦波

单片机控制DDS模块实现正弦波

特征180 MHz时钟速率参考时钟具有6倍倍乘器。

芯片具有高性能10位DAC和高速滞后比较器无杂散动态范围SFDR为43分贝@ 70 MHz的模拟输出。

32位频率控制字简化控制接口:并行或串行异步加载格式5位相位调制和补偿能力比较器纹波抖动<80 ps p-p @ 20 MHz+2.7 V至+5.25 V单电源工作低功耗: 555毫瓦@ 180兆赫省电功能, 4毫瓦@ 2.7 V超小28引线SSOP封装频带宽正常输出工作频率范围为 0~72MHz ;应用频率/相敏正弦波合成为进行数字通信设定时钟恢复和锁定电路通信数字控制的ADC编码发生器敏捷L.O应用在正交振荡器连续波,调幅,调频, FSK信号,发射机的MSK模式。

概述该AD9851是一种高度集成的设备,采用先进的DDS技术,再加上内部高速度、高性能D / A转换器,和比较器,使一个数字可编程频率合成器和时钟发生器功能化。

当参照准确的时钟源, AD9851可以产生一个稳定的频率和相位且可数字化编程的模拟正弦波输出。

此正弦波可直接用作时钟源,在其内部转化为方波成为灵活的时钟发生器。

AD9851采用的最新的高速DDS内核可接受32位的频率控制字,180 MHz系统时钟,分辨率为0.04赫兹。

该AD9851包含一个特有的6 ×REFCLK倍乘器电路,因此无需高速外部晶振。

6 × REFCLK倍乘器使其有最小的无杂散动态范围SFDR和相位噪声特性。

AD9851提供了5位可编程相位调制,使移相输出的增量为11.25°。

功能方框图该AD9851包含一个内部的高速比较器。

可以输出一个低抖动输出脉冲。

可进行频率调整,控制能将相位调谐字异步加载到AD9851并通过并行或串行方式载入。

并行负载格式由五个迭代的8位控制字(字节)。

第一个8位字节控制输出相位, 6 × REFCLK倍乘器,电源关闭启用和装载模式;其余字节组成32位频率控制字。

单片机课程设计产生三角波、正弦波、方波

单片机课程设计产生三角波、正弦波、方波

STC89C51单片机产生正弦波、方波、三角波LED显示频率源程序#include <stdio.h>#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit LATCH1=P2^6;//定义锁存使能端口段锁存sbit LATCH2=P2^7;// 位锁存unsigned char TempData[8]; //存储显示值的全局变量unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code DuanMa2[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};// 显示段码值0~9unsigned char code DuanMa1[3]={0x77,0x7c,0x39};unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码#define DataPort P0sbit keyA=P3^3;sbit keyB=P3^4;sbit keyC=P3^5;sbit wc=P1^0;sbit scl=P1^1;sbit sda=P1^2;sbit scl1=P1^3;sbit sda1=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;uint sign,ad;uchar temp[10], temp1[3];//定义显示区域临时存储数组uchar voltage; //定义浮点变量uchar l=0,m=100,n=0;uchar code sin[200] = {52,53,55,56,58,59,61,62,64,65,67,68,70,71,73,74,75,77,78,79,81,82,83,84,85,86,88,89,90,90,91,92,93,94,95,95,96,96,97,97,98,98,98,99,99,99,99,100,100,100,100,100,9 9,99,99,99,98,98,98,97,97,96,96,95,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,79,7 8,77,75,74,73,71,70,68,67,65,64,62,61,59,58,56,55,53,52,50,48,47,45,44,42,41,39,38,3 6,34,33,32,30,29,27,26,24,23,22,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,5,4,4,3,2,2,2,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,2,2,2,3,4,4,5,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,26,27,29,30,32,33,35,36,38,39,41,42,44,45,47,48,50};void DelayUs2x(unsigned char t){while(--t);}void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}void delay(){ ;; }void delay1(uchar x){uchar a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}void Delay2(unsigned int t){while(--t);}void Display(){uchar i;for(i=0;i<4;i++){DataPort=WeiMa[i]; //取位码LATCH2=1; //位锁存LATCH2=0;if(i==0) DataPort=DuanMa1[sign-1];else if(i==1) DataPort=DuanMa2[temp1[i]];else DataPort=DuanMa[temp1[i]]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0;Delay2(500); // 扫描间隙延时,时间太长会闪烁,太短会造成重影}}//pcf8591void init1(){sda1=1;delay();scl1=1;delay();}void start1() //开始信号{sda1=1;delay();scl1=1;delay();sda1=0;delay();}void stop1() //停止{sda1=0;delay();scl1=1;delay();sda1=1;delay();}void respons1() //应答{uchar i;scl1=1;delay();while((sda1==1)&&(i<250))i++;scl1=0;delay();}void write_byte1(uchar date) {uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl1=0;delay();sda1=CY;delay();scl1=1;delay();}scl1=0;delay();sda1=1;delay();}uchar read_byte1(){uchar i,k;scl1=0;delay();sda1=1;delay();for(i=0;i<8;i++){scl1=1;delay();k=(k<<1)|sda1;scl1=0;delay();}return k;}void write_add1(uchar date) //写入DA{start1();write_byte1(0x90);respons1();write_byte1(0x40);respons1();write_byte1(date);respons1();// delay1(100);stop1();}uchar read_add1( uchar address ) //读AD值{uchar date;start1();write_byte1(0x90);respons1();write_byte1(0x40|address);respons1();start1();write_byte1(0x91);respons1();date=read_byte1();stop1();return date;}//键盘void keyscan(){if(keyA==0){delay1(10);if(keyA==0)sign=1;while(!keyA);}if(keyB==0){delay1(10);if(keyB==0)sign=2;while(!keyB);}if(keyC==0){delay1(10);if(keyC==0)sign=3;while(!keyC);}}//eepromvoid start() //开始信号{sda=1;delay();scl=1;delay();sda=0;delay();}void stop() //停止{sda=0;delay();scl=1;delay();sda=1;delay();}void respons() //应答{uchar i;scl=1;delay();while((sda==1)&&(i<250))i++;scl=0;delay();}void init(){sda=1;delay();scl=1;delay();}void write_byte(uchar date){uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;scl=0;sda=CY;delay();scl=1;delay();}scl=0;delay();sda=1;delay();}uchar read_byte(){uchar i,k;scl=0;delay();sda=1;delay();for(i=0;i<8;i++){scl=1;delay();k=(k<<1)|sda;scl=0;delay();}return k;}void write_add(uchar date[],uchar address ) {uchar i,*pdate;pdate=date;for(i=0;i<2;i++){write_byte(0xae);respons();write_byte(address+i);respons();write_byte(*(pdate+i));respons();stop();}}void read_add(uchar date[] ,uchar address ) {uchar i,*pdate;pdate=date;for(i=0;i<2;i++){start();write_byte(0xae);respons();write_byte(address+i);respons();start();write_byte(0xaf);respons();*(pdate+i)=read_byte();stop();}}void sj(){if(l<100){write_add1(l);l++;}if(l>=100&m>0){write_add1(m);m--;}if(l>=100&m<=0){l=0;m=100;}p5=0;p6=1;p7=1;}void zx(){if(l<200){write_add1(sin[l]);l++;}if(l>=200)l=0;p6=0;p7=1;p5=1;}void fb(){if(l<100){write_add1(255);l++;}if(l>=100&n<100){write_add1(0);n++;}if(l>=100&n>=100){l=0;n=0;}p7=0;p5=1;p6=1;}void main(){uchar i,num,tab[2];//定义显示区域临时存储数组wc=0;num=0;tab[0]=0;tab[1]=0;TMOD=0x21;//设置定时器1为工作方式2定时器0为工作方式1 TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;init();init1();for(i=0;i<5;i++)num=read_add1(0);read_add(tab,1);sign=tab[0];ad=(uint)num*100;TH0=(65536-ad)/256;TL0=(65536-ad)%256;ET0=1; //定时器中断打开TR0=1;while(1){keyscan();for(i=0;i<5;i++)num=read_add1(0);voltage=500/num;ad=(uint)num*100;tab[0]=sign;tab[1]=ad;write_add(tab,1);num=read_add1(0);voltage=500/num;temp1[0]=voltage/100;temp1[1]=(voltage%100)/10;temp1[2]=voltage%1000;Display();}}void ser() interrupt 4{RI=0;sign=SBUF;}void T0_time() interrupt 1{ad=(uint)read_add1(0)*100;TH0=(65536-ad)/256;TL0=(65536-ad)%256;if(sign==1) sj(); if(sign==2) zx(); if(sign==3) fb(); }。

单片机产生正弦波

单片机产生正弦波

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。

本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。

在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED 上显示频率、幅值电压,波形可用示波器显示。

二、系统设计波形发生器原理方框图如下所示。

波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。

在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。

此方案的有点是电路原理比较简单,实现起来比较容易。

缺点是,采样频率由单片机内部产生故使整个系统的频率降低。

1、波形发生器技术指标1)波形:方波、正弦波、锯齿波;2)幅值电压:1V、2V、3V、4V、5V;3)频率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;2、操作设计1)上电后,系统初始化,数码显示6个…-‟,等待输入设置命令。

2)按钮分别控制“幅值”、“频率”、“方波”、“正弦波”、“锯齿波”。

3)“幅值“键初始值是1V,随后再次按下依次增长1V,到达5V后在按就回到1V。

4)“频率“键初始值是10HZ,随后在按下依次为20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循环。

三、硬件设计本系统由单片机、显示接口电路,波形转换(D/A)电路和电源等四部分构成。

电路图2附在后1、单片机电路功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。

单片机产生正弦波

单片机产生正弦波

单片机产生正弦波
单片机产生正弦波可以通过使用数字信号合成技术来实现。

以下是一种常见的实现方法:
1. 首先,准备一个包含一周期正弦波的查表数组,数组长度为一个周期内所需的采样点数。

可以使用固定的采样频率(如
8kHz)和固定的振幅。

数组的内容为一个周期内的正弦波的
采样值,可以使用查表或者数学计算来生成。

2. 使用定时器产生固定的中断频率,生成一个固定的时间间隔,由于波形是连续的,通常采用中断的方式来生成波形。

3. 在每个定时器中断中,读取查表数组的对应位置的值,并通过DAC(数字到模拟转换器)输出到外部接口(如扬声器)。

4. 根据查表数组长度和定时器中断频率的选择,可以调整正弦波的频率(调整定时器中断频率)和振幅(调整查表数组中的采样值)。

需要注意的是,单片机的处理能力和外设的性能限制了可生成的最高频率,同时,由于数字信号合成存在理论上的误差,生成的波形可能并不完美。

因此,具体的实现方式还需要根据单片机型号和额外硬件资源来调整。

单片机产生正弦波

单片机产生正弦波

单片机产生正弦波1. 简介单片机是一种集成电路,具有处理和控制功能。

它可以通过编程实现各种功能,如产生正弦波。

正弦波是一种周期性的波形,广泛应用于电子设备和通信系统中。

在本文中,将介绍如何使用单片机来产生正弦波,并详细解释实现的原理和步骤。

2. 实现原理产生正弦波的原理是利用单片机的数字输出引脚和定时器功能。

单片机的数字输出引脚可以输出高电平和低电平,通过不断变换输出引脚的状态,可以模拟出正弦波的波形。

具体步骤如下: 1. 设置单片机的定时器,使其按照一定的频率产生中断信号。

2. 在中断服务函数中,根据正弦波的波形特点,设置数字输出引脚的状态,使其输出对应的高电平或低电平。

3. 循环执行中断服务函数,不断更新数字输出引脚的状态,从而产生连续的正弦波。

3. 编程实现以下是使用C语言编写的单片机产生正弦波的示例代码:#include <reg52.h>// 定义正弦波的周期和振幅#define PERIOD 100#define AMPLITUDE 127// 正弦波数据表unsigned char sineTable[] = {128, 140, 151, 162, 173, 183, 192, 200, 207, 213, 218, 222, 225, 227, 228,229,229, 229, 227, 225, 222, 218, 213, 207, 200, 192, 183, 173, 162, 151, 140,128,115, 104, 93, 82, 71, 61, 52, 44, 37, 31, 26, 22, 19, 17, 16, 15,15, 15, 17, 19, 22, 26, 31, 37, 44, 52, 61, 71, 82, 93, 104, 115};// 定时器中断服务函数void timerInterrupt() interrupt 1 {static unsigned char index = 0;TH0 = (65536 - PERIOD) / 256; // 设置定时器初值TL0 = (65536 - PERIOD) % 256;P1 = AMPLITUDE + sineTable[index]; // 设置输出引脚的状态index = (index + 1) % sizeof(sineTable); // 更新正弦波数据表的索引}void main() {TMOD = 0x01; // 设置定时器0为工作模式1TH0 = (65536 - PERIOD) / 256; // 设置定时器初值TL0 = (65536 - PERIOD) % 256;ET0 = 1; // 允许定时器0中断EA = 1; // 允许总中断TR0 = 1; // 启动定时器0while (1);}在上述代码中,使用了8051系列的单片机,使用了定时器0来产生中断信号,并在中断服务函数中根据正弦波数据表的值设置输出引脚的状态。

单片机产生正弦波

单片机产生正弦波

单片机产生正弦波一要求采用单片机map430g2553和运算放大器lmv358产生正弦波,周期1秒。

二思路可通过单片机产生PWM,调节参数寄存器的值,产生不同占空比的PWM信号。

若占空比的变化规律是正弦的,则滤波后可得到所需正弦波形。

其中,PWM(PulseWidthModulation)控制——脉冲宽度调制技术是通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

图1为用PWM波代替正弦半波的例子。

(单片机输出图1b,滤波后得到图1a)图1用PWM三实践1PWM周期计算正弦波周期1秒,需要采用多少个周期的PWM况只有1个周期的PWM N=200个。

则PWM信号的周期为T=1/200秒=5毫秒。

2PWMPWM●ACLK、子系统主时钟SMCLK),ACLK由内部时钟源VLOCLK(低频时钟源,12K(默认1M赫兹)产生。

这里建议采用较高频率分频,这里设置为1分频,即ACLK=VLO;第二行中,SELM_0的作用是选择MCLK的时钟源为DCOCLK,DIVM_0设置为MCLK=DCO,DIVS_0设置为SMCLK=DCO(默认时钟源)。

TASSEL1将定时器时钟设置为SMCLK(若为TASSEL0则选择ACLK),且未分频。

模式选择MC_1为上升模式。

采用上述方法设置定时器时钟=SMCLK=DCO=1M赫兹。

●周期计数:上升模式表明定时器由0递增到一个上限值CCR0。

CCR0需设置。

因为周期T=1/200秒,而定时器时钟=SMCLK=DCO=1M赫兹,定时器周期t=1微秒,所以CCR0=T/t=5000,即5毫秒。

●高电平计数:定时器由0递增到一个上限值CCR0过程中,需设置脉宽CCR1。

并且K=CCR1/CCR0的数值每个周期(5毫秒)都变化一次,变化趋势满足正弦变化,200个5毫秒构成一个正弦变化周期。

为获得CCR1值,在matlab中输入:t=0:pi/100:2*pi;k=(sin(t)+1)/2;CCR1=round(4999*k);可获得201个CCR1值。

stm32dac产生正弦波实践报告

stm32dac产生正弦波实践报告

一、概述stm32单片机作为一种常用的微控制器,拥有丰富的外设资源,其中包括数字模拟转换器(DAC)模块。

DAC模块可以将数字信号转换为模拟信号,通常用于音频处理、波形生成等应用。

本次实践旨在利用stm32单片机的DAC模块,产生正弦波信号,并通过外部电路将其输出到示波器进行观测,验证其波形质量和稳定性。

二、实验准备1.硬件准备1)stm32开发板2)示波器3)示波器探头4)电路连线板5)杜邦线、电阻、电容等元件2.软件准备1)Keil开发环境2)stm32CubeMX配置工具三、实验步骤1.使用stm32CubeMX配置DAC模块1)在stm32CubeMX中新建工程,并选择对应型号的单片机2)在Pinout Configuration中配置DAC输出引脚3)在Configuration中使能DAC模块,并配置输出缓冲区、波形发生器等参数4)生成代码并导入Keil开发环境中2.编写DAC初始化和波形生成代码在Keil中编写初始化DAC模块的代码,并编写正弦波发生算法,将生成的正弦波数据写入DAC数据寄存器。

3.连接示波器进行观测1)通过电路连线板搭建DAC输出到示波器的电路连接2)将示波器探头连接到电路上,设置示波器参数4.程序烧录和调试使用ST-Link将程序烧录到stm32开发板中,通过示波器观测输出波形,并根据实际观测结果进行调试和优化。

五、实验结果与分析经实验验证,stm32DAC产生的正弦波信号波形质量良好,无明显畸变和波形失真,幅度和频率稳定。

示波器观测结果与理论预期吻合,在给定的频率和振幅下,输出波形符合正弦曲线特征。

实验结果表明,stm32DAC模块在波形生成方面具有较高的准确性和稳定性,适用于需要模拟信号输出的应用场景。

六、结论与展望本次实验通过对stm32DAC的使用实践,验证了其正弦波信号产生的可行性和稳定性。

未来可以进一步深入研究DAC模块的其他应用场景,并结合其他外设资源,实现更复杂的信号处理和控制功能。

单片机产生正弦波然后放大_概述说明以及解释

单片机产生正弦波然后放大_概述说明以及解释

单片机产生正弦波然后放大概述说明以及解释1. 引言1.1 概述本文旨在探讨单片机产生正弦波并进行放大的方法与实现,以及相关的原理、设计方案和实验结果。

正弦波是一种重要的信号形式,在各种电子设备和通信系统中广泛应用。

利用单片机生成正弦波,并经过放大器放大后,可以得到更稳定、可控的正弦波信号,有助于满足不同场景下的需求。

1.2 文章结构本文主要分为五个部分:引言、单片机产生正弦波、正弦波放大器设计、实验结果与分析以及结论与展望。

引言部分将对文章进行概述说明,并介绍文章的结构安排;随后,将在接下来三个部分依次详细介绍单片机产生正弦波的原理与实现方法,正弦波放大器的设计与构建以及性能优化与测试方法;接着,在第四部分中将提供实验结果,并对产生效果和输出性能进行评估和分析;最后,在结论与展望部分总结整篇文章,并提出未来发展方向建议。

1.3 目的本文的目标是通过对单片机产生正弦波并进行放大的研究,探索一种有效可行的方法和设计方案。

通过实验结果和分析,对该方法进行评估,并提出可能存在的问题以及未来改进的方向,以期为相关领域的研究与开发提供参考和借鉴。

同时,也希望通过本文的介绍和说明,增进读者对单片机产生正弦波并进行放大的技术理解和应用意义。

2. 单片机产生正弦波2.1 原理介绍单片机是一种微型计算机系统,具有集成度高、功耗低、体积小等特点。

它能够通过内部的时钟电路和计数器来生成不同频率的方波信号,并通过数字滤波器将方波信号转换为近似连续的正弦波信号。

这种方法称为数字合成技术,可用于实现正弦波发生器。

2.2 实现方法在单片机中,可以使用PWM(脉冲宽度调制)技术来产生正弦波。

PWM技术是通过控制脉冲信号的占空比来调节输出电压的高低电平,从而实现对正弦波频率和幅值的控制。

具体而言,可以选择一个定时器作为基准时钟源,并设置相关寄存器来控制定时器工作模式和产生脉冲信号的频率、占空比等参数。

然后,在定时器溢出中断函数中更新输出引脚状态,使其按照预设的占空比在高、低电平之间切换。

stm32产生正弦波原理

stm32产生正弦波原理

stm32产生正弦波原理一、简介在嵌入式系统中,正弦波的产生是一个常见的需求。

stm32是一款广泛使用的嵌入式微控制器,它具有强大的计算和控制能力,可以用来产生正弦波信号。

本文将探讨stm32产生正弦波的原理及实现方法。

二、stm32产生正弦波的原理stm32产生正弦波的原理是利用其内置的定时器和DAC(数字模拟转换器)模块。

定时器用来生成一个固定频率的方波信号,而DAC则将方波信号转换为模拟信号,从而产生正弦波。

2.1 定时器配置首先,需要配置stm32的定时器模块,使其能够生成一个固定频率的方波信号。

定时器的频率决定了正弦波的频率,可以根据需求进行调整。

具体的配置步骤如下:1.初始化定时器的时钟,并使能定时器模块。

2.配置定时器的工作模式为PWM输出模式。

3.设置定时器的预分频因子,以确定方波信号的频率。

4.设置定时器的自动重载值,以确定方波信号的占空比。

2.2 DAC配置配置好定时器之后,需要将其输出连接到DAC模块,以实现方波信号到模拟信号的转换。

DAC模块将方波信号转换为模拟信号的过程如下:1.初始化DAC的时钟,并使能DAC模块。

2.配置DAC的工作模式为连续模式。

3.配置DAC的数据对齐方式和数据长度。

4.将定时器的输出连接到DAC的输入,以获取方波信号。

5.启动DAC转换,将方波信号转换为模拟信号输出。

三、stm32产生正弦波的实现在了解了stm32产生正弦波的原理之后,我们可以通过编写相应的代码来实现该功能。

以下是一个示例代码:#include "stm32f10x.h"void TIM2_Configuration(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_TimeBaseStructure.TIM_Period = 999;TIM_TimeBaseStructure.TIM_Prescaler = 71;TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 500;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM2, &TIM_OCInitStructure);TIM_Cmd(TIM2, ENABLE);}void DAC_Configuration(void){DAC_InitTypeDef DAC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;DAC_Init(DAC_Channel_1, &DAC_InitStructure);DAC_Cmd(DAC_Channel_1, ENABLE);}void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);}int main(void){TIM2_Configuration();DAC_Configuration();GPIO_Configuration();while (1){// 主程序逻辑}}上述代码中,通过调用相应的库函数来配置stm32的定时器和DAC模块,实现了正弦波的产生。

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

单片机产生正弦波集团标准化小组:[VVOPPT-JOPP28-JPPTL98-LOPPNN]单片机产生正弦波一要求采用单片机map430g2553和运算放大器lmv358产生正弦波,周期1秒。

二思路可通过单片机产生PWM,调节参数寄存器的值,产生不同占空比的PWM信号。

若占空比的变化规律是正弦的,则滤波后可得到所需正弦波形。

其中,PWM(PulseWidthModulation)控制——脉冲宽度调制技术是通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。

图1为用PWM波代替正弦半波的例子。

(单片机输出图1b,滤波后得到图1a)图1用PWM波代替正弦半波三实践1PWM周期计算正弦波周期1秒,需要采用多少个周期的PWM信号去表示?数目过少,则波形不完整(极端状况只有1个周期的PWM);数目过多,则增加了单片机的计算量,并对速度有要求。

这里取N=200个。

则PWM信号的周期为T=1/200秒=5毫秒。

2PWM参数计算PWM由定时器TimerA产生,参数主要包括:定时器时钟,周期计数,高电平计数三个。

定时器时钟:定时器时钟来源有4个,两个内部的(辅助时钟ACLK、子系统主时钟SMCLK),两个外部的。

这里采用内部时钟。

没有外部晶体时,ACLK由内部时钟源VLOCLK (低频时钟源,12K赫兹)产生,SMCLK由内部数字时钟DCOCLK(默认1M赫兹)产生。

这里建议采用较高频率的。

部分代码如下:BCSCTL1|=DIVA_0; //ACLK=VLOBCSCTL2|=SELM_0+DIVM_0+DIVS_0;//MCLK=DCO,SMCLK=DCO//ConfigureTimerATACTL=TASSEL1+MC_1;//Source:SMCLK,UPmode其中,ACLK可配置成VLOCLK的1,2,4,8分频,这里设置为1分频,即ACLK=VLO;第二行中,SELM_0的作用是选择MCLK的时钟源为DCOCLK,DIVM_0设置为MCLK=DCO,DIVS_0设置为SMCLK=DCO(默认时钟源)。

TASSEL1将定时器时钟设置为SMCLK(若为TASSEL0则选择ACLK),且未分频。

模式选择MC_1为上升模式。

采用上述方法设置定时器时钟=SMCLK=DCO=1M赫兹。

周期计数:上升模式表明定时器由0递增到一个上限值CCR0。

CCR0需设置。

因为周期T=1/200秒,而定时器时钟=SMCLK=DCO=1M赫兹,定时器周期t=1微秒,所以CCR0=T/t=5000,即5毫秒。

高电平计数:定时器由0递增到一个上限值CCR0过程中,需设置脉宽CCR1。

并且K=CCR1/CCR0的数值每个周期(5毫秒)都变化一次,变化趋势满足正弦变化,200个5毫秒构成一个正弦变化周期。

为获得CCR1值,在matlab中输入:t=0:pi/100:2*pi;k=(sin(t)+1)/2;CCR1=round(4999*k);可获得201个CCR1值。

上式中,第一行设置了201个数,均匀分布在0-2pi之间,第一个和最后一个分别对应0弧度和2pi弧度;第二行计算201个正弦值,偏置为0.5,全幅度为1的正弦波幅度,如图2所示:图2偏置为0.5,全幅度为1的正弦波幅度第三行计算CCR1值,为k与CCR0(这里是5000)的乘积,并取了四舍五入(round函数)。

为将数据导出,便于单片机编程,在matlab中添加:fid=fopen('exp.txt','w');fprintf(fid,'%d,',CCR1);fclose(fid);则在matlab工作目录中生成了带逗号的连续CCR1值。

复制到程序中,定义一个数组temp[200],其数值为matlab生成的数值。

3PWM实现流程程序包含两个中断,一个是定时器到达上限CCR0(这里是4999)时发出中断,并在中断服务程序中将输出置1,另一个是到达中间值CCR1(0至4999)时发出中断,并在中断服务程序中将输出置0。

考虑到同时发出中断时,会有中断嵌套问题、以及优先级问题,所以在当CCR1需置为4999时,手动置为4998。

软件流程如图3所示。

图3软件流程图程序为://******************************************************************************//LaunchPadLab4-TimerToggleP1.6,////MSP430G2553//-----------------///|\|XIN|-//|||//--|RSTXOUT|-//||//|P1.6|-->LED////******************************************************************************#include<msp430g2553.h>short temp[200]={2500,2578,2656,2735,2813,2891,2968,3045,3121,3197,3272,3346,3420,3492,3564,3634,3704,3772,3839,3904,3969,4031,4093,4152,4211,4267,4322,4374,4425,4474,4522,4567,4610,4651,4690,4727,4761,4793,4823,4851,4877,4900,4920,4939,4955,4968,4979,4988,4994,4998,4999,4998,4994,4988,4979,4968,4955,4939,4920,4900,4877,4851,4823,4793,4761,4727,4690,4651,4610,4567,4522,4474,4425,4374,4322,4267,4211,4152,4093,4031,3969,3904,3839,3772,3704,3634,3564,3492,3420,3346,3272,3197,3121,3045,2968,2891,2813,2735,2656,2578,2500,2421,2343,2264,2186,2108,2031,1954,1878,1802,1727,1653,1579,1507,1435,1365,1295,1227,1160,1095,1030,968,906,847,788,732,677,625,574,525,477,432,389,348,309,272,238,206,176,148,122,99,79,60,44,31,20,11,5,1,0,1,5,11,20,31,44,60,79,99,122,148,176,206,238,272,309,348,389,432,477,525,574,625,677,732,788,847,906,968,1030,1095,1160,1227,1295,1365,1435,1507,1579,1653,1727,1802,1878,1954,2031,2108,2186,2264,2343,2421};int i=0;void main(void){WDTCTL=WDTPW+WDTHOLD;//Stopwatchdogtimerif(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF){while(1); //Ifcalibrationconstantserased,trapCPU!!}BCSCTL1=CALBC1_1MHZ; //SetrangeDCOCTL=CALDCO_1MHZ; //SetDCOstep+modulationBCSCTL3|=LFXT1S_2;//LFXT1=VLOP1DIR=0x40;//P1.6output(greenLED)P1OUT=0;//LEDoffIFG1&=~OFIFG;//ClearOSCFaultflagBCSCTL1|=DIVA_0; //ACLK=VLOBCSCTL2|=SELM_0+DIVM_0+DIVS_0;//MCLK=DCO,SMCLK=DCO//ConfigureTimerATACTL=TASSEL1+MC_1;//Source:ACLK,UPmodeCCR0=5000; //Timercount5100CCR1=2500; //Timercount100CCTL0=CCIE; //CCR0interruptenabledCCTL1=CCIE; //CCR1interruptenabled_BIS_SR(GIE);for(;;);}//TimerA0interruptserviceroutine#pragma vector=TIMER0_A0_VECTOR__interruptvoid Timer_A0(void){P1OUT|=BIT6;//P1.6outputHighif(i==199){i=0;}else{i++;}if (temp[i]==4999){CCR1=4998;}else{CCR1=temp[i];} } //TimerA1InterruptVector(TA0IV)handler#pragma vector=TIMER0_A1_VECTOR__interruptvoid Timer_A1(void ){switch (TA0IV){case 2:P1OUT&=~BIT6;//P1.6outputLow break ;case 10: break ;}} 4输出滤波输出运放采用lmv358。

其管脚如下图4所示:图4358管脚示意图采用压控电压源二阶低通滤波电路。

(参考《模拟电子技术基础》,第三版,童诗白、华成英主编,7.4.2节,352页)。

其电路图如图5所示:图5压控电压源二阶低通滤波电路通带增益:A vp=1+R 4/R 3传递函数: 所需设计的滤波器输出为1赫兹的正弦波,放大倍数为1,所以设置截止频率为f0=10。

取增益A vp=1,即R 4=0,R 3=R 2=R 1=R.C1=C. 取f0=1/(2πRC),则RC=。

可取C=10微法,则R=1591欧姆,实际取R=1.6K (或者C=1微法,R=16K )采用multisim 可仿真该滤波器,如图6所示。

图6multisim 仿真图 ()()()()2p p i o )3(1sCR sCR A A s V s V s A v v v +-+==。

相关文档
最新文档