单片机产生正弦波 (2)
- 格式:doc
- 大小:39.50 KB
- 文档页数:6
题目1 智能电子钟(LCD 显示)题目2 电子时钟(LCD 显示)题目3 秒表题目4 定时闹钟题目5 音乐倒数计数器题目6 基于数字温度传感器的数字温度计题目7 基于热敏电阻的数字温度计题目8 十字路口交通灯控制题目9 波形发生器设计题目10 电容、电阻参数单片机测试系统的设计题目11 数字频率计题目12 8位竞赛抢答器的设计题目13 单词记忆测试器程序设计题目14 数字电压表设计题目15 可编程作息时间控制器设计题目16 节日彩灯控制器的设计题目17 双机之间的串行通信设计题目18 电子琴设计题目19 数字音乐盒的设计题目20 单片机控制步进电机题目21 单片机控制直流电动机题目1 智能电子钟(LCD 显示) 1. 设计要求 以AT89C51单片机为核心,制作一个LCD 显示的智能电子钟: (1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 五路定时输出,可任意关断(最大可到16路)。
(4) 时间、月、日交替显示。
(5) 自定任意时刻自动开/关屏。
(6) 计时精度:误差≤1秒/月(具有微调设置) (7) 键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
2. 工作原理 本设计采用市场上流行的时钟芯片DS1302进行制作。
DS1302是DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM ,可以通过串行接口与计算机进行通信,使得管脚数量减少。
实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。
DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。
(2) 31B 的8位暂存数据存储RAM 。
(3) 串行I/O 口方式使得引脚数量最少。
(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。
目录1 引言 (1)1.1 题目要求及分析 (1)1.1.1 示意图 (1)1.2 设计要求 (1)2 波形发生器系统设计方案 (2)2.1 方案的设计思路 (2)2.2 设计框图及系统介绍 (2)2.3 选择合适的设计方案 (2)3 主要硬件电路及器件介绍 (4)3.1 80C51单片机 (4)3.2 DAC0832 (5)3.3 数码显示管 (6)4 系统的硬件设计 (8)4.1 硬件原理框图 (8)4.2 89C51系统设计 (8)4.3 时钟电路 (9)4.4 复位电路 (9)4.5 键盘接口电路 (10)4.7 数模转换器 (11)5 系统软件设计 (12)5.1 流程图: (12)5.2 产生波形图 (12)5.2.1 正弦波 (12)5.2.2 三角波 (13)5.2.3 方波 (14)6 结论 (16)主要参考文献 (17)致谢....................................................... 错误!未定义书签。
1引言1.1题目要求及分析题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。
1.1.1示意图图1:系统流程示意图1.2设计要求(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。
(2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。
(3) 系统具有存储波形功能。
(4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。
(5) 系统输出波形幅度范围0~5V。
(6) 系统具有显示输出波形的类型、重复频率和幅度的功能。
2波形发生器系统设计方案设计并制作一个波形信号发生器,能够产生正弦波、方波、三角波的波形,其中不使用DDS和一些专用的波形产生芯片。
并让系统的频率范围在1Hz~1MHZ可调节,在频率范围在1HZ~10KHz时,步进小于或等于10Hz,在频率范围在10KHz~1MHz时,步进小于或等于100Hz,并且电压在0~5V范围,能够实时的显示波形的类型、频率和幅值。
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变化。
(完整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。
课程设计任务书学生姓名:李旭专业班级:电信0806班指导教师:胡君萍工作单位:信息工程学院题目: 单片机原理与应用课程设计——设计并实现频率可控的正弦波信号发生器初始条件:(1)Proteus、伟福、KEIL仿真软件,XL1000综合仿真试验仪一台;(2)先修课程:微机原理与接口技术、单片机原理。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)利用DAC0832输出正弦波信号(用示波器观察输出波形),初始频率为50Hz,变频采用“+”、“-”键控制,实时测量输出信号的频率值,并分析和实测输出信号的频率范围。
具体完成以下任务:1.完成系统的方案设计,给出系统框图。
2.完成系统的硬件设计,给出硬件电路图和系统资源分配表。
3.完成系统的软件设计,给出程序流程图和程序清单。
4.运用Proteus(或伟福、KEIL)仿真软件对所设计的系统进行调试和仿真,直到预定的功能全部仿真通过,给出仿真结果;5.将程序下载到XL1000综合仿真试验仪,验证系统功能;或者自己制作出系统。
6.对所设计的系统进行性能分析(精度、实用性、成本等)。
7.完成课程设计报告。
时间安排:总体设计和硬件设计二天软件设计一天调试一天写报告,答辩一天参考书目:[1] 李群芳、张士军,单片微型计算机与接口技术, 电子工业出版社,2008[2] 张毅刚、彭喜元、董继成,单片机原理及应用,高等教育出版社,2004[3] 赵晓安,MCS-51单片机原理及应用,天津大学出版社,2001指导教师签名:年月日系主任(或责任教师)签名:年月日武汉理工大学《单片机原理与应用》课程设计说明书摘要正弦交流信号是一种应用极为广泛的信号。
在许多测试仪中需要用标准的正弦信号检测一些物理量。
正弦信号用作标准信号时,要求正弦信号必须有较高的精度、稳定度及较低的失真率。
传统的正弦信号发生器的频率变动由机械驱动可变元件完成,当这种信号发生器用于低频信号输出往往需要的RC值很大,这样不但参数准确度难以保证,而且体积和功耗都很大。
桂林电子科技大学单片机最小应用系统设计报告指导老师:吴兆华学生:刘毅学号: 082011119桂林电子科技大学机电工程学院单片机最小应用系统设计报告一、设计题目 (3)二、设计目的 (3)三、系统硬件图 (4)3.1系统的硬件电路原理图 (4)3.2 最小系统原理电路图 (4)3.3 电压放大电路 (6)四、程序流程图 (6)五、系统说明与分析 (8)5.1设计步骤 (8)5.2 D/A转换器与MCS-51单片机接口 (8)5.3 D/A转换器选择要点及辅助电路 (9)5.4典型的D/A转换器芯片DAC0832性能介绍 (10)5.5 8051单片机简要介绍 (13)5.6 数码显示部分 (16)六、源程序 (17)七、总结 (24)八、参考文献 (24)单片机最小应用系统设计报告一、设计题目单片机的D/A 接口应用:用0832单片机控制生成正弦波,频率和幅值可调。
二、设计目的设计目的:1.了解单片微机系统中实现D/A(数字/模拟)转换的原理及方法;2.详细了解D/A转换芯片0832的性能及编程方法;3.了解单片机系统中扩展D/A转换的基本原理,了解单片机如何进行数据采集;4.掌握DAC0832,AT89C51输入/输出接口电路设计方法;5.掌握DAC0832转换实现的程序控制方法;6.掌握单片机汇编编程技术中的设计和分析方法;7.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);8.掌握电路图绘制及PCB图布线技巧。
设计要求:1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51,DAC0832设计出题目所要求的正弦波实现频率和幅值可调输出,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
单片机原理及应用实践论文成员:李浩 0811*******倪丹军0811******* 徐倩0811*******实验一 I/O口测试程序将ledP04 和ledP05 分别定义给P0.4 和P0.5,用1和0分别表示灯的亮灭,通过程序改变灯的电平值变换再延时最终得到实验现象为P0.4和P0.5引脚连接的51RXD和51TXD交替闪烁。
实验二定时器与PCA(1)、程序中将定时器2的高低8位字节重定义成一个16位的变量,每50ms 产生一次中断,并使LED(P0.4 位)状态翻转,从而使得相应LED 灯每100ms 产生一次闪烁。
改变程序,由定时器产生100ms重载,开启相应中断,使LED 每隔500ms 产生一次翻转,从而得到每1s产生一次闪烁。
(2)、程序中通过设定PCA定时器/计数器参数,根据公式修改占空比,使得PWM占空比逐渐增大到100%,随后改变方向减小到0%,以此变化反复循环.实验现象是波形来回缩进放大往返。
实验三 DAC与ADC的配置410的DAC0是电流模式的,需接上一个电阻(3K)使输出得到电压,然后就可以测量对应端口(P0.0口)的电压值。
ADC0实验则是将DAC0实验的输出电压值通过杜邦线引到其输入脚(P0.1)进行测试,通过在keil中设断点观察测量值,再进行比较。
实验四 SMBUS总线操作实验中采用虚拟时序完成IIC 总线操作,并对AT24C02 实现成功读写,实验现象是test_data输入8个字节,在keil的观察窗口中可以看到save_buf存入当页的8个字节, save_buf2存入前一页,当页及后一页24个字节。
实验五液晶显示程序中分字符显示和图片显示两个部分,其中图片是通过取模获取点阵,字符显示在显示位置是根据字符长度设置的。
字符显示,我们可以在液晶屏幕上看到“臣亮言先帝创业未,半而中道崩殂今天,下三分益州疲敝此,诚危急存亡之秋也”四句话;图片显示,我们可以在液晶屏幕上看到一个樱桃小丸子的头像图案。
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。
本次课程设计使用的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、MCS-51系列中,为单片机提供定时信号的振荡源的周期称为振荡周期,在该系统中每个时钟周期包含个振荡周期,每个机器周期包含振荡周期。
2、寻找指令操作数地址或指令地址的方式称为。
3、指令中指出某一个寄存器中的内容不是操作数而是操作数在RAM中的地址的寻址方式称为。
4、MCS-51系列指令DIV AB执行后,A中的内容中,B中的内容是` 。
5、执行如下程序后PC的内容是。
LJMP LABLE……ORG 8000HLABLE:……6、MCS-51系列单片机在进行系统扩展时,地址总线由和提供;数据总线由提供。
7、外部程序存储器读控制信中是。
8、MCS-51系列单片机在进行数据存储器扩展时,进行读写数据的指令是。
9、MCS-51系列单片机从外部中断请求有效到开始执行中断服务的第一条指令至少需机器周期,最多不会超过个机器周期。
10、MCS-51系列单片机CPU外设端口地址有和两种方法。
11、MCS-51系列单片机中与定时器有关的特殊功能寄存器有、、和四个。
12、在定时器的四种工作方式中,方式具自动装填功能。
13、定时器若工作在方式0,则其最大的定时间是ms,最小的定时间是ms。
(设f osc=6MHZ)14、计算机与外设之间数据的传送方式有和两种方式。
15、MCS-51系列单片机要使`P1口作为输入口使用时必须先。
16、MCS-51系列单片机共有个中断源,中断优先级,优先级最高的是。
17、8255A是可编程的,它有、和工作方式。
18、LJMP指令的跳转的最大范围为。
19、在MCS-51的指令执行时间最长的指是和。
其执行需要个机器周期。
20、以下子程序的功能是将片内RAM30H中的一个二进制数转换成3位DCB码,把百位放于30H,十位放于31H的高4位,个位放于31H的低4位。
请补全。
ZUANHUA:MOV A,30HMOV B,[1][2] ABMOV 30H,AMOV A,BMOV B,#0AHDIV AB[3]ORL A,BMOV 31H,A[4]21、已知以下程序的功能是将R0中的十六进制数转换成对应的ASCII码。
单片机课程设计报告ADC转换生成正弦波形单片机课程设计报告题目:ADC转换生成正弦波形专业:测控技术与仪器班级:姓名:学号:指导教师:2015年 1 月 14 日目录第1章系统设计方案第2章系统硬件设计2.1 主控制器电路2.2 模数转换电路2.3 显示电路第3章系统软件设计3.1 系统整体流程3.2 直流电压采集3.3 交流电压采集第4章系统调试4.1 xxx的调试4.2 xxx的调试。
第5章结论与总结5.1 结论5.2 总结第1章系统设计方案使用STC89c52单片机与ADC0804芯片实现A/D转换直流电压采集,转换之后在LCD1602上显示所采集的直流电压值。
使用STC89c52单片机与ADC0804芯片实现A/D转换交流电压采集,转换之后在KS0108上显示交流电压动态波形。
第2章系统硬件设计2.1 主控制器电路(1)AT89C52单片机(2)晶振电路(3)复位电路2.2 模数转换电路2.3 显示电路(1) LCD1602显示电路(2) KS0108显示电路第3章系统软件设计3.1系统整体流程图开始显示初始化进行A/D转换数字信号处理转化显示数据调用显示函数结束3.2直流电压采集程序(1)直流电压采集主程序#include<reg52.h> #include"adc0804.h" #include"lcd1602.h"#define uchar unsigned char #define uint unsigned int #define ulong unsigned long void datds();void display();uchar dat=0;uchar a[]="the value is "; uchar b[]={0,0};void main(){uchar i=0;init();for(i=0;i<13;i++){comd(0x80+i);write(a[i]);}while(1){datc();dat=datw();datds();display();}}void datds(){b[0]=dat*5/255;b[1]=dat*50/255%10;}void display(){comd(0xc4);write(b[0]+0x30);comd(0xc5);write('.');comd(0xc6);write(b[1]+0x30);comd(0xc7);write('V');}(2)头文件lcd1602.h#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longvoid write(uchar datee);void comd(uchar com); void init();sbit en=P3^4;sbit rs=P3^5;void init(){en=0;comd(0x38);comd(0x0c);comd(0x06);comd(0x01);}void comd(uchar com) { rs=0;delay(50);P0=com;delay(50);en=1;delay(50);en=0;delay(50);}void write(uchar datee) {rs=1;delay(50);P0=datee;delay(50);en=1;delay(50);en=0;delay(50);}(3) 头文件adc0804.h #include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longchar datw();void datc();void datd();void delay(uint t);sbit rd=P3^1; sbit wr=P3^2; sbit intr=P3^3; sbit cs=P3^0; void datc() //写命令 {cs=0;wr=1;delay(200);wr=0;delay(200);wr=1;while(intr);cs=1;}char datw() //读数据 {uchar j=0;cs=0;rd=1;delay(200);rd=0;delay(200);j=P1;rd=1;cs=1;return j;}void delay(uint t){while(t--);}3.3交流电压采集程序(1)交流电压采集主程序#include<reg52.h>#include"adc0804.h" #include"lcd.h" #define uchar unsigned char#define uint unsigned int#define ulong unsigned longvoid datedis();void display();void qing(uchar q2); void qingp(); sbit cs1=P0^1;sbit cs2=P0^2;uchar dat=0;uchar i;uchar j,da;void main(){init();while(1){ cs1=0;cs2=1;qingp();display();cs2=0;cs1=1;qingp();display();}}void qing(uchar q2) {uchar q1;for(q1=0;q1<8;q1++){comd(184+q1);comd(0x40+q2);write(0);}}void qingp() {uchar q1,q2;for(q1=0;q1<8;q1++) {comd(184+q1);comd(0x40);for(q2=0;q2<64;q2++) write(0);}}void display(){uchar x=0;for(x=0;x<64;x++) {//qing(x);datc();dat=datw();datedis();comd(i);comd(64+x);write(j);}}void datedis() { uchar j0=1;da=dat/4;i=184+da/8;j=j0<<(da%8);}(2)头文件lcd.h#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longvoid write(uchar datee); void comd(uchar com); void init(); sbit en=P3^6;sbit rs=P3^7;void init(){en=0;comd(4);comd(0x3f);}void comd(uchar com) {rs=0;delay(50);P2=com;delay(50);en=1;delay(50);en=0;delay(50);}void write(uchar datee) {rs=1;delay(50);P2=datee;delay(50);en=1;delay(50);en=0;delay(50);}(3)头文件ADC0804.h #include<reg52.h> #define uchar unsigned char#define uint unsigned int#define ulong unsigned longchar datw();void datc();void datd();void delay(uint t);sbit rd=P3^1; sbit wr=P3^2; sbit intr=P3^3; sbit cs=P3^0; void datc() //写命令 {cs=0;wr=1;delay(200);wr=0;delay(200);wr=1;while(intr);cs=1;}char datw() //读数据 {uchar j1=0;cs=0;rd=1;delay(200);rd=0;delay(200);j1=P1;rd=1;cs=1;return (j1);}void delay(uint t) {while(t--);}第4章系统调试 4.1 直流电压采集的调试程序调试采用proteus仿真软件调试采集电压LCD显示结果4.2交流电压采集的调试第5章结论与总结5.1 结论(1)直流电压采集调试中,采集电压为5V的50%(即2.5V),而LCD1602显示值为2.4V,误差很小,说明实验硬件和软件都很成功,可以成功实现直流电压采集并显示电压值的功能。
单片机产生正弦波一要求采用单片机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 +-+==。