YFROBOT创客社区
标题: PS2无线手柄单片机应用,PS2解码,PS2控制舵机,PS2遥控小车stm32,arduino的PS2库 [打印本页]
作者: aosini 时间: 2015-5-28 16:32
标题: PS2无线手柄单片机应用,PS2解码,PS2控制舵机,PS2遥控小车stm32,arduino的PS2库
ps2手柄是索尼游戏机的遥控手柄,索尼的系列游戏主机在全球很是畅销。不知什么时候便有人打起ps2手柄的主意,破解了通讯协议,使得手柄可以接在其他器件上做遥控使用,比如遥控我们熟悉的四轮车与机器人。突出的特点是现在这款手柄性价比极高。按键丰富,方便扩展到其它应用中。
[attach]976[/attach]
移步优酷观看:http://v.youku.com/v_show/id_XMTQ5MzM0NjMyMA==.html[vedio=375,500]https://player.youku.com/embed/XMTQ5MzM0NjMyMA==[/vedio]
一、接收器线号
[attach]1102[/attach]
1
| 2
| 3
| 4
| 5
| 6
| 7
| 8
| 9
|
DI/DAT
| DO/CMD
| NC
| GND
| VDD
| CS/SEL
| CLK
| NC
| ACK
|
批次不同,接收器的外观会有所区别,一个上有电源灯红灯,一个上没有电源灯,但使用方法是一样的,引脚定义是一样的。
- DI/DAT:信号流向,从手柄到主机,此信号是一个8bit的串行数据,同步传送于时钟的下降沿。信号的读取在时钟由高到低的变化过程中完成。
- DO/CMD:信号流向,从主机到手柄,此信号和DI相对,信号是一个8bit的串行数据,同步传送于时钟的下降沿。
- NC:空端口;
- GND:电源地;
- VDD:接收器工作电源,电源范围3~5V;
- CS/SEL:用于提供手柄触发信号。在通讯期间,处于低电平;
- CLK:时钟信号,由主机发出,用于保持数据同步;
- NC:空端口;
- ACK:从手柄到主机的应答信号。此信号在每个8bits数据发送的最后一个周期变低并且CS一直保持低电平,如果CS信号不变低,约60微秒PS主机会试另一个外设。在编程时未使用ACK端口。
二、手柄的使用、连接配对说明
PS2手柄由手柄和接收器两个部分组成,手柄需要两节7号1.5V供电,接收器的电源和控制器使用同一电源,电源范围为3~5V,不能接反,不能超电压,过压和反接,都会使接收器烧坏。
手柄上有个电源开关,ON开/OFF关,将手柄开关打到ON上,在未搜索到接收器的状况下,手柄上的灯会不停的闪,在一定时间内,还未搜索到接收器,手柄将进入待机模式,手柄上的灯将灭掉,这时,按下“START”键,唤醒手柄。
接收器供电,在未配对的状况在,绿灯闪。
手柄打开,接收器供电,手柄和接收器会自动配对,这时灯常亮,手柄配对成功。按键“MODE”(手柄批次不同,上面的标识有可能是"ANALOG",但不会影响使用),可以选择“红灯模式”、“绿灯模式”。
有些用户反映,手柄和接收器不能正常配对!多数问题是,接收器的接线不正确,或程序有问题。
解决方法:接收器只接电源(电源线一定要连接正确),不接任何数据线和时钟线,一般情况下手柄是能够配对成功。配对成功后灯常亮,说明手柄是好的。这时再检查接线是否正确,程序移植是否有问题。
三、时序及数据意义
在时钟下降沿时,完成数据(1bit))的发送与接收。
当主机想读手柄数据时,将会拉低CS线电平,并发出一个命令“0x01”;手柄会回复它的ID“0x41=模拟绿灯,0x73=模拟红灯”;在手柄发送ID的同时,主机将传送0x42,请求数据;随后手柄发送出0x5A,告诉主机“数据来了”。
idle:数据线空闲,该数据线无数据传送。
一个通讯周期有9个字节(8位),这些数据是依次按传送的。
顺序
| DO
| DI
| Bit0、Bit1、Bit2、Bit3、Bit4、Bit5、Bit6、Bit7、
|
0
| 0X01
| idle
|
|
1
| 0x42
| ID
|
|
2
| idle
| 0x5A
|
|
3
| idle
| data
| SELECT、L3、R3、START、UP、RIGHT、DOWN、LEFT
|
4
| idle
| data
| L2、R2、L1、R1、△、○、╳、□
|
5
| idle
| data
| PSS_RX(0x00=left、0xFF=right)
|
6
| idle
| data
| PSS_RY(0x00=up、0xFF=down)
|
7
| idle
| data
| PSS_LX(0x00=left、0xFF=right)
|
8
| idle
| data
| PSS_LY(0x00=up、0xFF=down)
|
当有按键按下,对应位为“0”,其他位为“1”,例如当键“SELECT”被按下时,Data[3]=11111110B,
红灯模式时:左右摇杆发送模拟值,0x00~0xFF之间,且摇杆按下的键值L3、R3有效;
绿灯模式时:左右摇杆模拟值为无效,推到极限时,对应发送UP、RIGHT、DOWN、LEFT、△、○、╳、□,按键L3、R3无效。
详细手册说明及例程请下载附件,线的连接方式根据您的程序进行正确连接。
在这里我们提供一个附件,里面的内容包括:
1、PS2例程(PS2解码例程(主控stm32,c语言编写解码例程)、PS2控制小车程序、PS2控制舵机例程);
2、PS2-Arduino-lib(Arduino例程);
3、PS2解码通讯手册.pdf;
4、PS2解码通讯常见问题汇总.pdf。
打开文件后请首先阅读ReadMeFirst.txt,提高您浏览的效率。
如果您遇到问题,先先打开《PS2解码通讯常见问题汇总》,看是否能够解决,如不能解决请回复或直接联系我。
作者: 雷柏 时间: 2015-5-28 16:43
来瞧瞧
作者: wangyv 时间: 2015-6-11 20:49
老板给的舵机库有问题啊,编译过不去,有错误啊
作者: aosini 时间: 2015-6-12 08:25
没有呀,都是验证好后再发布的。用keil3打开的。
作者: UNO 时间: 2015-6-16 18:17
学习PS2的用法来制作东西
作者: aosini 时间: 2015-6-25 11:22
谢谢支持
作者: kingson3721 时间: 2015-6-29 11:56
这个需要 ps2+舵机的资料很少
作者: kingson3721 时间: 2015-6-29 11:59
老大 有没有arduino控制舵机的例程,很需要啊
作者: aosini 时间: 2015-6-30 08:50
在arduino库中是有的,有对应的例程,ArduinoIDE-1.5.4\libraries\Servo\examples,在这个文件夹中,您找一下
作者: imetal 时间: 2015-6-30 15:43
感谢分享感谢分享感谢分享
作者: gyy4606 时间: 2015-7-4 18:53
学习看看
作者: chi5277 时间: 2015-7-4 19:54
学习一下,谢谢。
作者: wcm_e 时间: 2015-7-10 10:29
学习, 谢谢了!
作者: w282654276 时间: 2015-7-11 20:05
he很好谢谢楼主
作者: 小白不白 时间: 2015-7-14 14:35
来学习学习~~
作者: feixiang1990 时间: 2015-7-18 21:58
学习一下啊啊 啊啊啊啊啊啊
作者: 见龙在田 时间: 2015-7-18 22:54
正是我想要的。。。
作者: wz133 时间: 2015-7-20 17:25
这个好赞
作者: donssn@163.com 时间: 2015-7-25 16:51
这个需要学习学习啊。。。。。。。。。。。。
作者: Kero 时间: 2015-7-25 16:57
Good Share,THX
作者: Onecode 时间: 2015-7-27 13:38
作者: wheverat 时间: 2015-7-28 23:53
看看来学习下
作者: bratsun 时间: 2015-7-31 11:07
看看看看看看
作者: 雨之源14 时间: 2015-7-31 17:42
且让我来看看
作者: 牛解庖丁 时间: 2015-8-3 17:41
刚开始研究ps2,来取取经
作者: 海梦1993 时间: 2015-8-5 12:43
学习一下
作者: AllBlue 时间: 2015-8-6 19:52
顶,支持
作者: mahaodong1992 时间: 2015-8-10 11:03
受益匪浅,希望楼主多多分享相关资源,不胜感激
作者: vgboy8866 时间: 2015-8-14 07:59
学习一下。。。。。。。。
作者: Hopeful 时间: 2015-8-17 12:31
赞一个,对我来说现在太有用了
作者: 机器人love着 时间: 2015-8-17 22:18
多谢楼主分享啊!
作者: wjx10210 时间: 2015-8-22 09:19
好好学习一下 希望是真的
作者: 916689926 时间: 2015-8-22 16:11
看看能不能有用
作者: 阿明 时间: 2015-8-26 16:46
非官方让他是打发时光W
作者: 阿明 时间: 2015-8-26 16:58
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
作者: 温ぁ哥ゥけ尔 时间: 2015-9-1 09:56
学习PS2的用法来制作遥控小车
作者: yeying 时间: 2015-9-1 11:27
很不错哦!很不错哦!很不错哦!很不错哦!很不错哦!
作者: 字符233 时间: 2015-9-1 14:20
学习PS2的用法来控制车子的
作者: jenny 时间: 2015-9-2 11:43
能不能支持STM32?
作者: Alan 时间: 2015-9-2 17:33
MSP430可以用吗
作者: Alan 时间: 2015-9-2 17:34
回复了也不能下载是怎么了。/
作者: Alan 时间: 2015-9-2 17:36
下载不了资料,楼主可以给我发一份吗。forwoshitjy@live.com
作者: Alan 时间: 2015-9-2 17:36
下载不了资料,楼主可以给我发一份吗。forwoshitjy@live.com
作者: aosini 时间: 2015-9-3 19:07
当时为了防止恶意注册注水,所以需要邮箱激活验证的,
作者: aosini 时间: 2015-9-3 19:08
好的 已经发到您邮箱了 请查收一下
作者: 詹姆斯19931010 时间: 2015-9-4 18:54
学习一下,,,,,,,,
作者: aosini 时间: 2015-9-7 08:17
可以的, 例程就是用stm32的,并实验遥控小车
作者: mengdeersijiu 时间: 2015-9-7 13:56
正有需要啊谢谢分享
作者: 111fire 时间: 2015-9-15 11:20
很好很好
作者: 超超 时间: 2015-9-16 10:30
很好的,我喜欢
作者: ganlinufo 时间: 2015-9-22 20:18
正好需要这资料。。谢谢楼主
作者: hunt618 时间: 2015-9-24 13:37
最讨厌回复了!
作者: 邹姆斯特朗 时间: 2015-9-25 09:55
ArduinoIDE-1.5.4\libraries\Servo\examples,在这个文件夹中
作者: 天天开心 时间: 2015-10-3 16:50
PS2X_lib.h
作者: altim 时间: 2015-10-5 11:35
好东西,多谢分享
作者: hero_sun 时间: 2016-2-2 19:10
程序在哪儿?
作者: linux_MCU 时间: 2016-3-11 10:06
你好,请问这款手柄支持飞思卡尔单片机吗?谢谢
作者: aosini 时间: 2016-3-11 10:56
可以的,只要移植一下就可以了。
作者: AllBlue 时间: 2016-4-28 17:24
缺少库文件
作者: yuyous 时间: 2016-7-16 17:26
谢谢分享
作者: pumpitup 时间: 2016-8-10 18:15
实验大致成功,就是有点小问题。
一是dat cmd sel clk分别接13 11 10 12,是不是可以改为任意的端口
二是pressures如果设置为true,error会返回3,但是后续的实验中,可以读出按键轻重
三是read_gamepad(false, 震动强度)中,前一个false有啥作用?
作者: aosini 时间: 2016-8-13 11:01
您好
1、这个端口是可以自己随意定义的,在程序的开始部分,自己定义一下端口就可以。
2、可以看它的错误提示“可能不支持”,我估计是因为手柄的版本不同,怕手柄无这项功能,可以配置,但手柄如果无这项功能,就不会输出按键轻重值。
3、这个您需要看一下库文件,PS2X_lib.cpp,找到这函数,看一下程序就会明白的。它就是用来控制手柄中两个震动电机的函数,结合我们的《ps2解码通讯手册》中数据意义对照表。
在函数boolean PS2X::read_gamepad(boolean motor1, byte motor2) 中,有这样一条语句:char dword[9] = {0x01,0x42,0,motor1,motor2,0,0,0,0};,就是震动及震动幅度配置,可以看一下我们《ps2解码通讯手册》中第8页的内容,有助于您的理解。
作者: derek 时间: 2016-9-26 11:54
PS2配对成功了,但没有数据输出,请问接收器端输出的spi是主模式还是从模式,没有clk,cs也没反应!
作者: aosini 时间: 2016-9-26 13:40
接收器只接VCC和GND,手柄和接收器就能够配对成功。
CLK和CS信号是由单片机发出,单片机和接收器之间通讯,接收器接收手柄发来的信号,具体的内容请看《PS2解码通讯手册》
作者: as3323722 时间: 2016-9-26 17:26
请问STM32破解 配对成功 但是数据发送一直是固定值怎么办 我用的控制舵机的程序 发送接受值到USART1观察的
作者: derek 时间: 2016-9-28 14:23
配对成功的了,按手册说明发命令,C:\Users\Derek\Desktop\PS2解码通讯及例程V1.7DI/DAT一直没有数据,请问可能是什么原因波形图如附件:黄色CLK,绿色CMD,蓝色DAT;
作者: aosini 时间: 2016-9-29 08:05
您好,您直接使用“ps2震动实验(keil5)”,配对成功不能说明数据接收就正常,例程适用于stm32f103系列的单片机,线连接的时候注意一下信号线所对应的IO口。
作者: aosini 时间: 2016-9-29 08:23
配对成功不能说明数据接收就正常,例程适用于stm32f103系列的单片机,如果不是,需要根据自己的单片机而改动一下,线连接的时候注意一下信号线所对应的IO口。
作者: firefly 时间: 2016-10-17 17:23
下载后 3、PS2解码通讯手册.pdf; 4、PS2解码通讯常见问题汇总.pdf。文件加密了,打不开,密码是什么?
作者: TRknight 时间: 2016-10-17 22:06
您好,请问手册里说的时钟频率250kHZ是由
CLK_H;
delay_us(10);
CLK_L;
delay_us(10); 中间的延时函数 控制的么?
为什么我将延时增加十倍之后才能收到信号?
作者: aosini 时间: 2016-10-18 07:50
这个还真的没有遇到过。是不是初始化的时间有问题?您检测一下看看
作者: logicbug 时间: 2016-10-29 10:56
下载学习,多谢楼主!
作者: sylbox 时间: 2017-1-20 16:24
这个很好,来的很及时
作者: eddie5492001t 时间: 2017-2-2 15:16
請問 連接完後用serial monitor看,執行example.ino 按下PS2按鈕後出現一堆圖形亂碼,你有遇過嗎, 這要怎麼處理ㄋ
作者: aosini 时间: 2017-2-4 08:02
您看一下串口波特率是否设置正确
作者: 陈空空ol 时间: 2017-2-19 21:28
你好,我想问个问题就是,我用的是STM32的程序,关于手柄按键怎么用啊,里面是函数自直接调用还是要自己编写啊
作者: chou4525 时间: 2017-2-20 16:35
謝謝樓主的分享
作者: elementary 时间: 2017-3-15 16:04
找了好久!!!
作者: elementary 时间: 2017-3-18 22:53
居然来下载了两次!消耗了两次积分!谢谢分享
作者: liyuyao001 时间: 2017-3-19 14:38
谢谢分享,已经买了遥控器,研究研究。
作者: AllBlue 时间: 2017-3-19 19:13
加油了,有问题还可以回来问
作者: bujqr 时间: 2017-4-25 23:19
LZ,原厂PS2有线手柄和单片机连的时候需要加驱动,是电流驱动吗?用ULN2003可以吗?
作者: 番茄柿炒蛋 时间: 2017-5-16 12:00
谢谢老板分享!!!
作者: twing 时间: 2017-5-16 15:42
谢谢老板,学习 学习
作者: ren_345 时间: 2017-7-29 23:42
感谢分享!
作者: xom 时间: 2018-1-30 11:17
謝謝分享謝謝分享
作者: AllBlue 时间: 2018-1-31 08:27
手柄和单片机连接不需要驱动,不过要注意电压,应该是3.3V电压
作者: 290026425 时间: 2018-4-3 22:49
压缩包里的程序可以做什么用呀
作者: 290026425 时间: 2018-4-3 23:07
示例程序上马达是哪个端口
作者: userjie 时间: 2018-4-9 23:58
请问楼主,20组机器人比赛,大家都用你们的同款ps2无线手柄,会不会造成相互干扰而控制错对象?
作者: UNO 时间: 2018-4-10 08:08
需要一组一组配对,一起配对可能会导致乱配对
作者: userjie 时间: 2018-4-10 21:05
配完对后就不会干扰了是吧。。。
但如果一个手柄进入休眠,按start再次启动。这时场内有许多手柄在工作,该手柄还能正确找到自己的机器吗?
作者: UNO 时间: 2018-4-13 08:03
只要场地没有未配对,且没通电的接收就不会乱配对。
作者: 13719272278 时间: 2018-5-29 17:40
u8 PS2_DataKey()
{
u8 index;
PS2_ClearData();
PS2_ReadData();
Handkey=(Data[4]<<8)|Data[3]; //这是16个按键 按下为0, 未按下为1
for(index=0;index<16;index++)
{
if((Handkey&(1<<(MASK[index]-1)))==0)
return index+1;
}
return 0; //没有任何按键按下
}
请问这个检测手柄按键的函数是不是有问题,好像不能准确检测16个按键,求指点
作者: wwrrpp 时间: 2018-6-11 20:34
有朋友成功把ps2手柄移植到stm32f4系列上么?我尝试了数天,摇杆输入模拟量一直不成功,无法切换“红灯模式”(按下MOOD后,闪几下,红灯仍不亮),将DO接头拔下后,可切换“红灯模式”,接上DO又变回绿灯。请问是与IO口配置有关吗?或者其它什么原因? 谢谢!
作者: TT1998 时间: 2018-7-25 22:14
没有51的程序吗
作者: UNO 时间: 2018-7-27 08:04
没有的
作者: duan 时间: 2018-7-30 16:12
衷心的感谢,
作者: 860921464 时间: 2018-10-27 09:58
没有 stm32f10x_lib.h 头文件怎么办?
作者: zsulyq 时间: 2019-2-26 12:37
keil c的,有没有Arduino版本的
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) |
Powered by Discuz! X3.1 |