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.
你好。 我有带 TM4C123GH6PM MCU 的定制板和用于驱动 BLDC 电机的 drv835。 我需要在低侧 MOSFET 处于运行状态时测量电流。 我将 PWM 设置为向上/向下计数模式。 我认为、PWM 应该为 ADC 生成触发事件、然后计数器的值等于零。 有我的初始化代码:
void PWM_Init(){ SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); while (!SysCtlPeripheralReady (SYSCTL_Periph_PWM0)); PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、PWM_PERIOD); PWMGenConfigure (PWM0_BASE、PWM_GEN_2、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_2、PWM_PERIOD); PWMGenConfigure (PWM0_BASE、PWM_GEN_3、PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_3、PWM_PERIOD); PWMGenIntTrigEnable (PWM0_BASE、PWM_GEN_0、PWM_INT_CNT_ZERO); PWMGenEnable (PWM0_BASE、PWM_GEN_0); PWMGenEnable (PWM0_BASE、PWM_GEN_2); PWMGenEnable (PWM0_BASE、PWM_GEN_3); PWMSyncTimeBase (PWM0_BASE、PWM_GEN_0_BIT | PWM_GEN_2_BIT | PWM_GEN_3_BIT); PWMOutputState (PWM0_BASE、(PWM_OUT_0_BIT | PWM_OUT_4_BIT | PWM_OUT_6_BIT)、true); } void ADC_Init(){ SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); // //等待 ADC0模块准备就绪。 // while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0)); // //启用第一个采样序列发生器以捕获通道0的值 //发生处理器触发。 // ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_PWM0、0); ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0); ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH1); ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END); ADCIntRegister (ADC0_BASE、1、handler_ADC); ADCIntEnable (ADC0_BASE、1); ADCSequenceEnable (ADC0_BASE、1); } void handler_ADC (void) { unsigned int state = ADCIntStatus (ADC0_BASE、0、true); ADCIntClear (ADC0_BASE、0); //TODO }
因此、PWM 按预期工作。 但 ADC 没有。 我想获取中断、然后 ADC 完成测量、并从 ADC FIFO 加载结果。 我不知道如何解决这个问题。 我找不到有关此问题的示例。
我找到了答案。 它需要启用 PWM 模块中的触发器、而不是中断。
PWMGenIntTrigEnable (PWM0_BASE、PWM_GEN_0、PWM_TR_CNT_ZERO);
下一个问题是如何获得每3个通道的结果? 我不确定采样序列的正确设置。
看起来该处理程序工作正常。
静态 uint32_t 结果[3]; void handler_adc (void) { ADCIntClear (ADC0_BASE、1); ADCSequenceDataGet (ADC0_BASE、1、结果); ADCSequenceDataGet (ADC0_BASE、1、Results + 1); ADCSequenceDataGet (ADC0_BASE、1、Results + 2); }