搜索
查看: 2594|回复: 1

[原创] 使用STM32F334的HRTIM產生互補式PWM

[复制链接]

该用户从未签到

3

主题

5

帖子

0

蝴蝶豆

中级会员

最后登录
2017-10-4
发表于 2017-8-26 19:47:30 | 显示全部楼层 |阅读模式
以下代碼是我自己寫的設定register的lib來實現HRTIM互補式PWM,實在用不慣ST的庫,希望用STM32F334來實現數字電源控制,接下來會繼續更新其他PWM模式,ADC取樣方法,數字補償器,數字濾波器設計代碼。 敬請期待!!
希望大家都可以STM32F334來玩數字電源!!
void HRTIM_CLK_Config(void)
{
    /* Initialize the HRTIM clock and DLL */
    RCC_CFGR3.bits.HRTIM1SW = 1;        //PLL vco output (running up to 144 MHz)
    RCC_APB2ENR.bits.HRTIM1EN = 1;      //Enable HRTIM clock

    HRTIM_DLLCR.bits.CALRTE = 3;
    HRTIM_DLLCR.bits.CALEN = 1;

    while(!HRTIM_ISR.bits.DLLRDY);      //Wait calibration completion
}


void HRTIM_ComplementaryPWM_Config(void)
{
    HRTIM_TIMACR.bits.CKPSCx = 0;       // 144MHz * 32
    HRTIM_TIMACR.bits.CONT = 1;   
    HRTIM_TIMACR.bits.HALF = 0;
    HRTIM_TIMACR.bits.SYNCSTRTx = 0;
    HRTIM_TIMACR.bits.SYNCRSTx = 0;
    HRTIM_TIMACR.bits.DACSYNC = 0;
    HRTIM_TIMACR.bits.PREEN = 1;
    HRTIM_TIMACR.bits.UPDGAT = 0;
    HRTIM_BMCR.bits.MTBM = 0;
    HRTIM_TIMACR.bits.TxREPU = 1;
    HRTIM_TIMACR.bits.TxRSTU = 0;
    HRTIM_TIMACR.bits.PSHPLL = 0;
    HRTIM_FLTAR.bits.FLT1EN = 1;
    HRTIM_FLTAR.bits.FLTLCK = 0;
    HRTIM_OUTAR.bits.DTEN = 1;
    HRTIM_OUTAR.bits.DLYPRTEN = 0;

    HRTIM_OUTAR.bits.POL1 = 0;
    HRTIM_SETA1R.bits.PER = 1;
    HRTIM_RSTA1R.bits.CMP1 = 1;
    HRTIM_OUTAR.bits.IDLEM1 = 0;
    HRTIM_OUTAR.bits.IDLES1 = 0;
    HRTIM_OUTAR.bits.FAULT1 = 0;
    HRTIM_OUTAR.bits.CHP1 = 0;
    HRTIM_OUTAR.bits.DIDL1 = 0;

    HRTIM_OUTAR.bits.POL2 = 0;
    HRTIM_SETA2R.bits.PER = 1;
    HRTIM_RSTA2R.bits.CMP1 = 1;
    HRTIM_OUTAR.bits.IDLEM2 = 0;
    HRTIM_OUTAR.bits.IDLES2 = 0;
    HRTIM_OUTAR.bits.FAULT2 = 0;
    HRTIM_OUTAR.bits.CHP2 = 0;
    HRTIM_OUTAR.bits.DIDL2 = 0;

    HRTIM_PERAR.all  = 46080;           // 100KHz = 144MHz * 32 / 100KHz
    HRTIM_CMP1AR.all = 46080>>2;   // 50% Duty setting      

    //Dead time setting
    HRTIM_DTAR.bits.DTPRSC = 0; //Deadtime resoultion setting to 868psec

    //Falling side
    HRTIM_DTAR.bits.DTFLKx = 0;
    HRTIM_DTAR.bits.SDTFx = 0;
    HRTIM_DTAR.bits.DTFSLKx = 1;
    HRTIM_DTAR.bits.DTFx = 500; //500 * 868p = 434ns

    //Rising side
    HRTIM_DTAR.bits.DTRLKx = 0;
    HRTIM_DTAR.bits.SDTRx = 0;
    HRTIM_DTAR.bits.DTRSLKx = 1;   
    HRTIM_DTAR.bits.DTRx = 500;

    HRTIM_MCR.bits.TACEN = 1;
    HRTIM_OENR.bits.TA1OEN = 1;
    HRTIM_OENR.bits.TA2OEN = 1;
}


void HRTIM_Outputs_Config(void)
{
    /* Enable GPIOA clock for timer A outputs */

    RCC_AHBENR.bits.IOPAEN = 1;

    /* Configure HRTIM output: TA1 (PA8) and TA2 (PA9)*/
    GPIOA_MODER.bits.MODER8      = GPIO_Mode_AF;
    GPIOA_OTYPER.bits.OT8        = GPIO_OType_PP;
    GPIOA_OSPEEDR.bits.OSPEEDR8  = GPIO_Speed_50MHz;
    GPIOA_PUPDR.bits.PUPDR8      = GPIO_PuPd_NOPULL;   
    GPIOA_AFRH.bits.AFR8         = GPIO_AF_13;

    GPIOA_MODER.bits.MODER9      = GPIO_Mode_AF;
    GPIOA_OTYPER.bits.OT9        = GPIO_OType_PP;
    GPIOA_OSPEEDR.bits.OSPEEDR9  = GPIO_Speed_50MHz;
    GPIOA_PUPDR.bits.PUPDR9      = GPIO_PuPd_NOPULL;   
    GPIOA_AFRH.bits.AFR9         = GPIO_AF_13;

}

int main(void)
{
    SystemInit();

    HRTIM_Outputs_Config();
    HRTIM_CLK_Config();
    HRTIM_ComplementaryPWM_Config();

    while(1)
    {

    }
}

回复

使用道具 举报

该用户从未签到

1

主题

11

帖子

0

蝴蝶豆

新手上路

最后登录
2019-12-3
发表于 2019-12-3 17:38:47 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-24 02:59 , Processed in 1.153220 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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