- 2024-08-07
-
回复了主题帖:
TI电源LM62460 求助
tagetage 发表于 2024-8-7 11:34
你的电感怎么选的那么小啊,0.75uH。
他建议是0.75uH 当然是2.2MHZ 开关频率的,我电路是400K开关频率,他建议是2.7uH,我也用的是2.7uH
-
回复了主题帖:
TI电源LM62460 求助
tagetage 发表于 2024-8-7 11:27
An open-drain RESET output with filtering and
delayed release gives a true indication of system
...
没错,它的RESET是输出,但我问题出在那里呢
-
发表了主题帖:
TI电源LM62460 求助
我们用了TI的 LM62460QRPHRQ1芯片,遇到一个很奇怪的问题, 就是输出电压一直是1V,而不是5V,我们更换了LM61495QRPHRQ1也一样的,检查了信号,发现RESET脚一直为0,仔细检测了焊接也没问题,换了几块板子,几个芯片都一样。又去买了LM62460Q5RPHRQ1输出也一样,但是LM62460Q3RPHRQ1输出确是3.3V,被这个问题卡了1个多月了,换了几家买这个芯片基本都一样,请问是什么原因
- 2024-03-24
-
回复了主题帖:
MSP430FR5594 用库函数实现定时器触发AD问题请教
tagetage 发表于 2024-3-22 22:04
这个应该是寄存器设置的问题,你应该看TI的事例代码。MSP430FR5994的代码如下。
https://www.ti.com.cn/ ...
好的,我看一下,谢谢!
- 2024-03-19
-
回复了主题帖:
MSP430FR5594 用库函数实现定时器触发AD问题请教
//*****************************************************************************
// * main.c
// ******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC12_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(ADC12_VECTOR)))
#endif
void ADC12_ISR(void)
{
switch(__even_in_range(ADC12IV,12))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC12BMEMx Overflow
case 4: break; // Vector 4: Conversion time overflow
case 6: break; // Vector 6: ADC12BHI
case 8: break; // Vector 8: ADC12BLO
case 10: break; // Vector 10: ADC12BIN
case 12:
// Vector 12: ADC12BMEM0 Interrupt
g_usAdcData[0]= ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_0);
__bic_SR_register_on_exit(LPM0_bits); // Exit active CPU
break; // Clear CPUOFF bit from 0(SR)
case 14: break; // Vector 14: ADC12BMEM1
case 16: break; // Vector 16: ADC12BMEM2
case 18: break; // Vector 18: ADC12BMEM3
case 20: break; // Vector 20: ADC12BMEM4
case 22: break; // Vector 22: ADC12BMEM5
case 24: break; // Vector 24: ADC12BMEM6
case 26: break; // Vector 26: ADC12BMEM7
case 28: break; // Vector 28: ADC12BMEM8
case 30: break; // Vector 30: ADC12BMEM9
case 32: break; // Vector 32: ADC12BMEM10
case 34: break; // Vector 34: ADC12BMEM11
case 36: break; // Vector 36: ADC12BMEM12
case 38: break; // Vector 38: ADC12BMEM13
case 40: break; // Vector 40: ADC12BMEM14
case 42: break; // Vector 42: ADC12BMEM15
case 44: break; // Vector 44: ADC12BMEM16
case 46: break; // Vector 46: ADC12BMEM17
case 48: break; // Vector 48: ADC12BMEM18
case 50: break; // Vector 50: ADC12BMEM19
case 52: break; // Vector 52: ADC12BMEM20
case 54: break; // Vector 54: ADC12BMEM21
case 56: break; // Vector 56: ADC12BMEM22
case 58: break; // Vector 58: ADC12BMEM23
case 60: break; // Vector 60: ADC12BMEM24
case 62: break; // Vector 62: ADC12BMEM25
case 64: break; // Vector 64: ADC12BMEM26
case 66: break; // Vector 66: ADC12BMEM27
case 68: break; // Vector 68: ADC12BMEM28
case 70: break; // Vector 70: ADC12BMEM29
case 72: break; // Vector 72: ADC12BMEM30
case 74: break; // Vector 74: ADC12BMEM31
case 76: break; // Vector 76: ADC12BRDY
default: break;
}
}
//******************************************************************************
//
//This is the TIMER1_A3 interrupt vector service routine.
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(TIMER0_A1_VECTOR)))
#endif
void TIMER0_A1_ISR (void)
{
switch(TA0IV)
{
case TA0IV_NONE:
break;
case TA0IV_TACCR1:
GPIO_toggleOutputOnPin(
GPIO_PORT_P2,
GPIO_PIN1
);
break;
case TA0IV_TACCR2:
break;
case TA0IV_5:
break;
case TA0IV_6:
break;
case TA0IV_TAIFG:
//Toggle P1.0
GPIO_toggleOutputOnPin(
GPIO_PORT_P2,
GPIO_PIN1
);
break;
default:
break;
}
}
-
发表了主题帖:
MSP430FR5594 用库函数实现定时器触发AD问题请教
我用的芯片是MSP430FR5994,使用的是库函数
我AD用软件触发没有问题,能进入中断
但是我用定时器触发就不行了
定时器单独跑也没有问题,PWM信号 IO脚也出来了
但是AD 用定时器触发就是不行
//*****************************************************************************
// * main.c
// ******************************************************************************
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
PMM_unlockLPM5();
CS_init();
IO_Init();
Timer_Init();
Ad_init();
while(1)
{
// ADC12_B_startConversion(ADC12_B_BASE, ADC12_B_MEMORY_0, ADC12_B_SINGLECHANNEL);
//LPM0, ADC12_A_ISR will force exit
__bis_SR_register(LPM0_bits + GIE);
//for Debugger
__no_operation();
GPIO_setOutputLowOnPin(GPIO_PORT_P2,GPIO_PIN0);
GPIO_setOutputHighOnPin(GPIO_PORT_P2,GPIO_PIN0);
}
return 0;
}
//*****************************************************************************
// * main.c
// ******************************************************************************
void CS_init()
{
// Set PJ.4 and PJ.5 as Secondary Module Function Input, LFXT.
/* Initializes Clock System DCO = 8MHz */
CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_3);
CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2);
CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_2 );
CS_initClockSignal(CS_ACLK, CS_VLOCLK_SELECT, CS_CLOCK_DIVIDER_1);
}
//*****************************************************************************
// * main.c
// ******************************************************************************
void Ad_init(void)
{
ADC12_B_initParam param1 = {0};
ADC12_B_configureMemoryParam param = {0};
GPIO_setAsPeripheralModuleFunctionOutputPin(
GPIO_PORT_P3,
GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3,
GPIO_TERNARY_MODULE_FUNCTION
);
// param1.sampleHoldSignalSourceSelect=ADC12_B_SAMPLEHOLDSOURCE_SC;
param1.sampleHoldSignalSourceSelect=ADC12_B_SAMPLEHOLDSOURCE_1;
param1.clockSourceSelect=ADC12_B_CLOCKSOURCE_MCLK;
param1.clockSourceDivider=ADC12_B_CLOCKDIVIDER_1;
param1.clockSourcePredivider=ADC12_B_CLOCKPREDIVIDER__1;
param1.internalChannelMap=ADC12_B_NOINTCH;
ADC12_B_init(ADC12_B_BASE,¶m1);
ADC12_B_setupSamplingTimer(ADC12_B_BASE,
ADC12_B_CYCLEHOLD_64_CYCLES,
ADC12_B_CYCLEHOLD_4_CYCLES,
ADC12_B_MULTIPLESAMPLESENABLE);
param.memoryBufferControlIndex = ADC12_B_MEMORY_0;
param.inputSourceSelect = ADC12_B_INPUT_A12;
param.refVoltageSourceSelect = ADC12_B_VREFPOS_AVCC_VREFNEG_VSS;
param.endOfSequence = ADC12_B_NOTENDOFSEQUENCE;
param.windowComparatorSelect = ADC12_B_WINDOW_COMPARATOR_DISABLE;
param.differentialModeSelect = ADC12_B_DIFFERENTIAL_MODE_DISABLE;
ADC12_B_configureMemory(ADC12_B_BASE ,¶m);
ADC12_B_clearInterrupt(ADC12_B_BASE,ADC12IFG0,0);
ADC12_B_enableInterrupt(ADC12_B_BASE, ADC12IE0,0,0);
ADC12_B_enable(ADC12_B_BASE);
}
//*****************************************************************************
// * main.c
// ******************************************************************************
void Timer_Init(void)
{
/*
Timer_A_initUpModeParam htim = {0};
htim.clockSource = TIMER_A_CLOCKSOURCE_SMCLK; //
// htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_2; //
htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32; //
htim.timerPeriod = TIMER_PERIOD - 1; //
htim.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_ENABLE; //
// htim.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE; //
htim.captureCompareInterruptEnable_CCR0_CCIE = TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE;
// htim.timerClear = TIMER_A_DO_CLEAR; //
htim.timerClear = TIMER_A_SKIP_CLEAR; //
htim.startTimer = false; //
Timer_A_initUpMode(TIMER_A0_BASE, &htim);
*/
/*
Timer_A_initContinuousModeParam initContParam = {0};
Timer_A_initUpModeParam Param={0};
initContParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
initContParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
initContParam.timerInterruptEnable_TAIE=TIMER_A_TAIE_INTERRUPT_ENABLE;
initContParam.timerClear=TIMER_A_DO_CLEAR;
initContParam.startTimer = true;
Timer_A_initContinuousMode(TIMER_A1_BASE, &initContParam);
*/
/*
//Start timer in continuous mode sourced by SMCLK
Timer_A_initContinuousModeParam initContParam = {0};
initContParam.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
initContParam.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_1;
initContParam.timerInterruptEnable_TAIE = TIMER_A_TAIE_INTERRUPT_DISABLE;
initContParam.timerClear = TIMER_A_DO_CLEAR;
initContParam.startTimer = false;
Timer_A_initContinuousMode(TIMER_A1_BASE, &initContParam);
//Initiaze compare mode
Timer_A_clearCaptureCompareInterrupt(TIMER_A1_BASE,
TIMER_A_CAPTURECOMPARE_REGISTER_0
);
*/
/*
Timer_A_initCompareModeParam initCompParam = {0};
initCompParam.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
initCompParam.compareInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE;
// initCompParam.compareInterruptEnable = TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE;
initCompParam.compareOutputMode = TIMER_A_OUTPUTMODE_TOGGLE;
// initCompParam.compareOutputMode = TIMER_A_OUTPUTMODE_SET_RESET;
initCompParam.compareValue = 10;
Timer_A_initCompareMode(TIMER_A0_BASE, &initCompParam);
*/
Timer_A_outputPWMParam htim1 = {0};
htim1.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
htim1.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32;
htim1.timerPeriod = TIMER_PERIOD - 1;
htim1.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
htim1.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
htim1.dutyCycle = TIMER_PERIOD / 2 ;
Timer_A_outputPWM(TIMER_A0_BASE, &htim1);
// Timer_A_startCounter( TIMER_A0_BASE, TIMER_A_UP_MODE );
}
//*****************************************************************************
// * main.c
// ******************************************************************************
void IO_Init(void)
{
GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P3,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
// GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setOutputHighOnPin(GPIO_PORT_P2,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setOutputHighOnPin(GPIO_PORT_P3,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN0+GPIO_PIN1+GPIO_PIN2+GPIO_PIN3+GPIO_PIN4+GPIO_PIN5+GPIO_PIN6+GPIO_PIN7);
// GPIO_setAsInputPin(GPIO_PORT_P1,GPIO_PIN0);
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,GPIO_PIN0,GPIO_PRIMARY_MODULE_FUNCTION);
}