找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1164|回复: 11
收起左侧

请教单片机MCU定时器产生互补带死区PWM

[复制链接]
ID:284571 发表于 2022-4-9 12:56 来自手机 | 显示全部楼层 |阅读模式
如何用一个单片机定时产生互补带死区的PWM信号?
互补PWM可以实现、死区怎么弄?谢谢
回复

使用道具 举报

ID:883242 发表于 2022-4-9 13:35 | 显示全部楼层
看你的单片机定时器是否支持PWM死区了,连单片机型号都不说,我们也不会算命。
回复

使用道具 举报

ID:161164 发表于 2022-4-9 13:35 来自手机 | 显示全部楼层
周期要多快?说说你的互补是如何实现的?
回复

使用道具 举报

ID:213173 发表于 2022-4-9 15:28 | 显示全部楼层
                if(PWMA==1)
                {
                        PWMA=0;                                        //A通道关闭
                        Delay10us();                        //死区延时
                        PWMB=1;                                        //B通道打开
                }
                else
                {
                        PWMB=0;                                        //B通道关闭
                        Delay10us();                        //死区延时
                        PWMA=1;                                        //A通道打开
                }
回复

使用道具 举报

ID:284571 发表于 2022-4-10 11:51 | 显示全部楼层
本帖最后由 WCM1998 于 2022-4-11 08:10 编辑

void TIM1_PWM_Init(void)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
    TIM_TimeBaseStructure.TIM_Period    =   arr;               
    TIM_TimeBaseStructure.TIM_Prescaler =   psc;              
    //Setting Clock Segmentation
    TIM_TimeBaseStructure.TIM_ClockDivision = (TIMCKD_TypeDef)0;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 1;        
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;//中心对齐;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  
     /**  通道 1              **/
    TIM_OCStructInit(&TIM_OCInitStructure);
    //Select Timer Mode: TIM Pulse Width Modulation Mode 2
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    TIM_OCInitStructure.TIM_OutputState =  TIM_OutputState_Enable;   //OC*输出
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // 互补输出关闭。关

闭OC*N输出
    TIM_OCInitStructure.TIM_Pulse = 200;                             //占空比
     
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //匹配时输出高电平
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);   
   
    /**  通道 3              **/
    TIM_OCStructInit(&TIM_OCInitStructure);
    //Select Timer Mode: TIM Pulse Width Modulation Mode 2
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    TIM_OCInitStructure.TIM_OutputState =  TIM_OutputState_Enable;   //OC*输出
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; // 互补输出关闭。关

闭OC*N输出
    TIM_OCInitStructure.TIM_Pulse = 200;                             //占空比
     
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;        //匹配时输出高电平
    TIM_OC3Init(TIM1, &TIM_OCInitStructure);
    TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Disable);      
    TIM_ARRPreloadConfig(TIM1, ENABLE);                              //重装载ARR
   
    TIM_Cmd(TIM1, ENABLE);
    TIM_CtrlPWMOutputs(TIM1, ENABLE);
}
//===占空比
void TIM1_PWM_Duty(u8 Duty)

{   
  Puls1=arr-Duty-dy;//dy是死区时间,72M/13.89ns一个周期,1000ns;dy=1000/2/((psc+1*13.89))=36
  Puls3=arr-CCR1;  TIM_SetCompare1(TIM1,Puls1);
   TIM_SetCompare3(TIM1,Puls3);

}
这种方法不正确。如果占空比太小就没死区了
回复

使用道具 举报

ID:284571 发表于 2022-4-10 13:51 | 显示全部楼层
本帖最后由 WCM1998 于 2022-4-11 08:08 编辑

大们指教一下。。。
回复

使用道具 举报

ID:684084 发表于 2022-4-11 13:34 | 显示全部楼层
51单片机麻烦一点,STM之类的PWM有死区设置的
回复

使用道具 举报

ID:382454 发表于 2022-4-11 21:51 | 显示全部楼层
定时器不好搞吧,现在用STC8系列有PWM模块啊。这个才是专业的。
回复

使用道具 举报

ID:284571 发表于 2022-4-12 08:53 来自手机 | 显示全部楼层
Ecole 发表于 2022-4-11 13:34
51单片机麻烦一点,STM之类的PWM有死区设置的

stm有互补带死区的pwm、但是现在很多都用一通道和另一个通道互补也不知道有什么好处、这样配置也是在别人的硬件上抄下的、
回复

使用道具 举报

ID:123289 发表于 2022-4-12 10:55 | 显示全部楼层
先读通芯片手册。
如果是自己用定时器做的(不用PWM模块),就规定一个最小脉冲宽值。
回复

使用道具 举报

ID:284571 发表于 2022-4-12 15:25 | 显示全部楼层
是定时器PWM模块,我以配好互补。但没有配出死区。所以请教。。程序在5楼
回复

使用道具 举报

ID:61883 发表于 2022-4-12 17:51 | 显示全部楼层
两种办法,一种是使用定时器GPIO模拟;另一种是使用支持死区输出的单片机。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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