打印
[其他ST产品]

小车PID算法跑直线

[复制链接]
266|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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);   
}


使用特权

评论回复
沙发
Bblythe| | 2024-5-6 07:07 | 只看该作者

超出 120 个字节则必须用 idata 显式的指定为间接寻址

使用特权

评论回复
板凳
周半梅| | 2024-5-6 09:03 | 只看该作者

靠近功率开关管或整流器的电容分到的纹波电流远多于相距较远的电容分到的纹波电流

使用特权

评论回复
地板
Pulitzer| | 2024-5-6 10:06 | 只看该作者

small 模式下未指存储类型的变量默认为data型

使用特权

评论回复
5
童雨竹| | 2024-5-6 12:02 | 只看该作者

离线式变换器

使用特权

评论回复
6
Wordsworth| | 2024-5-6 13:05 | 只看该作者

一般要进行内存优化,尽量提高内存的使用效率

使用特权

评论回复
7
Clyde011| | 2024-5-6 14:08 | 只看该作者

让尽可能多的变量使用直接寻址,提高速度

使用特权

评论回复
8
公羊子丹| | 2024-5-6 15:01 | 只看该作者

经变压器映射成这么多节点

使用特权

评论回复
9
万图| | 2024-5-6 16:04 | 只看该作者

访问时采用不同的指令,所以并不会占用 RAM 空间

使用特权

评论回复
10
Uriah| | 2024-5-6 17:07 | 只看该作者

极限情况下可以定义的变量可占 247 个字节

使用特权

评论回复
11
帛灿灿| | 2024-5-6 19:03 | 只看该作者

51 单片机不使用线性编址

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

692

帖子

1

粉丝