electronic automotive motor control system

18
Electronic Automotive Motor Control System Software Description Viking 32

Upload: upton

Post on 21-Mar-2016

58 views

Category:

Documents


6 download

DESCRIPTION

Electronic Automotive Motor Control System. Software Description. Viking 32. Kernel Selection and Task Design. Kernel – Micro C/OSII. Micro C/OSII was selected for its flexibility and OS services Queues Memory Partitions Mutual exclusions. Task/ISR Description. Task/ISR Specs. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Electronic Automotive Motor Control System

Electronic Automotive Motor Control System

Software Description

Viking 32

Page 2: Electronic Automotive Motor Control System

Kernel Selection and Task Design

• Kernel – Micro C/OSIIMicro C/OSII was selected for its flexibility and OS services1. Queues2. Memory Partitions3. Mutual exclusions

Page 3: Electronic Automotive Motor Control System

Task/ISR DescriptionTask and Discription Period Type

EctInCap0ISR – Measures time in between motor speed sensor pulses, 90 pulses per revolution. Sporadic

EctInCap1ISR – Measures time in between axle speed sensor pulses, 66 pulses per revolution. Sporadic

EctOverFlowISR – Handles counter wraparound for input captures above. Periodic

StartTask – Initializes all tasks listed below, Shifter Port, and Port A I/O Run Once

Can0BusTask – Initializes and monitors CAN bus Periodic

Can0RxTask – Receives and queues CAN frames Periodic

EctRpmTask – Measures and Calculates motor and axle RPMs Periodic

InputTask – Accumulates all input data from the sensors, then puts them into a queue Periodic

CalcDataTask – Reads from two input queues, calculates data for all outputs, outputs to UITask via three output queues

Periodic

UITask – Reads from three queues, writes data to SCI port using VT100. Continuous

Page 4: Electronic Automotive Motor Control System

Task/ISR Specs.# TASK / ISRs PRIORITY Period

Type Tp-ave Tp-pk Tex Lave Lpk

1 EctInCap0ISR ISR 0 Sporadic 55.56μs 27.78μs 3.08μs 0.055 0.111

2 EctInCap1ISR ISR 1 Sporadic 727.26μs 363.63μs 3.08μs 0.004 0.0085

3 EctOverFlowISR ISR 2 Periodic 2.72ms 2.72ms 6.53μs 0.0024 0.0024

4 StartTask 4 Run Once -- -- -- -- --

5 Can0BusTask 5 Periodic 100ms 100ms 10μs 0.0001 0.0001

6 Can0RxTask 6 Periodic 10ms 10ms 1.78μs 0.0002 0.0002

7 EctRpmTask 8 Periodic 10ms 10ms 39.2μs 0.004 0.004

8 InputTask 9 Periodic 50ms 50ms 131.2μs 0.0026 0.0026

9 CalcDataTask 10 Periodic 50ms 50ms 70μs 0.0014 0.0014

10 UITask 11 Continuous -- -- -- -- --

Total CPU Load 0.070 0.130

Page 5: Electronic Automotive Motor Control System

CAN Bus LoadSender Message Type Tframe period Tframe exec Lbus

UQM Inverter Elec Drive State Status 100ms 540μs 0.0054

UQM Inverter Elec Drive Temp Status 1000ms 540μs 0.00054

UQM Inverter Can Watch Dog Status 500ms 540μs 0.00108

EAMCS Torque/Speed Command 50ms 540μs 0.0108

Total Bus Load 0.0178

Page 6: Electronic Automotive Motor Control System

Modules and Descriptions• EAMCS – Main program. Integrates all modules listed below into motor

control system.

• AtoD – Initialization and analog to digital conversions.

• CAN – Initialization, Transmission, and Reception of data over the Controller Area Network.

• eamcs_display – Formats and updates data for the User Interface.

• BasicIO – Initializes the SCI port, formats, transmits, and receives ASCII data

• ECT – Handles input captures and RPM calculations.

• PWM – Initialization, sets pulse width modulation

Page 7: Electronic Automotive Motor Control System

EAMCS.c

Code Reuse: BasicIO Module

Modifications: Baud = 19200

Port = SCI1

TASKS:

StartTask

Can0BusTask

Can0RxTask

InputTask

CalcDataTask

UITask

Page 8: Electronic Automotive Motor Control System

AtoD.c

Public Functions:void AtoDInitSingle(void)INT16U AtoDReadSingle(INT8U port)

Code Reuse: None

Page 9: Electronic Automotive Motor Control System

CAN.cPublic Functions:INT8U Can0Enable(void);void Can0Timing(void);void Can0Filter(INT8U id_ac_mode, INT8U *filter1, INT8U *filter2)void Can0Mask(INT8U *mask1, INT8U *mask2)INT8U Can0Rx(CAN_DATA *rx_data)INT8U Can0Tx(CAN_DATA *tx_data)void Can0IdFormat(INT8U *can_id)

Code Reuse: None

INT8U Can0BusStatus(void)

void Can0BusOffReq(void)

void Can0TxRxReq(void)

void Can0SleepReq(void)

Page 10: Electronic Automotive Motor Control System

