你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
TIM1的CH1N通道能单独作为PWM使用码?
[复制链接]
gaobingquan
提问时间:2018-5-31 22:24 /
在使用STM32F407驱动直流电机正反转,能不能使用TIM1的CH1驱动正转,CH1N驱动反转。正转时CH1输出PWM,CH1N脚保持低电平。反转时CH1N输出PWM,CH1脚保持低电平。由于个人水平低,把F4的PDF手册看了好几遍,也没有整明白可不可这样应用。如果可以,这块功能应该怎么实现,请各个大咖指点!
赞
0
收藏
0
评论
10
分享
发布时间:2018-5-31 22:24
举报
请先
登录
后回复
10个回答
feixiang20
回答时间:2018-5-31 22:36:43
a0a.1 32b0c
可以的吧,内部能生成pwm吗,有输出吗
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
wenyangzeng
回答时间:2018-6-1 07:28:03
a0a.1 32b0c
STM32F407必须连接外部驱动缓冲才能够驱动直流电机。直接驱动CPU要烧毁的。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
疯de_恒
回答时间:2018-6-1 09:09:58
a0a.1 32b0c
是可以做到的。只使用该通道的PWM功能,其他不要打开,当做一个普通IO操作即可。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
七哥
回答时间:2018-6-1 09:17:43
a0a.1 32b0c
按理说,应该是可以的,不过没试过。
用户手册仅供参考
评分
参与人数
1
蝴蝶豆
+4
收起
理由
zero99
+ 4
查看全部评分
赞
0
评论
回复
支持
反对
lvpeng-1619958
回答时间:2018-6-1 09:48:35
a0a.1 32b0c
肯定是可以的,好像是有几个寄存器位可以控制
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
Bowen
回答时间:2018-6-1 13:30:15
a0a.1 32b0c
应该是可以的。不知道驱动电流够不够,我一般都是用驱动芯片控制电机的
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
gaobingquan
回答时间:2018-6-6 14:38:59
a0a.1 32b0c
感谢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
评论
回复
支持
反对
水护士
回答时间:2018-6-7 23:40:29
a0a.1 32b0c
学习了,正好用到
赞
0
评论
回复
支持
反对
asdfg221111
回答时间:2018-6-10 08:59:09
a0a.1 32b0c
直流电机无非就是高低电平的变换,楼主小心,用MCU直接控制不好,最好用一个功率放大电路,个人想法
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
gaobingquan
回答时间:2018-6-17 22:38:55
a0a.1 32b0c
各位放心,有专用的驱动IC,单片机GPIO无法直接驱动,电流不够
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
用户手册仅供参考
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
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;
评分
查看全部评分
评分
查看全部评分