工具/软件:Code Composer Studio
大家好、
因此、在使用 TIMER_A_PWM_MODE 项目修整一段时间后、我成功地以不同的速度驱动无刷电机。
但是、当我尝试对4个不同的引脚执行相同的操作时、只有第一个设置为外设输出的引脚才会实际生成 PWM 信号。
如下面的代码所示(突出显示为黄色)、我已经尝试对计时器 A 配置以及第二天模块使用不同的基址、但这没有产生任何变化。
// DriverLib 包括 #include //标准包括 #include #include // Timer_A PWM 配置参数 Timer_A_PWMConfig pwmConfig0 = { Timer_A_CLOCKSOURCE_SMCLK、 Timer_A_CLOCKSOURCE_divider _1、 1280、//此 num/64k =周期 OG 32000 Timer_A_CAPTURECOMPARE 寄存器_1、 Timer_A_OUTPUTMODE_RESET_SET、 64 // 5%或1ms 占空比 OG 3200 }; // Timer_A1 PWM 配置参数 Timer_A_PWMConfig pwmConfig1 = { Timer_A_CLOCKSOURCE_SMCLK、 Timer_A_CLOCKSOURCE_divider _1、 1280、//此 num/64k =周期 OG 32000 Timer_A_CAPTURECOMPARE 寄存器_1、 Timer_A_OUTPUTMODE_RESET_SET、 96 // 7.5%或1.5ms 占空比 OG 3200 }; int main (void) { //停止看门狗 MAP_WDT_A_HOLDTimer(); //对于 LF 模式、将 MCLK 设置为 REFO 128Khz //将 SMCLK 设置为64Khz MAP_CS_setReferenceOscillatorFrequency (CS_REFO_128KHZ); MAP_CS_initClockSignal (CS_MCLK、CS_REFOCLK_SELECT、CS_CLOCK_DELUGER_1); MAP_CS_initClockSignal (CS_SMCLK、CS_REFOCLK_SELECT、CS_CLOCK_DEVIDER_2); MAP_PCM_setPowerState (PCM_AM_LF_VCORE0); //将 GPIO 2.4配置为 PWM 的外设输出,将 P1.1配置为按钮中断 MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function); MAP_GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN1); MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、GPIO_PIN1); MAP_GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN1); //将 GPIO 2.7、2.6、5.6配置为 PWM 的外设输出 MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN7、GPIO_secondary 模块_function); // MAP_GPIO_setAssetModuleOutFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN6、GPIO_primary_module_function); // MAP_PeripheralPUT_PeripheralPin (GPIO_setPin) GPIO_PIN6、GPIO_PRIMARY_MODULE_FUNCTION); //将 P1.0设置为输出方向(LED) MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0); // OG 将 Timer_A 的周期配置为大约500ms、初始占空比为10%(3200个周期) //将 Timer_A 的周期配置为大约20ms、初始占空比为其5%(64个周期) MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig0); // MAP_Timer_A_generatePWM (timer_A1_base、&pwmConfig1); //启用中断并启动看门狗计时器 MAP_Interrupt_enableInterrupt (INT_Port1); MAP_Interrupt_enableSlepOnIsrExit(); MAP_Interrupt_enableMaster(); //不使用时休眠 while (1) { MAP_PCM_gotoLPM0 (); } } // Port1 ISR -此 ISR 将在按下 void Port1_IRQHandler (void) {时逐步升高 PWM 的占空比 uint32_t status = MAP_GPIO_getEnabledInterruptStatus (GPIO_PORT_P1); MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、状态); int32_t speedChange; //按钮按16更改百分比以增加1.25%,或按0.25ms 32以增加2.5%或0.5ms IF (STATUS & GPIO_PIN1) { if (pwmConfig0.dutyCycle = 128)// 10% cycle at 128、 OG 28800 90% { speedChange =-16; // pwmConfig.dutyCycle += speedChange; } if (pwmConfig0.dutyCycle = 64)// 5% cycle、1ms OG 28800 90% { speedChange = 16; // pwmConfig.dutyCycle += speedChange;//增加1.25%或0.25ms 32 (2.5%或0.5ms) OG 3200 10% } // pwmConfig.dutyCycle = 64;//重置为5%或1ms 3200 10% // 其他 pwmConfig0.dutyCycle += speedChange;//增加1.25%或0.25ms 32 (2.5%或0.5ms) OG 3200 10% MAP_Timer_A_generatePWM (TIMER_A0_BASE、&pwmConfig0); volatile uint32_t i; //按钮按 DEBUG //切换 P1.0输出调试按钮按压 MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0); //延迟 for (i=1000;i>0;i--); } }
要使其他3个引脚(以蓝色突出显示)输出各自的独立 PWM 信号、需要满足哪些条件?
谢谢、
Robert ***