
电赛TI训练营-简易PID项目
简介
项目基于立创-天猛星MSPM0G3507开发板,目标实现使用按键在IPS液晶屏上设置参数,通过PID算法,控制霍尔编码器电机,实现PID定速和定距功能。
简介:项目基于立创-天猛星MSPM0G3507开发板,目标实现使用按键在IPS液晶屏上设置参数,通过PID算法,控制霍尔编码器电机,实现PID定速和定距功能。开源协议
:CC BY-NC-SA 3.0
(未经作者授权,禁止转载)描述
简易PID项目训练营学习记录
一、项目简介
立创开发板推出了电赛TI-简易PID项目训练营活动,看到电赛和PID这俩词同时出现,有点犯难,因为基础薄弱,怕跟不上来; 不得不说,在了解项目简介和资料的详细程度后,感叹项目团队用心了,让我觉得我又行了,学起来! 以下内容仅做学习总结记录,可靠性请诸位自行甄别哈。
项目基于立创-天猛星MSPM0G3507开发板,目标实现使用按键在IPS液晶屏上设置参数,利用PID算法,控制霍尔编码器电机,实现PID定速和定距功能。
二、硬件部分
1、原理图
1.1电源输入电路
由三脚开关控制Type-c接入的5V电源给电机和开发板供电,导通时红色二极管指示灯被点亮; 其中U1为防倒灌二极管。

1.2电机驱动电路
项目采用BDR6126D直流电机驱动芯片,根据源项目指导,个人理解电机的供电是从电源与开发板中间位置引入的,电源发往开发板的电流,容易被电机忍不住偷吃一部分,这时候根据电机驱动数据手册上的示意图
需要给这家伙门口装个冰箱(C0电容),馋了先吃冰箱里的,不够再送,别惦记开发板家的。


电机编码器线序因为有所差异,三种线序灵活配置,总有一款适合你。

1.3按键电路
上下左右中,一共五个按键,控制A08、A09、A28、A31、B04这五个开发板上的引脚,当引脚接地为低电平时,按键逻辑被触发。

1.4立创-天猛星开发板
我还真研究过,此乃项目核心,名头之大,三十六天罡之一天猛星,别名猛冒星,意思就是讲它引脚定义之多,看得眼睛猛冒星星。


1.5连接排母
两个2.54引脚间距,2*20规格的排母,用来托举天猛星的。

1.6芯片座
铁打的芯片座,流水的芯片,BDR6126D电机驱动芯片专属宝座,不是它多尊贵,等它被电机气崩了,方便换。

1.7螺丝孔位
孔位是留了,螺丝忘买了。

Ps:上述图片灰色部分为
不加入BOM和不转到PCB的提示。
2、PCB
源项目考虑像在下这样的新手焊接问题,非常友好的使用直插元器件,使用量也很少,所以PCB布线比较清晰,着重注意电源线加粗就可以了。因购买的电机与源项目推荐的电机尺寸有差异,实物偏大,就简单的改了改布局,电机部分开孔略大,总比卡不进去强。
|
|
|
|
|
|
|
|
|
三、软件部分
1.环境搭建
1.1 本项目的软件类工具

从左到右分别是keil5嵌入式系统开发环境、MSPM0 SDK软件开发套件、SysConfig图形化配置工具。
这三款软件,本人和电脑都是第一次相识,说实话除了第一个知道是个厨房,芯片吃啥都在里头造,后面两个理解成SysConfig是位巧妇,不再为有没有米而发愁了,人家转头玩起了预制菜(MSPM0 SDK),这个组合可以让开发者专注功能实现,减少在底层代码上投入过多精力。
搭建教程源项目有详细且友好的操作步骤教学,但过程确实繁琐,状况百出,但目的是统一的,就是让系统找到这个要使用的工具。注意路径不能有中文,SDK与SysConfig路径配置要准确,一个点的问题耽误大半天进度。

就这里,多删了个点,报错:..\ti_msp_dl_config.h(54): error: 'ti/devices/msp/msp.h' file not found。
2.代码编写
2.1底层代码编写
整个代码编写进行分层编写分为硬件层(适配接口)、中间层(信息处理)、应用层(功能实现)
2.1.1屏幕信息与驱动创建
采用的是1.9寸,SPI接口,分辨率170*320,驱动ST7789。天猛星开发板自带SPI接口,焊上赠送的脚座,插上屏幕就可以用了。
|
|
|
|
|
|
|
|
|
2.1.2创建驱动
选取厂家提供的驱动源代码中的HARDWARE里的LCD代码复制到自己创建的工程文件里的hardware文件内。


