高级会员

- 积分
- 956
- 金钱
- 956
- 注册时间
- 2014-3-5
- 在线时间
- 35 小时
|

楼主 |
发表于 2016-2-22 11:36:43
|
显示全部楼层
经过自己试验,发现在使用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
不知大家怎么用??? |
|