用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; //可以输出1 Q1 TIM1_CCER1_CC1NP=1; //可以输出1 Q4 TIM1_CCER1_CC2P=1; //可以输出1 Q2 TIM1_CCER1_CC2NP=1; //可以输出1 Q5 TIM1_CCER2_CC3P=1; //可以输出1 Q3 TIM1_CCER2_CC3NP=1; //可以输出1 Q6 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恒通 这样就解决了电容充电问题 ,但是请问怎么设置呢? |
评分
查看全部评分
个人感觉应该是改变下管的自举电容的充电时间,
使其充电速度加快,就可以避免烧管了。
评分
查看全部评分
让每周期下管都能通那么一点时间。
不就解了?
评分
查看全部评分