[技术求助] 电压升高,输出的PWM占空比就变

[复制链接]
1143|9
 楼主| heweibig 发表于 2018-8-10 15:30 | 显示全部楼层 |阅读模式
我想输入一个模拟信号,当电压升高,输出的PWM占空比就变大。但是程序进不了中断,请帮忙看看这段程序,谢谢。程序是改别人的,刚开始学,见笑了
spark周 发表于 2018-8-10 15:34 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| heweibig 发表于 2018-8-10 15:38 | 显示全部楼层
#include "msp430x14x.h"

#define uchar unsigned char

#define uint unsigned int

uint Results[32];         //存放ADC的转换结果

long A_verage;           //存放32个数据之和

uint A_ve = 0;             //存放32个数的平均值



void main( void )

{

    WDTCTL = WDTPW + WDTHOLD;

    P6DIR  = BIT0;

    P6SEL |= 0x01;                            // Ena××e A/D channel A0

    ADC12CTL0 = ADC12ON + SHT0_15 + MSC;      // Turn on ADC12, set sampling time

    ADC12CTL1 = SHP + CONSEQ_2;               // Use sampling timer, set mode

    ADC12IE = 0x01;                           // Ena××e ADC12IFG.0

    ADC12CTL0 |= ENC;                         // Ena××e conversions

    ADC12CTL0 |= ADC12SC;                     // Start conversion

   

    TBCTL = TBSSEL_1 + TBCLR + MC0;

    TBCCTL1 = OUTMOD_7;

    TBCCR0 = 500;

    TBCCR1 = 250;

    P4DIR = 0X02;

    P4SEL = 0X02;

   

    _EINT();

    while(1);



}



/*******************************************

函数名称:ADC12ISR

功    能:ADC12的中断服务函数

参    数:无

返回值  :无

********************************************/

#pragma vector=ADC_VECTOR

__interrupt void ADC12ISR (void)

{

    static uchar index = 0;

   

    Results[index++] = ADC12MEM0;                      // Move results, IFG is cleared

    if(index == 32)

    {

         uchar i;

         

         A_verage = 0;

         for(i = 0; i < 32; i++)

            A_verage += Results[i];

         A_verage >>= 5;                           //除以32求平均值

         if(A_verage > A_ve)

         {

           if(TBCCR1 < 500) TBCCR1 = TBCCR1 + 10;

           else TBCCR1 = 0;

         }

         else

         {

           if(TBCCR1 > 10) TBCCR1 = TBCCR1 - 10;

           else TBCCR1 = 500;

         }

         A_ve = A_verage;

         

         index = 0;

    }

}
dengdc 发表于 2018-8-10 15:40 | 显示全部楼层

TBCTL = TBSSEL_1 + TBCLR + MC0;

有问题,计数器没打开,改成TBCTL = TBSSEL_1 + TBCLR + MC1;

再看看
 楼主| heweibig 发表于 2018-8-10 15:46 | 显示全部楼层

编程序, 我觉得应该多多地利用好调速器等工具.
多多学习点软件调试的技巧
多多地看手册, 了解和掌握器件的特性
zhenykun 发表于 2018-8-10 15:50 | 显示全部楼层
程序编号后可以在线仿真的,可以运行到哪一步的很直观的
jiahy 发表于 2018-8-10 15:58 | 显示全部楼层

可以单步运行一下程序,看看各个变量是否和自己想的一样
 楼主| heweibig 发表于 2018-8-10 16:03 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈
dengdc 发表于 2018-8-10 16:05 | 显示全部楼层

这个主要是看占空比的调节的
 楼主| heweibig 发表于 2018-8-10 16:08 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

869

主题

13089

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部