首页 > 代码库 > 小车PID算法跑直线
小车PID算法跑直线
#include<stm32f10x.h>
#include"sys.h"
extern unsigned char Rec_Dat_U1;
extern unsigned char Rec_String_U1[200];
extern int conut_flag_1;
#define in_1(x) x?GPIO_ResetBits(GPIOC , GPIO_Pin_0): GPIO_SetBits(GPIOC , GPIO_Pin_0)
#define in_2(x) x?GPIO_ResetBits(GPIOC , GPIO_Pin_1): GPIO_SetBits(GPIOC , GPIO_Pin_1)
#define in_3(x) x?GPIO_ResetBits(GPIOB , GPIO_Pin_10): GPIO_SetBits(GPIOB , GPIO_Pin_10)
#define in_4(x) x?GPIO_ResetBits(GPIOB , GPIO_Pin_11): GPIO_SetBits(GPIOB , GPIO_Pin_11)
#define key_1 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)
#define key_2 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)
#define key_3 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)
#define key_4 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)
float Kp_l = 0.82 ; //比例常数
float Ti_l = 0.09 ; //微分时间常数
float Td_l = 0.015 ; //采样周期
float Kp_r = 0.20 ;
float Ti_r = 0.09 ;
float Td_r = 0.015 ;
#define T 0.02
#define Ki_l Kp_l*(T/Ti_l) // Kp Ki Kd
#define Kd_l Kp_l*(Td_l/T)
#define Ki_r Kp_l*(T/Ti_l) // Kp Ki Kd
#define Kd_r Kp_l*(Td_l/T)
#define left_b in_1(1); in_2(0);
#define left_f in_1(0); in_2(1);
#define right_f in_3(1); in_4(0);
#define right_b in_1(0); in_2(1);
extern float pwm_l;
extern float pwm_r;
void CAR_GPIO_INIT(void);
int main()
{
// int speed=50;
SYS_CONFIG();
CAR_GPIO_INIT();
pwm_init(TIM3_1);
pwm_init(TIM3_2);
TIM4_PWMINPUT_INIT(0xffff,31); //1M速度采样率
TIM5_PWMINPUT_INIT(0xffff,31);
incPIDinit();
PID_set(Kp_l,Ki_l,Kd_l,Kp_r,Ki_r,Kd_r);
//void PID_set(float pp_1,float ii_1,float dd_1,float pp_2,float ii_2,float dd_2)
right_f
left_f
// set_pwm_percent(TIM3_1,50) ;
// set_pwm_percent(TIM3_2,50) ;
PID_setpoint(&PID_l, 160);
PID_setpoint(&PID_r, 160);
while(1)
{
printf("%d\r\n",(int)pwm_l);
delay_ms(200);
}
}
void CAR_GPIO_INIT()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
#include"sys.h"
extern unsigned char Rec_Dat_U1;
extern unsigned char Rec_String_U1[200];
extern int conut_flag_1;
#define in_1(x) x?GPIO_ResetBits(GPIOC , GPIO_Pin_0): GPIO_SetBits(GPIOC , GPIO_Pin_0)
#define in_2(x) x?GPIO_ResetBits(GPIOC , GPIO_Pin_1): GPIO_SetBits(GPIOC , GPIO_Pin_1)
#define in_3(x) x?GPIO_ResetBits(GPIOB , GPIO_Pin_10): GPIO_SetBits(GPIOB , GPIO_Pin_10)
#define in_4(x) x?GPIO_ResetBits(GPIOB , GPIO_Pin_11): GPIO_SetBits(GPIOB , GPIO_Pin_11)
#define key_1 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12)
#define key_2 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_13)
#define key_3 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_14)
#define key_4 GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_15)
float Kp_l = 0.82 ; //比例常数
float Ti_l = 0.09 ; //微分时间常数
float Td_l = 0.015 ; //采样周期
float Kp_r = 0.20 ;
float Ti_r = 0.09 ;
float Td_r = 0.015 ;
#define T 0.02
#define Ki_l Kp_l*(T/Ti_l) // Kp Ki Kd
#define Kd_l Kp_l*(Td_l/T)
#define Ki_r Kp_l*(T/Ti_l) // Kp Ki Kd
#define Kd_r Kp_l*(Td_l/T)
#define left_b in_1(1); in_2(0);
#define left_f in_1(0); in_2(1);
#define right_f in_3(1); in_4(0);
#define right_b in_1(0); in_2(1);
extern float pwm_l;
extern float pwm_r;
void CAR_GPIO_INIT(void);
int main()
{
// int speed=50;
SYS_CONFIG();
CAR_GPIO_INIT();
pwm_init(TIM3_1);
pwm_init(TIM3_2);
TIM4_PWMINPUT_INIT(0xffff,31); //1M速度采样率
TIM5_PWMINPUT_INIT(0xffff,31);
incPIDinit();
PID_set(Kp_l,Ki_l,Kd_l,Kp_r,Ki_r,Kd_r);
//void PID_set(float pp_1,float ii_1,float dd_1,float pp_2,float ii_2,float dd_2)
right_f
left_f
// set_pwm_percent(TIM3_1,50) ;
// set_pwm_percent(TIM3_2,50) ;
PID_setpoint(&PID_l, 160);
PID_setpoint(&PID_r, 160);
while(1)
{
printf("%d\r\n",(int)pwm_l);
delay_ms(200);
}
}
void CAR_GPIO_INIT()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。