毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

PWM输出脚TIM3_CH2 有方波出来却无法驱动后端光耦发脉冲

更新时间:2015-12-4:  来源:毕业论文

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输出配置有问题,请各位大大帮我看一下我的配置代码。

没用过这个,你简单的加个上拉看看能不能驱动后端光耦

PWM引脚本身就是复用的IO口,驱动能力应该是一样的;

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

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

PWM引脚本身就是复用的IO口,驱动能力应该是一样的;

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

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

但是现在我又遇到问题了。
我用的STM32的TIM3的PWM发脉冲,TIM2对脉冲数进行计数,计数到达设定个数时,在TIM2的中断服务函数中失能TIM3。
但是实际情况会是发的脉冲数量比我设置的数量要多1个。 不管怎么怎么改变设定个数都是会多一个脉冲。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。