我試圖用PIC32MX460F512L微控制器創建嵌入式c代碼來控制直流電機。 Ive配置系統時鐘爲80MHz,外設時鐘爲10MHz,Am使用定時器1以給定佔空比脈衝PWM,定時器2用於測量電機運行時間。我有一個包含系統配置信息(例如時鐘)的頭文件(includes.h)。我創造了大部分功能,但有些有些具有挑戰性。例如,初始化LEDS以及正向,反向運動和停止功能,我希望直流電機以70%佔空比向前運行4秒,然後停止1秒,然後在50%佔空比下反向運行3秒循環,然後停止1秒,然後以40%佔空比再次向前3秒,停止1秒,最後以20%佔空比向前轉5秒。對於提出任何建議,停止和扭轉功能使用PIC微控制器控制直流電機的嵌入式C代碼
#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;
}
}
建議?首先問一個問題。 –
1)C不支持_methods_。 2)學習[問] 3)正確格式化並縮進你的代碼。 4)使用原型風格的函數聲明。 – Olaf
對不起,我的意思是功能;我將嘗試在未來更好地格式化我的代碼,但同時提供任何建議 – Chogo