沈阳芯硕科技有限公司
沈阳芯硕科技有限公司 入驻平台 第4
  • 资质核验已核验企业营业执照
  • 资质核验已核验企业营业执照
当前位置:
首页>
供应产品>
华大单片机***定时器输出0~***占空比方法

华大单片机***定时器输出0~***占空比方法

华大单片机可以通过种方式进行PWM输出,工程师反应使用***定时器输出PWM的时候,不能输出占空比为0或***的波形。这时由于***定时器输出PWM时设置会比较特殊,下面进行相关的介绍。

价    格

订货量

  • 面议 价格为商家提供的参考价,请通过"获取最低报价"
    获得您最满意的心理价位~

    不限

沈女士
手机已验证
𐀐𐀑𐀒****𐀑𐀖𐀑𐀐
微信在线
  • 发货地:辽宁 沈阳
  • 发货期限:10天内发货
  • 供货总量: 1000件
沈阳芯硕科技有限公司 入驻平台 第4
  • 资质核验已核验企业营业执照
  • 沈女士
    手机已验证
  • 辽宁 沈阳
  • 消防电子,家电电子,汽车电子,电力系统

联系方式

  • 联系人:
    沈女士
  • 地   址:
    辽宁 沈阳 铁西区 辽宁省沈阳市铁西区建工西路5号财富星座B座
品牌:华大型号:HC32F460类型:单片机
封装:卷带

华大单片机可以通过种方式进行PWM输出,工程师反应使用***定时器输出PWM的时候,不能输出占空比为0或***的波形。这时由于***定时器输出PWM时设置会比较特殊,下面进行相关的介绍。

***定时器进行PWM输出时,波形主要由下面几个寄存器的值来决定:
PCONR.PERCx(x=A/B) : CHA和CHB的周期匹配时,输出电平状态,设置的是PWM周期结束后电平状态;
PCONR.CMPCx(x=A/B): CHA和CHB的比较匹配时,输出电平状态,设置的是计数到计数点后电平的状态;
PCONR.STASTPSx(x=A/B):CHA和CHB的起始和停止电平选择;
PCONR.STACx(x=A/B): 计数开始时CHA和CHB电平状态,PWM开始前端口的电平状态;
PCONR.STPCx(x=A/B):计数结束时CHA和CHB电平状态,PWM停止后端口的电平状态;
前两个寄存器用来设置PWM输出周期的波形,后三个寄存器用来设置PWM开始和结束时端口的电平。

本文开头提到的问题通过设置前两个寄存器就可以实现。下面以起始低电平,计数匹配后高电平的PWM波形来说明。起始低电平说明PWM周期匹配后,新的周期开始时端口的电平为低电平,需要把PCONR.PERCx设置为低电平;计数匹配后为高电平,把PCONR.CMPCx设置为高电平就可以。这样的设置可以输出0~(<***)占空比的波形。***这点需要始终是高电平,也就是说周期匹配的时候不能输出低电平,设置为低电平的话,当周期匹配的时候会立刻输出一个低电平,再进行比较匹配的判断,匹配分输出高电平,这样就存在一个很小的低电平脉冲,不是我们所需要的。

当要输出***占空比的时候,要把PCONR.PERCx设置为高电平,这样就周期匹配的时候会输出高电平,不会再有低电平脉冲。当占空比不是***的时候,再把PCONR.PERCx设置回低电平就可以。

以华大单片机HC32F003芯片TIM4定时器CHA通道为例,每一秒改变增加10%占空比,输出***后,占空比改为0输出。代码部分如下:

 

int32_t main(void)

