📄 lc_var.h
字号:
/***************************************************/
/* 寻迹小车 FollowMe 项目 */
/* —— 主控程序轨迹控制模块 */
/* 之变量声明 */
/* 20060905 */
/* By DingQi */
/***************************************************/
// 注:以下文档的 TAB 为2个字符!
// 数据接收用
unsigned char xdata ga_ucRcvBuf[MaxRcvByte_C]; // 接收缓冲区
unsigned char data gi_ucSavePtr; // 存数指针,每收到一个字节保存到缓冲区后加“1”。
unsigned char data gi_ucGetPtr; // 从缓冲区中取数的指针,每取出一个字节后加“1”。
unsigned char idata gi_ucStartPtr; // 帧起始位置,指向数据区开始。
unsigned char idata gi_ucEndPtr; // 帧结束位置。
unsigned char idata gc_ucDataLen; // 帧长,即数据区字节数。
bit gb_NewData; // 串口收到一个字节标志,为减少变量交互。
bit gb_StartRcv; // 开始接收数据帧标志。
bit gb_DataOK; // 数据准备好标志。
unsigned char xdata ga_ucTxdBuf[MaxTxdByte_C+4]; // 发送缓冲区,用于返回转速值等。
unsigned char data gi_ucTxdPtr; // 发送指针
unsigned char data gc_ucTxdCnt; // 发送字节计数
// 控制命令数据, 采用数组存放, 0 - 对应电机 1 , 1 - 对应电机 2
int idata ga_iPWM_Value[2]; // 接收到的或者是PID计算出的 PWM 控制值, 单位:0.1%
int idata ga_iRotateSpeed[2]; // 接收到的转速值, 单位: 0.1 转/分
unsigned int xdata ga_uiRotateNum[2]; // 接收到的转动脉冲数,
unsigned int idata g_uiPWM_Freq; // 接收到的 PWM 频率, 单位: Hz,此值两个电机相同
bit gb_M1CalOutValue; // 电机 1 得到了新的PWM控制值,提示计算新的输出控制数据
bit gb_M2CalOutValue; // 电机 2 得到了新的PWM控制值,提示计算新的输出控制数据
// 行走脉冲计数处理
extern unsigned int idata gac_uiPulsCnt[2]; // 对码盘脉冲计数,从程序开始计,一直到程序结束,按现在的码盘,可以走851米
extern unsigned int idata ga_uiStopCnt[2]; // 收到定数走命令后计算出的 gui_PulsCnt 停止值
extern char data ga_cMotorStat[2]; // 电机运转标志
// PID电机调速控制算法
unsigned int xdata g_uiKp; // 比例系数, 这几个参数暂时定为两个电机相同。
unsigned int xdata g_uiTi; // 积分系数
unsigned int xdata g_uiTd; // 微分系数
unsigned int xdata g_uiPID_Ratio; // PID 系数的比例值
float xdata g_fKp; // 除完比例系数后,在设置参数后立即计算,减少每次计算PID的运算量。
float xdata g_fTi;
float xdata g_fTd;
extern unsigned char data gac_ucGetSpeedCnt[2]; // 对速度采集减计数,大于3次后开始计算PID
bit gb_EnablePID; // 允许PID控制标志,收到速度控制命令时建立,收到PWM命令时清除
// 速度测量
extern int idata ga_iCurSpeed[2]; // 计算出的当前转速,单位 0.1转/分
extern unsigned int idata gac_uiOverCnt[3][2]; // PCA 溢出计数器,[0] - 正跳 ,[1] - 负跳,[2] - 正、负跳之间计数
// 走轨迹
extern char idata g_cSampleOut; // 采样输出值
char idata g_cOldSampOut; // 上次的采样输出值
bit gb_StartLineFollow; // 开始走轨迹标志
// 双轮走直线控制
bit gb_StartStraightRun; // 开始直线行走标志
int xdata g_iInit_PWM; // 电机控制的PWM初值
unsigned int idata gc_uiPCA_OverCnt; // PCA 溢出计数器
unsigned int idata g_uiPCA_OverVal[2]; // 两个电机的脉冲计时 PCA 溢出部分
unsigned int idata g_uiPCA_TimerVal[2]; // 两个电机的脉冲计时 PCA 计时器部分
unsigned char data g_ucDownSampCnt; // 脉冲采样计数,两个都采到,则处理一次
int xdata m_iError; // 本次时间差, 电机 1 - 电机 2
int xdata m_iErrorOld; // 上次时间差
int xdata m_iError_Diff; // 时间差微分值,m_lError - m_lErrorOld
int xdata m_iError_Int; // 时间差积分值, m_lError_Int + m_lError + m_lErrorOld
int xdata m_iDiffPWM; // 两个电机的 PWM 偏差值, 电机 1 = g_iInit_PWM + m_iDiffPWM;
// 电机 2 = g_iInit_PWM - m_iDiffPWM;
extern unsigned int data ga_uiCompareBuf[2]; // PCA 比较器值的备份
// 速度上下限控制
extern bit gb_EnSpeed_Hi_Low; // 允许速度上下限控制
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -