TLE9854使用MOSFET驱动电机(五):使用 PWM 驱动 MOSFET,且四个 H 桥桥臂都使用 PWM 驱动,方向二(反向)
原创
©著作权归作者所有:来自51CTO博客作者WangLanguager的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、修改main.c程序,将H桥的导通桥臂进行更改,即改变电机运行方向:
#include "tle_device.h"
int adc1;
int adc2;
int main(void)
{
uint8_t pwm_dir;//定义pwm的方向
/*****************************************************************************
** initialization of the hardware modules based on the configuration done **
** by using the IFXConfigWizard **
*****************************************************************************/
TLE_Init();
CCU6_T12_Str_En(); //初始化 T12 定时器
CCU6_StartTmr_T12(); // 启动 T12 定时器
BDRV_Set_Bridge(Ch_LS_PWM, Ch_PWM, Ch_LS_PWM, Ch_PWM); //将PWM信号映射到 LS1, HS1, LS2 和 HS2四个H桥的桥臂 */
pwm_dir = CCU6_MASK_COUT61 | CCU6_MASK_CC61; //设置要用PWM调制的H桥桥臂,GL2、GH2
CCU6_Passive_Level_High_Sel(CCU6_MASK_CC60); //设置CC60信号为常高,即GH1常通
//pwm_dir = CCU6_MASK_COUT60 | CCU6_MASK_CC60; //设置要调制的PWM信号
//CCU6_Passive_Level_High_Sel(CCU6_MASK_CC61); //设置CC61信号为常高,即GH2常通
for (;;)
{
(void)WDT1_Service(); //看门狗服务
CCU6_T12_Modulation_En(pwm_dir); //设置CCU6的输出方向
CCU6_Ch0_Value_Set(adc1); // 设置通道1的占空比
CCU6_Ch1_Value_Set(adc2); //设置通道2的占空比
CCU6_T12_Str_En(); //初始化 T12 定时器
}
}
2、设置adc1为1000,adc2为500
因为CC60信号为常高,即GH1常通,所以adc1参数设置为多少,GH1都一直保持常通,所以adc1的值对功能没有任何影响,此处设置为1000.
此时GH1常通、GH2、GL2在PWM控制下进行开关
各引脚电压为:
V(gh1) = 24V, V(gh2) = 12V, V(gl1) = 0V, V(gl2) = 5V
V(sh1) = 12V, V(sh2) = 6V, V(sl) = 0V
各引脚的电压波形为:
GH2:
GH2引脚的电压峰值为24V,但是高电平的时间占信号所有的时间为50%,所以用万用表量出来GH2引脚电压为12V。
SH2:
SH2引脚的电压峰值为12V,但是高电平的时间占信号所有的时间为50%,所以用万用表量出来SH2引脚电压为6V。
GL2:
GL2引脚的电压峰值为10V,但是高电平的时间占信号所有的时间为50%,所以用万用表量出来GL2引脚电压为5V。
adc2值设置为500,占空比的总周期为1000,所以设置的占空比为50%,程序参数与示波器采集到的波形相符合。
SL:
GL1:
SH1:
GH1:
3、H桥导通示意图