我有个H桥电路,打算用Tim1的两路互补信号驱动H桥,H桥上都是igbt,我把图贴出来(原理图.jpg、理想信号.jpg、实际信号.jpg)我的负载是电源输出,单根线,我想用tim1的互补输出得到理想信号.jpg的波形,但是我始终配置不出来想要得到的波形,理想波形是两路等脉宽的波形,但是实际信号却是不等宽的, 那如果我想得到理想信号的波形,我该如何实际我的电路跟程序呢? 我把程序贴出来: void Init_Pwm(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_TIM1|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); TIM_DeInit(TIM1); TIM_InternalClockConfig(TIM1); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_12|GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOE,&GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period=100-1; TIM_TimeBaseStructure.TIM_Prescaler=9-1; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM_CounterMode_CenterAligned1; TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;// TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low; TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Set; TIM_OC1Init(TIM1,&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; //TIM_OCNPolarity_Low; TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; TIM_OC3Init(TIM1,&TIM_OCInitStructure); TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable; TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable; TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; TIM_BDTRInitStructure.TIM_DeadTime =224;//138; TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); // TIM_OC1NPolarityConfig(TIM1,TIM_OCNPolarity_Low); // TIM_OC3NPolarityConfig(TIM1,TIM_OCNPolarity_Low); //TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update); TIM_ITConfig(TIM1,TIM_FLAG_Update,ENABLE); TIM_Cmd(TIM1,ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); } 我如何使用这个tim的pwm能配置出等宽脉冲,然后占空比可调? |
都是隔离了的,但是逻辑还是一样的,就是说,我如何做到Q3跟Q4同时导通,Q2跟Q1同时导通,就像我的理想波形那样,那两路pwm如何分配?程序如何设置?
一样的,我先把代码贴出来
TIM_TimeBaseStructure.TIM_Period=100-1;
TIM_TimeBaseStructure.TIM_Prescaler=9-1;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned1;//TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//
TIM_OCInitStructure.TIM_Pulse=0;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Set;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
我使用了TIM_CounterMode_CenterAligned1模式,然后频率改为50KHz,实际得到的频率是25kHz,说明这个配置起作用了,但是还是达不到我想要的结果,不知道别人在用stm32做开关电源类控制的时候是怎么设置的。
上管和下管的MOS不一样吗?我看你
这两句设置的极性不一样,之前没注意看。如果上管下管的极性是一样的,那么就该设置成相同的极性
设置一样的,不就是互补信号了?那么当我OC的占空比是20%的时候,那么NOC不就是80%的占空比了?这样我用两对pwm信号控制H桥的话也不能同时打开,同时关闭啊?
这就是极性设置一样的结果
如何设置能把箭头部分搞成低电平就行了,但是不知道怎么设置,尝试了很多种办法都不行。
这个Idlestate到底是做什么用的?好像怎么设置都没什么效果。
你不是想要互补信号?同时开同时关,你上下管子就直通了,不明白你这么做的意义。还是说你这个不是同一桥臂上下管的驱动信号?
idlestate的意思就是空闲状态的电平,通常是MOS的无效电平。
评分
查看全部评分
直接用寄存器编程的语句注意放在对应init函数之后即可……
刚注意到你列出的代码
如果软件确实没问题,建议: 先将四个驱动信号引脚断开(保留光耦),用电阻代替电机,单独检测4个桥臂的静态工作点的一致性
手动给予驱动电压,再看桥的对称性
评分
查看全部评分
并一pF级电容,比如:10pF,尽量小不能大
问题解决了,我是需要同时关断跟同时导通的,我用中心对齐方式,把其中一路pwm的oc跟noc放在H桥的左上臂跟右下臂,另外一路pwm放在右上臂跟左下臂,就可以了