{

        float fPwmDyty = 0.0;

    en_adt_unit_t enAdt;

    uint16_t u16Period;

    en_adt_compare_t enAdtCompare;

    uint16_t u16Compare;

    stc_adt_basecnt_cfg_t stcAdtBaseCntCfg;

    stc_adt_CHxX_port_cfg_t stcAdtTIM4ACfg;

 

 

    DDL_ZERO_STRUCT(stcAdtBaseCntCfg);

    DDL_ZERO_STRUCT(stcAdtTIM4ACfg);

 

    Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE);                       //端口外设时钟使能

 

   

    Gpio_SetFunc_TIM4_CHA_P23();

 

 

    Clk_SetPeripheralGate(ClkPeripheralAdt, TRUE);                         //ADT外设时钟使能

 

    enAdt = AdTIM4;

    Adt_StopCount(enAdt);

    Adt_ClearCount(enAdt);

 

    stcAdtBaseCntCfg.enCntMode = AdtSawtoothMode;                    //ADT载波为三角波

    stcAdtBaseCntCfg.enCntDir = AdtCntUp;                                               //向上计数

    stcAdtBaseCntCfg.enCntClkDiv = AdtClkPClk0Div8;                    //PCLK8分频

    Adt_Init(enAdt, &stcAdtBaseCntCfg);                                                       //ADT载波、计数模式、时钟配置

   

    u16Period = 0xEEEE;

    Adt_SetPeriod(enAdt, u16Period);                                                              //设置PWM周期

 

    enAdtCompare = AdtCompareA;

    u16Compare = 0xEEEE;

    Adt_SetCompareValue(enAdt, enAdtCompare, u16Compare);       //设置CHA通道PWM低电平时间

   

    enAdtCompare = AdtCompareC;

    u16Compare = 0xEEEE;

    Adt_SetCompareValue(enAdt, enAdtCompare, u16Compare);      //设置CHA通道比较缓存值

 

    Adt_EnableValueBuf(enAdt, AdtCHxA, TRUE);                                           //使能CHA通道缓存输出

 

    stcAdtTIM4ACfg.enCap = AdtCHxCompareOutput;                              //比较输出

    stcAdtTIM4ACfg.bOutEn = TRUE;                                                                        //端口输出使能

    stcAdtTIM4ACfg.enPerc = AdtCHxPeriodLow;                                         //周期匹配时输出低电平

    stcAdtTIM4ACfg.enCmpc = AdtCHxCompareHigh;                               //比较匹配时输出高电平

    stcAdtTIM4ACfg.enStaStp = AdtCHxStateSelSS;                                  //计数开始或停止时,CHA端口输出由STACBSTPCB决定

    stcAdtTIM4ACfg.enStaOut = AdtCHxPortOutLow;                               //计数开始时CHA端口输出设定为低电平

    stcAdtTIM4ACfg.enStpOut = AdtCHxPortOutLow;                               //计数停止时CHA端口输出设定为低电平

    Adt_CHxXPortConfig(enAdt, AdtCHxA, &stcAdtTIM4ACfg);       //端口CHA配置

   

    Adt_StartCount(enAdt);                                                                                             //开启ADT

   

    while(1)

        {

               

                   delay1ms(1000);

                   if(fPwmDyty <1)                                                                                          //占空比小于***,将占空比加10%

                  {

                            fPwmDyty += 0.1;

                  }

                  else                                                                                                                          //占空比大于等于***,将占空比设置为0%

                  {

                            fPwmDyty = 0;

                  }

 

                  if (fPwmDyty <1)                                                                                     //占空比小于***,将计数周期结束时输出设置为低

                  {

                             M0P_ADT0->PCONR_f.PERCA = 0; 

                  }

                  else                                                                                                                       //占空比大于等于***,将计数周期结束时输出设置为高

                  {

                            M0P_ADT0->PCONR_f.PERCA = 1;

                  }

               

                  Adt_SetCompareValue(AdTIM4, AdtCompareC, (1-fPwmDyty)*u16Period);

               

          }

}


免责声明:
本页面所展现的公司信息、产品信息及其他相关信息,均来源于其对应的商铺,信息的真实性、准确性和合法性由该信息来源商铺的所属发布者完全负责,供应商网对此不承担任何保证责任。
友情提醒:
建议您在购买相关产品前务必确认供应商资质及产品质量,过低的价格有可能是虚假信息,请谨慎对待,谨防欺诈行为。
 
建议您在搜索产品时,优先选择带有标识的会员,该为供应商网VIP会员标识,信誉度更高。

版权所有 供应商网(www.gys.cn)

京ICP备2023035610号-2

沈阳芯硕科技有限公司 地址:辽宁 沈阳 铁西区 辽宁省沈阳市铁西区建工西路5号财富星座B座