自平衡小车程序

自平衡小车程序
自平衡小车程序

#include "DSP281x_Device.h" // Headerfile Include File

#include "DSP281x_Examples.h" //

#define HIST 16

unsigned int k=0;

static float adc_current_samples[6][HIST];//定义行为6,列为16的二维数组static float adclo=0.0;

static Uint16 totsamples_0;

unsigned int count;

#define OCRMAX 1023

unsigned int pwm;

static float left_cof=1.00;

static float right_cof=1.00;

struct gyro_filter pitch_filter;

static Uint16 mode=0x00;//0x00----balance mode; 0x01-------assist mode static Uint16 still=0x00; //still=1.0, no move; still=0.0,move. static Uint16 stand=0x00;

static Uint16 last_balance_s0;

static Uint16 samples[6],ticks;

static float left_steer_cof=0.05;

static float right_steer_cof=0.05;

static float steer_lim=0.13;

static float initial_angle=0.0000874;

static float hard_speed_lim=0.90;

static float bus_current;

static float cmd;

static float lpf_angle;

static float lpf_angrate;

static float lpf_steer_knob;

static float left_motor_pwm, right_motor_pwm, steer_cmd;

static float left_motor_pwm, right_motor_pwm, steer_cmd;

static float batt_voltage1, ay, ax, in_steer_knob;

static float pitch_rate;

static float interval;

static float timer0_seconds_conv;

static float p_gain;

static float d_gain;

static float p1_gain;

static float d1_gain;

static float p0_gain;

static float d0_gain;

static float tp0,td0,tp1,td1,tp,td;

static float d_step=0.0001;

static float p_step;

static float cor_bat;

static float p_cmd,d_cmd;//next_cmd;

static float sample_conv = 1.0/1024.0/(float)HIST*5.0;//=3.052exp(-4) static float sample_conv1 = 1.0/1024.0/(float)HIST*2.07;

static float sample_conv2 = 1.0/1024.0/(float)HIST*1.9;

static float sample_conv3 = 1.0/1024.0/(float)HIST*333.3*2.5;

interrupt void T2_AD_isr(void);

void InitEv(void);

void InitAdc(void);

void InitGpio(void);

struct gyro_filter {

float angle;

float ay_bias;

//float ax_bias;

float rate_bias;

float steer_knob_bias;

float rate;

float steer_knob;

float curr_bias;

float curr;

Uint16 inited;

};

void check_mode ()

{if((!pitch_rate) && (!in_steer_knob)) mode = 0x00;

else mode = 0x01; }

void delay (void)

{ Uint16 xt;

static Uint16 k_temp;

for (xt=0;xt<15;xt++){

k_temp++; }

}

void delay1(void)

{ Uint16 xt;

static Uint16 k_temp;

for (xt=0;xt<15000;xt++){

k_temp++; }

}

int adc_collect_samples(Uint16 *samples, Uint16 *lasts0)

