搜索
bottom↓
回复: 17

[求助]STM32如何生成两路频率可调中心同步PWM?

[复制链接]

出0入0汤圆

发表于 2021-10-2 16:32:32 | 显示全部楼层 |阅读模式
小弟现在用推挽电路生成正弦波,需要两路PWM信号,如图所示。要求严格中心同步。

我现在用了两个定时器,一个用于生成两路PWM,只是给定的周期不同;另外一个用于定时更换两路PWM的周期。但是两个PWM不同步,很困惑。

核心代码如下:
vu16 Duty_Cycle_sinewavetable[25]  = {36,42,49,54,58,61,62,62,60,56,51,46,39,33,26,21,16,12,10,10,11,14,18,23,30};
vu16 Duty_Cycle_sinewavetable2[25] = {30,36,43,48,52,55,56,56,54,50,45,40,33,27,20,15,10,6,4,4,5,8,12,17,24};

vu16 Counter_sine=0;

void GPIO_Configure()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void TIM_Configure()
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TIM_OCInitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

        TIM_TimeBaseStructure.TIM_Period = 71;
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;                //计数方式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

        TIM_ARRPreloadConfig(TIM1, ENABLE);
       
        TIM_OCInitStructure.TIM_OCMode       = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_Pulse        = 0;//DutyFactor * 7200 / 100;//设置占空比
        TIM_OCInitStructure.TIM_OCPolarity   = TIM_OCPolarity_High;//这里的4行代码就是设置PWM的空闲电平、波形方式的!一开始自己一不小心搞成了都高的死区,这里是都低电平的死区~
        TIM_OCInitStructure.TIM_OutputState  = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
//        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);
        TIM_OC2Init(TIM1, &TIM_OCInitStructure);                        //初始化两组互补的PWM
        TIM_CtrlPWMOutputs(TIM1, ENABLE);  /* 主输出启用 */
}

