您好!
我正在尝试使用 GPIO 引脚控制电池状态控制开关。 我使用了相同的端口、但使用了不同的引脚来设置 PWM 通道。 但是、我的理解是、这些引脚不应相互干扰。 但是、即使我的电池开关控制输出应为1、它也会随机变为零并重新开启。 PWM 输出也会变为低电平和高电平、有时这会与电池开关信号重叠。 我配置引脚的方式是否有问题? 该代码应感应输入电压传感器值、触发和 ADC 中断、并启用或禁用电池开关。 提前感谢您。
代码如下
初始代码
/*
P1SEL |= BIT7;//将 P1.7设置为输出方向-高降压
P1DIR |= BIT7;
P2SEL |= BIT0;//将 P2.0设置为输出方向-低降压
P2DIR |= BIT0;
P2SEL |= BIT2;//将 P2.2设置为输出方向-高升压
P2DIR |= BIT2;
P2SEL |= BIT3;//将 P2.3设置为输出方向-低升压
P2DIR |= BIT3;
*
//配置 ADC 引脚
PMAPPWD = 0x02D52;//启用写入访问以修改端口映射寄存器
PMAPCTL = PMAPRECFG;//允许在运行时重新配置
P1MAP0|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A0 - Iin
P1MAP1|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A1 - Vout_BUCK
P1MAP2|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A2 - Vout
P1MAP3|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A3
P1OMAP4|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A4 - Vbat
P1MAP5|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A5 - Iout
P3MAP5|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A8 - Ibat
P3MAP6|= PM_ANALOG;//修改所有 PxMAPy 寄存器- A7 - Vin
P2MAP2|= PM_TD1_1;
P2MAP3|= PM_TD1_2;
P2MAP0|= PM_TD0_2;
P1MAP7|= PM_TD0_1;
P1SEL |=BIT7+BIT5+BIT4+BIT3+BIT2+BIT1 +BIT0;//在应用模拟信号时将端口映射寄存器 PxMAPy 与 PxSEL.y=1一起设置为 PM_ANALOG
P3SEL |=BIT6+BIT4;
P2SEL |= BIT0+BIT2+BIT3;
P2DIR |= BIT0+BIT2+BIT3;
P1DIR |= BIT7;
P3SEL &=(~BIT0);//将 P3.0设置为 GPIO 和输出方向- BAT_GD_EN
P3DIR |= BIT0;
P2SEL &=(~BIT6);//将 P2.6设置为 GPIO 并设置为输出方向- Vgate BAT
P2DIR |= BIT6;
PMAPPWD = 0;//通过写入不正确的密钥来禁用写入访问以修改端口映射寄存器
//主代码
while (1)
{
SetADC(7);
GetADC(7);
}
// ADC10中断服务例程
#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void)
{
switch (__event_in_range (ADC10IV、12))
{
情况0:中断;//无中断
情况2:中断;//转换结果溢出
情况4:中断;//转换时间溢出
情况6:中断;// ADC10HI
情况8:中断;// ADC10LO
情况10:中断;// ADC10IN
情况12:
ADC10CTL0 &=~ADC10ON;// ADC10被完全禁用
ADC_Result = ADC10MEM0;
VIN_TEM=ADC_RESULT;
if (Vin_temp>=Vin_min){
Offbatter();
SetDuty_Buck (D_buckH、D_buckL);
__DELAY_CYCLES (10);//序列转换之间的延迟
}
否则、如果(Vin_temp =Vin_minabs){
//关闭降压级
OffBuck (0、0);
__DELAY_CYCLES (100);//序列转换之间的延迟
OnBattery();
__DELAY_CYCLES (50);//序列转换之间的延迟
//打开升压级
SetDuty_Boost (D_boostH、D_boostL);
}
否则、如果(<Vin_minABS))
{
Offbatter();
OffBuck (0、0);
OffBoost (0、0);
}
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);
中断;//从0 (SR)清除 CPUOFF 位
默认值:break;
}
}
void OnBattery(){
P3OUT |= BIT0;//将3.0设置为高电平-启用电池 GD
P2OUT |= BIT6;//set 2.6至高电平
}
void OffBattery(){
P3OUT &=~BIT0;//将3.0设置为低电平-禁用电池 GD
P2OUT &=~BIT6;//set 2.6至 LOW -禁用电池 FET
}