{

unsigned int i,j;

if (*lasts0 == totsamples_0) {

return 0;//if no new adc samples, return with 0

}

*lasts0 = totsamples_0;

for (i=0; i<6; i++) {

Uint16 tot=0;

for (j=0; j

{

tot+=adc_current_samples[i][j];

}

samples[i] = tot;//samples[i]=Σadc_current_samples[i][j](j=1,2,...,ADC_HIST) }

return 1;

}

Uint16 bat_judge( float x)

{

if(x>4.30) return 0x5;//25.8

else if(x>4.18) return 0x4;//25.1

else if(x>4.07) return 0x3;//24.4

else if(x>3.95) return 0x2;//23.7

else if(x>3.83) return 0x1;//23.0

else return 0x0;

}

void lpf_update(float *state, float tc, float interval, float input)

{

float frac=interval/tc;

if (frac>1.0) frac=1.0;

*state = input*frac + *state * (1.0-frac);

}

float fmax(float a, float b)

{

if (a>=b) {

return a;

} else {

return b;

}

}

float fmin(float a, float b)

{

if (a<=b) {

return a;

} else {

return b;

}

}

float flim(float x, float lo, float hi)

{

if (x>hi) return hi;

if (x

return x;

}

void gyro_init(struct gyro_filter *it)

{ it->inited =0x00;

it->angle=0.0;

it->ay_bias=0.0;

// it->ax_bias=0.0;

it->rate_bias=0.0;

it->steer_knob_bias=0.0;

it->rate=0.0;

it->steer_knob=0.0;

it->curr_bias=0.0;

it->curr=0.0;

lpf_angle=0.0;

lpf_angrate=0.0;

lpf_steer_knob=0.0;

}

void gyro_sample(struct gyro_filter *it, float in_rate,

float in_y, float in_x, float in_steer,float curri,float interval)

{

flim( in_y, -1.0,1.0);

flim( in_x, -1.0,1.0);

if (!it->inited) {

it->angle=0.0;

it->rate_bias = in_rate;

it->ay_bias = in_y;

it->curr_bias = curri;

it->steer_knob_bias = in_steer;

it->inited=1;

return; }

it->rate = in_rate - it->rate_bias;

it->angle =in_y-it->ay_bias;//it->angle+(in_y-it->ay_bias)*last_ax-in_x*(last_ay-it->ay_bias); it->curr= curri-it->curr_bias;

it->steer_knob= flim( in_steer-it->steer_knob_bias,-5.0,5.0);

}

void set_motor_idle()

{

GpioDataRegs.GPFDA T.bit.GPIOF12=1; //SD high

GpioDataRegs.GPFDA T.bit.GPIOF13=1; //OE high

stand =0x00;

EvaRegs.T2CON.all =0x1440;

gyro_init(&pitch_filter);

return;

}

void set_motor(float level_left, float level_right)

{

int leveli_left,leveli_right;

if (fabs(level_left)<0.002 || fabs(level_right)<0.002) return;

leveli_left = (int16)(level_left*OCRMAX);

leveli_right = (int16)(level_right*OCRMAX);

if (leveli_left<-(OCRMAX-2)) leveli_left=-(OCRMAX-2);

if (leveli_left>OCRMAX-2) leveli_left=OCRMAX-2;

if (leveli_right<-(OCRMAX-2)) leveli_right=-(OCRMAX-2);

if (leveli_right>OCRMAX-2) leveli_right=OCRMAX-2;

if(still) {

GpioDataRegs.GPFDA T.bit.GPIOF12=0; // SD=0

// asm("nop");

while(GpioDataRegs.GPFDA T.bit.GPIOF12==1) continue;

GpioDataRegs.GPADA T.bit.GPIOA13=1; //PORTC |= 0x50; //enable CCW0

GpioDataRegs.GPBDA T.bit.GPIOB13=1;

// delay();

GpioDataRegs.GPADA T.bit.GPIOA14=1; //PORTC |= 0xa0; //disable CW0 GpioDataRegs.GPBDA T.bit.GPIOB14=1;

//asm("nop");

continue;

still=0x00;

}

if (leveli_left<0) {

EvaRegs.ACTRA.all=0x00C2;

pwm=-leveli_left;

}

else {

EvaRegs.ACTRA.all=0x002C;

pwm=leveli_left;

}

if (leveli_right<0) {

EvbRegs.ACTRB.all=0x002C;

pwm=-leveli_right;

}

else {

EvbRegs.ACTRB.all=0x00C2;

pwm=leveli_right;

}

}

void motor_ready(void)

{

gyro_init(&pitch_filter);

GpioDataRegs.GPADA T.bit.GPIOA13=1; //PORTC |= 0x50; //enable CCW0 GpioDataRegs.GPBDA T.bit.GPIOB13=1;

GpioDataRegs.GPADA T.bit.GPIOA14=1; //PORTC |= 0xa0; //disable CW0 GpioDataRegs.GPBDA T.bit.GPIOB14=1;

GpioDataRegs.GPFDA T.bit.GPIOF12=0; //SD low

GpioDataRegs.GPFDA T.bit.GPIOF13=0; //OE low

EvaRegs.T1CON.bit.TENABLE=1; //启动定时器T1

EvbRegs.T3CON.bit.TENABLE=1; //启动定时器T3

EvaRegs.T2CON.all =0x1440; // 16分频,使能定时器操作,连续增模式

}

void balance(void)

{ float steer_cmd_abs,temp_steer_cmd;

unsigned int T2cnt;

if (!adc_collect_samples(samples, &last_balance_s0))

return;

{

T2cnt=EvaRegs.T2CNT; //读取定时器2的值

ticks = OCRMAX * count + T2cnt;

interval = timer0_seconds_conv * (float)ticks;

}

count=0;

EvaRegs.T2CON.all = 0x1400; //关闭定时器2

EvaRegs.T2CNT = 0x0000;

EvaRegs.T2CON.all = 0x1440; //启动定时器2

EvaRegs.GPTCONA.bit.T1TOADC = 2;

ay = sample_conv1*samples[4]-sample_conv2*samples[0];//1.034

pitch_rate = samples[1]*sample_conv3;

in_steer_knob = (samples[2]+samples[3])*sample_conv;

bus_current = samples[4]*sample_conv;

batt_voltage1 = samples[5]*sample_conv;

check_mode();

if(!pitch_filter.inited)

{

if(batt_voltage1<3.0) {

set_motor_idle();

return;

}

else

cor_bat=-0.857*batt_voltage1+4.58;//-0.857=(1-1.3)/(4.18-3.83),4.58=1+0.857*4.18 cor_bat=flim(cor_bat,1.0,1.3);

}

gyro_sample(&pitch_filter, pitch_rate,ay,ax,in_steer_knob,bus_current, interval); EvaRegs.GPTCONA.bit.T1TOADC = 0;

if(!mode) {

if(fabs(pitch_filter.angle)

GpioDataRegs.GPADA T.bit.GPIOA14=0;

GpioDataRegs.GPBDA T.bit.GPIOB14=0;

GpioDataRegs.GPADA T.bit.GPIOA13=0;

GpioDataRegs.GPBDA T.bit.GPIOB13=0;

GpioDataRegs.GPFDA T.bit.GPIOF12=1;

still=0x01;

return; }

EvaRegs.GPTCONA.bit.T1TOADC = 2;

lpf_steer_knob = -pitch_filter.steer_knob;

if(stand) {

p_gain = fmax(p0_gain,p_gain-p_step);//0.1

d_gain = fmin(d0_gain,d_gain+d_step);

tp=tp0;

td=td0; }

else { p_gain = fmin(p1_gain,p_gain+p_step);

d_gain = fmax(d1_gain,d_gain-d_step);//0.1

tp=tp1;

td=td1;

}

lpf_update(&lpf_angle,tp, interval, -pitch_filter.angle*cor_bat);//0.6

lpf_update(&lpf_angrate,td, interval, -pitch_filter.rate*cor_bat);//0.5

p_cmd=p_gain*lpf_angle*fabs(lpf_angle);

d_cmd=d_gain*lpf_angrate;

cmd=p_cmd + d_cmd;

cmd=flim(cmd, -hard_speed_lim, hard_speed_lim);

if(lpf_steer_knob>0.0) steer_cmd = flim(left_steer_cof * lpf_steer_knob*(1-fabs(cmd)), -steer_lim,steer_lim);

else steer_cmd = flim(right_steer_cof * lpf_steer_knob*(1-fabs(cmd)),

-steer_lim,steer_lim);

steer_cmd_abs = fabs(steer_cmd);

if ((lpf_steer_knob>0.0 && cmd>0.01)||(lpf_steer_knob<0.0 && cmd<-0.01))

temp_steer_cmd = flim(steer_cmd+0.1*interval,-steer_cmd_abs,steer_cmd_abs); //?????????? else if ((lpf_steer_knob>0.0 && cmd<-0.01)||(lpf_steer_knob<0.0 && cmd>0.01))

temp_steer_cmd = flim(steer_cmd-0.1*interval,-steer_cmd_abs,steer_cmd_abs); //?????????? else temp_steer_cmd=0.0;

EvaRegs.GPTCONA.bit.T1TOADC = 0;

if (cmd>=0.0) {

left_motor_pwm = 1.0-cmd*left_cof - temp_steer_cmd;

right_motor_pwm =1.0-cmd*right_cof + temp_steer_cmd;

} else {

left_motor_pwm = -(1.0+cmd*left_cof) + temp_steer_cmd;

right_motor_pwm =-(1.0+cmd*right_cof)- temp_steer_cmd;

}

set_motor(left_motor_pwm, right_motor_pwm);

}

}

void stabilize_analog(void)

{

Uint16 samples[6];

Uint16 i;

Uint16 last_s0=0;

for (i=0; i

if (adc_collect_samples(samples, &last_s0)) i++;

}

}

void stand_test()

{

if(GpioDataRegs.GPBDA T.bit.GPIOB6&&GpioDataRegs.GPBDA T.bit.GPIOB7) {

stand=0x02;

return;

}

else{

if(GpioDataRegs.GPBDA T.bit.GPIOB6||GpioDataRegs.GPBDA T.bit.GPIOB7)

{

stand=0x01;

return;

}

else{

stand=0x00;

return;

}

}

}

void main(void)

{

InitSysCtrl();

EALLOW;

DINT;

IER = 0x0000; //禁止VPU中断并清除所有CPU中断标志位

IFR = 0x0000;

InitPieCtrl();

InitPieVectTable();

InitGpio();

InitAdc();

InitEv();

EALLOW; // This is needed to write to EALLOW protected registers

PieVectTable.T2PINT=&T2_AD_isr;

EDIS; // This is needed to disable write to EALLOW protected registers

PieCtrlRegs.PIEIER3.bit.INTx1=1;//T2pint中断

IER |= M_INT1;//开启中断1

PieCtrlRegs.PIEIER1.bit.INTx7=1;

EINT; // Enable Global interrupt INTM

ERTM; // Enable Global realtime interrupt DBGM

for(;;)

{

DisableDog();

GpioDataRegs.GPADA T.bit.GPIOA12=1;

GpioDataRegs.GPADA T.bit.GPIOA15=1;

GpioDataRegs.GPBDA T.bit.GPIOB12=1;

GpioDataRegs.GPBDA T.bit.GPIOB15=1;

GpioDataRegs.GPFDA T.bit.GPIOF12=0; //SD low GpioDataRegs.GPFDA T.bit.GPIOF13=0; //OE low

GpioDataRegs.GPADA T.bit.GPIOA13=0;

GpioDataRegs.GPADA T.bit.GPIOA14=0;

GpioDataRegs.GPBDA T.bit.GPIOB13=0;

GpioDataRegs.GPBDA T.bit.GPIOB14=0;

InitAdc();

stabilize_analog();

InitEv();

gyro_init(&pitch_filter);

motor_ready();

for(;;)

{

balance();

if(!stand) break;

}

set_motor_idle();

}

}

interrupt void T2_AD_isr(void)

{

if(k<16)

{

adc_current_samples[0][k]=((float)AdcRegs.ADCRESULT0)*3.0/65520.0+adclo;

adc_current_samples[1][k]=((float)AdcRegs.ADCRESULT1)*3.0/65520.0+adclo;

adc_current_samples[2][k]=((float)AdcRegs.ADCRESULT2)*3.0/65520.0+adclo;

adc_current_samples[3][k]=((float)AdcRegs.ADCRESULT3)*3.0/65520.0+adclo;

adc_current_samples[4][k]=((float)AdcRegs.ADCRESULT4)*3.0/65520.0+adclo;

adc_current_samples[5][k]=((float)AdcRegs.ADCRESULT5)*3.0/65520.0+adclo;

k++;

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除状态字

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位seq1

EvaRegs.EV AIFRB.bit.T2PINT=1;//清除中断标志

EvaRegs.EV AIMRB.bit.T2PINT=1;//中断允许

PieCtrlRegs.PIEACK.bit.ACK3=1;//向cpu申请中断

}

else{

totsamples_0++;

k=0;

count=totsamples_0;

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除状态字

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位seq1

EvaRegs.EV AIFRB.bit.T2PINT=1;//清除中断标志

// EvaRegs.EV AIMRB.bit.T2PINT=1;//中断允许

EvaRegs.GPTCONA.bit.T1TOADC = 0;

}

}

//--------------------------------------------------------------------------- // InitEv:

//--------------------------------------------------------------------------- // This function initializes to a known state.

//

void InitEv(void)

{

EALLOW;

/*****************************/

/***********配置ACTR**********/

/*****************************/

/* EvaRegs.ACTRA.bit.CMP1ACT=2;

//PW1引脚高电平有效

EvaRegs.ACTRA.bit.CMP2ACT=1;

//PWM2引脚低电平有效*/

/*****************************/

/*******配置死区寄存器********/

/*****************************/

EvaRegs.DBTCONA.bit.DBT=5;

//死区定时器周期为5

EvaRegs.DBTCONA.bit.EDBT1=1;

//死区定时器1使能

EvaRegs.DBTCONA.bit.DBTPS=1;

//死区定时器预定标因子,死区时钟为HSPCLK/2

/*****************************/

/*********配置COMCONA*********/

/*****************************/

https://www.360docs.net/doc/de9454954.html,CONA.bit.CENABLE=1;

//使能比较单元的比较操作

https://www.360docs.net/doc/de9454954.html,CONA.bit.CLD=2;

//当给CMPR1赋新值时,立即装载

https://www.360docs.net/doc/de9454954.html,CONA.bit.FCOMPOE=1;

//全比较操作,PWM输出由相应的比较逻辑驱动

/*****************************/

/**********设置T1CON**********/

/*****************************/

EvaRegs.T1CON.bit.TMODE=2;

//T1工作于连续增模式

EvaRegs.T1CON.bit.TPS=3;

//输入时钟预定标因子为X/8

EvaRegs.T1CON.bit.TENABLE=1;

//禁止定时器操作

EvaRegs.T1CON.bit.TCLKS10=0;

//使用内部时钟

EvaRegs.T1CON.bit.TECMPR=1;

//使能定时器比较操作

/*****************************/

/**********设置T1PR等*********/

/*****************************/

EvaRegs.T1PR =OCRMAX;

EvaRegs.T1CNT = 0x0; ///定时器1初值设为0

EvaRegs.CMPR1=pwm;

EvaRegs.CMPR2=pwm;

// EvaRegs.T1CON.bit.TENABLE=1; //启动定时器T1

/* EvbRegs.ACTRB.bit.CMP7ACT=2;

//PWM7引脚高电平有效

EvbRegs.ACTRB.bit.CMP8ACT=1;

//PWM8引脚低电平有效*/

/*****************************/

/*******配置死区寄存器********/

/*****************************/

EvbRegs.DBTCONB.bit.DBT=5;

//死区定时器周期为5

EvbRegs.DBTCONB.bit.EDBT1=1;

//死区定时器1使能

EvbRegs.DBTCONB.bit.DBTPS=3;

//死区定时器预定标因子,死区时钟为HSPCLK/8

/*****************************/

/*********配置COMCONA*********/

/*****************************/

https://www.360docs.net/doc/de9454954.html,CONB.bit.CENABLE=1;

//使能比较单元的比较操作

https://www.360docs.net/doc/de9454954.html,CONB.bit.CLD=2;

//当给CMPR1赋新值时,立即装载

https://www.360docs.net/doc/de9454954.html,CONB.bit.FCOMPOE=1;

//全比较操作,PWM输出由相应的比较逻辑驱动

/*****************************/

/**********设置T1CON**********/

/*****************************/

EvbRegs.T3CON.bit.TMODE=2;

//T1工作于连续增模式

EvbRegs.T3CON.bit.TPS=3;

//输入时钟预定标因子为X/8

EvbRegs.T3CON.bit.TENABLE=1;

//禁止定时器操作

EvbRegs.T3CON.bit.TCLKS10=0;

//使用内部时钟

EvbRegs.T3CON.bit.TECMPR=1;

//使能定时器比较操作

/*****************************/

/**********设置T1PR等*********/

/*****************************/

EvbRegs.T3PR =OCRMAX;

EvbRegs.T3CNT = 0; ///定时器3初值设为0

EvbRegs.CMPR4=pwm;

EvbRegs.CMPR5=pwm;

// EvbRegs.T3CON.bit.TENABLE=1;

//启动定时器T3

EvaRegs.GPTCONA.all=0;

EvaRegs.T2PR =OCRMAX; // 定时器2的周期为20k

EvaRegs.T2CMPR=0x0000;

EvaRegs.T2CNT =0x0000; // Timer2 counter

//EvaRegs.T2CON.all =0x1440;//16分频,使能定时器操作,连续增模式

EvaRegs.EV AIMRB.bit.T2PINT = 1;//定时器2周期中断允许

EvaRegs.EV AIFRB.bit.T2PINT = 1;//清除标志

// EvaRegs.GPTCONA.bit.T1TOADC = 2;

EDIS;

}

void InitAdc(void)

{

//unsigned int p;

// To powerup the ADC the ADCENCLK bit should be set first to enable

// clocks, followed by powering up the bandgap and reference circuitry.

// After a 5ms delay the rest of the ADC can be powered up. After ADC

// powerup, another 20us delay is required before performing the first

// ADC conversion. Please note that for the delay function below to

// operate correctly the CPU_CLOCK_SPEED define statement in the

// DSP28_Examples.h file must contain the correct CPU clock period in

// nanoseconds. For example:

AdcRegs.ADCTRL1.bit.RESET=1; //ADC模块软件复位

// asm(" NOP");

AdcRegs.ADCTRL1.bit.RESET=0; //这一句可要可不要,因为硬件会自动返回0

AdcRegs.ADCTRL1.bit.SUSMOD=3; //仿真挂起的模式3 ??

AdcRegs.ADCTRL1.bit.ACQ_PS=0x0; //决定启动转换新号SOC的脉冲宽度,SOC用于控制持续多长时间的采样开关闭合,SOC脉冲宽度大小为ADCLK周期的(ADCTRL(11:8)+1)倍

AdcRegs.ADCTRL1.bit.CPS=0; //对外设时钟HSPCLK进行分频,1分频

AdcRegs.ADCTRL1.bit.CONT_RUN=1;//连续运转模式

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//级联模式,SEQ1和SEQ2工作时作为一个16位状态排序器(SEQ)

//ADC模块控制寄存器3(ADCTRL3)AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;//ADC带间隙和参考电路上电

// for(p=0;p<10000;p++) asm(" NOP"); //延时等待ADC上电

AdcRegs.ADCTRL3.bit.ADCPWDN=1; //ADC除间隙和参考电路之外的模拟电路上电// for(p=0;p<5000;p++) asm(" NOP"); //延时等待ADC上电

AdcRegs.ADCTRL3.bit.ADCCLKPS=5; //内核时钟分频,产生ADC内核时钟ADCLK;ADCLK=HSPCLK/[30*(ADCTRL1.7+1)];ADCTRL1.7为AdcRegs.ADCTRL1.bit.CPS=0。

AdcRegs.ADCTRL3.bit.SMODE_SEL=1;//同步采样模式

//最大转换通道寄存器(MAXCONV)AdcRegs.ADCMAXCONV.bit.MAX_CONV1=5;//即在SEQ采样模式下,使用MAXCONV1(3:0)

//ADC输入通道选择排序控制寄存器(CHSELSEQn)

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0; //AD转换排序

AdcRegs.ADCCHSELSEQ1.bit.CONV01=1;

AdcRegs.ADCCHSELSEQ1.bit.CONV02=2;

AdcRegs.ADCCHSELSEQ1.bit.CONV03=3;

AdcRegs.ADCCHSELSEQ2.bit.CONV04=4;

AdcRegs.ADCCHSELSEQ2.bit.CONV05=5;

//AD状态和标志寄存器(ADCST)AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //ADCST中断清除位,清除SEQ1的中断标志

AdcRegs.ADCST.bit.INT_SEQ2_CLR=1; //ADCST中断清除位,清除SEQ2的中断标志

//ADC模块控制寄存器2(ADCTRL2)AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0; //在级联排序模式下,EVB启动转换使能不起作用

AdcRegs.ADCTRL2.bit.RST_SEQ1=1; //复位排序器1

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; //SEQ1中断使能,使能通过INT SEQ1向CPU发送中断请求

AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0; //选择SEQ1的中断模式,它会影响SEQ1排序转换结束时INT SEQ1的设置,为0表示在每个SEQ1序列结束时,INT SEQ1置位AdcRegs.ADCTRL2.bit.EV A_SOC_SEQ1=1; //SEQ1 EV A启动转换,即EV A的触发信号启动SEQ1

AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0; //SEQ1外部信号启动转换位,0表示没有影响

AdcRegs.ADCTRL2.bit.RST_SEQ2=0; //表示没有可执行操作

AdcRegs.ADCTRL2.bit.SOC_SEQ2=0; //清除没有处理的SOC触发信号

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0; //INT SEQ2向CPU发送中断请求被禁止AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0; //选择SEQ2的中断模式,它会影响SEQ2排序转换结束时INT SEQ2的设置,为0表示在每个SEQ2序列结束时,INT SEQ2置位AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0; //EVB的触发信号不能启动SEQ2

}

void InitGpio(void)

{

// Set GPIO A port pins,AL(Bits 7:0)(input)-AH(Bits 15:8) (output) 8bits

// Input Qualifier =0, none

EALLOW;

GpioMuxRegs.GPAMUX.all=0x000f;

GpioMuxRegs.GPADIR.all=0xf000;

GpioMuxRegs.GPAQUAL.all=0x0000; // Input qualifier disabled

// Set GPIO B port pins, configured as EVB signals

// Input Qualifier =0, none

// Set bits to 1 to configure peripherals signals on the pins

GpioMuxRegs.GPBMUX.all=0x003f;

GpioMuxRegs.GPBDIR.all=0xf000;

GpioMuxRegs.GPBQUAL.all=0x0000; // Input qualifier disabled

GpioMuxRegs.GPFMUX.bit.MDXA_GPIOF12=0; //确定GPIOF12为通用I/O引脚

GpioMuxRegs.GPFDIR.bit.GPIOF12=1; //方向为输出

GpioMuxRegs.GPFMUX.bit.MDRA_GPIOF13=0;

GpioMuxRegs.GPFDIR.bit.GPIOF13=1;

EDIS;

}

整车电量平衡计算

谈汽车电平衡的设计计算及验证方法 随着汽车电子电器技术的迅速发展,电器功能日益增多且复杂,对车辆舒适、智能和安全可靠性等要求的提高,整车电平衡的设计及验证尤显重要。整车电平衡是指发电机、蓄电池、整车用电器在一定时间内的电能产生与消耗达到稳定的一种平衡状态,是重要的整车性能指标。它体现了发电机的输出能力与整车用电需求的匹配关系,而不同的整车性能目标定义,对整车电平衡的性能要求也是不同的,所以需要有合适的汽车电平衡设计计算和验证方法。 本文主要结合试验数据,分析改进电平衡的设计计算方法;重点结合整车电平衡试验做出动态特性曲线,对电平衡理论计算结果进行验证。 1 汽车电平衡的设计方法 汽车电平衡的设计需要考虑发动机参数、整车用电器功率和使用频度等,图1为电平衡设计示意图,描述了电平衡关键零部件选型顺序和各关键零部件的影响因素。 2 关键零部件的计算选型 2.1起动机的选型 起动机的作用是起动发动机,一般需要起动机以大电流工作2~5s。发动机的起动特性决定了起动机的性能参数,发动机的起动特性参数包括起动转矩和起动转速。设定试验测定极限低温工况下的起动转矩为M0,起动转速为n0,由M0和n0可得出起动需求功率P0=M0×n0×2π/60。 根据传动比i和齿轮的啮合效率η(η通常为0.9),可计算出发动机起动过程中起动机的输出参数:转矩M1=M0/i,转速n1=n0×i,功率P1=P0/η。 起动机的输出功率会随温度而变化,再根据起动机温度系数修正出常温下起动机输出的转矩和功率,即可完成起动机的参数选择。

蓄电池最主要的作用是起动发动机,故其选型应先分析起动机(或发动机)的特性。蓄电池的低温起动电流应大于起动机输出特性曲线图上功率最大点对应的起动电流,以确保实现起动发动机,同时小于功率曲线与力矩曲线交点处对应的电流,在符合条件的蓄电池中选择容量较大者以增加起动发动机的可靠性。依此原则选择的蓄电池,不会因蓄电池容量选择过大出现浪费及蓄电池体积增大而影响整车 的装配空间及质量。 车辆在长途运输或长时停放后应能起动发动机,所以在蓄电池选型时,需考虑整车静态电流的验证。整车静态电流计算公式为I静=C20×(90%-65%-1‰×T)/(T×24)(1)式中:I静———整车静态电流;90%———下线时,蓄电池的实际容量与额定容量的百分比;65%———确保车辆正常起动的蓄电池最低实际电量与额定电量的百分比;1‰———蓄电池1天的自损耗率;T———储运时间;C20———蓄电池的20h率额定容量,Ah。最后,根据蓄电池的布置位置、车辆销售区域及主要用途等,微调蓄电池的参数。以奇瑞公司某在研车型M为例,根据发动机起动转矩和起动转速选择了1.3kW起动机。该起动机输出特性曲线如图2所示。 根据蓄电池选型方法,结合图2,选择蓄电池放电电流应为260~500A,符合条件的蓄电池容量为45Ah(冷起动电流为425A)和60Ah(冷起动电流为480A),可初选蓄电池的容量为60Ah。根据式(1)可知,若储运时间要求为45天,蓄电池容量为60Ah,得:I静=11.4mA,故整车静态电流须小于11.4mA。

汽车理论图形MATLAB程序

功率平衡图 m=1230;g=9.8; ig=[3.615 2.053 1.393 1.031 0.837]; i0=3.75; r=0.31;yt=0.9;f=0.017;CD=0.31;A=2.2; np=6000;Pemax=83; %绘制汽车驱动力与行驶阻力平衡图 for i=1:56; n=500:100:6000; Pe(i)=Pemax*(n(i)/np+(n(i)/np)^2-(n(i)/np)^3); Tq(i)=9549*Pe(i)/n(i); end for j=1:5 for i=1:56 Ft(i,j)=Tq(i)*ig(j)*i0*yt/r; ua(i,j)=0.377*r*n(i)/(ig(j)*i0); Fz(i,j)=m*g*f+CD*A*(ua(i,j)^2)/21.15; end end figure plot(ua,Ft,ua,Fz); title('汽车驱动力与行驶阻力平衡图'); xlabel('ua(km/h)'); ylabel('Ft(N)'); text(20,6700,'Ft1'); text(40,4000,'Ft2'); text(50,2800,'Ft3'); text(80,2000,'Ft4'); text(100,1600, 'Ft5'); text(100,800,'Ff+Fw'); for k=1:56; n=500:100:6000; Pe(k)=Pemax*(n(k)/np+(n(k)/np)^2-(n(k)/np)^3); Tq(k)=9549*Pe(k)/n(k); Ft(k)=Tq(k)*ig(4)*i0*yt/r; ua(k)=0.377*r*n(k)/(ig(4)*i0); Fz(k)=m*g*f+CD*A*(ua(k)^2)/21.15; E(k)=abs((Ft(k)-Fz(k))); end [Emin,kmin]=min(E); Umax=ua(kmin)

汽车功率半导体行业深度报告

汽车功率半导体行业深度报告

报告综述: 汽车功率半导体5年近7倍空间,IGBT最受益 政策支持、节能减排双重驱动,新能源汽车加速渗透,预计 2025 年国内新能源汽车渗透率将达到 20%,2030 年欧盟新能源汽车渗透率将达到 40%。汽车电动化趋势下车用功率半导体单车价值大幅提升。据英飞凌统计,功率半导体 ASP 将从传统燃油车的 71 美元大幅提升至全插混/纯电汽车的 330 美元,是传统燃油车的 4.6 倍。根据我们的测算,预计2025 年全球汽车功率半导体市场规模将达到 80 亿美元,2025 年全球新能源车用功率半导体市场规模将达到 53 亿美元,是 2020 年的 7.3 倍,年复合增速高达 48.8%,未来十年中美欧三地区新能源汽车充电桩用 IGBT 市场将有 94 亿美元增量空间。目前车用功率半导体中主要用到的是 IGBT 和 MOSFET,而 IGBT 在新能源车中是电驱系统主逆变器的核心器件,并可用于辅逆变电路、DC/DC 直流斩波电路、OBC(充电/逆变)等,单车价值达到 273 美元,占车用功率半导体 ASP 的 83%,是绝对大头。我们预计 2025 年全球新能源汽车 IGBT 市场规模将达到 44 亿美元,年复合增速约 48.8%,是电动化趋势下的汽车功率半导体中最受益品种。 产品、工艺、先发优势三大壁垒构筑强护城河 1)产品壁垒:车规级 IGBT 需具备使用寿命长、故障率低、抗震性高等严格要求,能适应“极热”“极冷”的高低温工况、粉尘、盐碱等恶劣的工况环境,承受频繁启停带来的电流频繁变化,对产品要求极高。2)工艺壁垒:车规级 IGBT 设计时需保证开通关断、抗短路和导通压降三者的平衡,参数优化特殊复杂。生产制造时薄片工艺容易碎裂、正面金属熔点限制导致退火温度控制难度大。此外,IGBT 模块封装的焊接和键合环节技术要求同样较高。3)认证周期长、替换成本高、具备经验曲线效应,行业先发优势明显。 a)车规级IGBT 需满足可靠性标准、质量管理标准、功能安全标准,才有资格进入一级汽车厂商的供应链,认证周期一般至少 2 年。b)由于 IGBT 模块是汽车中的关键部件,下游厂商出于安全性、可靠性的考虑,替换时往往呈谨慎态度,只有经过大量验证测试并通过综合评定后,才会做出大批量采购决策,替换成本高。c)IGBT 业务需要长期的经验积累才能达到良好的 know-how 水平。d)IGBT 行业属于资本密集型行业,生产、测试设备基本需要进口。此外,对 IGBT 生产企业的流动资金需求量也较大,新进入者在前期往往面临投入大、产出少的情况,需要较强的资金实力作后盾,才能持续进行产品的研发、生产和销售。综合来看,IGBT 行业中的先行企业具有明显的先发优势。 竞争格局优成为成长行业“优质赛道”,但当前国产化率仍然较低 据 Omdia 2019 年统计数据,全球 IGBT 模块前十大厂商占据了 76%份额,市场份额集

