
开源协议
:GPL 3.0
描述
0 链接:
## 项目简介
本项目是基于MSPM0G3507(立创天猛星)的电机控制实验板,速度环,转速环双环串级PID控制。电流环预留功能。
1 项目功能
- UI绘制
- Flexible按键库扫描
- 波形显示
- 电机PID控制
2 原理解析(硬件说明)
2.1 输入防反接
输入使用NCE30P30K做防反接MOS,当Vgs<-1.6V时,MOS正向导通
(1)数据手册

1.栅极源极能承受耐压30V
2.持续漏极电流30A
(2)并联多电容,降低电容的寄生电阻,提高系统稳定性
2.2 电机驱动A4950
(1)A4950芯片带有限流保护措施
a.应用:只需要在芯片LSS和接地之间放置一个低阻值电阻
b.原理:低阻值电阻与VREF/10作比较,当电阻上电压大于VREF/10时,所有桥臂强制关断,由二极管续流,通过这种方法限制电流,类似运动控制系统中学到的,电流截止负反馈,因此此限的效果是比ACR电流调节器差的
芯片原理图

(2)

上图中两种调制方式电流纹波不同,是由于电流续流路劲的不同造成的
电流续流路径的不同导致 快衰减(Fast Decay) 和 慢衰减(Slow Decay)
(a)红色左半部分特征为:一个PWM信号,一个0信号,得到的电流波形为脉动程度较大的
(b)红色有半部分特征为:一个PWM信号,一个1信号,得到的电流波形为脉动程度较小的

续流路径全为二极管回路时,电流续流路劲阻抗小,电流下降速度快,纹波大。
续流路径为二极管回路和MOS导通阻抗,电流续流路劲阻抗大,电流下降速度慢,纹波小。
(3)参考PCB LAYOUT

2.3 电流传感器INA199x1(预留电流环功能)
(1)原理解析
由于磁传感器的价格过于昂贵,所以本项目采用的传感器为运算放大器搭建的加法电路
带宽:80kHZ
增益: 50
可得到输出
Vo = 50 * (deltaV)+Vref
3. 软件代码
3.1 程序框架
3.1.1 后台定时器任务
- 按键刷新,按键状态检测->绑定事件回调函数,刷新静态UI
- 编码器数据读取
3.1.2 前台任务:执行高速任务while(1)
- 波形绘制、PID计算
- 参数页长按按键调参
- PID参数显示
3.2 重点代码解析
- 开源按键库(Flexible)
https://github.com/murphyzhao/FlexibleButton
- 在20ms定时器中判断任务是否使能(防止打断SPI通信、PID计算)
if(get_task_status() == TASK_ENABLE)
{//防止前台绘制波形时按键扫描打断SPI通信
flex_button_scan();
}
- 每个按键绑定回调函数,不同事件有不同回调,静态UI在此显示,动态UI改变标志位在while(1)循环中做处理
void btn_up_cb(flex_button_t *btn)
{
switch(btn->event)
{
case FLEX_BTN_PRESS_CLICK://单击事件
break;
case FLEX_BTN_PRESS_LONG_HOLD://长按抬起事件
break;
case FLEX_BTN_PRESS_LONG_HOLD_UP://长按保持事件
break;
default:
break;
}
}
- 绘制波形函数
uint16_t draw_speed_curve(int window_start_x,int window_start_y,int window_w,int window_h,int curve_color,int background_color,short int rawValue)
- UI状态机管理
不同状态下对事件改变状态机
/**
* @brief:
* @parameter:statuss: 状态
* @parameter:Event: 事件
->ENTER_EVENT
->QUIT_EVENT
->MOTOR_EVENT
->LONG_PRESS_ADD_START_EVENT
->LONG_PRESS_SUBTRACT_START_EVENT
->LONG_PRESS_END_EVENT
*/
void event_manager(SystemStatus *status, SystemEvent Event)
- PID计算
typedef struct
{
float kp, ki, kd; // 三个静态系数
float change_p, change_i, change_d; // 三个动态参数
float error, last_error; // 误差、之前误差
float max_change_i; // 积分限幅
float output, max_output; // 输出、输出限幅
int target; // 目标
}PID;
//串级PID的结构体,包含两个单级PID
typedef struct
{
PID inner; //内环
PID outer; //外环
float output; //串级输出
}CascadePID;
注意事项
- 编码格式导致出错问题(encoding = GB2312)
https://blog.csdn.net/xu_duoduo/article/details/150607845?spm=1001.2014.3001.5501
实物图
图1:3D结构图俯视图
图2:3D结构图侧视图
图3:运行视图设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论