我已经编写了一个代码、使用内部温度传感器根据温度更改电机速度。
这是代码。 但是、当我上传它并连接电路时、电机将无法启动。 如果代码有任何错误、请帮我找到。
我们高度赞赏立即提供的支持。 谢谢你。
#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 位
}