首先,中断顾名思义就是要“中断”,中断当前的程序来执行中断函数中的程序,中断函数中的程序执行完了才回到刚刚被中断的地方继续。
直流电机的话打断了还可以继续转,步进电机要控制通电的线圈,可能打断了就不能再继续转了。
你可以不用中断的方式,再主函数中加入按键扫描如:转一圈扫一次,这样两者兼顾。
void pwm_ARRPreloadConfig(void)
{
PrescalerValue = (uint16_t) (SystemCoreClock /TIM2_rate) - 1; //设定的是定时器的频率,要设定pwm的频率为50hz要乘以对
//应的arr值
TIM_TimeBaseStructureTIM_Prescaler = PrescalerValue; //TIM_Prescaler 设置了用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructureTIM_Period = PWM_ARR; //设置了在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructureTIM_ClockDivision = 0;
TIM_TimeBaseStructureTIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_OCInitStructureTIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructureTIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructureTIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); //pwm3已经调好可以用 PB0
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); //pwm4已经调好可以用 PB1
TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
简单的控制电机还是可以的,复杂点的话,就要考虑电机种类,驱动芯片类型与型号,控制精度,是否带速度反馈的测速等;程序方面,程序结构,通讯类型,是否带算法等,以及STM32的具体型号等,不同系列的性能是不一样的。
个人觉得是可行的,但同时控制10个电机,程序方面相对复杂,需要一定的时间进行仔细调试才行。
以上就是关于stm32 控制步进电机和外部中断冲突全部的内容,包括:stm32 控制步进电机和外部中断冲突、求STM32的PWM控制直流电机、用一个stm32芯片控制十个电机可以实现吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)