Revision 59

View differences:

branch/lepogam/Emb_App/SessionM32C_E8a_system.ini
25 25
[Target]
26 26
M32C E8a SYSTEM=Renesas Communications
27 27
[USER_DATA]
28
RESET=ff0022
28
RESET=ff002a
branch/lepogam/Emb_App/programme_principal_etud.c
121 121
//				correspondant au nom du v?hicule si le nom se termine par '*'
122 122

  
123 123
unsigned int alpha=0;
124
unsigned int theta=0;
124
unsigned int distance=0;
125
unsigned int vitesse=0;
126
unsigned int distance_ref=722;
125 127
unsigned int consigne=450;
126
unsigned int consigne_vitesse=30;
127
unsigned int valeur=0;
128
int k=1;
128
unsigned int consigne_vitesse=40;
129
unsigned int valeur_t=0;
130
unsigned int valeur_r=0;
131
int k1=1;
132
int k2=2;
129 133

  
130
void asserv0(){
134
void asserv_tourelle(){
131 135
	
132 136
	
133 137
	//'T'/84/0x54?: Commande en vitesse de la tourelle portant le telemetre (en 1/10 de degre/secondes).
......
142 146
		demande.data.rtr=1;
143 147
	
144 148
		snd_dtq (CanTx,demande.msg); // Interrogation du peripherique
145
		rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
146
		alpha=reponse.data.val; // contient la valeur de retour du simulateur.
149
		alpha=periph[ADDR('R')].val; // contient la valeur de retour du simulateur.
147 150
	
148 151
	
149 152
		comm.data.id='T'; 
150 153
		comm.data.rtr=0; 
151
		comm.data.val=valeur;
154
		comm.data.val=valeur_t;
152 155
		snd_dtq (CanTx,comm.msg);
153
		dly_tsk(300);
156
		dly_tsk(100);
154 157
		}
155 158
	}
156 159

  
157 160
void asserv1(){
158
	if(alpha!=consigne) valeur=k*(consigne-alpha);
161
	if(alpha!=consigne) valeur_t=k1*(consigne-alpha);
159 162
	}
160
void asserv_vitesse(){
161
	/*
163

  
164
void asserv_roue(){
165
	
162 166
	//'U'/85/0x55?: Distance mesuree par le telemetre (1/100 de metre)
163 167
	//'D'/68/0x44?: Commande de l'angle des roues directrices (en 1/10 de degre).
164
	//'V'/86/0x56?: Commande en vitesse des roues motrices du vehicule (en radian /secondes).
168
	
165 169
	CanFrame comm;
166 170
	CanFrame demande;
167 171
	CanFrame reponse;
168 172
	while(1){
169 173
		
170
		comm.data.id='D'; //envoi consigne vitesse
171
		comm.data.rtr=0; 
172
		comm.data.val=consigne_vitesse;
173
		snd_dtq (CanTx,comm.msg);
174
		
175
	
176 174
		demande.data.id='U'; 
177 175
		demande.data.rtr=1;
178 176
	
179 177
		snd_dtq (CanTx,demande.msg); // Interrogation du peripherique
180
		rcv_dtq (CanRx,&reponse.msg); // Attente de la reponse
181
		theta=reponse.data.val; // contient la valeur de retour du simulateur.
178
		distance=periph[ADDR('U')].val; // contient la valeur de retour du simulateur.
182 179
	
183 180
	
184 181
		comm.data.id='D'; 
185 182
		comm.data.rtr=0; 
186
		comm.data.val=valeur;
183
		comm.data.val=valeur_r;
187 184
		snd_dtq (CanTx,comm.msg);
188 185
		}
189
	*/
186

  
190 187
	}
188
void asserv2(){
189
	if(distance!=distance_ref) valeur_r=-k2*(distance_ref-distance);
190
	}
191 191

  
192
void asserv_vitesse(){
193
	
194
	//'V'/86/0x56?: Commande en vitesse des roues motrices du vehicule (en radian /secondes).
195
	CanFrame comm;
196
	CanFrame demande;
197
	CanFrame reponse;
198
	while(1){
199
		
200
		dly_tsk(400);
201
		comm.data.id='V'; //envoi consigne vitesse
202
		comm.data.rtr=0; 
203
		comm.data.val=vitesse;
204
		snd_dtq (CanTx,comm.msg);
205
	
206
		}
207
	}
208
void asserv3(){
209
	if(vitesse!=consigne_vitesse) vitesse++;
210
	}
192 211

  
193 212
void main()
194 213
{
......
202 221
	capture_init();
203 222

  
204 223
	sta_cyc(ID_acqui);
205
//	sta_tsk(ID_periph_rx);
206
	sta_tsk(ID_asserv0);
207
	sta_cyc(ID_asserv1);	
224
	sta_tsk(ID_periph_rx);
225
	
226
	sta_tsk(ID_asserv_tourelle);
227
	sta_tsk(ID_asserv_roue);
228
	sta_tsk(ID_asserv_vitesse);
229
	sta_cyc(ID_asserv1);
230
	sta_cyc(ID_asserv2);
231
	sta_cyc(ID_asserv3);
232
		
208 233
	
209 234

  
210 235
    while(1)
branch/lepogam/Emb_App/conf_noyau.cfg
62 62
	exinf	= 0x0;
63 63
};
64 64
task[]{
65
	entry_address	= asserv0();
66
	name	= ID_asserv0;
65
	entry_address	= asserv_tourelle();
66
	name	= ID_asserv_tourelle;
67 67
	stack_size	= 256;
68 68
	stack_section	= stack;
69
	priority	= 3;
70
	initial_start	= OFF;
71
	exinf	= 0x0;
72
};
73
task[]{
74
	entry_address	= asserv_roue();
75
	name	= ID_asserv_roue;
76
	stack_size	= 256;
77
	stack_section	= stack;
69 78
	priority	= 4;
70 79
	initial_start	= OFF;
71 80
	exinf	= 0x0;
......
75 84
	name	= ID_asserv_vitesse;
76 85
	stack_size	= 256;
77 86
	stack_section	= stack;
78
	priority	= 4;
87
	priority	= 5;
79 88
	initial_start	= OFF;
80 89
	exinf	= 0x0;
81 90
};
82

  
83 91
flag[]{
84 92
	name	= ev_bus_fin_tr;
85 93
	initial_pattern	= 0x0000;
......
135 143
	interval_counter	= 0x64;
136 144
	phs_counter	= 0x0;
137 145
};
146
cyclic_hand[]{
147
	entry_address	= asserv2();
148
	name	= ID_asserv2;
149
	exinf	= 0x0;
150
	start	= OFF;
151
	phsatr	= OFF;
152
	interval_counter	= 0x64;
153
	phs_counter	= 0x0;
154
};
155
cyclic_hand[]{
156
	entry_address	= asserv3();
157
	name	= ID_asserv3;
158
	exinf	= 0x0;
159
	start	= OFF;
160
	phsatr	= OFF;
161
	interval_counter	= 0x64;
162
	phs_counter	= 0x0;
163
};
138 164

  
139 165

  
140 166
vdataqueue[]{

Also available in: Unified diff