gaobingquan 发表于 2018-5-31 22:24:12

TIM1的CH1N通道能单独作为PWM使用码?

在使用STM32F407驱动直流电机正反转,能不能使用TIM1的CH1驱动正转,CH1N驱动反转。正转时CH1输出PWM,CH1N脚保持低电平。反转时CH1N输出PWM,CH1脚保持低电平。由于个人水平低,把F4的PDF手册看了好几遍,也没有整明白可不可这样应用。如果可以,这块功能应该怎么实现,请各个大咖指点!

feixiang20 发表于 2018-5-31 22:36:43

可以的吧,内部能生成pwm吗,有输出吗

wenyangzeng 发表于 2018-6-1 07:28:03

STM32F407必须连接外部驱动缓冲才能够驱动直流电机。直接驱动CPU要烧毁的。

す疯Ⅱ恒す 发表于 2018-6-1 09:09:58

是可以做到的。只使用该通道的PWM功能,其他不要打开,当做一个普通IO操作即可。

toofree 发表于 2018-6-1 09:17:43

按理说,应该是可以的,不过没试过。
用户手册仅供参考





lvpeng-1619958 发表于 2018-6-1 09:48:35

肯定是可以的,好像是有几个寄存器位可以控制

strang 发表于 2018-6-1 13:30:15

应该是可以的。不知道驱动电流够不够,我一般都是用驱动芯片控制电机的

gaobingquan 发表于 2018-6-6 14:38:59

感谢toofree,问题解决,能够实现,下面是实现代码:
                                case 0:        //电机静止
                                        HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                                        HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);                       
                                break;
                                       
                                case 1:        //电机正转
                                        sConfig.OCMode = TIM_OCMODE_PWM1;
                                        sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;                //输出极性高电平
                                        sConfig.OCNPolarity = TIM_OCPOLARITY_HIGH;        //输出极性高电平
                                        sConfig.OCFastMode = TIM_OCFAST_DISABLE;
                                        sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
                                        sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
                                        sConfig.Pulse = TIMERCOUNTER * speed /100;        //设置通道PWM值
                                        if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfig, TIM_CHANNEL_2) != HAL_OK)
                                        {
                                                Error_Handler();//Configuration Error
                                        }
                                        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);                               
                                        HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);               
                                break;
                                       
                                case 2:        //电机反转
                                        sConfig.OCMode = TIM_OCMODE_PWM1;
                                        sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;                //输出极性高电平
                                        sConfig.OCNPolarity = TIM_OCPOLARITY_HIGH;        //输出极性高电平
                                        sConfig.OCFastMode = TIM_OCFAST_DISABLE;
                                        sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
                                        sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
                                        sConfig.Pulse = TIMERCOUNTER * speed /100;        //设置通道PWM值
                                        if(HAL_TIM_PWM_ConfigChannel(&htim1, &sConfig, TIM_CHANNEL_2) != HAL_OK)
                                        {
                                                Error_Handler();//Configuration Error
                                        }
                                        HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);                               
                                        HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);               
                                break;

xfyrp 发表于 2018-6-7 23:40:29

学习了,正好用到

asdfg221111 发表于 2018-6-10 08:59:09

直流电机无非就是高低电平的变换,楼主小心,用MCU直接控制不好,最好用一个功率放大电路,个人想法
页: [1] 2
查看完整版本: TIM1的CH1N通道能单独作为PWM使用码?