单片机产生正弦波(共8页).doc

上传人:飞****2 文档编号:13886031 上传时间:2022-05-01 格式:DOC 页数:8 大小:528KB
返回 下载 相关 举报
单片机产生正弦波(共8页).doc_第1页
第1页 / 共8页
单片机产生正弦波(共8页).doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《单片机产生正弦波(共8页).doc》由会员分享,可在线阅读,更多相关《单片机产生正弦波(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上单片机产生正弦波一 要求采用单片机map430g2553和运算放大器lmv358产生正弦波,周期1秒。二 思路可通过单片机产生PWM,调节参数寄存器的值,产生不同占空比的PWM信号。若占空比的变化规律是正弦的,则滤波后可得到所需正弦波形。其中,PWM(Pulse Width Modulation)控制脉冲宽度调制技术是通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。图1为用PWM波代替正弦半波的例子。(单片机输出图1b,滤波后得到图1a)图1 用PWM波代替正弦半波三 实践1 PWM周期计算正弦波周期1秒,需要采用多少个周期的PWM信号去表示?

2、数目过少,则波形不完整(极端状况只有1个周期的PWM);数目过多,则增加了单片机的计算量,并对速度有要求。这里取N=200个。则PWM信号的周期为T=1/200秒=5毫秒。2 PWM参数计算PWM由定时器TimerA产生,参数主要包括:定时器时钟,周期计数,高电平计数三个。l 定时器时钟:定时器时钟来源有4个,两个内部的(辅助时钟ACLK、子系统主时钟SMCLK),两个外部的。这里采用内部时钟。没有外部晶体时,ACLK由内部时钟源VLOCLK(低频时钟源,12K赫兹)产生,SMCLK由内部数字时钟DCOCLK(默认1M赫兹)产生。这里建议采用较高频率的。部分代码如下:BCSCTL1 |= DI

3、VA_0; / ACLK = VLOBCSCTL2 |= SELM_0 + DIVM_0 + DIVS_0; / MCLK = DCO, SMCLK = DCO/ Configure TimerATACTL = TASSEL1 +MC_1; / Source: SMCLK, UP mode其中,ACLK可配置成VLOCLK的1,2,4,8分频,这里设置为1分频,即ACLK = VLO;第二行中,SELM_0的作用是选择MCLK的时钟源为DCOCLK,DIVM_0设置为MCLK = DCO,DIVS_0设置为SMCLK = DCO(默认时钟源)。TASSEL1将定时器时钟设置为SMCLK(若为T

4、ASSEL0则选择ACLK),且未分频。模式选择MC_1为上升模式。采用上述方法设置定时器时钟 = SMCLK = DCO = 1M赫兹。l 周期计数:上升模式表明定时器由0递增到一个上限值CCR0。CCR0需设置。因为周期T=1/200秒,而定时器时钟 = SMCLK = DCO = 1M赫兹,定时器周期t=1微秒,所以CCR0=T/t=5000,即5毫秒。l 高电平计数:定时器由0递增到一个上限值CCR0过程中,需设置脉宽CCR1。并且K= CCR1/ CCR0的数值每个周期(5毫秒)都变化一次,变化趋势满足正弦变化,200个5毫秒构成一个正弦变化周期。为获得CCR1值,在matlab中输

5、入: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(

6、fid);则在matlab工作目录中生成了带逗号的连续CCR1值。复制到程序中,定义一个数组temp200,其数值为matlab生成的数值。3 PWM实现流程程序包含两个中断,一个是定时器到达上限CCR0(这里是4999)时发出中断,并在中断服务程序中将输出置1,另一个是到达中间值CCR1(0至4999)时发出中断,并在中断服务程序中将输出置0。考虑到同时发出中断时,会有中断嵌套问题、以及优先级问题,所以在当CCR1需置为4999时,手动置为4998。软件流程如图3所示。图3 软件流程图程序为:/*/ LaunchPad Lab4 - Timer Toggle P1.6,/ MSP430G25

7、53/ -/ /| XIN|-/ | | |/ -|RST XOUT|-/ | |/ | P1.6|-LED/*#include short temp200=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,4

8、955,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,2

9、186,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

10、,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; / Stop watchdog timerif (CALBC1_1MHZ =0xFF | CALDCO_1MHZ = 0xFF)while(1); / If calibration constants erased, trap CPU!BCSCTL1 = CALBC1_1MHZ; / Set rangeDCO

11、CTL = CALDCO_1MHZ; / Set DCO step + modulationBCSCTL3 |= LFXT1S_2; / LFXT1 = VLOP1DIR = 0x40; / P1.6 output (green LED)P1OUT = 0; / LED offIFG1 &= OFIFG; / Clear OSCFault flagBCSCTL1 |= DIVA_0; / ACLK = VLOBCSCTL2 |= SELM_0 + DIVM_0 + DIVS_0; / MCLK = DCO, SMCLK = DCO/ Configure TimerATACTL = TASSEL

12、1 +MC_1; / Source: ACLK, UP modeCCR0 = 5000;/Timer count 5100CCR1 = 2500;/Timer count 100CCTL0 = CCIE; /CCR0 interrupt enabledCCTL1 = CCIE; /CCR1 interrupt enabled_BIS_SR(GIE);for(;);/ Timer A0 interrupt service routine#pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A0 (void)P1OUT |= BIT6; / P1

13、.6 output Highif(i=199)i=0;elsei+;if(tempi=4999)CCR1=4998;elseCCR1=tempi;/ Timer A1 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR_interrupt void Timer_A1(void)switch( TA0IV )case 2: P1OUT &= BIT6; / P1.6 output Low break;case 10: break; 4 输出滤波输出运放采用lmv358。其管脚如下图4所示:图4 358管脚示意图采用压控电压源二阶低通滤波电路。(参考模拟电子技术基础,第三版,童诗白、华成英 主编,7.4.2节,352页)。其电路图如图5所示:图5 压控电压源二阶低通滤波电路 通带增益:Avp=1+R4/R3传递函数:所需设计的滤波器输出为1赫兹的正弦波,放大倍数为1,所以设置截止频率为f0=10。取增益Avp=1,即R4=0,R3= R2= R1= R.C1=C.取f0=1/( 2RC),则RC= 0.。可取C=10微法,则R=1591欧姆,实际取R=1.6K(或者C=1微法,R=16K)采用multisim可仿真该滤波器,如图6所示。图6 multisim 仿真图专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