汽车理论课后题matlab程序

汽车理论课后题matlab程序

————————————————————————————————作者:————————————————————————————————日期: ?

1.3 n=600:1:4000; r=0.367; i0=5.83; eff=0.85; f=0.013; m=3880;g=9.8; G=m*g; CdA=2.77;a=1.947; hg=0.9;L=3.2; Iw1=1.798; Iw2=3.598; Iw=Iw1+Iw2; If=0.218; Ttq=-19.313+295.27*n/1000-165.44*(n/1000).^2+40.874*(n/1000).^3-3.8445*(n/1000).^4; %驱动力行驶阻力平衡图 for ig=[5.56,2.769,1.644,1.00,0.793] Ua=0.377*r*n/ig/i0; Ft=Ttq*ig*i0*eff/r; plot(Ua,Ft); hold on; end Ff=G*f; ua=0:0.1:max(Ua); Fw=CdA*ua.^2/21.15; plot(ua,(Ff+Fw)); title('驱动力-行驶阻力平衡图'); xlabel('Ua/(km/h)');ylab el('Ft/N'); gtext('Ft1'),gtext('Ft2'),gtext('Ft3'),gtext('Ft4'),gtext('Ft5'),gtext('Ff+Fw') [x,y]=ginput(1); disp('汽车的最高车速');disp(x);disp('km/h'); %最大爬坡度及最大爬坡度时的附着率 Ua=0.377*r*n/5.56/i0; Ft=Ttq*5.56*i0*eff/r; Fw=CdA*Ua.^2/21.15; i=tan(asin((Ft-(Ff+Fw))/G)); disp('汽车的最大爬坡度');disp(max(i)); C=max(i)/(a/L+hg/L*max(i)); disp('克服最大爬坡度时的附着率');disp(C); %加速度倒数曲线 figure; for ig=[5.56,2.769,1.644,1.00,0.793] Ua=0.377*r*n/ig/i0; q=1+Iw/(m*r^2)+If*ig^2*i0^2*eff/(m*r^2); Ft=Ttq*ig*i0*eff/r; Fw=CdA*Ua.^2/21.15; as=(Ft-(Ff+Fw))/q/m; plot(Ua,1./as); hold on; end axis([0 98 0 10]); title('行驶加速度倒数曲线');xlabel('Ua/(km/h)');ylabel('1/a'); gtext('1/a1'),gtext('1/a2'),gtext('1/a3'),gtext('1/a4'),gtext('1/

汽车理论习题

汽车理论习题: 1.3 1)绘制汽车驱动力与行驶阻力平衡图。 2)求汽车最高车速,最大爬坡度及克服该坡度时相应的附着率。 3)绘制汽车行驶加速度倒数曲线,用图解积分法求汽车用2档起步加速行驶至70km/h 的车速-时间曲线,或者用计算机求汽车用2档起步加速行驶至70km/h 的加速时间。 分析:本题主要考察知识点为汽车驱动力-行使阻力平衡图的应用和附着率的计算、等效坡度的概念。 应明确道路的概念:坡度的定义tan i α =。求最大爬坡度时可以对行使方程进行适当简化,可以简 化的内容包括两项cos 1α ≈和sin tan αα ≈,简化的前提是道路坡度角不大,当坡度角较大时简化带 来的误差会增大。计算时,要说明做了怎样的简化并对简化的合理性进行评估。 2)求最大爬坡度及克服该坡度时相应的附着率 ②求最大爬坡度: 0=dt du ,()w f t i F F F F +-= 一般汽车最大爬坡度约为30%左右,所以利用行驶方程确定最大爬坡度时应以G sin α作为坡度阻力,即 ()sin t f w G F F F α=-+,tan i α = ()??? ? ?? +-=G F F F i w f t arcsin tan 汽车最大爬坡度max i 为Ⅰ档时的最大爬坡度。利用编程计算可得,352.0max =i 。 ③如是前轮驱动,1?C = q b hg q L L -;相应的附着率1?C 为1.20,不合理,舍去。 如是后轮驱动,2?C = q a hg q L L +;相应的附着率2?C 为0.50。 3)绘制汽车行驶加速度倒数曲线,求加速时间 因各档加速度倒数曲线并无交点,所以从二档开始直接积分即可。 常见错误是未将车速的单位进行换算,时间大3.6倍。 1.7确定上述F.F 轿车在φ=0.2及0.7路面上的附着力,并求由附着力所决定的极限最高车速与极限最大爬坡度及极限最大加速度(在求最大爬坡度和最大加速度时可设Fw=0)。 (1)求极限最高车速的求解可根据汽车行驶方程得到。 2 W max F 21.15 D a C A u = 具体方法有两个,一是根据地面作用于驱动轮的地面切向反作用力的表达式(1-15),由附着系数得到最大附着力,滚动阻力已知,即可求得最高车速时的空气阻力和最高车速。 X1W f2i j'F =F +F F F ++ (1-15) X11z1F =F F ??=

汽车理论汽车设计课程设计说明书

湖北汽车工业学院 Hubei Automotive Industries Institute 课程设计说明书 课程名称汽车理论 设计题目汽车动力性 班号专业车辆工程学号 学生姓名 指导教师(签字) 起止日期 2011 年 7 月 4 日—— 2011 年 7 月 9 日

目录 1.设计任务及要求.........................................1 2.车辆参数 (2) 3.汽车动力性能计算............. ..... ................... 3.1驱动力-行驶阻力平衡图...................... 3.2最高转速Uamax....................... 3.3加速时间t............................... 3.4汽车加速度倒数图............................... 3.5汽车加速时间图............................... 3.6汽车爬坡度图............................... 3.7汽车动力特性图................................ 3.8汽车功率平衡图.................................. 4.GUI界面设计........................................ 5.归纳与总结........................................ 6.参考文献......................................

1.5 汽车的功率平衡

1.5 汽车的功率平衡 汽车行驶时,不仅存在驱动力与行驶阻力的平衡关系,而且也存在发动机功率和汽车行驶的阻力功率间的平衡关系。即发动机发出的有效功率,始终等于机械传动损失与全部运动阻力所消耗的功率。 1.5.1 功率平衡方程 汽车运动阻力所消耗的功率,有滚动阻力功率、空气阻力功率、坡度阻力功率及加速阻力功率,它们的表达式为 f P W P i P j P 3600cos 10006.3a a f f u Gf u F P α=×= 3600 sin 3600a a i i u G u F P α== 7614036003a D a W W Au C u F P == dt du g Gu u F P a a j j 36003600δ== 功率平衡方程为 )(11 j i W f T T e P P P P P P +++==∑ηη 即 2(cos sin 360021.15a D e T u C Au P Gf G m dt ααδη=+++)a du 当α较小时,i ≈αsin ,1cos ≈α,上式可写成 )15.21(36002dt du g G Au C Gi Gf u P a D T a e δη+++= 1.5.2 功率平衡图及其应用 汽车的功率平衡关系也可以用图解法表示。以纵坐标表示 功率,横坐标表示车速,将发动机功率、汽车经常遇到的 阻力功率e P )(1 W f T P P +η,对应于车速的关系曲线绘在坐标图 上,即得到汽车功率平衡图。图1-20是一紧凑型国产轿车的 功率平衡图。 e P a u ?,可根据发动 发动机功率与行驶车速的关系曲线

机外特性及公式0 0.377a g nr u i i =将发动机转速转换成车速绘得。可见在不同挡位时,功率的大小不变,只是各挡发动机功率曲线所对应的车速位置不同,且低挡时车速低,所占速度变化区域窄;高挡时车速高,所占变化区域宽。 f P 在低速范围内为一直线,在高速时由于滚动阻力系数f 随车速而增大,且比更快的速率加大;而 则是的三次函数。两者叠加后,阻力功率曲线是一条斜率越来越大的曲线。它与挡位无关,只与车速有关,所以高速时,汽车主要克服空气阻力功率。 a u a u W a P max a P u 图1-20中发动机功率曲线(V 挡)与阻力功率曲线相交点处对应的车速便是在良好水平路面上汽车的最高车速。该轿车的V 挡是经济挡位,其发动机最大功率相对应的车速大于u ,所以用该挡行驶时发动机负荷率高,燃油消耗量低。 max a u u 汽车达最高车速时,0j =,0=i ,则 )(1 W f T e P P P +=η 当汽车在良好水平路而上以的速度等速行驶时,汽车的阻力功率为 a u ′1()f w T P P b ηc += 此时,驾驶员给出某一节气门的开度,发动机功率曲线如图中虚线所示,以维持汽车等速行驶。 但是发动机在汽车行驶速度为u a ′时能发出的功率为e P ac = (图1-20),于是 1()e f w T P P P ac bc ηab ? +=?= 可用来加速或爬坡。 我们称1 (e f T )w P η?+P P 为汽车的后备功率。 就是说,在一般情况下维持汽车等速行驶所需的发动机功率并不 大,发动机节气门开度较小。当需要爬坡或加速时,驾驶 员加大节气门开度,使汽车的全部或部分后备功率发挥作

(完整版)汽车理论习题Matlab程序

1.3 确定一轻型货车的动力性能(货车可装用4挡或5挡变速器,任选 其中的一种进行整车性能计算): 1)绘制汽车驱动力与行驶阻力平衡图。 2)求汽车最高车速,最大爬坡度及克服该坡度时相应的附着率。 3)绘制汽车行驶加速度倒数曲线,用图解积分法求汽车用2档起步加速行驶至70km/h 的车速-时间曲线,或者用计算机求汽车用2档起步加速行驶至70km/h 的加速时间。 轻型货车的有关数据: 汽油发动机使用外特性的Tq-n 曲线的拟合公式为 234 19.313295.27()165.44()40.874() 3.8445()1000100010001000 q n n n n T =-+-+- 式中,Tq 为发动机转矩(N?m );n 为发动机转速(r/min )。 发动机的最低转速n min =600r/min,最高转速n max =4000r/min 。 装载质量 2000kg 整车整备质量 1800kg 总质量 3880kg 车轮半径 0.367m 传动系机械效率 ηt =0.85 滚动阻力系数 f =0.013 空气阻力系数×迎风面积 C D A =2.77m 2 主减速器传动比 i 0=5.83 飞轮转动惯量 I f =0.218kg?m 2 二前轮转动惯量 I w1=1.798kg?m 2 四后轮转动惯量 I w2=3.598kg?m 2 质心至前轴距离(满载) a=1.974m 质心高(满载) hg=0.9m 解:Matlab 程序: (1) 求汽车驱动力与行驶阻力平衡图和汽车最高车速程序: n=[600:10:4000]; Tq=-19.313+295.27*(n/1000)-165.44*(n/1000).^2+40.874*(n/1000).^3-3.8445*(n/1000).^4; m=3880;g=9.8;nmin=600;nmax=4000; G=m*g; ig=[5.56 2.769 1.644 1.00 0.793];nT=0.85;r=0.367;f=0.013;CDA=2.77;i0=5.83; L=3.2;a=1.947;hg=0.9;If=0.218;Iw1=1.798;Iw2=3.598; Ft1=Tq*ig(1)*i0*nT/r; Ft2=Tq*ig(2)*i0*nT/r; Ft3=Tq*ig(3)*i0*nT/r;

汽车理论课后习题Matlab程序详解

陕西理工学院 杨飞华 1 / 34 1.3 确定一轻型货车的动力性能(货车可装用4挡或5挡变速器,任选 其中的一种进行整车性能计算): 1)绘制汽车驱动力与行驶阻力平衡图。 2)求汽车最高车速,最大爬坡度及克服该坡度时相应的附着率。 3)绘制汽车行驶加速度倒数曲线,用图解积分法求汽车用2档起步加速行 驶至70km/h的车速-时间曲线,或者用计算机求汽车用2档起步加速行驶至 70km/h的加速时间。 轻型货车的有关数据: 汽油发动机使用外特性的Tq-n曲线的拟合公式为23419.313295.27()165.44()40.874()3.8445() 1000100010001000qnnnn T=?+?+? 式中, Tq为发动机转矩(N?m);n为发动机转速(r/min)。发动机的最低转速nmin=600r/min,最高转速nmax=4000r/min。装载质量 2000kg 整车整备质量1800kg 总质量3880kg 车轮半径0.367m 传动系机械效率εt=0.85 滚动阻力系数 f=0.013 空气阻力系数×迎风面积CDA=2.77m2 主减速器传动比i0=5.83 飞轮转动惯量 If=0.218kg?m2 二前轮转动惯量Iw1=1.798kg?m2 四后轮转动惯量 Iw2=3.598kg?m2 变速器传动比 ig(数据如下表) Ⅰ档Ⅱ档Ⅲ档Ⅳ档Ⅴ档四档变速器 6.09 3.09 1.71 1.00 - 五档变速器 5.56 2.769 1.644 1.00 0.793 轴距 L=3.2m 质心至前轴距

离(满载)a=1.974m 质心高(满载)hg=0.9m 解:Matlab程序:(1) 求汽车驱动力与行驶阻力平衡图和汽车最高车速程序:n=[600:10:4000]; Tq=-19.313+295.27*(n/1000)-165.44*(n/1000).^2+40.874*(n/1000).^3-3.8445*(n/10 00).^4; m=3880;g=9.8;nmin=600;nmax=4000; G=m*g; ig=[5.56 2.769 1.644 1.00 0.793];nT=0.85;r=0.367;f=0.013;CDA=2.77;i0=5.83; L=3.2;a=1.947;hg=0.9;If=0.218;Iw1=1.798;Iw2=3.598; Ft1=Tq*ig(1)*i0*nT/r; Ft2=Tq*ig(2)*i0*nT/r; Ft3=Tq*ig(3)*i0*nT/r; 2 / 34 Ft4=Tq*ig(4)*i0*nT/r; Ft5=Tq*ig(5)*i0*nT/r; ua1=0.377*r*n/ig(1)/i0; ua2=0.377*r*n/ig(2)/i0; ua3=0.377*r*n/ig(3)/i0; ua4=0.377*r*n/ig(4)/i0; ua5=0.377*r*n/ig(5)/i0; ua=[0:5:120]; Ff=G*f;

汽车动力性计算matlab程序

%% 汽车动力性计算(自己编的动力性计算程序,供大家计算动力性时参考,具体参数大家根据所 给程序对应输入,并对坐标轴数值按需要进行修改) clc; clear; close all; %%根据所给发动机数据拟合外特性曲线(发动机数据按照你所得到的数据进行输入) n_test=[500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200]; T_test=[975 1108 1298 1496 1546 1620 1670 1785 1974 1974 1970 1889 1829 1748 1669 1700 1524 1105]; figure(1) plot(n_test,T_test,'g'); hold on grid on %p=polyfit(n_test,T_test,7); p=polyfit(n_test,T_test,2); n=[450:1:2200]; Ttq=polyval(p,n); plot(n,Ttq,'k'); xlabel('发动机转速n(r/min)'); ylabel('发动机转矩Ttq(N*m)'); title('发动机转矩曲线'); legend('测试曲线','拟合曲线'); %%所给车型动力总成相关参数 ig=[3.07 2.16 1.48 1.0 0.82]; i0=4.0; eta=0.78; r=0.57; M=25000; g=9.8; c=1.5; f0=0.01; f1=0.0002; f4=0.0005; CD=1; A=8;Iw=3.6;If=0.04; %% 发动机外特性曲线图 figure(2) hold on grid on for i=length(n); Pe=Ttq.*n/9550; end [AX,H1,H2]=plotyy(n,Ttq,n,Pe); xlabel('发动机转速n(r/min)'); ylabel('发动机转矩Ttq(N*m)'); ylabel(AX(2),'发动机功率Pe(Kw)'); title('发动机外特性曲线'); %% 各挡位速度曲线 %计算各挡位车速

汽车功率解释

