单片机产生正弦波 一 要求 采用单片机map430g2553 和运算放大器lmv 358 产生正弦波,周期1 秒。 二 思路 可通过单片机产生PWM,调节参数寄存器的值,产生不同占空比的 PWM 信号。若占空比的变化规律是正弦的,则滤波后可得到所需正弦波形。 其中,PWM(Pu lse Width Modu lation)控制——脉冲宽度调制技术是通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。图 1 为用PWM波代替正弦半波的例子。(单片机输出图 1b,滤波后得到图 1a) 图 1 用PWM波代替正弦半波 三 实践 1 PW M 周期计算 正弦波周期1 秒,需要采用多少个周期的PWM 信号去表示?数目过少,则波形不完整(极端状况只有1 个周期的PWM);数目过多,则增加了单片机的计算量,并对速度有要求。这里取N=200 个。 则PWM 信号的周期为T=1/200 秒=5 毫秒。 2 PW M 参数计算 PWM 由定时器TimerA 产生,参数主要包括:定时器时钟,周期计数,高电平计数三个。 定时器时钟:定时器时钟来源有4 个,两个内部的(辅助时钟ACLK、子系统主时钟SMCLK),两个外部的。这里采用内部时钟。没有外部晶体时,ACLK 由内部时钟源VLOCLK(低频时钟源,12K 赫兹)产生,SMCLK 由内部数字时钟DCOCLK(默认1M 赫兹)产生。这里建议采用较高频率的。部分代码如下: BCSCTL1 |= DIVA_0; // ACLK = VLO BCSCTL2 |= SELM_0 + DIVM_0 + DIVS_0; // MCLK = DCO, SMCLK = DCO // Configure TimerA TACTL = 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(若为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 的数值每个周期...