|
keaz1284 可跑程序
單片機(jī)源程序如下:
- #include "headfile.h"
- int flag;
- void Para_Init()
- {
- PID_ANGLE.P=0.10;
- PID_ANGLE.D=0.001;
- PID_SPEED.P=1.5;
- PID_SPEED.I=0.05;
- PID_TURN.P=0.01;
- PID_TURN.D=0.005;
- Fuzzy_Kp=0.005;
- Fuzzy_Kd=0.0005;
- SetSpeed=2.5;
- Set_Angle=20;
-
-
- Control_Para[0]=SetSpeed;
- Control_Para[1]=PID_ANGLE.P;
- Control_Para[2]= PID_ANGLE.D;
- Control_Para[3]= PID_SPEED.P;
- Control_Para[4]= PID_SPEED.I;
- Control_Para[5]= PID_TURN.P;
- Control_Para[6]= PID_TURN.D;
- }
- void main(void)
- {
- DisableInterrupts ;
-
- ADC_Init(ADC_CHANNEL_AD4,ADC_12BIT); //電磁采集0
- ADC_Init(ADC_CHANNEL_AD5,ADC_12BIT); //電磁采集1
- ADC_Init(ADC_CHANNEL_AD2,ADC_12BIT); //電磁采集2
- ADC_Init(ADC_CHANNEL_AD3,ADC_12BIT); //電磁采集3
- ADC_Init(ADC_CHANNEL_AD6,ADC_12BIT); //電磁采集4
- ADC_Init(ADC_CHANNEL_AD7,ADC_12BIT); //電磁采集5
- ADC_Init(ADC_CHANNEL_AD10,ADC_12BIT); //電池電壓采集實驗
-
- button_init(); //按鍵初始化
- switch_init(); //撥碼開關(guān)初始化
- FTM_PWM_init(CFTM2, FTM_CH5, 20000, 0); //PWM0 PTG7 電機(jī)驅(qū)動
- FTM_PWM_init(CFTM2, FTM_CH4, 20000, 0); //PWM1 PTG6 電機(jī)驅(qū)動
-
- FTM_PWM_init(CFTM2, FTM_CH3, 20000, 0); //PWM2 PTG5 電機(jī)驅(qū)動
- FTM_PWM_init(CFTM2, FTM_CH2, 20000, 0); //PWM3 PTG4 電機(jī)驅(qū)動
-
- PULSE_INIT(CFTM0); //編碼器1采集
- PULSE_INIT(CFTM1); //編碼器1采集
-
- uart_init(UARTR1,1500000); //wifi模塊傳輸初始化
-
- BEEP_ON;
- OLED_Init(); //OLED 初始化
- OLED_Draw_Logo(); //畫logo專用函數(shù)
- delay(300);
- OLED_Fill(0); //初始清屏
- BEEP_OFF;
- I2C_Init(); //初始化加速度陀螺儀傳感器
- PIT_Init(PIT_CHANNEL0,2*BUS_CLK_KHZ); //定時中斷 2ms 初始化
- EnableInterrupts;
- Para_Init();
- led_init();
- water_lights();
- while(1)
- {
- if(beep)
- {
- BEEP_ON;
- delay(50);
- BEEP_OFF;
- beep=0;
- }
- Read_Switch();
- Check_BottonPress();
- if(SendPara)
- {
- SendPara=0;
- Send_Parameter();
- }
-
- if(flag) //此段不超過0.5ms 200ms主頻 6ms 或8ms 執(zhí)行一次
- {
- flag=0;
-
- Send_Begin();
- Variable_update();
- Send_Variable();
- Send_Inductor();
- }
- if(OLED_Refresh)
- {
- OLED_Draw_UI();
- }
- }
- }
- //定時器0中斷函數(shù)
- void PIT0_ISR(void)
- {
- static uint8 flag_100ms,cnt=0;
- RunTime=RunTime+0.002;
- flag_100ms++;
- if(flag_100ms>50)
- {
- flag_100ms=0;
- Speed_Control(); //100ms進(jìn)行一次速度控制
- LED_RED_TURN;
- SpeedCount=0;
- }
- cnt++;
- if(cnt==1) //4ms運(yùn)行一次
- {
- flag=1;
- ADC_SAMPLE();
- Get_Attitude();
- Angle_Calculate();
- Angle_Control();
- Get_Speed();
-
- Direction_Control();
-
-
- }
- if(cnt>=2)
- {
- cnt=0;
- }
- SpeedCount++;
- Speed_Control_Output();
- Moto_Out();
-
- PIT->CHANNEL[0].TFLG |= PIT_TFLG_TIF_MASK;//清楚中斷標(biāo)志位
-
- }
- //定時器0中斷函數(shù)
- void UART0_ISR(void)
- {
- static uint8 recv;
- static uint8 data_cnt=0;
- static uint8 predata[10];
- static uint8 Recv_Buff[100];
- static uint8 Data_Receiving=false;
-
- // recv=Uart_GetChar(UART1_BASE);
- /**********代表正在接收來自上位機(jī)的參數(shù)數(shù)據(jù)*********/
- if(Data_Receiving)
- {
- if(data_cnt<56)
- {
- Recv_Buff[data_cnt]= recv;
- data_cnt++;
- }
- else
- {
- data_cnt=0; //達(dá)到幀長
- Data_Receiving=false;
- if(recv==2) //幀尾
- {
- Modify_Parameter(Recv_Buff);
- SendPara=1; //參數(shù)回傳,確認(rèn)參數(shù)修改完成
- beep=1; //開啟蜂鳴器
- }
- }
- }
-
-
- if( predata[1]==0x55&&predata[0]==0xAA)
- {
-
- switch(recv) //判斷功能字
- {
- case 1: //讀取參數(shù)
- if(SendPara==0) SendPara=1;
- beep=1; //開啟蜂鳴器
- break;
-
- case 2: //修改參數(shù)
- data_cnt=0;
- Data_Receiving=true;
- case 3: //保存參數(shù)
- //EEPROM_Save();
- beep=1; //開啟蜂鳴器
- break;
-
- case 4: //功能開關(guān)1
-
- break;
-
- case 5: //功能開關(guān)2
-
- break;
-
- case 6: //功能開關(guān)3
-
- break;
-
- case 7: //功能開關(guān)4
-
- break;
-
- default: //
- break;
- }
- }
- predata[1]=predata[0];
- predata[0]=recv;
- }
-
復(fù)制代碼
注意代碼不是用Keil寫的,用的iar編譯的
iar工程文件.7z
(1.01 MB, 下載次數(shù): 262)
2022-5-24 01:53 上傳
點擊文件名下載附件
keaz128 飛思卡爾可跑程序 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|