从小白入手stm32(C8T6)和PS2手柄完成的PS2遥控小车可能出现的问题,以及问题的解决方法(如串口无信号,串口信号异常等)

目录

一.PS2介绍

二.PS2通讯协议介绍

PS2通讯过程

以下是本人零基础做PS2通信时所出现的问题以及解决方法

1.代码哪里找?

2.连接串口后,串口接收不到信号?

3.小车转弯方式以及驱动模块选择

代码资源


一.PS2介绍

今天就带大家来用是stm32搭配PS2,手柄无线操控小车。如果你需要用PS2无线手柄搭配单面机来DIY制作,那么千万别错过这篇文章。

首先介绍一下我们今天的主角-----PS2手柄。 PS2手柄是日本SONY公司的PlayStation2 游戏机的遥控手柄。索尼的 PSX系列游戏主机在全球都很畅销。不知什么时候便有人打起 PS2手柄的主意,破解了通讯协议,使得手柄可以接在其他器件上遥控使用,比如遥控我们熟悉的机器人。突出的特点是这款手柄性价比极高,按键丰富,方便扩展到其它应用中。

二.PS2通讯协议介绍

PS2采用的是SPI通信协议,SPI是串行外设接口的缩写,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线(DI、DO、CS、CLK),节约了芯片的管脚,同时为PCB的布局上节省空间。

PS2接收器上一共有九根引脚,按上图从左往右,依次为:

1.DI/DAT:信号流向,从手柄到主机,此信号是一个8bit 的串行数据,同步传送于时钟的下降沿。信号的读取在时钟由高到低的变化过程中完成。

2.DO/CMD:信号流向,从主机到手柄,此信号和 DI相对,信号是一个 8bit 的串行数据, 同步传送于时钟的下降沿。

3.NC:空端口。

4.GND:电源地。

5.VCC:接收器工作电源,电源范围 3~5V。

6.CS/SEL:用于提供手柄触发信号。在通讯期间,处于低电平。

7.CLK:时钟信号,由主机发出,用于保持数据同步。

8.NC:空端口。

9.ACK:从手柄到主机的应答信号。此信号在每个8bits数据发送的最后一个周期变低并且CS一直保持低电平,如果CS信号不变低,约60微秒PS主机会试另一个外设。在编程时未使用ACK端口。(可以忽略)


PS2通讯过程

1. CS线在通讯期间拉低,通信过程中CS信号线在一串数据(9个字节,每个字节为8位)发送完毕后才会拉高,而不是每个字节发送完拉高。

2. DO、DI在在CLK时钟的下降沿完成数据的发送和读取。

综上所述,是PS2进行通信与操纵的基本原理。

以下是本人零基础做PS2通信时所出现的问题以及解决方法

1.代码哪里找?

代码一般商家会有,好一点的商家还会给连接视频,当然代码待得微调。

2.连接串口后,串口接收不到信号?
//向手柄发送命令
void PS2_Cmd(u8 CMD)
{
	volatile u16 ref=0x01;
	Data[1] = 0;
	for(ref=0x01;ref<0x0100;ref<<=1)
	{
		if(ref&CMD)
		{
			DO_H;                   //输出以为控制位
		}
		else DO_L;

		CLK_H;                        //时钟拉高
		delay_us(9);
		CLK_L;
		delay_us(9);
		CLK_H;
		if(DI)
			Data[1] = ref|Data[1];
	}
}

特别注意,排除接线以及硬件问题,那代码问题就是最大的疑点,而我也是因为这个疑点而卡了好久————由于它是靠下降沿与上升沿来获取数据,所以手柄或去数据的时钟周期不能太长,但商家给我的代码中周期有50us,结果就是读取不到时钟边沿,所以造成没有串口读取不到数据的情况,但吧这串代码的delay_us(50)改为9,就可以收到串口信号了。

3.小车转弯方式以及驱动模块选择

小车驱动推荐使用差数转弯方式,即两侧轮胎转速不同,即可达到转弯目的。

驱动模块选择,当使用输入电压比较大的驱动模块推荐使用L298N,使用方法和HW-166非常接近,但传入电压为12V,且可以输出5V电压,为32供电,且由于输入电压(L298N 12V)比(HW-166 5V)要大,所以输出功率也大,能给与电机更大的动力。

以上就是用stm32以及PS2手柄完成的PS2遥控小车可能出现的问题,以及问题的解决方法(如串口无信号,串口信号异常等),希望能帮助到大家!!!

代码资源

以下是PS2的代码资源与教程

链接:https://pan.baidu.com/s/1ZDKcO0-EPwM4Rn3AeVKJQw 
提取码:jwe5

使用时要注意时钟周期!!!

  • 35
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值