Je tente de créer un code c intégré pour contrôler un moteur cc avec le microcontrôleur PIC32MX460F512L. Ive Configurer l'horloge du système à 80 MHz et l'horloge périphérique à 10 MHz, Am en utilisant la minuterie 1 pour pulser le PWM avec un rapport cyclique donné, et la minuterie 2 pour mesurer le temps de fonctionnement du moteur. J'ai un fichier d'en-tête (includes.h) qui contient des informations de configuration du système, par exemple clock. J'ai créé la plupart des fonctions, mais certaines sont un peu difficiles. Par exemple, en initialisant les LEDS et les fonctions pour les mouvements vers l'avant, vers l'arrière et l'arrêt, je voulais que le moteur à courant continu fonctionne 4 secondes à 70%, puis s'arrête pendant 1 seconde puis marche arrière pendant 3 secondes à 50% cycle, puis arrêtez pendant 1 seconde, puis avancez à nouveau pendant 3 secondes à un cycle de travail de 40%, arrêtez pendant 1 seconde et enfin avancez pendant 5 secondes à un cycle de service de 20%. Toutes les suggestions pour l'avant, arrêter et inverser les fonctionsCode C intégré pour contrôler un moteur CC avec un microcontrôleur PIC
#include <stdio.h>
#include <stdlib.h>
#include <includes.h>
void main()
{
// Setting up PIC modules such as Timers, IOs OCs,Interrupts, ...
InitializeIO();
InitializeLEDs();
InitializeTimers();
while(1) {
WaitOnBtn1();
Forward(4.0,70);
Stop(1.0);
Backward(3.0,50);
Stop(2);
Forward(3.0,40);
Stop(1.0);
Backward(2.0,20);
LEDsOFF();
}
return;
}
void InitializeIO(){
TRISAbits.TRISA6 = 1;
TRISAbits.TRISA7 = 1;
TRISGbits.TRISG12 = 0;
TRISGbits.TRISB13 = 0;
LATGbits.LATB12 = 0;
LATGbits.LATB13 = 0;
return;
}
void InitializeLEDs(){
//code to initialize LEDS
}
void InitializeTimers(){
// Initialize Timer1
T1CON = 0x0000; // Set Timer1 Control to zeros
T1CONbits.TCKPS=3; // prescale by 256
T1CONbits.ON = 1; // Turn on Timer
PR1= 0xFFFF; // Period of Timer1 to be full
TMR1 = 0; // Initialize Timer1 to zero
// Initialize Timer2
T2CON = 0;
T2CONbits.TCKPS = 7; // prescale by 256
T2CONbits.T32 = 1; // use 32 bits timer
T2CONbits.ON = 1;
PR2 = 0xFFFFFFFF; // Period is set for 32 bits
TMR2 = 0;
}
void WaitOnBtn1(){
// wait on Btn1 indefinitely
while(PORTAbits.RA6 == 0);
// Turn On LED1 indicating it is Btn1 is Pushed
LATBbits.LATB10 = 1;
return;
}
void Forward(float Sec, int D){
int RunTime = (int)(Sec*39000); // convert the total
time to number of Tics
TMR2 = 0;
//LEDs
LATGbits.LATG12 = 1; // forward Direction
LATBbits.LATB12 = 0;
LATBbits.LATB13 = 0;
LATBbits.LATB11 = 1;
// Keep on firing the PWM as long as Run time is not
elapsed
while (TMR2 < RunTime){
PWM(D);
}
return;
}
void PWM(int D){
TMR1 = 0;
int Period = 400;
while (TMR1< Period) {
if (TMR1 < Period*D/100){
LATGbits.LATG13 = 1;
}
else{
LATGbits.LATG13 = 0;
}
}
Suggestions? D'abord poser une question. –
1) C ne supporte pas _methods_. 2) Apprendre [demander] 3) Formater et indenter votre code correctement. 4) Utiliser des déclarateurs de fonctions de type prototype. – Olaf
Je suis désolé à ce sujet, je voulais dire des fonctions; Je vais essayer de mieux formater mon code à l'avenir mais en attendant des suggestions – Chogo