stm8s 电机控制H桥载波控制问题
用stm8的tim1 6通道互补带死区控制直流无刷电机 程序如下TIM1_PSCRH = 0x00;// 16M系统时钟经预分频f=fck/(PSCR+1) 分频
TIM1_PSCRL = 0x00;//系统时钟分频时间 分频
TIM1_ARRH = 0x03;//
TIM1_ARRL = 0x20;// 记800次系统时钟分频时间后翻转 。设置是20kHZ中央对其后输出是10k载波
TIM1_CCMR1=0x68;// PWM1模式,TIM1_CNT<TIM1_CCR1时有效,否则无效
TIM1_CCMR2=0X68;
TIM1_CCMR3=0X68;
TIM1_DTR=0X31; // 死区时间,3us
TIM1_CR1=0x60; // 计数器使能,开始计 中央对其
TIM1_BKR=0X80; // 设置刹车寄存器
TIM1_CR1_CEN=1; //开定时器
下面是通道记性设置
void pwm_h_l(void) //复位PWM电平
{
TIM1_CCER1_CC1P=1; //可以输出1Q1
TIM1_CCER1_CC1NP=1; //可以输出1 Q4
TIM1_CCER1_CC2P=1; //可以输出1Q2
TIM1_CCER1_CC2NP=1; //可以输出1 Q5
TIM1_CCER2_CC3P=1; //可以输出1Q3
TIM1_CCER2_CC3NP=1; //可以输出1Q6
TIM1_EGR_COMG=1; //允许事件更新
}
void DisAllPwmOut(void) // 使能输出
{
TIM1_CCER1_CC1E=1; // Q1
TIM1_CCER1_CC1NE=1; //Q4
TIM1_CCER1_CC2E=1; //Q2
TIM1_CCER1_CC2NE=1; //Q5
TIM1_CCER2_CC3E=1; //Q3
TIM1_CCER2_CC3NE=1; //Q6
TIM1_EGR_COMG=1; //允许事件更新
}
中断程序
void IN_PUANDUAN(void) //电机控制IGBT流程
{
if(QD.motro_EN!=1)
{
if(IN_MA==IN_010) // 假设 0度
{
TIM1_CCER1_CC1E=0; //q1
TIM1_CCER2_CC3E=0; //q3
TIM1_CCER1_CC1NE=0; //Q4
TIM1_CCER1_CC2NE=0; //Q5
/**********************************/
TIM1_CCER2_CC3NE=1; //Q6
TIM1_CCER1_CC2E=1;//Q2
}else
if( IN_MA==IN_110) //30 度
{
TIM1_CCER2_CC3NE=1; //Q6
TIM1_CCER1_CC2E=0; //Q2
TIM1_CCER1_CC1E=1; //Q1
}else
if(IN_MA==IN_100) // 60度
{
TIM1_CCER1_CC2E=0; // Q2
TIM1_CCER2_CC3E=0; //Q3
TIM1_CCER2_CC3NE=0; //Q6
TIM1_CCER1_CC1NE=0; //Q4
/**************************************/
TIM1_CCER1_CC2NE=1; //Q5
TIM1_CCER1_CC1E=1; //q1
}else
if(IN_MA==IN_101) //90 度
{
TIM1_CCER1_CC2NE=1; //Q5
TIM1_CCER1_CC1E=0; //q1
TIM1_CCER2_CC3E=1; //q3
}else
if(IN_MA==IN_001) //120度
{
TIM1_CCER1_CC2E=0;
TIM1_CCER1_CC1E=0; //Q1
TIM1_CCER1_CC2NE=0; //Q5
TIM1_CCER2_CC3NE=0; //Q6
/********************************/
TIM1_CCER1_CC1NE=1; //Q4
TIM1_CCER2_CC3E=1; //Q3
}else
if(IN_MA==IN_011) //150度
{
TIM1_CCER1_CC1NE=1; //Q4
TIM1_CCER2_CC3E=0; //Q3
TIM1_CCER1_CC2E=1; //Q2
}else
if(IN_MA==IN_000)
{
motor_stop();
}
}
}
现在的问题是上管pwm控制正常,但是下管因为要给自举电容充电,所以下管pwm载波控制后出现充电不全现象
如果改为下管用io口恒通方式控制那么就不能用tim1中的互补死区功能,这样没有死区可能发生烧管现象!!
如果下管可以在一个霍尔信号中有io恒通————pwm——————io恒通这样就解决了电容充电问题 ,但是请问怎么设置呢?
:):):):):):):) bangding!!! 一般用 上管PWM 下管H导通好控制一些。用专业的驱动芯片也不会说同时上下管导致,如 IRxxxx系列,自动产生死区时间。 按楼主的设想,就不是PWM效果了。
个人感觉应该是改变下管的自举电容的充电时间,
使其充电速度加快,就可以避免烧管了。 你应该要在控制里加入对下管最小导通时间的限制。
让每周期下管都能通那么一点时间。
不就解了?
页:
[1]