PID 乃是控制领域中极为经典且关键的控制算法。
PID 即“比例(proportional)、积分(integral)、微分(derivative)”,属于一种司空见惯的控制算法。其应用范畴极为宽泛。小至我们日常玩耍的无人机、平衡车,大至工业领域中的温度、液位以及流量控制,PID 的踪迹皆有显现。
1.器件准备
STM32F103ZET6最小系统板
电机驱动TB6612
电机 带有 霍尔编码器12V,减速比1/30,速度330rpm
引脚接线:
模块引脚 | 单片机引脚 |
---|---|
TB6612_AIN1 | PB12 |
TB6612_AIN2 | PB13 |
TB6612_PWMA | PD5 |
编码器A相 | PA0 |
编码器B相 | PA1 |
基本代码模块
电机驱动模块
#include "motor.h"
#define PWM_MAX 7200
#define PWM_MIN -7200
int abs(int p)
{
if(p>0)
return p;
else
return -p;
}
void Load(int moto1,int moto2) //-7200~7200
{
if(moto1<0)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
}
__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,abs(moto1));
}
Encoder.c
这里AB相都计数
#include "encoder.h"
#include "stdio.h"
#include "stdlib.h"
int Read_Speed(TIM_HandleTypeDef *htim)
{
int temp