发动机功率 发动机功率是指发动机做功的快慢。 发动机单位时间内所做的功叫做这发动机的功率。 符号为:P 常用单位为:w(瓦特) 发动机的功率并不等于车子的功率,在机械传动中,功率会有中间损失。另外,出于安全考虑而把车身加厚加重的设计,也会导致发动机功率的损失。所以,装有小排量发动机的车子并不一定就比装载大功率发动机的车子慢或者性能差。 比功率和比扭矩当然是越大越好,说明动力储备充足,但是车子如果加了必须的、豪华的配置而使其数值降低,并不能说明更多的问题。 在同等排量的情况下,功率当然是越大越好,有些车厂采用先进的技术,比如进气门行程控制、EGR、5气门等,功率的提升是必然的,但同时,这意味着发动机成本的增加。厂家为某个车型选配的发动机,其实是在动力性、经济性、排放和成本间找一个平衡点,而不仅仅是更大的功率和更高的扭矩,有时为了成本,甚至可以牺牲掉拥有更大功率的发动机。 发动机的功率大了,燃油消耗肯定会高,排放污染也会增加,对于消费者和环境而言,盲目追求马力或者功率是片面的。国内和国外的一些车型之所以能够为消费者提供很大的价格区间,其实是厂家做了各种各样的发动机、变速箱、动力系统和电器系统的匹配才达到的。但装配了好的发动机(功率大,而并不一定是排量大),车的价格就会明显上升。 扭矩和功率一样,是汽车发动机的主要指数之一,它反映在汽车性能上,包括加速度、爬坡能力以及悬挂等。它的准确定义是:活塞在汽缸里的往复运动,往复一次做有一定的功,它的单位是牛顿。在每个单位距离所做的功就是扭矩了。是这样的,扭矩是衡量一个汽车发动机好坏的重要标准,一辆车扭矩的大小与发动机的功率成正比。举个通俗的例子,比如,像人的身体在运动时一样,功率就像是身体的耐久度,而扭矩是身体的爆发力。对于家用轿车而言,扭矩越大加速性越好;对于越野车,扭矩越大其爬坡度越大;对于货车而言,扭矩越大车拉的重量越大。在排量相同的情况下,扭矩越大说明发动机越好。在开车的时候就会感觉车子随心所欲,想加速就可加速,“贴背感”很好。现在评价一款车有一个重要数据,就是该车在0-100公里/小时的加速时间。而这个加速时间就取决于汽车发动机的扭矩。一般来讲,扭矩的最高指数在汽车2000-4000/分的转速下能够达到,就说明这款车的发动机工艺较好,力量也好。有些汽车在5000/分的转速左右才达到该车扭矩的最高指数,这说明“力量”就不是此车所长。 首先谈谈马力。我们知道,马力表示的是功率,也就是单位时间内做功的多少。如果用N表示功率,N=W/t,其中W是功,t是时间。而功可以用力与位移的乘积来表示。就是我们熟悉的物理公式:W=FScosa 其中F表示力,S表示位移,而a是力的方向与位移方向之间的夹角。在研究汽车发动机活塞做功时,主要讨论F和S对W的影响。 在发动机中,F是与活塞面积和气缸内压强相关的。F=PA,P是气缸内的压强,燃料燃烧产生的压强越大,F就越大;A是活塞顶的面积,我们都知道计算圆面积的公式:A=3.14159D2/4(其中D是缸径)。因此,缸径越大,A就越大,从而F就越大。而S是活塞的行程,也就是活塞往复运动的位移,等于从上止点运动到下止点所经过的距离。S越大,W就越大。 功率是单位时间内做功的多少,所以还要考虑做功的快慢。同样缸径和行程的发动机,如果转速不同,马力也是不同的。转速快的马力大。 就是说,衡量发动机马力的主要因素有四个、气缸压强、活塞截面积、活塞行程和发动机转速。其中活塞截面积与行程与我们熟悉的名词"排量"直接相关。活塞截面积与行程的乘积AS是一个缸的排量,如果发动机有n个相同的气缸,它的排量就是nAS。 扭矩表示使物体加速转动的能力。一般来讲,汽车发动机的马力大通常扭矩也大。如果用扭矩来表示

用matlab绘制汽车功率平衡图

用matlab绘制汽车功率平衡图 n=600:10:4000; Tq=-19.313+295.27*(n/1000)-165.44*(n/1000).^2+40.874*(n/1000).^3-3.8445 *(n/1000).^4; m=3880;g=9.8; nmin=600;nmax=4000; G=m*g; ig=[5.56 2.769 1.644 1.00 0.793]; nT=0.85;r=0.367; f=0.013;CDA=2.77;i0=5.83; L=3.2;a=1.947;hg=0.9; If=0.218;Iw1=1.798;Iw2=3.598; ua1=0.377*r*n/ig(1)/i0; ua2=0.377*r*n/ig(2)/i0; ua3=0.377*r*n/ig(3)/i0; ua4=0.377*r*n/ig(4)/i0; ua5=0.377*r*n/ig(5)/i0; Ft1=Tq*ig(1)*i0*nT/r; Ft2=Tq*ig(2)*i0*nT/r; Ft3=Tq*ig(3)*i0*nT/r; Ft4=Tq*ig(4)*i0*nT/r; Ft5=Tq*ig(5)*i0*nT/r; Pe1=Ft1.*ua1/3600; Pe2=Ft2.*ua2/3600; Pe3=Ft3.*ua3/3600; Pe4=Ft4.*ua4/3600; Pe5=Ft5.*ua5/3600; ua=0:5:120; Pf=G*f.*ua/3600; Pw=CDA.*ua.^3/76140; Pz=(Pf+Pw)/nT; Pe=max(Pe1); plot(ua1,Pe1,ua2,Pe2,ua3,Pe3,ua4,Pe4,ua5,Pe5,ua,Pz,ua,Pe); title('汽车功率平衡图'); xlabel('ua/(km*h^-1)'); ylabel('Pe/kw'); gtext('¢?'),gtext('¢ò'),gtext('¢ó'),gtext('¢?'),gtext('¢?'),gtext('(Pf+ Pw)/nT'),gtext('Pe');

汽车理论

汽车的动力性是指汽车在良好路面上直线行驶时,由汽车受到的纵向外力决定的、所能达到的平均行驶速度。汽车是一种高效率的运输工具,运输效率之高低很大程度上取决于汽车的动力性。所以,动力性是汽车各种性能中最基本最重要的性能。 1.1节 汽车动力性指标 从获得尽可能高的平均行驶速度的观点出发,汽车的动力性主要有以下三个评价指标。 汽车的最高车速m ax a u 汽车的最大爬坡度i 汽车的加速时间t 2 j i W f t F F F F F +++= dt du m G Au C Gf r i i T a D T g tq δααη+++=sin 15.21cos 2 =t F ∑F 3 汽车的驱动力 在汽车行驶中,发动机发出的有效转矩tq T ,经变速器、传动轴、主减速器等后,由半轴传给驱动车轮。如果变速器传动比为g i 、主减速比为0i 、传动系的机械效率为T η,则传到驱动轮上的转矩t T ,即驱动力矩为 T g tq t i i T T η0= 此时作用于驱动轮上的转矩t T ,产生对地面的圆周力0F ,则地面对驱动轮的反作用力t F ,即为汽车驱动力。如果驱动车轮的滚动半径为r ,就有r T F t t /=,因而,汽车驱动力为 图1.1汽车的驱动力 r i i T F T g tq t η0= (1.1)

4. 汽车的行驶阻力 汽车在水平道路上等速行驶时必须克服来自地面的滚动阻力f F 和来自空气的空气阻力 W F ;当汽车在坡道上上坡行驶时,还必须克服 图1.3 汽车驱动力图 重力沿坡道的分力,即坡度阻力i F ;另外汽车加速 行驶时还需要克服的阻力即加速阻力j F 。因此汽车行驶的总阻力为 ∑=F f F +w F +i F +j F 滚动阻力 2 空气阻力 3 坡度阻力 4 加速阻力 5汽车行驶时,车轮与地面在接触区域的径向、切向和侧向均产生相互作用力,轮胎与地面亦存在相应的变形。无论是轮胎还是地面,其变形过程必然伴随着一定的能量损失。这些能量损失是使车轮转动时产生滚动阻力的根本原因。 滚动阻力系数的影响因素 滚动阻力系数与路面种类及其状态、车速及轮胎等有关,其数值通过实验确定。 1)路面种类及其状态对滚动阻力系数的影响 2)轮胎的结构和材质对滚动阻力系数的影响 3)汽车行驶速度对滚动阻力系数的影响 4)轮胎气压对滚动阻力系数的影响 6 图1.13 汽车驱动力—行驶阻力平衡图 最高车速 汽车的最高车速是指汽车在无风的条件下,在水平、良好的路面上,节流阀全开,变速器置于最高档所能达到的车速。 根据汽车行驶方程j i W f t F F F F F +++= 此时,0=i F ,0=j F ,W f t F F F +=,即驱动力-行驶阻力平衡图上t F 曲线(此时为最高档驱动力曲线5t F )与W f F F +曲线的交点对应的车速,就是最高车速(图中为175km/h )。 从图中还可以看出,当车速低于最高车速时,驱动力大于行驶阻力,这样,汽车就可以利用剩下来的驱动力加速或爬坡,或牵引挂车。当需要在低于最高车速的某一车速(如160km/h)

汽车电器系统的电量平衡