void NVIC_Configure()
{
        NVIC_InitTypeDef NVIC_InitStructure;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = SysTick_IRQn; //
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//占优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //副优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

int main(void)
{
        SystemInit();  //系统时钟初始化至72M
       
        GPIO_Configure();
        TIM_Configure();
        NVIC_Configure();
        TIM_Cmd(TIM1, ENABLE);
        SysTick_Init();        //定时中断,10ms一次
        while(1);
}
void SysTick_Handler(void)
{
        TIM_SetCompare1(TIM1, Duty_Cycle_sinewavetable2[Counter_sine]);
        TIM_SetCompare2(TIM1, Duty_Cycle_sinewavetable[Counter_sine]);
        Counter_sine++;
        if(Counter_sine > 24)  //?????100??
        {
                Counter_sine = 0;
        }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入131汤圆

发表于 2021-10-3 19:07:54 | 显示全部楼层
本帖最后由 asj1989 于 2021-10-3 19:09 编辑

我感觉实现不了这个功能。

频率可调 又要求中心同步,中心同步的话,那频率就一致了吧,或者成倍数关系。

出0入0汤圆

 楼主| 发表于 2021-10-3 19:28:06 | 显示全部楼层
asj1989 发表于 2021-10-3 19:07
我感觉实现不了这个功能。

频率可调 又要求中心同步,中心同步的话,那频率就一致了吧,或者成倍数关系。 ...

怎么说呢,其实就是为了实现SPWM正弦波,之所以两路的占空比有差,就是为了死区时间。避免上下MOS管直通。现在的情况是我用了TIM1的两个通道,但是不能确保完全同步,总有几十ns的延迟,很蛋疼。

出0入131汤圆

发表于 2021-10-3 20:16:36 | 显示全部楼层
sgzzour 发表于 2021-10-3 19:28
怎么说呢,其实就是为了实现SPWM正弦波,之所以两路的占空比有差,就是为了死区时间。避免上下MOS管直通 ...

几十ns都不行? 我之前搞电机控制 死区设置的是800ns……

出0入0汤圆

 楼主| 发表于 2021-10-4 10:56:59 | 显示全部楼层
asj1989 发表于 2021-10-3 20:16
几十ns都不行? 我之前搞电机控制 死区设置的是800ns……

要求SPWM在50k左右,所以死区时间不能太长。

出0入0汤圆

发表于 2021-10-4 20:46:55 | 显示全部楼层
用STM32F334,STM32G474,STM32H743的HRTIM定时器,就可以实现占空比和频率可调的中心对齐的PWM.这个定时器功能很强。

出0入0汤圆

 楼主| 发表于 2021-10-5 10:13:29 | 显示全部楼层
jia_xuan 发表于 2021-10-4 20:46
用STM32F334,STM32G474,STM32H743的HRTIM定时器,就可以实现占空比和频率可调的中心对齐的PWM.这个定时器功 ...

这几款芯片的中断输出频率是否也有500khz的限制?目前我用的STM32F103是有这个限制,虽然定时器的频率是72M,但是定时中断就只有500k。

出0入0汤圆

发表于 2021-10-5 20:49:35 | 显示全部楼层
sgzzour 发表于 2021-10-5 10:13
这几款芯片的中断输出频率是否也有500khz的限制?目前我用的STM32F103是有这个限制,虽然定时器的频率是7 ...

频率上MHZ都可以,这个定时器就是为数控电源而生的。

出615入1076汤圆

发表于 2021-10-5 21:20:03 来自手机 | 显示全部楼层
沒看懂,普通 stm32 的高級 timer 的 pwm 不都有 center align 模式嗎

出0入0汤圆

 楼主| 发表于 2021-10-6 09:04:04 | 显示全部楼层
dukelec 发表于 2021-10-5 21:20
沒看懂,普通 stm32 的高級 timer 的 pwm 不都有 center align 模式嗎

我现在用的就是这个模式,在这个模式下,tim1的两个通道输出波形不是完全同步的,部分波形会出现80ns左右的时差。

出615入1076汤圆

发表于 2021-10-6 15:38:14 来自手机 | 显示全部楼层
sgzzour 发表于 2021-10-6 09:04
我现在用的就是这个模式,在这个模式下,tim1的两个通道输出波形不是完全同步的,部分波形会出现80ns左右 ...

為啥会有偏差?不是硬件自動同步的嗎

是不是你修改週期的時候會導致偏差?

配置的時候 period 和 duty 寄存器都有一個影子寄存器功能,都使能後,留給你更新數據的時間範圍就長了
如果不是你要的時機,再把 pwm 模式的輸出極性改一下

出105入79汤圆

发表于 2021-10-6 17:22:15 | 显示全部楼层
死区是高级定时器的功能之一啊,最基本的F103都有。做svpwm,foc都稳的。

出0入0汤圆

 楼主| 发表于 2021-10-6 21:22:01 | 显示全部楼层
qwe2231695 发表于 2021-10-6 17:22
死区是高级定时器的功能之一啊,最基本的F103都有。做svpwm,foc都稳的。

我知道有死区,但是我不清楚我这个场景用死区功能是否合适,请看一楼里面我给的图,上面的波形先升高,后降低。我找到的死区的例子都是先升高的先降低。不知道我的理解对不对。谢谢了

出0入0汤圆

 楼主| 发表于 2021-10-6 21:23:18 | 显示全部楼层
dukelec 发表于 2021-10-6 15:38
為啥会有偏差?不是硬件自動同步的嗎

是不是你修改週期的時候會導致偏差?

是的,修改周期的时候会出现偏差。如果是固定周期的话,是不会产生偏差的。

出100入312汤圆

发表于 2022-1-12 09:14:12 来自手机 | 显示全部楼层
sgzzour 发表于 2021-10-6 21:23
是的,修改周期的时候会出现偏差。如果是固定周期的话,是不会产生偏差的。 ...

lz有解决么?另外,同一个定时器,使用中心对齐产生两路pwm,可以做到周期同步,请问是这样么?

出0入0汤圆

 楼主| 发表于 2022-1-12 09:49:21 | 显示全部楼层
akey3000 发表于 2022-1-12 09:14
lz有解决么?另外,同一个定时器,使用中心对齐产生两路pwm,可以做到周期同步,请问是这样么? ...

103是没有解决,是可以周期同步。

出100入312汤圆

发表于 2022-1-12 10:11:56 | 显示全部楼层
sgzzour 发表于 2022-1-12 09:49
103是没有解决,是可以周期同步。

103没有解决。请问用哪个型号解决了?

出0入0汤圆

 楼主| 发表于 2022-1-12 10:24:17 | 显示全部楼层
akey3000 发表于 2022-1-12 10:11
103没有解决。请问用哪个型号解决了?

没有解决   
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 04:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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