一,设计框图
电机控制的逻辑框图如下。

二,配置
1. 引脚使用
| 速度 | 正转 | 反转 |
| p3.6 | p1.5 | p1.6 |
| 调速 | 调方向 |
| p1.7 | p3.29 |
配置p3.6连接到flexpwm0 a 外设,用与输入pwm波形,控制驱动板的速度调节
按钮sw2 和sw3 用于控制电机的转速和 方向


三,代码
开启b两个btn的中断。

配置方向的引脚,为输出模式。

配置引脚p3.6为pwm模式。

按钮中断
/* GPIO1_IRQn interrupt handler */
void GPIO1_IRQHandler(void) {
GPIO_GpioClearInterruptFlags(GPIO1, 1U << 7);
/* Place your code here */
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
Store immediate overlapping exception return operation might vector to incorrect interrupt. */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif
PRINTF("gpio1_Handler rn");
GPIO_PortToggle(GPIO1, 1U << 5);
GPIO_PortToggle(GPIO1, 1U << 6);
}
/* GPIO3_IRQn interrupt handler */
uint32_t pwmVal = 1;
void GPIO3_IRQHandler(void) {
GPIO_GpioClearInterruptFlags(GPIO3, 1U << 29);
/* Place your code here */
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
Store immediate overlapping exception return operation might vector to incorrect interrupt. */
pwmVal = pwmVal + 1;
PRINTF("gpio3_Handler pwmVal[%d]rn",pwmVal);
PWM_UpdatePwmDutycycle(FLEXPWM0, kPWM_Module_0, kPWM_PwmA, kPWM_SignedCenterAligned, pwmVal);
PWM_SetPwmLdok(FLEXPWM0, kPWM_Control_Module_0 | kPWM_Control_Module_1 | kPWM_Control_Module_2, true);
}pwm 配置代码
void initpwmf()
{
pwm_config_t pwmConfig;
pwm_fault_param_t faultConfig;
PWM_GetDefaultConfig(&pwmConfig);
pwmConfig.prescale = DEMO_PWM_CLOCK_DEVIDER;
/* Use full cycle reload */
pwmConfig.reloadLogic = kPWM_ReloadPwmFullCycle;
/* PWM A & PWM B form a complementary PWM pair */
pwmConfig.pairOperation = kPWM_Independent;
pwmConfig.enableDebugMode = true;
PWM_Init(BOARD_PWM_BASEADDR, kPWM_Module_0, &pwmConfig);
PWM_FaultDefaultConfig(&faultConfig);
#ifdef DEMO_PWM_FAULT_LEVEL
faultConfig.faultLevel = DEMO_PWM_FAULT_LEVEL;
#endif
/* Sets up the PWM fault protection */
PWM_SetupFaults(BOARD_PWM_BASEADDR, kPWM_Fault_0, &faultConfig);
PWM_SetupFaults(BOARD_PWM_BASEADDR, kPWM_Fault_1, &faultConfig);
PWM_SetupFaults(BOARD_PWM_BASEADDR, kPWM_Fault_2, &faultConfig);
PWM_SetupFaults(BOARD_PWM_BASEADDR, kPWM_Fault_3, &faultConfig);
PWM_DRV_Init3PhPwm();
PWM_SetPwmLdok(BOARD_PWM_BASEADDR, kPWM_Control_Module_0 | kPWM_Control_Module_1 | kPWM_Control_Module_2, true);
/* Start the PWM generation from Submodules 0, 1 and 2 */
PWM_StartTimer(BOARD_PWM_BASEADDR, kPWM_Control_Module_0 | kPWM_Control_Module_1 | kPWM_Control_Module_2);
}四,棘手问题
测试过程中,发现io电压不对,只有2.4v,导致无法通过引脚控制驱动板子的方向

把j2短接一下,电压就够了。
效果:
我要赚赏金
