📄 md_const.h
字号:
/***************************************************/
/* 寻迹小车 FollowMe 项目 */
/* —— 主控程序电机驱动模块 */
/* 之常数声明 */
/* 20060905 */
/* By DingQi */
/***************************************************/
// 注:以下文档的 TAB 为2个字符!
// PCA 初始化常数,
#define STARTPCA_C 0x40; // or CCON 中的CR位控制 启动 PCA
#define STOPPCA_C 0xBF; // and CCON 中的CR位控制 停止 PCA
#define FOSCdiv12_C 0x00
#define FOSCdiv2_C 0x02
#define T0Over_C 0x04 // T0 溢出
#define ECI_C 0x06 // 外部脉冲输入
#define EnCF_C 0x01 // 允许PCA溢出中断
#define EnCMP_C 0x40 // 0100 0000, CCAPMn 中控制位6, 允许比较器
#define EnCAPP_C 0x20 // 0010 0000, CCAPMn 中控制位5, 允许上升沿捕获
#define EnCAPN_C 0x10 // 0001 0000, CCAPMn 中控制位4, 允许下降沿捕获
#define EnMAT_C 0x08 // 0000 1000, CCAPMn 中控制位3, 允许匹配或捕获后置位 CCFn
#define EnTOG_C 0x04 // 0000 0100, CCAPMn 中控制位2, 允许匹配或捕获后触发输出翻转
#define EnPWM_C 0x02 // 0000 0010, CCAPMn 中控制位1, 允许对应的端子输出PWM信号
#define EnCCFI_C 0x01 // 0000 0001, CCAPMn 中控制位0, 允许CCF产生中断
// PCA 中断
#define EnPCALVD_C 0x40
// PCA 优先级
#define PCALVD_HIGH 0x40
// 电机控制
#define INIT_PWM_FREQ 200 // PWM频率初始化值
#define MIN_OUT_TIME 800 // 最小PWM 输出的时间,单位 :1/(FOSC/2)
// PID 常数
#define DEFAULT_KP 1 // 默认PID系数
#define DEFAULT_TI 0 // 默认PID系数
#define DEFAULT_TD 0 // 默认PID系数
#define DEFAULT_PID_RATIO 1 // 默认PID系数
#define INI_PWM_VALUE 100 // PID 控制时的PWM初值,用于启动电机,否则无法实现测速
// 电机控制输出
/* 控制位对应关系:
电机1(左)
P2.0 - CTL 1, H 桥的左上臂,0 电平输出导通 1 电平输出截止
P2.1 - CTL 2, H 桥的左下臂,1 电平输出导通 0 电平输出截止
P2.2 - CTL 3, H 桥的右上臂,0 电平输出导通 1 电平输出截止
P2.3 - CTL 4, H 桥的右下臂,1 电平输出导通 0 电平输出截止
电机 2(右)
P2.4 - CTL 1, H 桥的左上臂,0 电平输出导通 1 电平输出截止
P2.5 - CTL 2, H 桥的左下臂,1 电平输出导通 0 电平输出截止
P2.6 - CTL 3, H 桥的右上臂,0 电平输出导通 1 电平输出截止
P2.7 - CTL 4, H 桥的右下臂,1 电平输出导通 0 电平输出截止
电机 1 控制逻辑:
P2.3 P2.2 P2.1 P2.0
右下 右上 左下 左上
正向前半周 1 1 0 0
正向后半周 1 1 0 1
反向前半周 0 0 1 1
反向前半周 0 1 1 1
惰行 0 1 0 1
刹车 1 1 1 1
双极性前半周 1 1 0 0
双极性后半周 0 0 1 1
电机 2 控制逻辑相同,只是对应高 4 位。
*/
// 电机 1 控制
#define M1FORWARD1 0x0C // 0000 1100 前进,左上、右下导通,
#define M1FORWARD2 0x0D // 0000 1101 前进间歇,右下导通
#define M1BACK1 0x03 // 0000 0011 后退,左下、右上导通
#define M1BACK2 0x07 // 0000 0111 后退间歇,左下导通
#define M1FLOAT 0x05 // 0000 0101 行进控制浮空,4 个臂都截止
#define M1BRACK 0x0F // 0000 1111 行进控制刹车,两个下臂导通,上臂截止
#define M1_MASK 0xF0 // 清除原来输出值,保留另一个电机的输出
// 电机 2 控制
#define M2FORWARD1 0xC0 // 1100 0000 前进,左上、右下导通,
#define M2FORWARD2 0xD0 // 1101 0000 前进间歇,右下导通
#define M2BACK1 0x30 // 0011 0000 后退,左下、右上导通
#define M2BACK2 0x70 // 0111 0000 后退间歇,左下导通
#define M2FLOAT 0x50 // 0101 0000 行进控制浮空,4 个臂都截止
#define M2BRACK 0xF0 // 1111 0000 行进控制刹车,两个下臂导通,上臂截止
#define M2_MASK 0x0F // 清除原来输出值,保留另一个电机的输出
#define PWM_CVT_POINT 50 // 单、双极性电机控制的PWM值转换点。好像效果不好,所以暂时降低进入点
#define FLOAT_PWM 1001 // PWM开环模式下的惰行命令
#define BRAKE_PWM 1002 // PWM开环模式下的刹车命令
#define FLOAT_SPEED 10001 // 转速闭环模式下的惰行命令
#define BRAKE_SPEED 10002 // 转速闭环模式下的刹车命令
#define IN_STOP 0 // 电机运转标志 —— 停
#define IN_FORWARD 1 // 电机运转标志 —— 正转
#define IN_BACKWARD -1 // 电机运转标志 —— 反转
// 测速用常数
#define UP 0 // 正跳数据对应的下标
#define DOWN 1 // 负跳数据对应的下标
#define GAP 2 // 两次计算之间的时间
#define NO_START_CAPTURE 0 // 未开始脉冲捕获
#define START_CAPTURE 0xFF // 开始脉冲捕获
#define PCA_CNT_FEQ 11059200l // PCA的计数频率. Fosc/2
#define PULSNUM_OF_CYCLE 10 // 一圈的脉冲数,即码盘的分割数
#define P_ERROR_LIMIT 8 // 正跳周期相对于对应负跳周期的偏差限制
// 基础常数
#define FOSC 22118400l // 振荡器频率 22.1184Mhz
#define TRUE 1
#define FALSE 0
#define HIGH_C 1
#define LOW_C 0
#define ON_C 1
#define OFF_C 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -