关键字:STM32系列单片机;PS2遥控器;太阳能充电
1 引言
随着电子技术的不断成熟与生活化,以单片机作为主控模块的各种功能化系统应运而生,大大地为人们的生活提供了便利。这些功能化系统采用无线传输进行遥控,可以帮助人们完成一些危险的工作,不仅保障了人类的安全,还可以比人类更高效。
本设计基于STM32系列单片机作为主控板,使用PS2遥控器发射无线指令,接收端接收到无线信息并且输入到主控板,主控板根据接收到的信息控制电机运动和继电器开关。本系统操作方便,设计灵活,制作成本低,与实际结合,有良好的现实意义[1]。
2 系统硬件设计
在设计电路板时,对系统的各个模块都进行了电磁兼容性设计,各部分良好接地并采用保护电路,将高速数字电路与模拟电路分开,提高了系统的灵敏度和稳定性。系统硬件设计框图如图1所示。系统的电力支持来源于太阳能发电板,电量储存在电池中备用,系统模块对电压有两种要求,MCU使用5V电压,因此需要降压模块,电机驱动、水泵直接使用12V电压。MCU作为桥梁完成接收控制信息并解码、根据控制信息输出控制量的功能。
2.1 主控模块
如图2所示,本系统使用以STM32F103C8为主控芯片的单片机最小系统板,该芯片外接8MHz的晶振,经过内部PLL锁相环倍频,产生72MHz的时钟频率[2]。当NRST上高电平信号超过两个时钟周期时,系统复位。本系统使用一路PWM输出使减速电机低速运行以调整喷头方位,继电器信号用以控制水泵开关,两个方位电机和两个运动电机各使用两个信号用以控制正反转,两个运动电机全速运行驱使小车运动,PS2遥控接收器使用四个信号分别为数据输入、数据输出、片选信号和时钟信号。
2.2 电机驱动模块
如图3所示,小车运动电机为ASLONG的JGA25-370电机,工作电压为12V,空载转速为399rpm,因此使用输出电压为12V的TB6612电机驱动。TB6612为双驱动,可以驱动两个电机,PWM端输入单片机PWM输出,控制电机转速,这里我们接5V正电压让电机全速运行,IN1、IN2端输入正反转控制信号,控制电机转向。O1、O2作为输出接电机的两个端口[3]。
如图4所示,方位控制电机为普通直流减速电机,工作电压为5V,空载转速为200rpm,因此使用输出电压为5V的L298N电机驱动。L298N也为双驱动。使能端输入单片机PWM输出,控制电机转速,这里我们利用单片机产生频率为72kHz,占空比为50%的方波信号控制电机慢速运行,IN1、IN2和IN3、IN4端输入两个电机的正反转控制信号,控制电机转向。OUT1、OUT2和OUT3、OUT4作为输出分别接电机的两个端口[4]。
由于电机启动瞬间电流很大,会将整个系统电压拉低,造成其他设备的工作不正常,因此要在电池电源输入侧加上较大滤波电容[5]。
2.3 继电器开关模块
如图5所示,喷水驱动为12V直流微型潜水泵,额定功率30W,最大流量4L/min,最大扬程10m,因此使用工作电压为12V的光耦隔离继电器开关。继电器DC+端接直流电源12V,DC-端接地,IN端接开关控制信号,COM端接直流电源12V,NO端常开,接水泵正极。
2.4 电源模块
如图6所示,为实现不插电工作,本系统采用太阳能发电板为电池充电。由于发电板输出电压受光照影响,因此加入稳压电路为电池提供稳定的12V电压。稳压电路由二极管桥式整流电路、电容滤波电路和L7812集成稳压器组成[6]。
3 系统软件设计
本系统软件部分主要包括主程序、PS2遥控器通信协议和电机工作控制函数。系统软件流程图如图7所示。
3.1 主函数
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化LED
//KEY_Init(); //初始化按键
PS2_Init(); //驱动端口初始化
PS2_SetInit(); //配置初始化
TIM1_PWM_Init(999,0); //PWM输出初始化
TIM_SetCompare1(TIM1,500);//设置占空比为50%
//Adc_Init(); //ADC初始化
//uart_init(9600); //串口初始化,波特率为9600
while(1)
{
key=PS2_DataKey();
// if(USART_RX_STA&0x8000) { yaokong();}
yundong();
delay_ms(50);
PCout(13)=!PCout(13) ;
}
}
3.2 PS2通信协议程序
void PS2_Init(void); //手柄接口初始化
u8 PS2_RedLight(void); //判断是否为红灯模式
void PS2_ReadData(void); //读手柄数据
void PS2_Cmd(u8 CMD); //向手柄发送命令
u8 PS2_DataKey(void); //按键值读取
u8 PS2_AnologData(u8 button); //得到一个摇杆的模拟量
void PS2_ClearData(void); //清除数据缓冲区
void PS2_Vibration(u8 motor1, u8 motor2);//震动设置
void PS2_EnterConfing(void); //进入配置
void PS2_TurnOnAnalogMode(void); //发送模拟量
void PS2_VibrationMode(void); //震动设置
void PS2_ExitConfing(void); //完成配置
void PS2_SetInit(void); //配置初始化[7]
3.3 运动函数程序
void yundong()
{ else if(key==16)//小车左转
if(key==13) //小车前进 {
{ delay_ms(10);
delay_ms(10); PBout(7)=0;
PBout(7)=1; PBout(8)=0;
PBout(8)=0; PBout(9)=1;
PBout(9)=1; PBout(10)=0;
PBout(10)=0; }
}
else if(key==14) //小车右转 else if(key==15)//小车后退
{ {
delay_ms(10); delay_ms(10);
PBout(7)=1; PBout(7)=0;
PBout(8)=0; PBout(8)=1;
BBout(9)=0; PBout(9)=0;
PBout(10)=0; PBout(10)=1;
} }
else if(key==2){ //水泵开
delay_ms(10); else if(key==8)//喷头向右
PBout(11)=1; {
} delay_ms(10);
else if(key==3){ //水泵关 PBout(14)=0;
delay_ms(10); PBout(15)=1;
PBout(11)=0; }
PBout(11)=0; else//停止运动
} {
else if(key==5){ //喷头向上 PBout(7)=0;
delay_ms(10); PBout(8)=0;
PBout(12)=1; PBout(9)=0;
PBout(13)=0 PBout(10)=0;
} PBout(12)=0;
else if(key==7) //喷头向下 PBout(13)=0;
{ PBout(14)=0;
delay_ms(10); PBout(15)=0;
PBout(12)=0; }
PBout(13)=1; }
}
else if(key==6){ }//喷头向左
delay_ms(10);
PBout(14)=1;
PBout(15)=0;
}
4 实物作品图片
小车整体结构图如图8所示。主控及外设图如图9所示。发电片及稳压电路如图10所示。
5 结束语
经过硬件设计和软件编程,最终实现了小车运动、喷头全方位移动、水泵泵水,太阳能充电可以实现,但效率不是太高。总之,小车的运动能力和工作能力良好,可以实现消防功能。另外,还可以通过主控板扩展ADC读取温度传感器数值、OLED屏幕显示和NRF24L01无线传送等功能。
参考文献:
[1]李志瑞,申庆超.基于STM32的重力感应无线智能遥控小车设计[J].物联网技术,2017(10):59-61.
[2]STM32F103C8T6Datasheet-STMicroelectronicst[EB/OL].http://www.alldatasheet. com/datasheet-pdf/pdf/201596/STMICROELECTRONICS/STM32F103C8T6.html.
[3]TB6612FNG Datasheet-Toshiba Semiconductor[EB/OL].http://www.alldatasheet. com/datasheet-pdf/pdf/807693/TOSHIBA/TB6612FNG.html.
[4]L298N Datasheet[EB/OL].http://www.alldatasheet.com/ view.jsp?Searchword=
L298N.
[5]魏雅.基于单片机的两轮自平衡小车的设计[J].计算机与数字工程,2017(9):1870-1873.
[6]康华光.电子技术基础.模拟部分[M].北京:高等教育出版社,2015.
[7]PS2解码通讯手册V1.5[EB/OL]. http://yfrobot.com/forum.php?mod=viewthread &tid =11561&highlight=PS2.
作者简介:
王小江 就读于江苏科技大学电子信息学院 研究方向:嵌入式开发
共0条 [查看全部] 网友评论