打印

430 TIMER A 输出PWM问题

[复制链接]
1017|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dkasumi|  楼主 | 2015-5-29 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
430 f5229

这是TA初始化
void PWM_Init(void)
{
        P2SEL |= 0x10;                //0x10=0001 0000 选中P2.4引脚为TA2模式
           P2DIR |= 0x10;                //P2.4引脚选为输出模式
           P2OUT |= 0x10;                //P2.4引脚为输出为高电平
           TA2CTL |= 0x0210;        //0000 0010 0001 0000 = 0x0210 设置时钟SMCLK,并选择计时器模式为增计数模式
           TA2CCTL1 = 0x00E0;        //0000 0000        1110 0000 = 0x00E0设置输出模式为模式7
}

这是PWM输出(SPWM)
void PWM_output_init(uint16_t temp)
{
        Dogs102x6_clearScreen();
        Dogs102x6_stringDraw(1, 0, "start output!", DOGS102x6_DRAW_NORMAL);
        //Fre_sin = temp;
        uint16_t Voltage,ADC12_data;
        double double_PI=6.283185307;        //2π
        uint32_t Fre_clk = 25000000;        //时钟频率25MHz
        uint16_t Fre_carry;                                //载波频率
        uint16_t mod_rat=0.8;                        //调制比
        Fre_carry = Bobbi * Fre_sin;        //计算载波频率
        TA2CCR0 = Fre_clk / Fre_carry;
        for(temp_globle=0;temp_globle<Bobbi;temp_globle++)
        {
                mask_ccr1[temp_globle] = (Fre_clk/(4*Bobbi*Fre_sin)*(1-(mod_rat*sin(double_PI/Bobbi*(temp_globle+0.25))+mod_rat*sin(double_PI/Bobbi*(temp_globle+0.75)))/2));
        }
        TA2CCR1 = mask_ccr1[0];                       
        temp_globle=1;

        while (!(buttonsPressed & BUTTON_S2))                //S2按键按下退出程序
        {
                if(temp_globle==359)
                {
                        //ADC12_data=ADC12_cap();
                        //Voltage = 36*(ADC12_data/4096.0);
                        //mod_rat=pid(Voltage);
                        for(temp_globle=0;temp_globle<Bobbi;temp_globle++)
                        {
                                mask_ccr1[temp_globle] = (Fre_clk/(4*Bobbi*Fre_sin)*(1-(mod_rat*sin(double_PI/Bobbi*(temp_globle+0.25))+mod_rat*sin(double_PI/Bobbi*(temp_globle+0.75)))/2));
                        }
                        temp_globle=0;
                }
        }
}

中断服务程序

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
    TA2CCR1 = mask_ccr1[temp_globle];
    temp_globle++;
    //Dogs102x6_clearScreen();
}


发现程序执行的时不会触发中断服务程序
而且把p2.4引脚接到示波器看到的是正弦波,毛刺很多,Vpp 5v,感觉杂波
求大神帮忙解答!谢谢!

相关帖子

沙发
玛尼玛尼哄| | 2015-5-30 10:06 | 只看该作者
楼主用的是定时器中断吗?你要看看你把定时器AO中断需要的配置都配置对了没。

使用特权

评论回复
板凳
天灵灵地灵灵| | 2015-5-30 10:32 | 只看该作者
随便找个定时器中断的例子改改就行了,自己写,容易把配置漏了

使用特权

评论回复
地板
dkasumi|  楼主 | 2015-5-30 22:11 | 只看该作者
问题解决了!是TA2CCTL0寄存器的中断使能没有设置,谢谢各位!

使用特权

评论回复
5
yirongfu| | 2015-5-30 22:30 | 只看该作者
Vpp 5v ????电源不是最高3.6V吗??
正弦波的频率多少?不会是50Hz吧?

使用特权

评论回复
6
dkasumi|  楼主 | 2015-5-31 18:22 | 只看该作者
yirongfu 发表于 2015-5-30 22:30
Vpp 5v ????电源不是最高3.6V吗??
正弦波的频率多少?不会是50Hz吧?

你说对了! 50hz ,就是波形不太好,忘记拍照了 = =, 而且我用的usb供电,邪性

使用特权

评论回复
7
gaoyang9992006| | 2015-5-31 20:37 | 只看该作者
有时候搞懂那个逻辑图比什么都重要的。

使用特权

评论回复
8
mintspring| | 2015-5-31 21:08 | 只看该作者
中断不使能,果然不行,使能就像个总开关一样,你不打开灯泡就是不亮。

使用特权

评论回复
9
dkasumi|  楼主 | 2015-6-1 12:24 | 只看该作者
gaoyang9992006 发表于 2015-5-31 20:37
有时候搞懂那个逻辑图比什么都重要的。

真是啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