北京邮电大学课设 基于MSP430的简单信号发生器的设计
基于MSP430单片机的信号发生器毕业设计
2013届毕业生毕业设计说明书题目: 基于MSP430单片机的任意信号发生器设计学院名称:电气工程学院班级:电气F0902 学生姓名:李福乐学号: 200948720425 指导教师:杨勇教师职称:高级工程师2013年5月17日目次1 概述 (I)1.1 信号发生器背景及其发展状况 (1)1.2 本设计主要研究内容 (1)2 方案论证 (2)2.1 设计方案的提出 (2)2.2 设计方案的比较 (2)2.3 设计方案的选择 (3)3 选用模块介绍 (3)3.1 MSP430F149单片机 (3)3.2 1602液晶 (6)3.3 DAC5571芯片 (8)3.4 时钟模块及定时器A (9)4 方案的实现 (10)4.1 系统硬件设计 (10)4.2 系统软件设计 (12)4.3 仿真调试 (18)总结 (26)致谢 (27)参考文献 (28)附录A:硬件原理图 (29)附录B:仿真调试程序 (30)1 概述1.1 信号发生器背景及其发展状况信号发生器在各个领域都有着相当广泛的应用,无论是通信产品还是电子仪表,无论是科学指导还是教学研究,小到电子手表、大到计算机,都离不开信号发生器。
信号发生器在许多方面发挥着重要的作用。
信号发生器也常常被称为信号源,能够提供稳定的和可靠的参考信号。
信号发生器的频率、幅值、波形等信号参数可以通过人设置调节。
现代电子领域中,单片机的应用越来越深入到各个方面,这一发展趋势必然会使得以前的检测技术获得巨大变革。
由单片机控制的仪器具有可靠性高、性能价格比好的优点,并广泛应用在医疗通信和智能仪器等诸多领域,而且还走入普通家庭从冰箱、遥控器到汽车,随处可见其身影。
以单片机为控制核心,加上键盘扫描、1602液晶显示、数模转换(D/A)等电路,可以设计出功能多样化、性能卓越的信号发生器,同时该信号发生器还可以采用USB接口设计,从而使其具有远程通信的功能。
目前,实验、科研和生产制造中一般都选择该方法去实现所需信号源。
基于MSP430的信号波形发生器的电路设计与实现
基于MSP430的信号波形发生器的电路设计与实现【摘要】设计制作一个马鞍波、方波、三角波的信号波形发生器。
系统包括方波振荡电路、分频与滤波电路、移相电路、加法合成电路、峰值检测电路、ADC转换电路、单片机控制电路与LCD显示电路。
系统界面友好,工作稳定。
【关键词】NE555;分频;滤波;MSP430F1471.方案论证与选择1.1 波形发生器选择方案一:采用RC振荡电路,此方案产生的方波信号频率精度不高。
方案二:选用NE555构成多谐振荡器产生方波,此方案电路简单、方便、灵活、频率稳定,故选用此方案。
1.2 分频与滤波电路的选择方案一:分别用低通滤波器和带通滤波器对方波进行处理得到所需正弦波。
其中低通滤波器的作用是把10KHz的方波滤波处理得到10KHz的正弦波,带通滤波器的作用则是为了得到30KHz和50KHz的正弦波。
此方案较容易得到10KHz的正弦波,但是带通滤波器的制作精度困难,不易得到30KHz和50KHz 的正弦波。
方案二:利用NE555产生一个150KHz的方波,再用HCF4017分别实现5分频、3分频得到10KHz、30KHz、50KHz的方波,然后采用由TLC04、OP07等运算放大器构成的低通滤波器进行滤波得到10KHz、30KHz、50KHz的正弦波。
此方案的关键在于不同频率低通滤波器的设计,通过合理选择参数,容易实现,故选用此方案。
2.系统总体方案设计2.1 总体设计思路波形产生电路由NE555振荡电路构成,产生150KHz的方波;经分频得到10KHz、30KHz、50KHz的方波;再通过由TLC04和OP27构成的低通滤波电路得到10KHz、30KHz、50KHz的正弦波;然后通过由OP27组成的合成电路分别得到马鞍波、方波、三角波波形。
同时以MSP430F147作为主控芯片,将三路正弦波通过由选通芯片CD4052和放大器OPA820组成的峰值检测电路得到的结果用TLV1544C进行A/D转换并在LCD上显示。
基于MSP430的正弦信号发生器
基于MSP430的正弦信号发生器摘要以二线式电流型变送器转换成电压信号采集电阻的阻值,通过数码管显示电阻阻值,以TI公司的MSP430F149为主控制器,根据采集到的电阻值来控制DDS集成芯片AD9851实现不同频率的正弦信号的无失真输出。
关键词变送器;MSP430F149;DDS1系统结构通过调节送入二线电流变送器的输入电阻量,改变变送器的输出为电流信号,单片机通过采样变送器电流输出在电流上产生的电压来控制AD9851来产正弦电流信号,并将此时输入电流量转化为电阻量在数码管上显示。
图1系统总体设计框图2功能实现电路2.1信号发生部分采用DDS芯片AD9851及用单片机直接控制。
它产生的频率稳定,控制性能良好、频率范围比较宽。
因为他可以产生正弦波等常见波形用单片机控制字可以方便进行控制输出满足条件的波形且电路简单。
2.2控制部分采用MSP430F149,它是16位单片机、处理速度快、外部资源丰富、自带的A/D转换模块、可以方便的进行信号的采集和功耗低。
2.3显示部分采用8为数码管,虽然只能显示数字,但控制简单,调试方便,且只需要显示必要的数字信息。
2.4变送器部分采用电桥,通过仪表放大器AD623采集电桥的电压差,再经调整电路及运算放大器放大得到的电压信号,再通过V/I变换器输出2~4mA电流,通过调节送入二线电流变送器的输入电阻量,改变变送器的输出为电流,变送器电流输出在电阻上产生的电压,再用电压跟随器隔离,采用MSP430内置A/D转换器采样减小了硬件的复杂度,将它转换为电阻值,来达到系统的控制。
3理论分析与参数计算4~20ma电流环在结构上由两部分即变送器和接收器组成,变送器一般位于现场端、传感器端或模块端,而接收器一般在处理器端,它一般在控制器内。
其工作电源和信号共用一根导线,工作电源由接收端提供。
为了避工作频率的干扰,采用电流来传输信号。
另外一种考虑是降低回路电流在接收端的压降。
通过改变电阻值来调整变送器的电流来传输信号,因为电流对噪声并不敏感。
MSP单片机信号发生器设计方案
封面作者:Pan Hongliang仅供个人学习题目名称:基于MSP430的信号发生器设计姓名:彭从锋班级:电信111学号:201133285113日期:2014/7/08摘要随着科技的发展和现代科研的需要,信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。
本系统采用MSP430F149单片机为控制核心,利用单片机内置的DA芯片,通过按键中断来逻辑选择要输出的波形(正弦波、方波、三角波、锯齿波),再设置其它键来控制波形的幅值及频率,然后通过单片机控制显示到LCD1602上。
波形的产生是通过MSP430单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
在MSP430学习板的键盘按键,通过软件编程来选择各种波形、幅值电压和频率,按不同按键产生不同波形的信号。
此方案的有点是电路原理比较简单,实现起来比较容易。
关键字:MSP430,信号发生器,LCD1602前言计算机和集成技术的高速发展,电子电路的分析与设计及相应专业课程的教学与实验所采用的方式与方法都发生了重大变化,特别是电子设计自动化系统中所包含的测试测量技术已经成为现代教育技术的重要组成部分,在高校的各个电子相关的实验室中,都需要开发和测试各种复杂的电路或子系统,其通常要求从没有上市的或很难获得的元器件或传感器中提取额外的信号,由此可见信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
基于MSP430单片机的信号发生器设计
题目名称:基于MSP430的信号发生器设计*名:***班级:电信111学号:************日期:2014/7/08I摘要随着科技的发展和现代科研的需要,信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。
各种波形曲线均可以用三角函数方程式来表示。
能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。
例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。
在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。
本系统采用MSP430F149单片机为控制核心,利用单片机内置的DA芯片,通过按键中断来逻辑选择要输出的波形(正弦波、方波、三角波、锯齿波),再设置其它键来控制波形的幅值及频率,然后通过单片机控制显示到LCD1602上。
波形的产生是通过MSP430单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。
在MSP430学习板的键盘按键,通过软件编程来选择各种波形、幅值电压和频率,按不同按键产生不同波形的信号。
此方案的有点是电路原理比较简单,实现起来比较容易。
关键字:MSP430,信号发生器,LCD1602II前言计算机和集成技术的高速发展,电子电路的分析与设计及相应专业课程的教学与实验所采用的方式与方法都发生了重大变化,特别是电子设计自动化系统中所包含的测试测量技术已经成为现代教育技术的重要组成部分,在高校的各个电子相关的实验室中,都需要开发和测试各种复杂的电路或子系统,其通常要求从没有上市的或很难获得的元器件或传感器中提取额外的信号,由此可见信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
基于MSP430的信号发生系统设计
基于MSP430的信号发生系统设计MSP430是一款低功耗、高性能的微控制器,适用于许多应用领域,包括信号发生系统设计。
在信号发生系统设计中,MSP430可以作为主控芯片,实现信号的产生、处理和输出。
首先,在信号发生系统设计中,我们需要考虑使用什么样的信号发生电路。
MSP430可以通过GPIO(通用输入输出)引脚产生数字信号,也可以通过模拟信号发生器产生模拟信号。
根据系统的需求,我们可以选择合适的电路,例如RC电路产生正弦信号,电容电感电路产生方波信号等等。
其次,我们需要考虑如何使用MSP430控制信号发生电路。
MSP430具有丰富的外设接口,例如定时器、比较器、ADC等等,可以实现与外部电路的连接和控制。
通过配置MSP430的定时器,我们可以实现产生固定频率的信号。
通过配置比较器,我们可以实现产生特定幅值的信号。
通过配置ADC,我们可以实现对模拟信号的采样和数字化处理。
另外,在信号发生系统设计中,我们还需要考虑信号的处理和输出。
MSP430可以通过内部的计算单元和存储器,实现对信号的处理算法,例如滤波、采样、平均等。
通过配置MSP430的外部引脚,我们可以将处理后的信号输出到外部设备,例如显示器、音响等等。
在信号发生系统设计中,还需要考虑功耗管理的问题。
MSP430具有低功耗的特点,可以通过配置功耗管理模块,实现系统的低功耗运行。
例如使用低功耗模式,关闭不需要的外设,降低系统的功耗。
最后,在信号发生系统设计中,需要考虑系统的可靠性和稳定性。
MSP430具有多个时钟源和时钟分频器,可以实现稳定的系统时钟。
此外,MSP430还具有多种保护机制,例如电源过压保护、温度保护等等,可以提高系统的稳定性和可靠性。
综上所述,基于MSP430的信号发生系统设计需要考虑信号发生电路的选择、MSP430的外设接口的配置、信号的处理和输出、功耗管理以及系统的可靠性和稳定性等方面。
通过合理地设计和配置,可以实现稳定、可靠、低功耗的信号发生系统。
msp430课程设计
msp430课程设计一、教学目标本课程的教学目标是使学生掌握MSP430单片机的基本原理、编程方法和应用技巧。
具体来说,知识目标包括了解MSP430单片机的结构、特点和工作原理,掌握C语言编程的基本语法,熟悉MSP430单片机的应用领域。
技能目标则要求学生能够熟练使用MSP430开发工具进行程序设计和调试,能够独立完成简单的MSP430单片机应用项目。
情感态度价值观目标则是培养学生对电子技术的兴趣和热情,提高他们的问题解决能力和创新意识。
二、教学内容本课程的教学内容主要包括MSP430单片机的硬件结构、编程语言、开发环境和应用实例。
具体来说,将讲解MSP430单片机的各个模块及其功能,包括CPU、内存、外设等,以及这些模块是如何协同工作来实现各种功能的。
接下来,将介绍C语言编程的基本语法和编程技巧,包括数据类型、运算符、控制语句等,以及如何使用MSP430的开发工具进行程序设计和调试。
最后,将通过一些具体的应用实例来展示如何使用MSP430单片机来解决实际问题,比如温度计、电子钟等。
三、教学方法为了达到上述教学目标,将采用多种教学方法相结合的方式进行教学。
首先,将采用讲授法来讲解MSP430单片机的硬件结构和C语言编程的基本语法。
通过讲解,使学生能够理解和掌握相关知识。
其次,将采用讨论法来探讨一些实际的应用案例,引导学生通过讨论和思考来解决问题。
此外,还将采用实验法让学生通过动手实践来加深对知识的理解和应用能力。
最后,将采用案例分析法来分析一些成功的MSP430单片机应用项目,使学生能够了解和掌握如何将理论知识应用于实际项目中。
四、教学资源为了支持教学内容的讲解和教学方法的实施,将准备一系列的教学资源。
首先,将使用教材《MSP430单片机原理与应用》作为主要的教学资料,引导学生学习和掌握相关知识。
其次,将提供一些参考书籍和在线资料,供学生进行深入学习。
此外,还将准备一些多媒体资料,如PPT、视频等,以直观的方式展示一些复杂的原理和应用案例。
基于MSP430和DDS的信号发生器设计
A D 9 8 5 o 模 块} . 卜 -
— —
正弦波 信号 和标准 的方波 信 号。A D 9 8 5 0 的5 位 相 位 控 制 字 ,允 许 相 位 按 增 量 1 8 0 。 、9 0 。 、 4 5 。 、2 2 . 5 。 、1 1 . 2 5 。 或 这 些 值 的 组 合 进 行 调 整 。在高速 D D S 中 进 行 数 据 的 整 合 , 它 采 用 3 2 位相 位 累加 器 ,截 断 成 1 4 位 , 输 入 正 弦 查 询表 ,查询 表输 出截 断成 1 0 位 , 输 入 到 D A C 。D A C 输 出 两 个 互 补 的模 拟 电 流 ,接 到 滤 波器 上 。调节D A C 满 量 程 输 出 电 流 , 需 外 接 个 电阻 R , 其 调 节 关 系 是 :
位 ,频率调 节范围为O ~1 0 0 0 0 H z ,可在液 晶屏上显示 。系统主要 由信号发 生模块 、显示模块和控制模块 组成,可输 出正 弦波、方 波、三角波、锯齿波等各种 不同
的 波 形 。此 设 计 可 产 生 比较 稳 定 的 波形 信 号 ,方 便 移 植 到 实 际应 用 中 。 【 关 键 词 】 信 号 发 生器 ;MS P 4 3 0;DDS
域。
2 . 系统 设 计 2 . 1 整 体 设 计 信 号 发 生 器 电路 主 要 由M S P 4 3 0 F 1 4 9 最 小系 统 、键 盘 电路 、L C D l 2 8 6 4 显示 电路 、 A D 9 8 5 0 模块 、电源模块 等组成 。系统原理方 框图如图2 所示 。
据 。D D S 系 统 的 核 心 是 相 位 累 加 器 , 它 由一 个 加法器 和一个N 位 相 位 寄 存 器 组 成 ,N 一般 为2 4  ̄3 2 位 。 每 来 一 个 时 钟 ,相 位 寄 存 器 以 步长M 增加 。相 位寄存 器将 加法 器在 上一个 时钟作用 后所产生 的新相位数据 反馈到加法 器 的 输 入 端 , 以使 加 法 器 在 下 一 个 时 钟 的 作 用 下 继 续 与 频 率 控 制 字 相 加 。 同 时 相 位 寄存 器 的 输 出 与 相 位 控 制 字 相 加 ,然 后 输 入 到 正 弦 查 询 表 地 址 上 。这 样 , 相 位 累 加 器 在 参 考 时 钟 的作 用 下 ,进 行 线 性 相 位 累 加 , 当相 位 累 加 器 加 至 满 量 程 时 就 会 产 生 一 次 溢 出 , 完 成 一个 周期 性 的动作 ,这个 周期 就是D D 8 合 成 信号 的一个周期 ,相位累加器 的溢 出频率 就 是D D S 输 出 信 号 的频 率 比 ] 。若 频 率 控 制 字 为M ,位数 为N , ̄ U D D S 系 统 输 出 信 号 的 频 率 为: t :f c x X l Z ( 1 ) 正 弦 查 询 表 包 含 一 个 周 期 正 弦 波 数 字 幅 度信息 ,每个地址对 应正弦波0  ̄3 6 0 。 范 围 的 一 个 相 位 点 。查 询 表 把 输 入 的 地 址 相 位 信 息映射 成 正弦波 幅度信 号 ,驱动D A C , 输 出 模 拟 量 。相 位 累 加 器 输 出N 位 并 不全 部 加 到
北邮函数信号发生器的设计说明
北京邮电大学实验报告课程名称:电子测量与电子电路基础实验名称:函数信号发生器的设计班级:学号:班内序号:姓名:一 课题名称:函数信号发生器的设计 二 摘要和关键词摘要:本实验由两个电路组成,方波——三角波自激的单线比较器产生方波,通过积分电路产生三角波,再经过差分电路实现三角波——正弦波变换。
输出方 波幅度的大小有稳压管的稳压值决定,频率可用电位器调节,正弦波幅度和电路的对称性也分别由两个电位器调节,以实现良好的正弦波输出图形。
关键词:函数信号发生器、方波、三角波、正弦波 三 设计任务要求:设计制作一个方波——三角波——正弦波信号发生器,供电电源为12±V 。
1输出频率能在1KHZ~10KHZ 范围内连续可调;2 方波输出电压vopp =12V(误差%20<),上升、下降沿小于10µs ;3 三角波vopp =8V((误差%20<);4 正弦波vopp ≥1V ,无明显失真。
四 设计思路、总体结构框图方波三角波图1根据任务要求可以拟出多种实验方案,本实验采用的是图1所示方式,采用运算放大器组成的积分电路,可得到比较理想的方波和三角波。
三角波——正弦波变换电路的种类很多,有二极管桥式电路、二极管可变分压器电路和差分放大器等,本实验采用电流镜偏置的差分放大电路设计实现波形转换的方法。
图2五 分块电路和总体电路的设计(含电路图)1方波——三角波产生电路方波——三角波产生电路三角波——正弦波转换电路电源电路图3 方波-三角波基本产生电路由于采用了运算放大器组成的积分电路,可得到比较理想的方波和三角波。
该电路振荡频率和幅度便于调节,输出方波幅度的大小由稳压管的稳压值决定,即限制在±(UZ + UD)之间。
方波经积分得到三角波,幅度为Uo2m =±R1/Rf*(Uz + UD)改变R1与Rf的比值可调节Uo2m的大小方波和三角波的振荡频率相同,为f = 1/T =αRf/4R1R2C式中α为电位器的滑动比(即滑动头对地电阻与电位器总电阻之比)。
基于msp430单片机的信号发生器设计 程序
/***************此程序与00程序的不同在于P0中断程序中去掉了开、关中断的操作***************///显示方面只显示第一次按键的显示要求#include <msp430x14x.h>#include <math.h>#include "BoardConfig.h"#define uchar unsigned char/***************显示模块的定义***************/#define DataDir P4DIR#define DataPort P4OUT#define Busy 0x80#define CtrlDir P3DIR#define CLR_RS P3OUT &= ~BIT0; //RS = P3.0#define SET_RS P3OUT |= BIT0;#define CLR_RW P3OUT &= ~BIT1; //RW = P3.1#define SET_RW P3OUT |= BIT1;#define CLR_EN P3OUT &= ~BIT2; //EN = P3.2#define SET_EN P3OUT |= BIT2;/***************DA转换模块的定义***************/#define SCL_H P1OUT |= BIT1#define SCL_L P1OUT &= ~BIT1#define SDA_H P1OUT |= BIT0#define SDA_L P1OUT &= ~BIT0#define SCL_out P1DIR |= BIT1 //SCL设置为输出模式#define SDA_in P1DIR &= ~BIT0 //SDA改成输入模式#define SDA_out P1DIR |= BIT0 //SDA变回输出模式#define SDA_val P1IN&BIT0 //SDA的位值#define TRUE 1#define FALSE 0#define pai 3.14/***************按键模块全局变量***************/uchar key_Pressed; //按键是否被按下:1--是,0--否uchar key_val; //存放键值uchar key_Flag; //按键是否已放开:1--是,0--否//设置键盘逻辑键值与程序计算键值的映射uchar key_Map[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};uchar s1[] = {"zhengxian:"};uchar s2[] = {"fangbo:"};uchar s3[] = {"juchi:"};uchar s4[] = {"sanjiao:"};/***************调节模块全局变量***************/uchar fuzhi;uchar pinlv;unsigned int time; //定时int vcc; //da上加的电压uchar boxing;double bianliang;uchar biaozhi;int pianyi;int shuchu;/***************总体定义模块***************//***************总体定义模块***************/void xianshi(void);void DispNChar(uchar x,uchar y, uchar n,uchar *ptr);void LocateXY(uchar x,uchar y) ;void Disp1Char(uchar x,uchar y,uchar data);void LcdReset(void) ;void LcdWriteCommand(uchar cmd,uchar chk) ;void LcdWriteData( uchar data );void WaitForEnable(void);void Set_IO(void);void start(void);void stop(void);uchar check(void);void write1(void);void write0(void);void write1byte(uchar wdata);uchar Write_DAC(uchar wdata);void Init_Keypad(void);void Check_Key(void);void Key_Event(void);void zhengxian(void);void chansheng1(void);void fangbo(void);void chansheng2(void);void juchi(void);void chansheng3(void);void sanjiao(void);void chansheng4(void);void zengfu(void);void jiaofu(void);void zengpin(void);void jianpin(void);void delay100us(void);void delay5ms(void);void delay15ms(void);void delay400ms(void);/***************总体显示模块***************//***************总体显示模块***************//***********************************函数名称:xianshi功能:让液晶显示程序中液晶显示的主框架参数:返回值:***********************************************/void xianshi(void){LcdWriteCommand(0x01, 1); //清除显示Disp1Char(0,1,0x46); //显示FDisp1Char(1,1,0x3d); //显示=Disp1Char(3,1,0x56); //0x56是字符V的ASCII码值Disp1Char(5,1,0x50); //显示PDisp1Char(6,1,0x3d); //显示=Disp1Char(9,1,0x48); //0x48是字符H的ASCII码值Disp1Char(10,1,0x5a); //0x5a是字符Z的ASCII码值}/*******************************************函数名称:DispNchar功能:让液晶从某个位置起连续显示N个字符参数:x--位置的列坐标y--位置的行坐标n--字符个数ptr--指向字符存放位置的指针返回值:无********************************************/void DispNChar(uchar x,uchar y, uchar n,uchar *ptr){uchar i;for (i=0;i<n;i++){Disp1Char(x++,y,ptr[i]);if (x == 0x0f){x = 0;y ^= 1;}}}/******************************************* 函数名称:LocateXY功能:向液晶输入显示字符位置的坐标信息参数:x--位置的列坐标y--位置的行坐标返回值:无********************************************/ void LocateXY(uchar x,uchar y){uchar temp;temp = x&0x0f;y &= 0x01;if(y) temp |= 0x40; //如果在第2行temp |= 0x80;LcdWriteCommand(temp,1);}/******************************************* 函数名称:Disp1Char功能:在某个位置显示一个字符参数:x--位置的列坐标y--位置的行坐标data--显示的字符数据返回值:无********************************************/ void Disp1Char(uchar x,uchar y,uchar data) {LocateXY( x, y );LcdWriteData( data );}/*******************************************函数名称:LcdReset功能:对1602液晶模块进行复位操作参数:无返回值:无********************************************/void LcdReset(void){CtrlDir |= 0x07; //控制线端口设为输出状态 DataDir = 0xFF; //数据端口设为输出状态LcdWriteCommand(0x38, 0); //规定的复位操作delay5ms();LcdWriteCommand(0x38, 0);delay5ms();LcdWriteCommand(0x38, 0);delay5ms();LcdWriteCommand(0x38, 1); //显示模式设置LcdWriteCommand(0x08, 1); //显示关闭LcdWriteCommand(0x01, 1); //显示清屏LcdWriteCommand(0x06, 1); //写字符时整体不移动LcdWriteCommand(0x0c, 1); //显示开,不开游标,不闪烁}/*******************************************函数名称:LcdWriteCommand功能:向液晶模块写入命令参数:cmd-- chk--是否判忙的标志,1:判忙,0:不判返回值:无********************************************/void LcdWriteCommand(uchar cmd,uchar chk){if (chk) WaitForEnable(); // 检测忙信号?CLR_RS;CLR_RW;_NOP();DataPort = cmd; //将命令字写入数据端口_NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;}/*******************************************函数名称:LcdWriteData功能:向液晶显示的当前地址写入显示数据参数:data--显示字符数据返回值:无********************************************/void LcdWriteData( uchar data ){WaitForEnable(); //等待液晶不忙SET_RS;CLR_RW;_NOP();DataPort = data; //将显示数据写入数据端口 _NOP();SET_EN; //产生使能脉冲信号_NOP();_NOP();CLR_EN;}/*******************************************函数名称:WaitForEnable功能:等待1602液晶完成内部操作参数:无返回值:无********************************************/void WaitForEnable(void){P4DIR &= 0x00; //将P4口切换为输入状态CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();while((P4IN & Busy)!=0); //检测忙标志CLR_EN;P4DIR |= 0xFF; //将P4口切换为输出状态}/***************总体DA转换模块***************//***************总体DA转换模块***************//*******************************************函数名称:Set_IO功能:设置IIC对应IO为输出方向并输出高电平参数:无返回值:无********************************************/void Set_IO(void){SCL_out;SDA_out;SCL_H;SDA_H;}/*******************************************函数名称:start功能:完成IIC的起始条件操作参数:无返回值:无********************************************/void start(void){SCL_H;SDA_H;delay100us();SDA_L;delay100us();SCL_L;delay100us();}/*******************************************函数名称:stop功能:完成IIC的终止条件操作参数:无返回值:无********************************************/ void stop(void){SCL_H;SDA_L;delay100us();SDA_H;delay100us();}/******************************************* 函数名称:check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1--有,0--无********************************************/ uchar check(void){uchar slaveack;SDA_in;SCL_H;delay100us();slaveack = SDA_val; //读入SDA数值SCL_L;delay100us();SDA_out;if(slaveack) return FALSE;else return TRUE;}/****函数名称:write1功能:向IIC总线发送一个1参数:无返回值:无********************************************/ void write1(void){SDA_H;delay100us();SCL_H;delay100us();SCL_L;delay100us();}/******************************************* 函数名称:write0功能:向IIC总线发送一个0参数:无返回值:无********************************************/ void write0(void){SDA_L;delay100us();SCL_H;delay100us();SCL_L;delay100us();}/******************************************* 函数名称:write1byte功能:向IIC总线发送一个字节的数据参数:wdata--发送的数据返回值:无********************************************/ void write1byte(uchar wdata){uchar i;for(i = 8;i > 0;i--){if(wdata & 0x80) write1();else write0();wdata <<= 1;}}/******************************************* 函数名称:Write_DAC功能:向DAC中写入输出电压数据参数:无返回值:写入结果:1--成功,0--失败********************************************/uchar Write_DAC(uchar wdata){start();write1byte(0x98); //DAC的设备地址if(check()) write1byte(wdata>>4); //写控制模式和电压数据的高四位else return 0;if(check()) write1byte(wdata<<4); //写电压数据的低四位else return 0;if(check()) stop();else return 0;return 1;}/***************总体按键模块***************//***************总体按键模块***************//*******************************************函数名称:Init_Keypad功能:初始化扫描键盘的IO端口参数:无返回值:无********************************************/void Init_Keypad(void){P1DIR = 0xf0; //P1.0~P1.3设置为输入状态, P1.4~P1.7设置为输出状态P1OUT |= 0x0f; //P1.4~P1.7输出低电平P1IES = 0x0f; //P1.0~P1.3下降沿触发中断P1IE = 0x0f; //P1.0~P1.3允许中断key_Flag = 0;key_Pressed = 0;key_val = 0;}/*******************************************函数名称:Check_Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无********************************************/void Check_Key(void){uchar row ,col,tmp1,tmp2;tmp1 = 0x80;for(row = 0;row < 4;row++) //行扫描{P1OUT = 0xf0; //P1.4~P1.7输出全1P1OUT -= tmp1; //P1.4~p1.7输出四位中有一个为0tmp1 >>=1;if ((P1IN & 0x0f) < 0x0f) //是否P1IN的P1.0~P1.3中有 { tmp2 = 0x01; // tmp2用于检测出那一位为0for(col = 0;col < 4;col++) // 列检测{if((P1IN & tmp2) == 0x00) // 是否是该列,等于0为是{key_val = key_Map[row * 4 + col]; // 获取键值return; // 退出循环}tmp2 <<= 1; // tmp2右移1位}}}}/*******************************************函数名称:Key_Event功能:检测按键,并获取键值参数:无返回值:无********************************************/void Key_Event(void){uchar tmp;P1OUT &= 0x00; // 设置P1OUT全为0,等待按键输入tmp = P1IN; // 获取 p1INif ((key_Pressed == 0x00)&&((tmp & 0x0f) < 0x0f)) //如果有键按下{key_Pressed = 1; // 如果有按键按下,设置key_Pressed标识delay15ms(); //消除抖动Check_Key(); // 调用check_Key(),获取键值}else if ((key_Pressed == 1)&&((tmp & 0x0f) == 0x0f)) //如果按键已经释放{key_Pressed = 0; // 清除key_Pressed标识key_Flag = 1; // 设置key_Flag标识}else{_NOP();}}/***************总体波形及显示模块***************//***************总体波形及显示模块***************//*******************************************函数名称:zhengxian功能:输出正弦波参数:无返回值:无********************************************/void zhengxian(void){biaozhi = 0;boxing = 1;xianshi();DispNChar(0,0,10,s1); //显示正弦波CCTL0 = CCIE;CCR0 = time / 12;TACTL = TASSEL_1 + MC_1;_EINT(); //打开中断while(1){Disp1Char(2,1,0x30 + fuzhi); //显示幅值数字的ASCII码值等于其本身数值加上0x30Disp1Char(7,1,0x30 + pinlv / 10); //显示频率十位Disp1Char(8,1,0x30); //显示频率各位}}/*******************************************函数名称:chansheng1功能:输出正弦波参数:无返回值:无********************************************/void chansheng1(void){if(biaozhi == 12){biaozhi = 0;}if(biaozhi < 12){biaozhi += 1;}shuchu = 0xff * (fuzhi * sin(biaozhi * bianliang)+1.5) / vcc;Write_DAC(shuchu); //写入DAC}/*******************************************函数名称:fangbo功能:输出显示参数:无返回值:无************************void fangbo(void){boxing = 2;biaozhi = 1;time = time / 2;xianshi();DispNChar(0,0,7,s2); //显示方波CCTL0 = CCIE;CCR0 = time;TACTL = TASSEL_1 + MC_1;_EINT(); //打开中断while(1){Disp1Char(2,1,0x30 + fuzhi); //显示幅值数字的ASCII码值等于其本身数值加上0x30Disp1Char(7,1,0x30 + pinlv / 10); //显示频率十位Disp1Char(8,1,0x30); //显示频率各位shuchu = 0xff * fuzhi / vcc; //确定输出值的大小}}/*******************************************函数名称:chansheng2功能:输出方波参数:无返回值:无********************************************/void chansheng2(void){ if(biaozhi != 0){Write_DAC(shuchu); //写入DAC}else{Write_DAC(0); //写入DAC}}/*******************************************函数名称:juchi功能:输出显示参数:无返回值:无********************************************/void juchi(void){boxing = 3;xianshi();shuchu = 0;DispNChar(0,0,6,s3); //显示锯齿波Write_DAC(shuchu); //写入DACCCTL0 = CCIE;CCR0 = time / 10;TACTL = TASSEL_1 + MC_1;_EINT(); //打开中断while(1){ Disp1Char(2,1,0x30 + fuzhi); //显示幅值数字的ASCII码值等于其本身数值加上0x30Disp1Char(7,1,0x30 + pinlv / 10); //显示频率十位Disp1Char(8,1,0x30); //显示频率各位}}/*******************************************函数名称:chansheng3功能:输出锯齿波参数:无返回值:无********************************************/void chansheng3(void){shuchu += pianyi;Write_DAC(shuchu); //写入DACif(shuchu >= pianyi * 10)shuchu = 0;}/*******************************************函数名称:sanjiao功能:输出显示参数:无返回值:无********************************************/void sanjiao(void){shuchu = 0;biaozhi = 0;boxing = 4;xianshi();DispNChar(0,0,8,s4); //显示三角波CCTL0 = CCIE;CCR0 = time / 10;TACTL = TASSEL_1 + MC_1;_EINT();while(1){Disp1Char(2,1,0x30 + fuzhi); //显示幅值数字的ASCII码值等于其本身数值加上0x30Disp1Char(7,1,0x30 + pinlv / 10); //显示频率十位Disp1Char(8,1,0x30); //显示频率各位}}/*******************************************函数名称:chansheng4功能:输出三角波参数:无返回值:无********************************************/void chansheng4(void){ if(biaozhi == 10){biaozhi = 0;}if(biaozhi >= 5 && biaozhi {biaozhi += 1;shuchu -= pianyi;}if(biaozhi < 5){biaozhi += 1;shuchu += pianyi;}Write_DAC(shuchu); //写入DAC}/*******************************************函数名称:zengfu功能:增加波形幅值参数:无返回值:无********************************************/ void zengfu(void){_EINT(); //打开中断if(fuzhi < 3){fuzhi += 1; } //幅值加1}/******************************************* 函数名称:jiaofu功能:减小波形幅值参数:无返回值:无********************************************/ void jiaofu(void){_EINT(); //打开中断if(fuzhi > 1){fuzhi -= 1; } //幅值减1}/******************************************* 函数名称:zengpin功能:增加波形频率参数:无返回值:无********************************************/ void zengpin(void){_EINT(); //打开中断pinlv = 20;switch(boxing){case 1: time = 136; break;case 2: time = 819; break;case 3: time = 164; break;case 4: time = 164; break;}CCR0 = time;}/******************************************* 函数名称:jianpin功能:减小波形频率参数:无返回值:无********************************************/ void jianpin(void){_EINT(); //打开中断pinlv = 10;switch(boxing){case 1: time = 273; break;case 2: time = 1638; break;case 3: time = 327; break;case 4: time = 327; break;}CCR0 = time;}/***************总体延时模块***************//***************总体延时模块***************//*******************************************函数名称:delay100us功能:延时约100us的时间参数:无返回值:无********************************************/void delay100us(void){uchar i;for(i = 0;i < 15;i++)_NOP();}/*******************************************函数名称:delay5ms功能:延时约5ms参数:无返回值:无********************************************/void delay5ms(void){int i = 4000;while (i != 0){i--;}}/*******************************************函数名称:delay15ms功能:延时约15ms,完成消抖功能参数:无返回值:无********************************************/void delay15ms(void){int tmp;for(tmp = 12000;tmp > 0;tmp--);}/*******************************************函数名称:delay400ms功能:延时约400ms参数:无返回值:无********************************************/void delay400ms(void){uchar i = 50;int j;while(i--){j = 7269;while(j--);}}void main(void){ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BoardConfig(0xb8); //关闭数码管、流水灯和电平转换 vcc = 3; //da上加的电压bianliang = 2 * pai / 12;fuzhi = 0x02;pinlv = 10;time = 3276;LcdReset(); //初始化LCDInit_Keypad(); //初始化键盘端口_EINT(); //打开中断while(1);}/*******************************************函数名称:Port1_ISR功能:端口P1的中断服务函数参数:无返回值:无********************************************/#pragma vector=PORT1_VECTOR__interrupt void Port1_ISR(void){ while(1){Key_Event(); //检测按键,并获取键值P1IFG = 0; P1OUT = 0; //清中断标志switch(key_val){ case 1: zhengxian(); break; //输出正弦波 case 2: fangbo(); break; //输出方波case 3: juchi(); break; //输出锯齿波 case 4: sanjiao(); break; //输出三角波 case 5: zengfu(); break; //增加幅值case 6: jiaofu(); break; //减小幅值case 7: zengpin(); break; //增大频率即选择20hzcase 8: jianpin(); break; //减小频率即选择10hzdefault: break;}break;}}/*******************************************函数名称:TIMERA0_VECTOR功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){switch(boxing){case 1:chansheng1();break;case 2:biaozhi = ~biaozhi;chansheng2();break;case 3:pianyi = 0xff * fuzhi / vcc / 10; //确定偏移量的大小 chansheng3();break;case 4:pianyi = 0xff * fuzhi / vcc / 5; //确定偏移量的大小; chansheng4();break;}}。
基于MSP430和DDS的信号发生器设计
基于MSP430和DDS的信号发生器设计【摘要】本设计是基于MSP430和DDS的信号发生器。
系统采用MSP430单片机为控制核心,利用DDS产生正弦波,并通过按键来选择输出的波形以及调节频率和相位,频率调节范围为0~10000Hz,可在液晶屏上显示。
系统主要由信号发生模块、显示模块和控制模块组成,可输出正弦波、方波、三角波、锯齿波等各种不同的波形。
此设计可产生比较稳定的波形信号,方便移植到实际应用中。
【关键词】信号发生器;MSP430;DDS随着现代科技的进步,信号发生器在科技和生产实践中扮演着越来越重要的角色。
信号发生器可以用来产生各种需要的波形,方便进行实验[1]。
本设计使用的MSP430单片机是一种16位超低功耗、具有RISC指令集的混合信号处理器。
该系列单片机多应用于需要电池供电的便携式仪器仪表中。
随着“软件无线电”技术和数字技术的飞速发展,用数字控制方法,从一个参考频率源产生多种频率的技术——直接数字合成器(即DDS)被广泛应用在航空、航天、通信、雷达等领域。
图1 DDS系统框图1.DDS原理图1是实际中常用的可编程DDS系统。
DDS输出信号的幅度、频率和相位均可实现程控。
图中正弦查询表是一个可编程只读存储器,存有一个或多个完整周期的正弦波数据。
DDS系统的核心是相位累加器,它由一个加法器和一个N 位相位寄存器组成,N一般为24~32位。
每来一个时钟,相位寄存器以步长M 增加。
相位寄存器将加法器在上一个时钟作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟的作用下继续与频率控制字相加。
同时相位寄存器的输出与相位控制字相加,然后输入到正弦查询表地址上。
这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器加至满量程时就会产生一次溢出,完成一个周期性的动作,这个周期就是DDS合成信号的一个周期,相位累加器的溢出频率就是DDS输出信号的频率比[2]。
若频率控制字为M,位数为N,则DDS系统输出信号的频率为:(1)正弦查询表包含一个周期正弦波数字幅度信息,每个地址对应正弦波O~360°范围的一个相位点。
基于MSP430的函数信号发生器设计方案
基于MSP430的函数信号发生器设计方案摘要:信号产生部分采用信号发生芯片max038,以msp430单片机为微控制器,进行各种功能操作,完成输出信号的波形、频率、幅度的调节。
max038输出的频率经过一级跟随器送给opa300和74hc00构成的波形整形电路对波形进行转换和整形变换成方波信号,再将次信号进行分频,分频后的信号送入msp430进行测量。
用lcd显示器,实时显示输出信号参数。
控制部分及信号测量部分由msp430单片机实现。
关键词:函数信号发生器发生芯片max038 单片机引言函数信号发生器可以产生正弦波、方波、三角波三种信号,输出频率频率范围为1khz-1mhz。
分为三个档位:1khz-10khz、10khz-100khz、100khz-1mhz。
输出频率可以用频率电位器(多圈精密电位器)调节,输出信号幅度(vpp)从50mv到9v可调。
波形切换通过一个按键实现,并且可以从液晶显示上可以显示当前输出的波形,频率值和信号幅度值。
信号产生部分电路图采用精密函数信号发生器max038。
信号处理部分采用ti公司的opa300,tl082等运放构成。
1.方案设计能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途,但是以往产品中的信号发生器,往往体积较大,还要外部供电,给户外需要用到信号发生器的地方带来不便。
如果能把整机功耗降下来,体积做小,并且采用电池供电,这样就可以做出便携式函数信号发生器。
整体电路共分为一下几部分:信号产生模块,后级放大模块,信号整形分频模块,信号频率测量模块,信号幅度测量模块,又可分为硬件设计和软件设计[1]。
2.信号产生电路设计图1中电位器rp1是频率调节电位器,满足精度要求,所以选择高精度的多圈电位器。
电位器一段连接max038的1脚ref端,ref输出标准电压2.5v。
另一端连接max038的10脚in输入端,通过调节电位器rp1可以改变10脚iin的值,从而改变输出频率值。
北京邮电大学课设基于MS的简单信号发生器的设计
基于MSP430的信号发生器设计报告学院:电子工程学院班级:组员:唐卓浩()王旭东()李务雨()指导老师:尹露一、摘要信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。
本设计介绍一款基于MSP430G2553 单片机的信号发生器。
该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。
本次需要完成的任务是以MSP430LaunchPad的单片机为控制核心、DAC模块作为转换与按键电路作为输入构成的一种电子产品。
MSP430LaunchPad单片机为控制核心,能实时的进行控制;按键输入调整输出状态,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)自由发挥。
一种基于MSP430单片机的SPWM发生器设计
总第326期2016年第12期计算机与数字工程Computer &Digital Engineering Vol.44 N o.122513一种基于MSP430单片机的SPW M发生器设计$刘东青1郑茂1叶俊杰2(1.空军预警学院武汉430019)!.空军雷达兵第十三旅乌鲁木齐830000)摘要针对S P W M控制方法实现简单,效果良好,其输出电流或者电压波形为正弦波,在点击控制领域获得了广泛 的应用。
论文设计了一种基于单片机M S P430G2553实现S P W M波形的方法,设计思路主要是根据正弦表中的采样数据,通过程序控制单片机M S P430G2553输出按正弦规律变化的P W M波形,再将其经过适当的低通滤波处理,从而获得期望 的幅频可控的正弦波,并通过实验验证了利用其实现S P W M波的可行性和有效性。
关键词S P W M;滤波器;M S P430G2553单片机中图分类号T P393 D O# 10.3969/j.issn1672-9722. 2016. 12.046Design of A SPWM Generator Based on MSP430 MCUL I U Dongqing1Z H E N G M a o1YEJunjie2(1.Air Force Early Warning Academy,W u h a n430019)(2.Air Force Radar13T H Brigade,u R U M C H I830000)Abstract The S P W M control method has a good effect,the output current or voltage waveform i s sine wave,has been widely used in the fie l d of control click.This paper designs a kind of method based on single chip microcomputerM S P430G2553 to realize S P W M waveform.Design thinking i s mainly according t o the sampling data through the program control microcontroller M S P430G2553 output according to the sine law of change of P W M waveform,i t gets through the appropriate low-pass f i l t e r processing,to get expected sine wave amplitude frequency controllable,in orderto verify the use of the feasibility and effectiveness of the realization of S P W M waveform.Key Words S P W M,f i l t e r,M S P430G2553 microcomputerClass Number T P3931引言逆变电源是一种采用电力电子技术进行电能变换的装置,它从交流或直流输入获得稳压恒频的 交流输出[1]。
北邮模电实验报告 函数信号发生器的设计
北京邮电大学电子电路综合设计实验报告课题名称:函数信号发生器的设计学院:班级:姓名:学号:班内序号:课题名称:函数信号发生器的设计摘要:采用运算放大器组成的积分电路产生比较理想的方波-三角波,根据所需振荡频率和对方波前后沿陡度、方波和三角波幅度的要求,选择运放、稳压管、限流电阻和电容。
三角波-正弦波转换电路利用差分放大器传输特性曲线的非线性实现,选取合适的滑动变阻器来调节三角波的幅度和电路的对称性,同时利用隔直电容、滤波电容来改善输出正弦波的波形。
关键词:方波三角波正弦波一、设计任务要求1.基本要求:设计制作一个函数信号发生器电路,该电路能够输出频率可调的正弦波、三角波和方波信号。
(1) 输出频率能在1-10KHz范围内连续可调,无明显失真。
(2) 方波输出电压Uopp=12V(误差小于20%),上升、下降沿小于10us。
(3) 三角波Uopp=8V(误差小于20%)。
(4) 正弦波Uopp1V,无明显失真。
2.提高要求:(1) 输出方波占空比可调范围30%-70%。
(2) 三种输出波形的峰峰值Uopp均可在1V-10V内连续可调。
二、设计思路和总体结构框图总体结构框图:设计思路:由运放构成的比较器和反相积分器组成方波-三角波发生电路,三角波输入差分放大电路,利用其传输特性曲线的非线性实现三角波-正弦波的转换,从而电路可在三个输出端分别输出方波、三角波和正弦波,达到信号发生器实验的基本要求。
将输出端与地之间接入大阻值电位器,电位器的抽头处作为新的输出端,实现输出信号幅度的连续调节。
利用二极管的单向导通性,将方波-三角波中间的电阻改为两个反向二极管一端相连,另一端接入电位器,抽头处输出的结构,实现占空比连续可调,达到信号发生器实验的提高要求。
三、分块电路和总体电路的设计过程1.方波-三角波产生电路电路图:设计过程:①根据所需振荡频率的高低和对方波前后沿陡度的要求,选择电压转换速率S R合适的运算放大器。
基于MSP430单片机的信号发生器设计
基于MSP430单片机的信号发生器设计信号发生器是一种用于产生各种波形信号的仪器,常用于电子实验、通信测试等领域。
本文将基于MSP430单片机设计一个简单的信号发生器,并介绍其原理、硬件电路和软件设计过程。
一、设计原理MSP430是德州仪器(TI)推出的一款低功耗微控制器,具有丰富的外设和易用的开发环境,适合用于嵌入式系统设计。
通过MSP430的数字模拟转换器(DAC)和PWM输出功能,我们可以实现一个基本的信号发生器。
本设计基于MSP430G2553单片机,通过PWM输出产生不同频率的方波,并通过DAC输出控制方波的幅度,从而生成正弦、三角和方波等不同波形的信号。
二、硬件电路设计硬件电路主要包括MSP430G2553单片机、DAC芯片、PWM输出电路和运放放大电路。
1.MSP430G2553单片机MSP430G2553单片机具有16位的定时器,可产生必要的时序信号,以及8位的数字模拟转换器(DAC),可用于控制信号幅度。
2.DAC芯片DAC芯片用于将MSP430的数字信号转换为模拟信号,并控制信号的幅度。
常用的DAC芯片有MAX523和TLV5620等。
3.PWM输出电路PWM输出电路用于产生不同频率和占空比的方波信号。
我们可以利用MSP430的定时器功能或使用外部PWM芯片,如L293D或ULN2803A。
4.运放放大电路运放放大电路用于放大DAC输出的信号,以得到更高的输出幅度。
我们可以选择常见的运放芯片,如LM324或OPA2134三、软件设计过程软件设计主要包括定时器配置、PWM输出配置和DAC控制等模块。
1.定时器配置首先,我们需要配置MSP430的定时器,以产生所需的频率。
通过设定定时器的计数周期和分频系数,可以设置定时器的频率。
2.PWM输出配置接下来,我们需要配置PWM输出。
通过设定PWM期间和占空比,可以产生不同频率和占空比的方波信号。
3.DAC控制最后,我们需要利用MSP430的DAC输出控制信号的幅度。
基于MSP430的函数信号发生器设计方案
输出波形 正弦波 方波
0 o信 号 处 理 模 块 MA X 0 3 8 产 生 的正 弦波 、 三 角波 、 方 波 是 不 可 以 直 接 送 给m s p 4 3 0 单 片 机 进 行 测 量 的 ,那 么 就 要 一 部 分 电 路 实 现 对
A 0 . A 1
函数 信 号 发 生 器 可 以 产 生正 弦波 、方 波 、 三 角 波三 种 信 号, 输 出频 率 频率 范 围为 1 K H Z — l MH Z 。 分为三个档位 : 1 K H Z 一 1 0 K HZ 、 1 0 K H Z — l 0 0 K H Z 、 1 0 0 K H Z — l MH Z 。输 出频 率 可 以 用 频 率电位器 ( 多 圈精 密 电 位器 )调 节 ,输 出 信 号 幅 度 ( V p p ) 从 5 0 mv 到9 V可 调 。 波形 切 换 通 过 一 个 按 键 实 现 . 并 且 可 以从 液 晶显 示 上 可 以显 示 当前 输 出 的波 形 , 频 率 值 和 信 号 幅 度值 。 信 号 产 生 部 分 电路 图采 用 精 密 函数 信 号 发 生 器MA X 0 3 8 。 信 号 处 理 部 分 采 用1 ’ I 公 司 的O P A 3 0 0 , T L 0 8 2 等运放构成。
图2 所示 , 图中前 级两 个O P A 3 0 0 构 成 比较 器 , 参 考 电压 为O 伏, 当U I N z 正 向过零 时 , U 0 1 为 低电平 , U 0 2 为高 电平 , 当U I N 反 向过零 时 , U 0 1 为 高 电平 , U 0 2 为低 电平 . 从 而 将 正 弦 波 转 换 为方 波 。因 为 0 P A 为单 电源供 电 , 所 以输 入 电压 负 值 要 小 于0 . 3 V C C,要 对 输 入 信 号 电 压 进 行 分 压 , U I N / 3 = 1 / 3 = 0 . 3 3 ,
基于MSP430单片机的信号发生器设计
第
1.1
随着计算机和集成技术的高速发展,电子电路的分析与设计及相应专业课程的教学与实验所采用的方式与方法都发生了重大变化,特别是电子设计自动化系统中所包含的测试测量技术已经成为现代教育技术的重要组成部分,在高校的各个电子相关的实验室中,都需要开发和测试各种复杂的电路或子系统,其通常要求从没有上市的或很难获得的元器件或传感器中提取额外的信号,由此可见信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
2、运算速度快
MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如 FFT 等)。
3、超低功耗
MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V 电压。因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM 保持模式下的最低功耗只有0.1μA。其次,独特的时钟系统设计。在 MSP430 系列中有两个不同的时钟系统:基本时钟系统、锁频环(FLL 和FLL+)时钟系统和DCO数字振荡器时钟系统。可以只使用一个晶体振荡器(32768Hz),也可以使用两个晶体振荡器。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0~LPM4)。在实时时钟模式下,可达2.5μA ,在RAM 保持模式下,最低可达0.1μA 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于MSP430的信号发生器设计报告学院:电子工程学院班级:2013211212组员:唐卓浩(2012211069)王旭东(2013211134)李务雨(2013211138)指导老师:***一、摘要信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。
本设计介绍一款基于MSP430G2553单片机的信号发生器。
该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。
本次需要完成的任务是以MSP430 LaunchPad 的单片机为控制核心、DAC 模块作为转换与按键电路作为输入构成的一种电子产品。
MSP430 LaunchPad 单片机为控制核心,能实时的进行控制;按键输入调整输出状态,DAC0832将单片机输出的数字信号转化为模拟量,经运放放大后,在示波器上输出。
在本次程序设计中充分利用了单片机内部资源,涉及到了中断系统、函数调用等。
关键字:信号发生器 MSP430 单片机 数模转换二、设计要求以msp430单片机为核心,通过一个DA (数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。
提供芯片:msp430G2553、DAC0832、REF102、LM384、OP07。
参考框图如下:Lauchpad MSP430电位器按键1DA 转换DAC0832放大输出LM384按键N按键2AD……图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.4MaREF102的引脚:(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_PORTS DAC_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_POINTS 100#define MAX_FREQ_STEPS 400#define ENABLE_WR_PORT P1OUT &= ~DAC_WR // WR->0 #define DISABLE_WR_PORT P1OUT |= DAC_WR // WR->1 #define write_dac(data) P2OUT = data// write to DAC uint curr_signal_type;//当前的波形,0表示正弦波,1是三角波,2是方波int tccr0_now; //表示当前的计数初值uint ccr0_idx; //表示当前计数初值在表中的索引号uchar point_now; //表示现在采用点的索引值int duty_circle; //表示当前的方波高电平的点数,用于表示占空比。