第一范文网 - 专业文章范例文档资料分享平台

基于MSP430G2211实现的简易信号发生器(景振华) - 图文

来源:用户分享 时间:2025/5/15 10:57:51 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

个点占用1K字节的存储空间。在正弦波相位和幅值量化表中存储的数值相对于是以256个时钟为总周期的PWM调制波的高电平值。

PWM调制的本质是改变波形中高电平的比例,实际是波形在一个周期内的“面积”。

如果将PWM调制波进行低通滤波,取出其直流成分(平均值),滤除后的输出电压将线性正比于PWM的占空比。根据这个原理可以利用PWM输出作为低速DAC使用。

在软件中,DCO的时钟被配置为15.25MHz,但实际测试为15.802368MHz。SMCLK

的时钟源为DCOCLK。定时器TA的时钟源为SMCLK。定时器TA的CCR0为256,而且为了得到稳定的幅值,让正弦波的一个点持续输出占空比相同的60个PWM波形。相当于采样频率为:fclk?15802368/?256*60??1029Hz 则由公式6得:?f?

fclk1029Hz??1Hz 2N210当M=2时,相当于在1029Hz的采样率下,一个波形只取了512个点,输出波形为2Hz。

所以可得fout?M。利用此原理本作品实现了1到100Hz正弦波的产生。

以上对DDS原理和如何在软件中实现进行了介绍,下面软件具体内容进行介绍。

第二节 程序流程图进行介绍

(1) 主程序流程图

开机后,主程序首先关闭看门狗,接着对相应的I/O口、系统时钟、定时器TA进行初始化,完成后开总中断。然后,执行main函数。主程序流程图如图3.1所示。

开始系统初始化Main()函数 图3.1 主程序流程图

(2) 定时器中断服务程序流程图

定时器TA的中断服务程序中主要处理将相应频率的波转化成对应的PWM波输出。定时器中断服务程序流程图如图3.2所示。

定时器TA中断判断信号标志位Y正弦波标志位=1?N三角波标志位=1?N锯齿波标志位=1?YY三角波信号输出Y正弦波信号输出锯齿波信号输出返回

图3.2 定时器中断服务程序流程图

(3) 按键中断服务程序流程图

按键中断服务程序中主要处理波形的选择、频率的加减、信号输出使能等功能。按键中断服务程序流程图见图3.3。

按键中断N有按键?Y信号选择键按下?N“频率+”按下?NY是否长时间按下?YY输出频率加1是否长时间按下?Y输出频率快速递增Y关闭信号输出;置其他信号标志位;“频率-”按下?N“输出使能键”按下?N中断标志位清零输出频率减1输出频率快速递减Y信号输出返回

图3.3 按键中断服务程序流程图

第三节 子程序API介绍

(1) 函数名:void Port_init(void)

输入输出变量:无 功能:IO口初始化 void Port_init(void) {

P1SEL|=BIT2;//TA0.1 P1DIR|=BIT2;

P1DIR|=(BIT3+BIT4+BIT5);

P1OUT|=BIT5;//初始为Sine,点亮相应指示灯 P1OUT&=~(BIT3+BIT4); //四个按键

P1DIR&=~(BIT6+BIT7); P1IES|=BIT6+BIT7; P1IE|=BIT6+BIT7;

P2DIR&=~(BIT6+BIT7);//设为输入 P2SEL&=~(BIT6+BIT7);//关闭第二功能 P2IES|=BIT6+BIT7;//下降沿触发 P2IE|=BIT6+BIT7;//开中断 }

(2) 函数名:void Sys_clock_init(void)

输入输出变量:无 功能:系统时钟配置 void Sys_clock_init(void) {

DCOCTL = 0x60;//DC0=3

BCSCTL1= 0x8F;//0X88-RSEL=8 DCOCLK=1.6MHz 0X8F-RSEL=15 DCOCLK=15.25MHz for(unsigned int i=0;i<65535;i++);//延时,使系统时钟稳定 }

(3) 函数名:void TA_init(void)

输入输出变量:无 功能:定时器TA初始化 void TA_init(void) {

TACTL|=TASSEL_2+MC_1;//TA时钟源选择SMCLK,增计数模式 TACCTL1=OUTMOD_7;//模式7,PWM输出模式 TACCR0=255;

TACCTL0|=CCIE;//打开中断 }

(4) 函数名:__interrupt void TA_ISR (void)

输入输出变量:无

功能:定时器TA中断服务程序 #pragma vector=TIMERA0_VECTOR __interrupt void TA_ISR (void) {

if(WaveSelect==5)//Sine {

Count_line++;

if(Count_line>Sin_line) {

TACCR1=sin[M]; M+=Delt_M;

if(M>=1024) M=M-1024; Count_line=0; } }

if(WaveSelect==10)//Triangle {

Count_line++;

基于MSP430G2211实现的简易信号发生器(景振华) - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c93pnz35ezn2teb88imxm_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top