eamcs_display.cPublic Functionsvoid DispConditions(void)void DispAccelVolt(INT16U acc_volt)void DispBrakeVolt(INT16U brake_volt)void DispShiftPos(INT8U s_pos)void DispGearPos(INT16U g_pos)void DispMotorRpm(INT16U m_rpm_val)void DispAxleRpm(INT16U a_rpm_val)void DispFaultBit(INT8U fault_bit)void DispEnableBit(INT8U enable_bit)void DispReqGearPos(INT8U req_gear_pos)void DispCanMotorRpmRx(INT16U m_rpm_val)void DispCanTorqueRx(INT8U torque_val)void DispCanBusVoltRx(INT8U bus_volt_val)void DispCanBusCurrentRx(INT8U bus_cur_val)void DispCanInverterTempRx(INT8U temp_val)void DispCanRotorTempRx(INT8U rotor_val)void DispCanStatorTempRx(INT8U stator_val)void DispCanWatchDogRx(INT8U comm_err, INT8U wtch_dg_err)void DispCanReqSpeedTx(INT16U speed)void DispCanReqTorqueTx(INT8U torque)void DispCanPowerReqTx(INT8U power)void DispCanMaxBusCurTx(INT8U max_current)void DispCanMaxBusVoltTx(INT8U max_volt)void DispCanControlBitTx(INT8U control_bit)void DispCls(void)

Code Reuse: BasicIO Module

Modifications: Baud = 19200

Port = SCI1

Page 11: Electronic Automotive Motor Control System

ECT.cPublic Functionsextern void EctRpmTaskInit(void)INT8U EctGetRPM0(INT16U *period)INT8U EctGetRPM1(INT16U *period)

TasksEctRpmTask

ISRsISR EctInCap0ISR(void)ISR EctInCap1ISR(void)ISR EctOverFlowISR(void)

OS_EVENT *RpmMutexCode Reuse: None

Page 12: Electronic Automotive Motor Control System

PWM.c

Public Functionsvoid PwmInit100kHz(INT8U port, INT8U duty_cycle)void PwmDutyCycle(INT8U duty_cycle)INT8U PwmGetDutyCycle(void)

Code Reuse: None

Page 13: Electronic Automotive Motor Control System

InputTask

CalcDataTask

50ms

UITask

CanRxTask

Intertask CommunicationsPartitioned Memory Flow

UiCanTxQueue

UiCanRxQueue

UiSensorDataQ

CanRxDataQ

SensorDataQ

Heap

50ms

10ms

Continuous

Memory Partition

Sensor Data

CAN RX Data

CAN TX Data

Page 14: Electronic Automotive Motor Control System

InputTask

CalcDataTask

50ms

UITask

CanRxTask

Intertask CommunicationsPartitioned Memory Flow

UiCanTxQueue

UiCanRxQueue

UiSensorDataQ

CanRxDataQ

SensorDataQ

Heap

50ms

10ms

Continuous

Memory Partition

Sensor Data

CAN RX Data

CAN TX Data

OSQPost()

OSQPost()

OSQPost()

OSQPost()

OSQPost()

OSMemGet()

OSMemPut()

OSMemPut()

OSQAccept()

OSQAccept()

OSQAccept()

OSQAccept()

OSQAccept()

Page 15: Electronic Automotive Motor Control System

RXCAN0

TXCAN0CAN0 Controller

CAN Module

250kbps

TXCAN BUFFERS

Can0Enable()Can0Filter()Can0Mask()Can0IdFormat()

Can0Tx()

Can0Timing()

RXCAN BUFFERS Can0Rx()

Can0SleepReq()Can0TxRxReq()Can0BusOffReq()Can0BusStatus()

Can0BusTask

Intertask Communications

Page 16: Electronic Automotive Motor Control System

InputTask

AN0-2

AN00

AN01

AN02

A to D Module0.5µs

ATDDR0

ATDDR1

ATDDR2

AtoDReadSingle()

AtoDInitSingle()

EctGetRPM1()

EctGetRPM0()

RpmTask

PT00

PT01

ECT Module

10ms

Rpm0

Rpm1

EctInCap0ISR

EctInCap1ISR

EctOverFlowISR

OverFlowCnt0

PeriodCnt0

OverFlowCnt1

PeriodCnt1

EctRpmTaskInit()

Shifter PortPK0_L

PK1_L

PK2_L

PK3_L

PK4_L

PK5_L

SHIFTER_POSITION()(~(SHIFTER_PORT | 0xc0))

SHIFTER_PORT_INIT()

PORT A PA2_L

GEAR_SEL_FAULT()

Intertask Communications

Page 17: Electronic Automotive Motor Control System

Can0RxTask

CalcDataTask

CanRxDataQ

PwmInit100kHz()

PWM Module

PwmGetDutyCycle()

PwmDutyCycle()

PWM0 PWM 8B8C

Duty Cycle

PORT A

PK0_L

PA3_L

GEAR_SEL_ENABLE()

Intertask Communications

RXCAN0

TXCAN0

CAN0 Controller

CAN Module

250kbps

TXCAN BUFFERS

Can0Enable()Can0Filter()Can0Mask()Can0IdFormat()

Can0Tx()

Can0Timing()

RXCAN BUFFERS Can0Rx()

Can0SleepReq()Can0TxRxReq()Can0BusOffReq()Can0BusStatus()

Page 18: Electronic Automotive Motor Control System

UITask

UiCanTxQueue

UiCanRxQueue

UiSensorDataQ

Continuous

TXD1

RXD1

BasicIOModule

eamcs_display ModuleDispConditions()DispAccelVolt()DispBrakeVolt()

DispShiftPos()DispGearPos()

DispMotorRpm()DispAxleRpm()

DispFaultBit()DispEnableBit()

DispReqGearPos()DispCanMotorRpmRx()

DispCanTorqueRx()DispCanBusVoltRx()

DispCanBusCurrentRx()DispCanInverterTempRx()

DispCanRotorTempRx()DispCanStatorTempRx()

DispCanWatchDogRx()DispCanReqSpeedTx()DispCanReqTorqueTx()DispCanPowerReqTx()

DispCanMaxBusCurTx()DispCanMaxBusVoltTx()

DispCanControlBitTx()DispCls()

Intertask Communications