基于Proteus的MSP430单片机仿真实例19-D/A转换之正弦波发生器
[复制链接]
一、任务要求
利用MSP30F247单片机作为控制器,实现正弦波信号输出,最大值正负5V,频率50Hz。。
二、硬件电路
硬件电路如下图所示。
输出最大值正负5V正弦信号,运放电路采用两级设计,第二级为加法电路,可实现双极性输出。
三、程序设计
//main.c
#include "msp430f247.h"
#include "stdlib.h"
#include "string.h"
/*****************************************软件延时,主频1M*******************/
#define CPU_F1 ((double)1000000)
#define delay_us1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000000.0))
#define delay_ms1M(x) __delay_cycles((long)(CPU_F1*(double)x/1000.0))
/****************************************************************************/
/*****************************************软件延时,主频1M*******************/
#define CPU_F8 ((double)8000000)
#define delay_us8M(x) __delay_cycles((long)(CPU_F8*(double)x/1000000.0))
#define delay_ms8M(x) __delay_cycles((long)(CPU_F8*(double)x/1000.0))
/****************************************************************************/
//128点输出正弦波样本值
char data_Sin[128]={
128,134,140,147,153,159,165,171,177,182,188,193,199,204,209,213,
218,222,226,230,234,237,240,243,245,248,250,251,253,254,254,255,
255,255,254,254,253,251,250,248,245,243,240,237,234,230,226,222,
218,213,209,204,199,193,188,182,177,171,165,159,153,147,140,134,
128,122,116,109,103,97,91,85,79,74,68,63,57,52,47,43,38,34,30,26,
22,19,16,13,11,8,6,5,3,2,2,1,1,1,2,2,3,5,6,8,11,13,16,19,22,26,30,
34,38,43,47,52,57,63,68,74,79,85,91,97,103,109,116,122};
/************************************************
函数名称:主函数
函数功能:D/A转换器应用二:正弦波发生器
入口参数:无
出口参数:无
************************************************/
main()
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD;//关看门狗
P4DIR=0xff;
while(1)
{
for(i=0;i<128;i++)
{
P4OUT=data_Sin;
delay_us1M(156);
}
}
}
四、程序说明
单片机产生正弦波信号的一般方法是:先建立一张正弦波数据表,单片机按查表方式经D/A输出得到正弦波信号。实例中采用的D/A转换器是8位的,因此正弦波数据表最多有256个值,一般单片机输出64点或128点,经D/A电路后得到的正弦波波形就比较完美了。。
五、仿真结果与分析
在proteus中画好电路图后,双击单片机,将可执行文件装载到单片机内,点击运行,观察虚拟示波器的波形。如下图所示。
|