发新帖本帖赏金 60.00元(功能说明)我要提问
返回列表

[资料干货] PS2手柄移植到STM32上进行LED和步进电机的控制

[复制链接]
6217|2
手机看帖
扫描二维码
随时随地手机跟帖
王小琪|  楼主 | 2022-1-19 22:43 | 显示全部楼层 |阅读模式
#申请原创#  @21小跑堂  @21小跑堂
手上有一个PS2手柄,于是想着接到STM32的开发板上用手柄控制STM32进行点灯和驱动步进电机。
一、准备工作:
1.准备一个PS2手柄和接收器,两节5号电池给PS2手柄供电
2.准备一个STM32开发板及下载线,我用的主控是STM32F103C8T6
3.准备一个USB转TTL模块,方便后续进行串口调试,观察现象
4.准备一个DRV8825电机驱动模块和12V的步进电机,以及一个PWM发生器(非必须,选配)
5.准备一个12V电源用于给电机驱动器供电
微信图片_20220119201205.jpg

二、确保手上的东西都是正常可以使用的
1.将串口调试助手插上USB,如果是第一次使用的话,需要安装对应的驱动,用杜邦线将TX和RX短接,打开串口调试助手,可以看到接收到的数据和发送的数据一样,说明USB转TTL模块是好的,如下图。
2304261e801e22cdec.png 3520161e801e92f4dc.png 9312361e801f187b25.png

2.确保开发板是好的,那么先下载一个程序进去,只是做验证的话,肯定就点灯了,打开原理图可以看到开发板上的LED连接诶到了PA1上,配置GPIOA.1即可控制LED的亮灭状态。以正点原子的程序为模版进行修改,程序下载可以看到LED亮,说明开发板以及下载线都是好的。
6902461e803395056c.png 2939961e805a526e01.png 452961e8052a09366.png

3.用纯硬件的方式进行接线,通过DRV8825模块来驱动12V步进电机,首先我的步进电机是12V 60Ω的两相四线,通过这个参数先确定四个线哪两个为同一相。如下图,通过万用表测量可以知道1.2脚为同一相;3.4脚为同一相。
5217561e80650c06cb.png 9577061e80698705a8.png

介绍了电机,再来看看DRV8825模块,这是一个步进电机驱动器,淘宝上很容易就可以搜到,这个模块需要用到的引脚如下,扩展板已经引出来了。我们如果只想要让电机动起来的话,只需要三个信号脚即可,就是DIR、STEP、EN
DIR:接GND电机正转、接3.3V电机反转
STEP:调节频率输出方波可以对电机进行调速,但每个电机都有一个工作频率,太高或太低电机都不会转
EN:低电平使能,即必须这个脚接GND,电机才能转起来。
所以我们想要通过模拟电路让电机转起来,其实只需要一个信号,即STEP接PWM发生器输出方波,之所以用一个PWM发生器,就是因为可以很方便的调节频率,便于观察不同频率下电机的转动情况,待摸索到一个合适的频率,后面可以通过单片机的定时器来输出PWM,从而取代PWM发生器。所以PWM发生器只是中途一个测试的工具而已。
通过调节PWM发现,只有在500HZ--800HZ电机才转动比较平稳,在这个范围内,频率越高,转动速度越快。在这个范围之外的话,电机都会震动从而无法正常的运转。
868161e807b66ed17.png 9911161e8084f6a27b.png 微信图片_20220119210259.jpg 微信图片_20220119210303.jpg


4.前戏准备的差不多了,这个时候主角要登场了,那就是PS2手柄,接下来就是让PS2手柄和单片机进行通信。PS2手柄分为两部分,手柄主体和接收器,手柄的六个引脚可以理解为两个电源脚和四个信号脚。电源接VCC_3.3V和GND,四个信号脚通信协议和SPI一样。具体连线如下
GND----------MCU_GND
VCC----------MCU_3.3V
DAT----------MCU_PB12
CMD---------MCU_PB13
CS-----------MCU_PB14
CLK----------MCU_PB15
微信图片_20220119211200.jpg 微信图片_20220119211204.jpg 摇杆有两个模式,一个红灯模式,一个绿灯模式。红灯模式下推动摇杆会输出一个0-255的数字量,而且摇杆按下有输出。
而绿灯模式下,推动摇杆没有输出,当摇杆推到极限的时候,和按下上下左右键效果一样。通过按下手柄上的MODE键可以切换红灯和绿灯模式。
20220119215410.png 20220119220728.png
20220119220022.png 20220119221035.png

5.做一个简单的总结,将上面的操作综合起来,即可以通过PS2手柄进行LED和电机的控制。在代码中增加switch的判断,从而进行三种简单的工况处理。
工况一:按方向上,LED亮,电机转动
工况二:按方向下,LED亮,电机不转
工况三:不进行按键操作,LED灭,电机不转

7093061e81ef37aad7.png
7227461e8207181c19.png 9432661e8207b06c73.png 2500561e82080450b7.png

PS:综上所述,这次的PS2移植到STM32上控制LED和步进电机的整个流程结束了。
本文更多的是从整个项目的构思到最终实现的过程做了一个梳理,用模块化的思维来实现一个小项目。对于部分技术的原理未做深入的讲解,有感兴趣的小伙伴可以自行查阅资料进行学习。由于时间的紧迫,这个小项目其实还有很多可以完善的地方,譬如我最开始也说过了,PWM发生器是可以用STM32的定时器来替换的,同时也可以将DIR脚接到单片机上,这样就可以控制方向了,而如果多接几个电机,就可以DIY一个简单的遥控车来玩耍了。同时PS2上的按键有十几个,可以搭配其他各种外设相信也可以产生很多不一样的化学反应。后面如果有时间我会把定时器输出PWM的代码贴上来,大概就这么多吧,附件为相关的资料,感兴趣的小伙伴可自行下载。 STM32F103x8B_DS_CH_V10.pdf (1.82 MB)
微信图片_20220119201205.jpg

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 60.00 元 2022-03-30
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

Gavin3389| | 2022-3-31 08:48 | 显示全部楼层
真是厉害啊

使用特权

评论回复
sundychen168| | 2022-4-5 01:14 | 显示全部楼层
好好好好好好好好好好好好好好

使用特权

评论回复
返回列表 发新帖 本帖赏金 60.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则