打印
[技术求助]

电压升高,输出的PWM占空比就变

[复制链接]
394|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heweibig|  楼主 | 2019-9-22 17:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想输入一个模拟信号,当电压升高,输出的PWM占空比就变大。但是程序进不了中断,请帮忙看看这段程序,谢谢。程序是改别人的,刚开始学,见笑了

使用特权

评论回复

相关帖子

沙发
heweibig|  楼主 | 2019-9-22 17:05 | 只看该作者
#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| | 2019-9-22 17:07 | 只看该作者

TBCTL = TBSSEL_1 + TBCLR + MC0;

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

再看看

使用特权

评论回复
地板
heweibig|  楼主 | 2019-9-22 17:15 | 只看该作者

编程序, 我觉得应该多多地利用好调速器等工具.
多多学习点软件调试的技巧
多多地看手册, 了解和掌握器件的特性

使用特权

评论回复
5
zhenykun| | 2019-9-22 17:18 | 只看该作者
程序编号后可以在线仿真的,可以运行到哪一步的很直观的

使用特权

评论回复
6
jiahy| | 2019-9-22 17:22 | 只看该作者
可以单步运行一下程序,看看各个变量是否和自己想的一样

使用特权

评论回复
7
dengdc| | 2019-9-22 17:27 | 只看该作者
这个主要是看占空比的调节的

使用特权

评论回复
8
sensitivity| | 2019-9-24 14:42 | 只看该作者
你要仔细对一下你的程序流程是不是和你想要的流程吻合

使用特权

评论回复
9
heweibig|  楼主 | 2019-9-24 21:19 | 只看该作者
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈

使用特权

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

本版积分规则

869

主题

13089

帖子

7

粉丝