搜索
查看: 9771|回复: 10

[已解决] TIM1的CH1N通道能单独作为PWM使用码?

[复制链接]

该用户从未签到

10

主题

36

帖子

2

蝴蝶豆

中级会员

最后登录
2022-9-14
发表于 2018-5-31 22:24:12 | 显示全部楼层 |阅读模式
在使用STM32F407驱动直流电机正反转,能不能使用TIM1的CH1驱动正转,CH1N驱动反转。正转时CH1输出PWM,CH1N脚保持低电平。反转时CH1N输出PWM,CH1脚保持低电平。由于个人水平低,把F4的PDF手册看了好几遍,也没有整明白可不可这样应用。如果可以,这块功能应该怎么实现,请各个大咖指点!
回复

使用道具 举报

该用户从未签到

91

主题

4756

帖子

4

蝴蝶豆

论坛元老

最后登录
2021-2-27
发表于 2018-5-31 22:36:43 | 显示全部楼层
可以的吧,内部能生成pwm吗,有输出吗

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

74

主题

3420

帖子

82

蝴蝶豆

社区小助手

最后登录
2023-11-12
发表于 2018-6-1 07:28:03 | 显示全部楼层
STM32F407必须连接外部驱动缓冲才能够驱动直流电机。直接驱动CPU要烧毁的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

该用户从未签到

9

主题

744

帖子

287

蝴蝶豆

论坛元老

最后登录
2021-3-27
发表于 2018-6-1 09:09:58 | 显示全部楼层
是可以做到的。只使用该通道的PWM功能,其他不要打开,当做一个普通IO操作即可。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-6-1 09:17:43 | 显示全部楼层
    按理说,应该是可以的,不过没试过。
    用户手册仅供参考
    傲游截图20180601091108.png

    傲游截图20180601091624.png


    评分

    参与人数 1蝴蝶豆 +4 收起 理由
    zero99 + 4

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    55

    帖子

    28

    蝴蝶豆

    高级会员

    最后登录
    2019-12-24
    发表于 2018-6-1 09:48:35 | 显示全部楼层
    肯定是可以的,好像是有几个寄存器位可以控制

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    1437

    帖子

    42

    蝴蝶豆

    论坛元老

    最后登录
    2023-6-20
    发表于 2018-6-1 13:30:15 | 显示全部楼层
    应该是可以的。不知道驱动电流够不够,我一般都是用驱动芯片控制电机的

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    36

    帖子

    2

    蝴蝶豆

    中级会员

    最后登录
    2022-9-14
     楼主| 发表于 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;

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2 结贴奖励

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    蝴蝶豆

    中级会员

    最后登录
    2020-7-21
    发表于 2018-6-7 23:40:29 | 显示全部楼层
    学习了,正好用到
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    64

    帖子

    6

    蝴蝶豆

    中级会员

    最后登录
    2020-8-13
    发表于 2018-6-10 08:59:09 | 显示全部楼层
    直流电机无非就是高低电平的变换,楼主小心,用MCU直接控制不好,最好用一个功率放大电路,个人想法

    评分

    参与人数 1蝴蝶豆 +2 收起 理由
    zero99 + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-28 03:29 , Processed in 1.234421 second(s), 52 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表