This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430G2553:基于温度的电机速度控制器帮助

Guru**** 2555630 points
Other Parts Discussed in Thread: MSP430G2553

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/813621/msp430g2553-temperature-based-motor-speed-controller-help

器件型号:MSP430G2553

我已经编写了一个代码、使用内部温度传感器根据温度更改电机速度。  

这是代码。 但是、当我上传它并连接电路时、电机将无法启动。 如果代码有任何错误、请帮我找到。  

我们高度赞赏立即提供的支持。 谢谢你。

#include

long adcValue、tempC;

int main (void){

WDTCTL = WDTPW + WDTHOLD;//为方便起见,禁用看门狗计时器。

P1DIR |= BIT6;//set 引脚1.6至输出方向。
P1SEL |= BIT6;//选择引脚1.6作为 PWM 输出。

TA0CCR0 = 1000;//在定时器 A0捕捉/比较0寄存器中将周期设置为1000us。
TA0CCTL1 = OUTMOD_7;
TA0CCR1 = 500;//电源开启的周期(以微秒为单位)。 它是时间的一半、这相当于50%的占空比。
TA0CTL = tassel_2 + MC_1;//tassel_2选择 SMCLK 作为时钟源、并且 MC_1告诉它向上计数到 TA0CCR0中的值。

_bis_SR_register (LPM0_bits);//切换到低功耗模式0。

ADC10CTL1 = INCH_10 + ADC10DIV_3;// ADC 通道-> 10 (温度传感器)、CLK/4
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;//参考-> 1.5V、64 CLK S&H、中断被启用

__delay_cycles (100);//等待参考稳定

while (1)

ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始

_bis_SR_register (CPUOFF + GIE);//启用中断的 LPM0

adcValue = ADC10MEM;//获取 ADC 转换结果

tempC =((adcValue - 673)* 423)/1024;// C =(adcValue/1024)* 1500mV)-986mV)* 1/3.55mV

if (tempC > tempC + 2)

TA0CCR1 = tempC*20;

if (tempC < tempC + 2)

TA0CCR1 = tempC*20;

_delay_cycles (1000);



#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void)

_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 CPUOFF 位

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也请检查此代码。 两个都不工作。 谢谢你。
    #include<msp430g2553.h>
    longtempInDeg;
    longprevTemp = 0;
    longcurrTemp = 0;
     
    //MAIN PROGRAM
    voidmain(void)
    {
        // Stop Watch Dog Timer
              WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
     
        // select the P1.6 as the PWM output
              P1DIR |= BIT6 ;
              P1SEL |= BIT6 ;
              P1OUT = 0x00;
     
     
        // ADC initialization
     
              ADC10CTL0 = ADC10SHT_3 + SREF_1  + REFON + ADC10ON;
     
              ADC10CTL1 = INCH_10 + ADC10DIV_3;
     
              _delay_cycles(30);
     
        // PWM initialization
              TACTL = TASSEL_1 + MC_1 ;
              TACCR0 = 1000-1;
              TACCTL1 = OUTMOD_7;
              TACCR1 = 500-1;
     
                while(1)
                {
                    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
                    while(ADC10CTL1 & ADC10BUSY);          // check for ADC conversion is completed
     
                    tempInDeg = (((ADC10MEM - 673) * 423) / 1024) - 10;
                    currTemp = tempInDeg;
                    if(currTemp > prevTemp + 2)
                    {
                        TACCR1 = tempInDeg*20 -1;
                        prevTemp = currTemp;
                    }
                    if(currTemp < prevTemp + 2)
                    {
                        TACCR1 = tempInDeg*20 -1;
                        prevTemp = currTemp;
     
                    }
     
                    _delay_cycles(1000);
     
              }
     
    }
     
    </msp430g2553.h>
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    上一次我使用直流电机(已经有一段时间了)我记得我需要一个相当长的 PWM 周期(导通时间)来克服启动惯性- 1ms 似乎还不够。 尝试将周期设置为可能的50ms (50000)。

    您使用 H 桥还是直接连接电机? 如果直接如此、电机启动可能会消耗过多电流并(重复)复位您的 MCU。

    [编辑:您可能需要返回到第一个版本、直到电机运行、然后才使用温度算术。]