打印

PWM输出问题

[复制链接]
1160|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2013-9-25 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

/*********  PA           6 7  ******************************/
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //复用
  GPIOA6_Out=1; GPIOA7_Out=1;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;//TIM3_CH2,TIM3_CH3
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void Timer_Config(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
TIM_ICInitTypeDef   TIM_ICInitStructure;

TIM2->CR1 &= 0xfffe;
TIM3->CR1 &= 0xfffe;
   
   ///PWM,输出的引脚是 TIM3_CH2
TIM_TimeBaseStructure.TIM_Period = 60000;
TIM_TimeBaseStructure.TIM_Prescaler = 11;        //72/12=6
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       
TIM_TimeBaseInit(TIM3 , &TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;           //翻转模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能比较匹配输出极性       
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;         //设置比较匹配输出极性
TIM_OCInitStructure.TIM_Pulse = 30000;          //比较值
TIM_OC2Init(TIM3, &TIM_OCInitStructure);          //

TIM_OC2PreloadConfig(TIM3 , TIM_OCPreload_Enable);          //使能 比较预装载寄存器
TIM_ARRPreloadConfig(TIM3, ENABLE);         //使能预装载寄存器

TIM3->CR1 &= 0x3fe;            //  失能 TIM 计数器
TIM3->CR2 = 0x60;            //  MMS[2:0] = 110         oc2匹配上发出触发信号

///////////////   TIM2 /////
TIM_TimeBaseStructure.TIM_Period = 100;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseStructure);       

    TIM2->SMCR = 0x0000;         //禁用从模式的情况进行从模式配置
TIM2->SMCR |= 0x020;        // TS[2:0]=010  TIM2触发源选择:TIM3的TRGI
TIM2->SMCR |= 0x007;        // 使能从模式SMS[2:0]=111  使用内部触发 TRGI  即外部时钟1模式

TIM2->CNT = 0x00;       
TIM3->CNT = 0x00;
TIM2->SR = 0x00;
TIM3->SR = 0x00;
TIM2->EGR =0x00;
TIM3->EGR =0x00;
           TIM_ITConfig(TIM2, TIM_IT_Update,ENABLE);  //使能TIM2 更新中断
TIM_ITConfig(TIM3, TIM_IT_Update,DISABLE);          //失能TIM3 更新中断       
TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM3, ENABLE);                   //DISABLE            ENABLE
}
我的疑惑是 PWM输出脚TIM3_CH2 有方波出来却无法驱动后端光耦发脉冲。  
但是TIM3_CH2,用做普通I/O功能的时候却可以自己编一段仿PWM输出来驱动光耦发脉冲。

我怀疑:一:PWM输出的驱动能力没有普通IO的强。
       二:我的PWM输出配置有问题,请各位大大帮我看一下我的配置代码。
沙发
秋天落叶| | 2013-9-25 15:14 | 只看该作者
PWM引脚本身就是复用的IO口,驱动能力应该是一样的;

当光耦导通时,让PWM引脚灌入电流,这个电流足以让光耦导通(不要怀疑);

工业控制的恶劣环境中,更常规的做法是PWM端外接驱动器来驱动光耦。

使用特权

评论回复
板凳
hsbjb| | 2013-9-25 15:27 | 只看该作者
没用过这个,你简单的加个上拉看看能不能驱动后端光耦

使用特权

评论回复
地板
chuangpu| | 2013-9-25 19:46 | 只看该作者
不了解这一块   楼主   帮你顶一个   看看别人的意见如何   顶一个   需要好好看看了

使用特权

评论回复
5
81190865| | 2015-1-16 17:36 | 只看该作者
如果外接驱动器,驱动能力是由什么决定的呢?通过电流吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