汽车电器系统的电量平衡,是指汽车发电机、蓄电池和其他各种用电设备之间电能产生和消耗的相互制约关系。 蓄电池与起动机、发电机及整车电器是一个电能供需关联系统。蓄电池的主要作用是向起动机供电;发电机是汽车上的主要电源装置,除在正常运行状态下应保证整车电器(除起动机外)的用电量外,还要向蓄电池补充电量。所以,合理地选择蓄电池的容量、发电机的输出功率是保证整车供电与用电平衡的必要条件。 研究汽车电器系统电量平衡的目的是:对起动机最大输出功率与蓄电池容量优化匹配,既能够保证车辆在我国任何地区环境温度条件下可以正常起动,同时又能够降低蓄电池成本和消耗量;对发电机有效输出功率与整车电器(除起动机外)耗电量优化匹配,既能够保证蓄电池正常充放电工作,延长发电机和蓄电池的寿命,又能够降低发电机成本和油耗量。 下文以中兴一款汽油车为例,说明如何通过整车电量平衡计算来选取交流发电机和蓄电池,以保证整车电量平衡。 1 交流发电机的选用原则 发电机功率的选择,应保证供给用电设备电能和满足蓄电池充电的要求。选用时应遵循以下原则。 1)发电机热态最大输出电流应大于整车综合工况下总电流的1.2倍。 2)常用行驶速度(40km/h)时,发电机输出电流大于极限工况(夏季雨夜)最大电流,并保证6A以上的充电电流。 3)怠速时,发电机输出电流大于白天怠速常用工况的电流。 4)怠速极限工况时,发电机的发电量大于此时用电量。如果发电机发电量不满足要求,则以极限用电2h、蓄电池容量保证75%为原则计算。 2 整车主要工况的用电量计算 保证整个电器系统的输入与输出总电量的动态平衡,首先要计算整车用电量。整车用电量计算存在多种工况:综合工况、极限工况(夏季雨夜)、怠速常用工况和怠速极限工况。各工况下整车用电量如表1所示。总电负荷If由以下公式计算。

汽车总体设计、计算参数

汽车总体设计、计算参数 汽车总体设计、计算参数 一、外形尺寸参数 1、轴距L 2、前后轮距B1与B2 3、汽车的外廓尺寸 总长、总宽、总高 GB 1589-79 4、汽车的前悬LF和后悬LR 由总布置最后确定(保证足够的接近角和离去角) (前悬处要布置发动机、水箱、弹簧前支架、保险杠、转向器等) 二、质量参数 1、汽车的装载量mG 轿车是指载客量,即座位数。 2、汽车的整备质量m0 总体设计初,可对同类型同级别且结构相似的样车及部件的质量进行测定分析,并以此为基础初步估算出新设计车个部件的质量及整车整备质量。 (亦可按照人均汽车整备质量的统计值来估算(人均整备质量/t)) 普通轿车0.18~0.24 中级轿车0.21~0.29 中高级轿车0.29~0.34 3、汽车的总质量ma 整备质量、载客量、行李质量mB、附加设备mF (每人按65kg计,行李质量(轿车)每人5~10kg) 4、轴荷分配 它对汽车的牵引性、通过性、制动性、操纵性和稳定性等主要使用性能以及轮胎的使用寿命都有很大影响。 轴荷分配对前后轮胎的磨损有直接影响。 三、主要性能参数 1、汽车动力性参数 汽车的动力性参数主要有直接档和I档最大动力因数、最高车速、加速时间、汽车的比功率和比转矩等。 1)直接档最大动力因数D0 max 2)I档最大动力因数DI max DI max直接影响汽车的最大爬坡能力和通过困难路段的能力以及起步并连续换档时的加速能力。它主要取决于所要求的最大爬坡度和附着条件。 3)最高车速Va max 以汽车行驶的功率平衡来确定。 GB/T 12544-90 汽车最高车速试验方法 4)汽车的比功率和比转矩 这两个参数分别表示发动机最大功率和最大转矩与汽车总质量之比。 5)加速时间 “0—100km/h”或“0—80km/h”的换档加速时间。 GB/T 12543-90汽车加速性能试验方法 表一常见轿车的动力性参数范围

功率平衡法测试汽车的滚动阻力系数

功率平衡法测试汽车的滚动阻力系数* 周锋尹权许爱民姚凡周小舒 摘要分析了用滑行试验等方法测试汽车滚动阻力系数存在的问题;论述了功率平衡法测试汽车滚动阻力系数的原理,并提供了用功率平衡法测试汽车行驶工况滚动阻力系数f值的实例. 关键词汽车;滚动阻力系数;测试;功率平衡法 中图资料分类号U 461.1 DETERMINATION OF ROLLING RESISTANCE COEFFICIENT OF AUTOMOBILES BY POWER BALANCE METHOD Zhou Feng Yin Xiquan Xu Aimin Yao Xifan Zhou Xiaoxu (College of Traffic and Communication, South China Univ. of Tech., Guangzhou510640) Abstract This paper deals with the trouble and principle to determine, by power balancing method, the rolling resistance coefficients of running automobiles in sliding test, together with an illustrative determination of rolling resistance coefficient of running automobiles. Key words automobile; rolling resistance coefficient; test; power balance method 汽车滚动阻力系数f值的大小,标志着汽车行驶中滚动阻力的大小.汽车行驶中的滚动阻力,对汽车燃油消耗和轮胎使用寿命关系极大,甚至对汽车其他使用性能也有较大影响. 汽车装用充气轮胎,其滚动阻力系数f值的大小受诸多因素影响.影响较大的因素有:轮胎结构与类型、胎内充气压力、车轮工况(从动工况或驱动工况)、汽车转向系统、汽车行走系统以及路面材质、路面粗糙度和汽车行驶速度等. 本文介绍一种测试汽车按要求车速(可任意设定汽车能达到的某一车速)行驶在给定路面上的滚动阻力系数f值的方法,即功率平衡法.此法可按研究要求路况和车速来测试车辆不同技术状况时的滚动阻力系数f值.其测试在行驶工况下进行,影响因素可排除,测试结果真实,测试精度高,而且操作方便,测试费用少.一般汽车行业的工程技术人员均能采用功率平衡法对各地区选择测试路段进行汽车滚动阻力系数f值的测定(该方法已向中华人民共和国专利局申报发明专利,申请号:98118255.0). 1传统方法测试汽车滚动阻力系数存在的问题 对汽车滚动阻力系数的研究受到测试方法的制约.至今,使用的传统汽车滚动阻力系数测试方法有牵引法和滑行法.这两种方法均是在未能测试汽车真实行驶工况的滚动阻力系数时而采用的不准确的近似方法. (1)滑行法测试 滑行法测试汽车的滚动阻力系数时,被测试车辆靠惯性从某一初速度开始滑行直至停止状态,滑行时所有车轮均处于从动工况,这与车辆自行驱动行驶工况有着根本的区别.同时,车辆滑行过程中影响因素较多,且车速是从被认定的某一初速度至车速为零这一区间变化的.对于较高车速时的滚动阻力系数,用滑行法根本无法测定.显然,滑行法测试汽车的滚动阻力系数是一种极不准确的方法. (2)牵引法测试 牵引法测试汽车的滚动阻力系数时,因被测车辆处于被牵引工况,此时驱动车轮也处于从动工况,这与车辆自行驱动行驶的工况也有着根本的区别.同时,空气阻力的影响无法消除,且不可能以任一要求的车速进行牵引测试.牵引法测汽车滚动阻力系数也是一种极不准确的方法.

VB绘制汽车驱动力与行驶阻力平衡图,汽车功率平衡图。

3.2 实验记录(核心代码及调试过程) 1.核心代码: '.............驱动力与行驶阻力平衡图 Private Sub Command1_Click() Picture1.DrawWidth = 1 Picture1.Cls Dim i, j, n As Integer Dim Ft, Ff, Fw, Umax, Uumax As Single Picture1.Scale (-20, 18000)-(150, -2000) Picture1.Line (0, 0)-(125, 0): Picture1.Line (0, 0)-(0, 16000) Picture1.CurrentX = 125: Picture1.CurrentY = -300: Picture1.Print "Ua(km/h)" Picture1.CurrentX = 125: Picture1.CurrentY = 192: Picture1.Print "→" Picture1.CurrentX = 5: Picture1.CurrentY = 16000: Picture1.Print "F/N" Picture1.CurrentX = -2: Picture1.CurrentY = 16000: Picture1.Print "↑" Picture1.CurrentX = -5: Picture1.CurrentY = -1: Picture1.Print "0" For i = 20 To 120 Step 20 Picture1.Line (i, 0)-(i, 200) Picture1.CurrentX = i - 5: Picture1.CurrentY = -10: Picture1.Print i Next i For i = 1000 To 15000 Step 1000 Picture1.Line (0, i)-(1.5, i) Picture1.CurrentX = -15: Picture1.CurrentY = i + 50: Picture1.Print i Next i Picture1.DrawWidth = 2 For n = 600 To 4000 Tq = -19.313 + 295.27 * (n / 1000) - 165.44 * (n / 1000) ^ 2 + 40.874 * (n / 1000) ^ 3 - 3.8445 * (n / 1000) ^ 4 For j = 1 To 5 Ft = Tq * i0 * ηt * x(j) / r

相关文档
最新文档