可使用外部中斷設(shè)置當前轉(zhuǎn)速
單片機源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "stdio.h"
- #include "usart.h"
- double Enconde_left ;
- double m;
- int main(void)
- {
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- uart_init (115200);
- delay_init();
- OLED_Init ();
- OLED_Clear();
- Encoder_TIM2_Init();
- TIM1_PWM_Init(7199,0);//pwm輸出
- TIMER_Init(999,7199);//定時器中斷
- KEY_EXTI_Init();
-
- My_MOTOR_Init();
- OLED_ShowString(0,0,"ENC:",12);
- OLED_ShowString(0,3,"SET:",12);
- OLED_ShowString(0,5,"OUT:",12);
- while(1)
- {
- // Load(-2000);
- //
- // Enconde_left = Read_Speed(2);
- // OLED_ShowNumber(50,5,Enconde_left,5,16);
-
- OLED_Float(0,50,Enconde_left,3);
- OLED_Float(3,50,Set_val1,3);
- OLED_ShowNumber(50,5,PWM_TEST,5,12);
- // Test_Send_User(Enconde_left,Set_val1,0,0,0,0, 0,0,0,0);
-
- }
- }
復(fù)制代碼- #include "control.h"
- float PID_Calc(int Set_Val,double Now_Val);
- CTRL PID;
- double PWM_TEST;
- int PWM_OUT = 500;
- int Set_val1 = -350;
- void PID_Val(void)
- {
- PID.Kp = 18;
- PID.Ki = 0.3;
- PID.Kd = 5;
- }
- void TIM3_IRQHandler(void) //TIM3中斷
- {
- if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查TIM3更新中斷發(fā)生與否
- {
- TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx更新中斷標志
- Enconde_left = Read_Speed(2);
- // PWM_OUT += PID_Calc(Set_val1,Enconde_left);
- // Limt_Duty(&PWM_OUT);
- // Load(PWM_OUT);
- PWM_TEST += PID_Calc(Set_val1,Enconde_left);
- Limt_Duty_1(&PWM_TEST);
- Load(PWM_TEST);
- }
- }
- float PID_Calc(int Set_Val,double Now_Val)
- {
- PID_Val();
- float PID_Inc = 30; //增量
-
- PID.Ek = Set_Val - Now_Val;//本次誤差
-
- PID_Inc = PID.Kp * (PID.Ek - PID.Ek1) + PID.Ki * PID.Ek + PID.Kd * (PID.Ek - 2 * PID.Ek1 + PID.Ek2 );
-
- PID.Ek2 = PID.Ek1 ;
-
- PID.Ek1 = PID.Ek ;
- return PID_Inc;
- }
- void EXTI3_IRQHandler(void)
- {
- Set_val1 -= 50;
-
- EXTI_ClearITPendingBit(EXTI_Line3);
- }
- void EXTI4_IRQHandler(void)
- {
- Set_val1 += 50;
-
- EXTI_ClearITPendingBit(EXTI_Line4);
- }
- void EXTI9_5_IRQHandler(void)
- {
- static u8 temp = 0;
-
- if(!temp)
- {
- Set_val1 = 300;
- temp = 1;
- }
- else
- {
- Set_val1 = -300;
- temp = 0;
- }
-
- EXTI_ClearITPendingBit(EXTI_Line5);
- }
復(fù)制代碼
所有代碼51hei附件下載:
外部中斷設(shè)置轉(zhuǎn)速.7z
(238.62 KB, 下載次數(shù): 102)
2021-10-6 17:23 上傳
點擊文件名下載附件
|