中自网

热门搜索:PID  plc  传感器  电机  变频器  工业以太网  无线通讯  低压 

当前位置:首页>>应用案例首页>>专业论文>>正文

基于STM32系列单片机的不插电自动消防小车的设计

发布日期:2018-11-16   来源:《智能机器人》5期   作者:王小江   浏览次数:23614
分享到:
【摘   要】:小车使用STM32系列单片机作为主控板,接收PS2遥控器的信息,控制电机运动,实现小车运动和改变喷头方向,控制继电器开关,实现水泵工作;使用12V可充电电池作为电源,利用太阳能发电板为电池充电,实现不插电工作。

关键字: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条 [查看全部]  网友评论