专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
关于PWM的关闭问题?
2019-10-15 00:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4641
3
1054
最近做直流无刷电机的控制,需要3路PWM,3路频率占空比一致,由同一个timer产生。现在需要循环打开其中一路PWM输出,其余两路保持关闭。
请教各位都有哪些实现方法,stm32能不能在不关闭pwm外设的同时,直接断开其对IO的输出,并将IO设置为指定高低电平状态???
希望大家指教。@正点原子。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
爱博不专
2019-10-15 12:02
经过自己试验,发现在使用TIM_CCxCmd关闭单一通道后,IO总是输出高电平(自己需要低电平来保持MOS关闭),好像不受TIM_OCIdleState 设置的影响,IdleState看手册应该是使用互补输出刹车功能是才有效(或是TIM_CtrlPWMOutputs(TIM1, DISABLE);意思必须是MOE位为0,也就是全部PWM输出关闭),单纯使用CCx而不使用CCn好像没有什么效果。。。
而使用TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);将IO强制输出低电平,会导致TIM_CCxCmd无法开启该通道的pwm输出,想要再次开启需要配置的比较麻烦,无异于重新关闭打开所有通道的pwm输出一次。。。
自己尝试在TIM_CCxCmd关闭channelx之后将IO改为一般输出,并reset该位,可以达到效果
又尝试不关闭channelx而直接改变IO配置,也可以将IO置为所需状态,但是不知道这样有没什么风险。。。
建议还是先暂停channelx的输出,再改IO配置
t=key_scan();
if(t==1) {pwm_ioAF();}
if(t==2) {pwm_ioOUT();}
//if(t==1) {TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Enable);pwm_ioAF();}
//if(t==2) {TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Disable);pwm_ioOUT();}
void pwm_ioAF(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_PuPd_NOPULL;//
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIO_SetBits(GPIOA,GPIO_Pin_8);//输出高电平
}
void pwm_ioOUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_PuPd_NOPULL;//
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//输出低电平
}
或者像楼上说的直接将占空比设为0
不知大家怎么用???
加载中...
查看其它3个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
而使用TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);将IO强制输出低电平,会导致TIM_CCxCmd无法开启该通道的pwm输出,想要再次开启需要配置的比较麻烦,无异于重新关闭打开所有通道的pwm输出一次。。。
自己尝试在TIM_CCxCmd关闭channelx之后将IO改为一般输出,并reset该位,可以达到效果
又尝试不关闭channelx而直接改变IO配置,也可以将IO置为所需状态,但是不知道这样有没什么风险。。。
建议还是先暂停channelx的输出,再改IO配置
t=key_scan();
if(t==1) {pwm_ioAF();}
if(t==2) {pwm_ioOUT();}
//if(t==1) {TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Enable);pwm_ioAF();}
//if(t==2) {TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Disable);pwm_ioOUT();}
void pwm_ioAF(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_PuPd_NOPULL;//
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIO_SetBits(GPIOA,GPIO_Pin_8);//输出高电平
}
void pwm_ioOUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //GPIO_PuPd_NOPULL;//
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//输出低电平
}
或者像楼上说的直接将占空比设为0
不知大家怎么用???
一周热门 更多>