写的无刷电机程序,如题,今天突然发现了一个问题。我初始化TIM1后,如果6路互补一块输出,没有问题,波形很正确,如果我改成两路两路的输出,就会出现一个问题。下图中,主函数中有个test函数,加了这个test函数就输出正常,不加,输出就不正常,关键这个test里只有一个初始化的一个函数,并且随便初始化哪个IO口都可以使得波形输出正常,然后不加这个函数就输出不正常了,并且这个函数必须放在这个位置,把这个函数拆开都不行,感觉很奇怪,请大神们指点一下,哪里出问题了。
定时器1的初始化函数,基本没问题的
初始化,应该没什么大问题。
main函数,整体就是定时器1初始化,然后开始输出两路PWM
这里就是这个test很奇怪,没有这个test输出就不正常,有test就正常。
这个test函数中就只有这个,没有这个输出就不正常
这就是test里做的事,我又在TIM1初始化的时候,专门加了这两句,也不行,然后又加了definit也不行
输出两路PWM后,延时一段时间,在换另两路PWM输出
输出两路,然后延时,然后换相
换相顺序
换相顺序程序
不正常波形整体体现
这就是有问题的波形,红线框起来的地方,本来应该没有延时的,但是现在延时竟然有1ms左右,而且上面的那个红框中,不应该出现波形,而是高电平的,如下图所示。
局部有问题
void Test(void)
{
GPIO_InitTypeDef GPIO_InitStructrue;
GPIO_Init(GPIOA,&GPIO_InitStructrue);
}
void CaptrueInputInit(void)
{
GPIO_InitTypeDef GPIO_InitStructrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_InitStructrue);
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_InitStructrue);
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB,&GPIO_InitStructrue);
}
一周热门 更多>