野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22005|回复: 4

(已解决)pwm波的输出电压总是高一倍怎么回事啊,是不是我的程序写错了

[复制链接]
发表于 2014-7-3 00:44:29 | 显示全部楼层 |阅读模式
本帖最后由 thy110 于 2014-7-3 13:32 编辑

pwm波的输出电压总是高一倍怎么回事啊,我自己写了一下pwm的程序,但是测量时电压总是不对,我设置100的占空比理应输出0.32v但是实际数出0.63v其他的也是一样大一倍,下面是我写的程序
  1. static void TIM5_GPIO_Config(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStructure;

  4.   /* TIM3 clock enable */
  5.   //PCLK1¾­¹ý2±¶Æµºó×÷ΪTIM2µÄʱÖÓÔ´µÈÓÚ72MHz
  6.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);

  7.   /* GPIOA and GPIOB clock enable */
  8.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

  9.   /*GPIOA Configuration: TIM2 channel 1 AND 2 and  3 and 4 as alternate function push-pull */
  10.   GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
  11.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        // ¸´ÓÃÍÆÍìÊä³ö
  12.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  13.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  14. }
  15. static void TIM5_Mode_Config(void)
  16. {
  17.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  18.   /* Time base configuration */     
  19.   TIM_TimeBaseStructure.TIM_Period = 999;       //µ±¶¨Ê±Æ÷´Ó0¼ÆÊýµ½999£¬¼´Îª1000´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ
  20.   TIM_TimeBaseStructure.TIM_Prescaler = 0;      //ÉèÖÃÔ¤·ÖƵ£º²»Ô¤·ÖƵ£¬¼´Îª72MHz
  21.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;  //ÉèÖÃʱÖÓ·ÖƵϵÊý£º²»·ÖƵ
  22.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //ÏòÉϼÆÊýģʽ

  23.   TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
  24. }

  25. void TIM5_Mode1_Config(u16 CCR1_Val)
  26. {
  27.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  28.   
  29.   TIM5_Mode_Config();
  30.   
  31.   /* PWM1 Mode configuration: Channel1 */
  32.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÅäÖÃΪPWMģʽ1
  33.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;  
  34.   TIM_OCInitStructure.TIM_Pulse = CCR1_Val;     //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä
  35.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ

  36.   TIM_OC1Init(TIM5, &TIM_OCInitStructure);    //ʹÄÜͨµÀ2

  37.   TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
  38.    TIM_ARRPreloadConfig(TIM5, ENABLE);       // ʹÄÜTIM3ÖØÔؼĴæÆ÷ARR
  39.     /* TIM3 enable counter */
  40.   TIM_Cmd(TIM5, ENABLE);                   //ʹÄܶ¨Ê±Æ÷3  

  41. }
  42. void TIM5_Mode2_Config(u16 CCR2_Val)
  43. {
  44.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  45.   TIM5_Mode_Config();
  46.   /* PWM1 Mode configuration: Channel2 */
  47.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÅäÖÃΪPWMģʽ1
  48.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  49.   TIM_OCInitStructure.TIM_Pulse = CCR2_Val;    //ÉèÖÃͨµÀ2µÄµçƽÌø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM

  50.   TIM_OC2Init(TIM5, &TIM_OCInitStructure);    //ʹÄÜͨµÀ2

  51.   TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);
  52.    TIM_ARRPreloadConfig(TIM5, ENABLE);       // ʹÄÜTIM3ÖØÔؼĴæÆ÷ARR
  53.     /* TIM3 enable counter */
  54.   TIM_Cmd(TIM5, ENABLE);                   //ʹÄܶ¨Ê±Æ÷3  
  55. }
  56. void TIM5_Mode3_Config(u16 CCR3_Val)
  57. {
  58.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  59.   TIM5_Mode_Config();
  60.   /* PWM1 Mode configuration: Channel3 */
  61.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÅäÖÃΪPWMģʽ1
  62.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  63.   TIM_OCInitStructure.TIM_Pulse = CCR3_Val;  //ÉèÖÃͨµÀ3µÄµçƽÌø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM
  64.   TIM_OC3Init(TIM5, &TIM_OCInitStructure);   //ʹÄÜͨµÀ3
  65.   TIM_OC3PreloadConfig(TIM5, TIM_OCPreload_Enable);
  66.   TIM_ARRPreloadConfig(TIM5, ENABLE);       // ʹÄÜTIM3ÖØÔؼĴæÆ÷ARR
  67.     /* TIM3 enable counter */
  68.   TIM_Cmd(TIM5, ENABLE);                   //ʹÄܶ¨Ê±Æ÷3  
  69. }
  70. void TIM5_Mode4_Config(u16 CCR4_Val)
  71. {
  72.   TIM_OCInitTypeDef  TIM_OCInitStructure;
  73.   TIM5_Mode_Config();
  74.   /* PWM1 Mode configuration: Channel4 */
  75.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÅäÖÃΪPWMģʽ1
  76.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  77.   TIM_OCInitStructure.TIM_Pulse = CCR4_Val;  //ÉèÖÃͨµÀ4µÄµçƽÌø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM
  78.   TIM_OC4Init(TIM5, &TIM_OCInitStructure);  //ʹÄÜͨµÀ4
  79.   
  80.   TIM_OC4PreloadConfig(TIM5, TIM_OCPreload_Enable);
  81.   
  82.   TIM_ARRPreloadConfig(TIM5, ENABLE);       // ʹÄÜTIM3ÖØÔؼĴæÆ÷ARR
  83.     /* TIM3 enable counter */
  84.   TIM_Cmd(TIM5, ENABLE);                   //ʹÄܶ¨Ê±Æ÷3  
  85. }
复制代码
回复

使用道具 举报

发表于 2014-7-3 09:00:38 | 显示全部楼层
用示波器看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 10:42:52 来自手机 | 显示全部楼层
三流电工 发表于 2014-7-3 09:00
用示波器看看

我只是个学生没有示波器阿
回复 支持 反对

使用道具 举报

发表于 2014-7-3 12:59:22 | 显示全部楼层
软件仿真大概看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 13:00:03 | 显示全部楼层
三流电工 发表于 2014-7-3 12:59
软件仿真大概看看

我试一下。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 08:59 , Processed in 0.030209 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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