OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4948|回复: 2

DMF407直流电机视频教程问题的探讨

[复制链接]

2

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2019-12-14
在线时间
53 小时
发表于 2022-10-15 15:19:17 | 显示全部楼层 |阅读模式
在DMF407有刷电机的最前面的一个教程中,要求控制直流电机进行启动、停止和换向,
在电机的停转函数中实现如下的功能:用函数HAL_TIM_Base_stop实现停止计数器:
(图略)
代码中如果按了KEY3键就会调用这个函数,在实际运行发现PWM仍然有输出,毫不
疑问计数器也肯定没有停止!按键KEY3键后的波形如下:
(图略)
也就是按下KEY3键之前是啥波形输出,结果还是没有任何改变!
查找原因发现:HAL_TIM_Base_Stop函数的实现如下:
(图略)
可见:本质上还是调用了__HAL_TIM_DISABLE(htim)宏,而它的定义为:
(图略)
最终目的是关闭TIM_CR1的CEN位,即关闭计数使能位,但有两个if条件:
就是TIM_CCER_CCxE_MASK和TIM_CCER_CCxNE_MASK的所有捕获/比较输出使能位
必须处于复位状态、即没有任何一个捕获/比较输出被使能,但显然在初始化的时候
TIM1的通道1的两个输出均被使能了,所以这个函数相当于没有被执行!
这也就是看到的波形并没有想象的被关掉了,如果接了电机还是照常在转!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4303
金钱
4303
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-10-15 15:54:46 | 显示全部楼层
当然,如你所说,如果直接调用__HAL_TIM_DISABLE(htim)这个的话,自然是会因为if条件而无法关闭定时器的,但是你可以仔细看下,HAL_TIM_PWM_Stop这个函数在调用__HAL_TIM_DISABLE之前,会调用TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);这个函数,这个函数就把你上面所说的if判断TIM_CCER_CCxE_MASK给置零的。
回复 支持 反对

使用道具 举报

2

主题

74

帖子

0

精华

高级会员

Rank: 4

积分
835
金钱
835
注册时间
2019-12-14
在线时间
53 小时
 楼主| 发表于 2022-10-15 18:21:43 | 显示全部楼层
A571157242 发表于 2022-10-15 15:54
当然,如你所说,如果直接调用__HAL_TIM_DISABLE(htim)这个的话,自然是会因为if条件而无法关闭定时器的, ...

调用HAL_TIM_PWM_Stop是没有问题的,也就是实际给出的例程就是用用这个函数没问题,但视频教学里直接调用的HAL_TIM_DISABLE(htim)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 02:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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