打印
[STM32F1]

C8T6输出PWM占空比100%是否达不到?

[复制链接]
792|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
混子黄|  楼主 | 2020-6-19 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,当单片机供电由J-LINK仿真器提供,电源为3.2468V,占空比100%时,测量电压为3.2378V,差不多相差10MV。当单片机供电由TPS70933提供,电源为3.2973,输出测量为3.2681V,相差30MV。
其中均采用定时器1的互补2通道。
Tim1_Init(7199,0);

void  Tim1_Init(u16 arr,u16 psc)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);       
       
       
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14 ;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
       

  TIM_TimeBaseStructure.TIM_Period = arr;                    //    ´Ó×°±È½Ï×î´ó   18k  =   72000/ 6000= 12k
  TIM_TimeBaseStructure.TIM_Prescaler = psc;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;       //  Ä£Ê½  Ôö
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;                 //  ·ÖƵ
// TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;      
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
       
       
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse = arr  ;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
       
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
       
        //TIM_ARRPreloadConfig(TIM1, ENABLE);
       
        TIM_Cmd(TIM1, ENABLE);//¼ÆÊý¿ªÊ¼   
        TIM_CtrlPWMOutputs(TIM1, ENABLE);


//        TIM_ClearFlag(TIM1, TIM_FLAG_Update);  
//        TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  //ÇåÖжϱê־λ
//  TIM_ITConfig(TIM1,TIM_IT_Update ,ENABLE); //´ò¿ªÖжÏ
            
       
        //ÅäÖÃTIM1µÄ¸üÐÂÖжÏʹÄÜ
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//Ö¸¶¨ÇÀÕ¼ÓÅÏȼ¶1
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//Ö¸¶¨ÏìÓ¦ÓÅÏȼ¶0
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

使用特权

评论回复
沙发
sky.sun.zz| | 2020-6-20 15:08 | 只看该作者
PWM占空比100%的输出结果:一直高电平,或一直低电平

使用特权

评论回复
板凳
zchong| | 2020-6-20 15:54 | 只看该作者
考这么点电压来判断是否100%,不靠谱啊,还是示波器说话吧

使用特权

评论回复
地板
香水城| | 2020-6-20 22:47 | 只看该作者
本帖最后由 香水城 于 2020-6-21 14:09 编辑

问题好有歧义,到底是没法实现100%的PWM还是说输出的高电平没有完全达到VDD?

如果是后者,GPIO输出高电平比VDD低点很正常。

如果是前者,那就是调整代码的问题了,100%duty的PWM也不难实现。

使用特权

评论回复
5
airwill| | 2020-6-21 13:46 | 只看该作者
电源为3.2973,输出测量为3.2681V,相差30MV。这不能说明 PWM 的情况, 应该从示波器波形分析

使用特权

评论回复
6
paotangsan| | 2020-7-9 14:14 | 只看该作者
好像是可以实现的  无论是百分百还是零

使用特权

评论回复
7
renzheshengui| | 2020-7-9 14:14 | 只看该作者
难道实际上达不到?

使用特权

评论回复
8
wakayi| | 2020-7-9 14:14 | 只看该作者
当然可以了

使用特权

评论回复
9
wowu| | 2020-7-9 14:15 | 只看该作者
差这么一点点无所谓吧

使用特权

评论回复
10
xiaoqizi| | 2020-7-9 14:15 | 只看该作者
楼主问题解决了吗

使用特权

评论回复
11
zhoujunfeng| | 2020-7-9 14:44 | 只看该作者
多少有些误差的.

使用特权

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

本版积分规则

107

主题

936

帖子

6

粉丝