![]()

导入其中两个.c文件到hardware目录下

使用SysConfig配置引脚,参考天猛星开发板原理图中的屏幕接口电路图。


跟着教学视频一步一步调整修改代码,最终实现软件SPI效果:

硬件SPI效果:

在后面的字符取模中出现复制到代码中的文字显示成问号,无法起到索引的作用,

解决办法:
选择keil菜单栏中的Edit➡configuration,修改全局编码即可。

在lcdfont.h文件内替换取模软件生成的字符


编译加载后的效果:

2.1.3按键驱动
复制上一个屏幕工程文件时,需要更改工程路径:


根据按键原理图使用图形化代码生成工具SysConfig配置上、下、左、右、中引脚按键初始化GPIO:


在hardware文件下新建两个文件并保存到工程文件内,用于存储按键状态与判断。

编辑测试代码,根据教学视频,编写中间按键被按下后屏幕显示字符。



实现效果:

接下来要借助开源按键库,实现按键长按与短按操作
短按显示字符,长按消失效果测试:

2.1.4电机驱动
使用图像化代码生成工具SysConfig配置PWM引脚


在创建的motor_drive工程文件里的硬件层文件夹hardware中新建hw_motor.c和hw_motor.h两文件,并将hw_motor.c添加至工程目录中。

根据电机驱动芯片输出真值表,得知电机转动控制逻辑,通过控制FI和BI两端PWM波占空比,实现高低电平的驱动逻辑。

验证BI为电平,FI为低电平时电机旋转逻辑,对着教学视频跟敲代码:



编译烧录后查看电机转动效果:

接下来尝试将电机旋转速度显示在屏幕上,每次10递增,电机缓慢加速,到达9999电机停止转动,周而复始。

2.1.5编码器驱动
依旧复制上一个工程,重命名encoder_drive文件名,打开kei并更改项目路径。
然后使用图形化代码生成工具配置引脚:
配置A相引脚

配置B相引脚:

创建hw_encoder.c和hw_encoder.h文件存在hardware文件内,并将hw_encoder.c导入到工程目录下:


获取编码器数值显示在屏幕上,单A相检测显示:

上图A相检测数值最大为±12(开了AB双相检测后才是±21),与教学视频±51不符,查找修改多出代码不得实现,几度要放弃,最后是在查看电机线序时偶然发现,项目推荐的是13线霍尔编码器,我这个是3线的,虽然不明白里面的道道,但是咱九九乘法口诀表背的溜啊,对于3线编码器,每转的计数为:3×4=12(4倍频)那这就对上了,52/4=13,符合线数之说。
不懂代码,让AI给修改如下:

最终A相编码器获取的数值为±51,获得伪13线编码器电器。

2.2软件应用层代码
软件应用层代码包括UI与界面管理、事件与状态机、PID定速功能、PID定距功能;这部份代码因个人基础薄弱,也没有视频教学这块石头了,没得摸了,完全是比着葫芦画瓢,就不贴代码了,直接展示各功能效果。
UI与界面管理

状态机与事件

PID定速功能

PID定距功能

四、结构部分
忘了给PCB留电机固定孔位,同时屏幕插在开发板上时,下方会悬空,时间长了会倾斜损坏引脚,再者如果被键盘不小心砸到了,实测能飞出去一米多。


出于固定电机和支撑屏幕的目的,打印了一个固定支撑架子:

本次训练营并没有对外壳有什么硬性要求,至于为啥给电机做个船型外壳,无他,装X用,别人问我捣鼓啥呢?验证舰载量子雷达使用PID算法对快速捕捉并跟踪雷达目 标的极端特殊应用。

五、总结
以上内容为学习记录,可靠性请自行斟酌。
通过本次训练营,对开发环境搭建、配置工程模板、彩屏驱动、按键驱动、电机驱动、编码器驱动这些软件底层设计进行了学习,对本人来说皆为新识,受益匪浅,需要好好消化一下。
就这样! 希望类似项目多多益善,不积跬步无以至千里,祝大家别累着,更进一步,大展宏图!
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。











评论