📄 main.lst
字号:
ANSI-C/cC++ Compiler for ST7 V-5.0.7, Aug 21 2001
1: /**************** (c) 2004 STMicroelectronics **********************
2:
3: PROJECT : 3-phase AC induction motor drive Software Library
4: COMPILER : COSMIC / METROWERKS
5:
6: MODULE : main.c
7: VERSION : 1.0.0
8:
9: CREATION DATE : April 2004
10:
11: AUTHOR : V. Onde / Microcontroller Division Applications
12: Consumer & Micro Group
13:
14: -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
15:
16: DESCRIPTION : Main Routine
17:
18: -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
19:
20: MODIFICATIONS :
21:
22: ******************************************************************************
23: THE SOFTWARE INCLUDED IN THIS FILE IS FOR GUIDANCE ONLY. ST MICROELECTRONICS
24: SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES
25: WITH RESPECT TO ANY CLAIMS ARISING FROM USE OF THIS SOFTWARE.
26: *******************************************************************************
27:
28: ******************************************************************************/
29:
30: // Standard types definitions and ST7 specific macros
31: #include "lib.h"
32: // General purpose peripheral function prototypes
33: #include "ports.h"
34: #include "adc.h"
35: #include "pwmart.h"
36: #include "sci.h"
37: // ST7 specifics related functions prototypes
38: #include "ST7_Misc.h"
39: // Motor control specific functions prototypes
40: #include "mtc.h" /* Peripheral specifics */
41: #include "acmotor.h" /* AC motor related */
42: #include "config.h" /* AC motor library configuration keys */
43: #include "MainParam.h" /* Motor control parameters used in functions called from main.c */
44: // ST7FMC peripherals Hardware Registers declaration
45: #define __DEFINE_REGISTERS_STVD7_INCLUDE__
46: #include "ST7FMC2N6.h"
47:
48:
49: ///////////////////////////////////////////////////////////////////////////////
50:
51: /* Private typedefs (for demo purposes only) */
52: typedef enum
53: {
54: IDLE, START, RUN, STOP, BRAKE, WAIT, FAULT
55: } SystStatus_t;
56:
57: /* Private variable (for demo purposes only) */
58: static SystStatus_t State;
59:
60: /* Private functions (for demo purposes only) */
61: static void DoMotorControl( void );
62: static SystStatus_t StartMotor( void );
63: static void CheckPowerStage(void);
64: static void SendSystemDataRS232(void);
65:
66: void main(void)
67: {
Function: main
Source : ..\..\source\main.c
Options : -Cc -F7 -Lasm=%n.lst -Ml -N -Os -Ou -Of -Ol0 -OnPMNC -Or
68:
69: ST7_IntPrioritySetUp();
0000 cd0000 CALL ST7_IntPrioritySetUp
70: PORTS_Init();
0003 cd0000 CALL PORTS_Init
71: ADC_Init();
0006 cd0000 CALL ADC_Init
72: ART_Init(); // PWM ART provided general purpose time bases
0009 cd0000 CALL ART_Init
73: ACM_Init();
000c cd0000 CALL ACM_Init
74: #ifdef ENABLE_RS232
75: // Init SCI for hyperterminal: 19200bps/8 data bit/no parity/1 stop bit
76: SCI_Init(SCI_DEFAULT_PARAM1,SCI_DEFAULT_PARAM2);
77: SCI_Select_Baudrate(SCI_PR_13 + SCI_TR_2 + SCI_RR_2);
78: SCI_Mode(SCI_TX_ENABLE);
79: #endif
80:
81: ART_SetMainTimeBase(10); // 100ms timebase for LED Toggle
000f a60a LD A,#10
0011 cd0000 CALL ART_SetMainTimeBase
82:
83: EnableInterrupts();
0014 9a RIM
84:
85: ART_Start(); // Time bases are now available
0015 cd0000 CALL ART_Start
86: State = IDLE;
0018 4f CLR A
0019 c70001 LD State:1,A
001c c70000 LD State,A
87:
88: // Flash LEDs to indicate proper MCU start-up
89: PORTS_GreenLedOn();
001f cd0000 CALL PORTS_GreenLedOn
90: while (!ART_IsMainTimeElapsed());
0022 cd0000 CALL ART_IsMainTimeElapsed
0025 4d TNZ A
0026 27fa JREQ *-4 ;abs = 0022
91: PORTS_RedLedOn();
0028 cd0000 CALL PORTS_RedLedOn
92: while (!ART_IsMainTimeElapsed());
002b cd0000 CALL ART_IsMainTimeElapsed
002e 4d TNZ A
002f 27fa JREQ *-4 ;abs = 002b
93: PORTS_GreenLedOn();
0031 cd0000 CALL PORTS_GreenLedOn
94:
95: // Main Loop
96: while(1)
97: {
98: switch ( State )
0034 c60001 LD A,State:1
0037 ce0000 LD X,State
003a bf00 LD _spill_1,X
003c b700 LD _spill_3,A
003e 5d TNZ X
003f 2678 JRNE *122 ;abs = 00b9
0041 a106 CP A,#6
0043 2474 JRUGE *118 ;abs = 00b9
0045 4d TNZ A
0046 2712 JREQ *20 ;abs = 005a
0048 4a DEC A
0049 271f JREQ *33 ;abs = 006a
004b 4a DEC A
004c 2727 JREQ *41 ;abs = 0075
004e 4a DEC A
004f 2733 JREQ *53 ;abs = 0084
0051 4a DEC A
0052 2743 JREQ *69 ;abs = 0097
0054 4a DEC A
0055 2759 JREQ *91 ;abs = 00b0
0057 4a DEC A
0058 275f JREQ *97 ;abs = 00b9
99: {
100: case IDLE: if ( PORTS_KeyScan() == TRUE ) // Start motor
005a cd0000 CALL PORTS_KeyScan
005d 4a DEC A
005e 2665 JRNE *103 ;abs = 00c5
101: {
102: #ifdef CLOSED_LOOP
103: ACM_InitSoftStart(START_FREQ);
0060 5f CLR X
0061 a696 LD A,#150
0063 cd0000 CALL ACM_InitSoftStart
104: #else /* OPEN_LOOP: Read start-up frequency on trimmer */
105: ACM_InitSoftStart_OL(100 + (ADC_GetRV1()*10));
106: #endif
107: State = START;
0066 a601 LD A,#1
0068 2054 JRT *86 ;abs = 00be
108: }
109: break;
110:
111: case START: State = StartMotor();
006a cd0000 CALL StartMotor
006d c70001 LD State:1,A
0070 cf0000 LD State,X
112: break;
0073 2050 JRT *82 ;abs = 00c5
113:
114: case RUN: if ( PORTS_KeyScan() == TRUE ) // Stop motor
0075 cd0000 CALL PORTS_KeyScan
0078 4a DEC A
0079 2604 JRNE *6 ;abs = 007f
115: {
116: State = STOP;
007b a603 LD A,#3
117: }
007d 203f JRT *65 ;abs = 00be
118: else
119: {
120: DoMotorControl();
007f cd0000 CALL DoMotorControl
0082 2041 JRT *67 ;abs = 00c5
121: }
122: break;
123:
124: case STOP: {
125: u16 BrakingTorque;
126:
127: BrakingTorque = BRAKE_DUTY_CYCLE;
0084 a640 LD A,#64
0086 b701 LD BrakingTorque:1,A
128: if (BrakingTorque == 0)
129: {
130: ART_SetTimeOutDuration(1000);
131: MTC_DisableMCOutputs(); // PWM is disabled on MCO outputs
132: State = WAIT;
133: }
134: else
135: {
136: MTC_StartBraking( BrakingTorque );
0088 5f CLR X
0089 cd0000 CALL MTC_StartBraking
137: ART_SetTimeOutDuration(BRAKE_DURATION);
008c ae0b LD X,#11
008e a6b8 LD A,#184
0090 cd0000 CALL ART_SetTimeOutDuration
138: State = BRAKE;
0093 a604 LD A,#4
139: }
140: }
141: break;
0095 2027 JRT *41 ;abs = 00be
142:
143: case BRAKE: if (!ART_IsTimeOutElapsed())
0097 cd0000 CALL ART_IsTimeOutElapsed
009a 4d TNZ A
009b 2605 JRNE *7 ;abs = 00a2
144: {
145: MTC_Brake();
009d cd0000 CALL MTC_Brake
146: }
00a0 2023 JRT *37 ;abs = 00c5
147: else
148: {
149: MTC_StopBraking();
00a2 cd0000 CALL MTC_StopBraking
150: ART_SetTimeOutDuration(1000);
00a5 ae03 LD X,#3
00a7 a6e8 LD A,#232
00a9 cd0000 CALL ART_SetTimeOutDuration
151: State = WAIT;
00ac a605 LD A,#5
00ae 200e JRT *16 ;abs = 00be
152: }
153: break;
154:
155: case WAIT: if (ART_IsTimeOutElapsed())
00b0 cd0000 CALL ART_IsTimeOutElapsed
00b3 4d TNZ A
00b4 270f JREQ *17 ;abs = 00c5
156: {
157: State = IDLE;
00b6 4f CLR A
00b7 2005 JRT *7 ;abs = 00be
158: }
159: break;
160:
161: case FAULT:
162: default: MTC_DisableMCOutputs(); // PWM is disabled on MCO outputs
00b9 cd0000 CALL MTC_DisableMCOutputs
163: State = FAULT;
00bc a606 LD A,#6
00be c70001 LD State:1,A
00c1 4f CLR A
00c2 c70000 LD State,A
164: break;
165: }
166:
167: // Verify that inverter is operating properly
168: CheckPowerStage();
00c5 cd0000 CALL CheckPowerStage
169:
170: // LED management
171: if (ART_IsMainTimeElapsed())
00c8 cd0000 CALL ART_IsMainTimeElapsed
00cb 4d TNZ A
00cc 272d JREQ *47 ;abs = 00fb
00ce ce0000 LD X,State
172: {
173: switch ( State )
00d1 c60001 LD A,State:1
00d4 bf00 LD _spill_1,X
00d6 b700 LD _spill_3,A
00d8 ca0000 OR A,State
00db 2711 JREQ *19 ;abs = 00ee
00dd b600 LD A,_spill_1
00df 2b17 JRMI *25 ;abs = 00f8
00e1 4d TNZ A
00e2 2b0f JRMI *17 ;abs = 00f3
00e4 2606 JRNE *8 ;abs = 00ec
00e6 be00 LD X,_spill_3
00e8 a305 CP X,#5
00ea 2307 JRULE *9 ;abs = 00f3
00ec 200a JRT *12 ;abs = 00f8
174: {
175: case IDLE: PORTS_GreenLedOn();
00ee cd0000 CALL PORTS_GreenLedOn
176: break;
00f1 2008 JRT *10 ;abs = 00fb
177: case START:
178: case RUN:
179: case STOP:
180: case BRAKE:
181: case WAIT: PORTS_RedLedOn();
00f3 cd0000 CALL PORTS_RedLedOn
182: break;
00f6 2003 JRT *5 ;abs = 00fb
183: case FAULT:
184: default: PORTS_RedLedToggle();
00f8 cd0000 CALL PORTS_RedLedToggle
00fb cc0034 JP main:52
185: break;
186: }
187: }
188:
189: #ifdef ENABLE_RS232
190: SendSystemDataRS232();
191: #endif
192:
193: } // End of while(1)
194: } // main loop
195:
196:
197: /*-----------------------------------------------------------------------------
198: ROUTINE Name : CheckPowerStage
199:
200: Description : Verify that inverter power stage is running fine:
201: heatsink temperature
202: voltage bus value
203: current limitation not triggerred
204: -----------------------------------------------------------------------------*/
205: void CheckPowerStage(void)
206: {
Function: CheckPowerStage
Source : ..\..\source\main.c
Options : -Cc -F7 -Lasm=%n.lst -Ml -N -Os -Ou -Of -Ol0 -OnPMNC -Or
207:
208: if (ADC_CheckOverVoltage() || ADC_CheckOverTemp() || MTC_CheckEmergencyStop())
0000 cd0000 CALL ADC_CheckOverVoltage
0003 4d TNZ A
0004 260c JRNE *14 ;abs = 0012
0006 cd0000 CALL ADC_CheckOverTemp
0009 4d TNZ A
000a 2606 JRNE *8 ;abs = 0012
000c cd0000 CALL MTC_CheckEmergencyStop
000f 4d TNZ A
0010 2709 JREQ *11 ;abs = 001b
209: {
210: State = FAULT;
0012 a606 LD A,#6
0014 c70001 LD State:1,A
0017 4f CLR A
0018 c70000 LD State,A
211: }
212:
213: }
001b 81 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -