📄 md_const.h
字号:
/***************************************************/
/* MiniSum -2 项目 */
/* —— 主控程序电机驱动模块 */
/* 之常数声明 */
/* 20070326 */
/* 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 MIN_OUT_TIME 800 // 最小PWM 输出的时间,单位 :1/(FOSC/2)
// 电机控制输出
/* 控制位对应关系:
电机1(左)
P2.0 - CtrlL1, H 桥的左、右上臂,1 电平输出导通 0 电平输出截止,只有在对应下臂截止时有效
P2.1 - CtrlL2, H 桥的左下臂,1 电平输出导通 0 电平输出截止
P2.2 - CtrlL3, H 桥的右下臂,0 电平输出导通 1 电平输出截止
电机 2(右)
P2.4 - CtrlR1, H 桥的左、右上臂,1 电平输出导通 0 电平输出截止,只有在对应下臂截止时有效
P2.5 - CtrlR2, H 桥的左下臂,1 电平输出导通 0 电平输出截止
P2.6 - CtrlR3, H 桥的右下臂,0 电平输出导通 1 电平输出截止
控制逻辑:
Ctrl1 Ctrl2 Ctrl3 Drv1 Drv2 Drv3 Drv4 电机状态
X 0 0 0/截止 0/导通 0/截止 0/导通 刹车
PWM 1 0 PWM 1/截止 0/截止 0/导通 正转
PWM 0 1 0/截止 0/导通 PWM 1/截止 反转
0 1 1 0/截止 1/截止 0/截止 1/截止 惰行
1 1 1 1/导通 1/截止 1/导通 1/截止 刹车
电机 2 控制逻辑相同,只是对应高 3 位。
*/
// 电机 1 控制
#define M1FORWARD 0x02 // 0000 0010 前进,左上、右下导通,
#define M1BACK 0x04 // 0000 0100 后退,左下、右上导通
#define M1FLOAT 0x06 // 0000 0110 浮空,4 个臂都截止,此时 Ctrl1 应停止PWM输出,维持“0”。
#define M1BRACK 0x00 // 0000 0000 刹车,两个下臂导通,上臂截止
#define M1_MASK 0xF0 // 清除原来输出值,保留另一个电机的输出
// 电机 2 控制
#define M2FORWARD 0x20 // 0010 0000 前进,左上、右下导通,
#define M2BACK 0x40 // 0100 0000 后退,左下、右上导通
#define M2FLOAT 0x60 // 0110 0000 行进控制浮空,4 个臂都截止
#define M2BRACK 0x00 // 0000 0000 行进控制刹车,两个下臂导通,上臂截止
#define M2_MASK 0x0F // 清除原来输出值,保留另一个电机的输出
#define PWM_CVT_POINT 50 // 单、双极性电机控制的PWM值转换点。好像效果不好,所以暂时降低进入点
#define IN_STOP 0 // 电机运转标志 —— 停
#define IN_FORWARD 1 // 电机运转标志 —— 正转
#define IN_BACKWARD -1 // 电机运转标志 —— 反转
// 测速用常数
#define NO_START_CAPTURE 0 // 未开始脉冲捕获
#define START_CAPTURE 0xFF // 开始脉冲捕获
#define PCA_CNT_FEQ 1843200l // PCA的计数频率. Fosc/12
#define PULSNUM_OF_CYCLE 100 // 一圈的脉冲数,即码盘的分割数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -