微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > DIY机器人系列:工程师自制蓝光呼吸WIFI机器人

DIY机器人系列:工程师自制蓝光呼吸WIFI机器人

时间:07-27 来源:未知 点击:

方法二是利用winscp连接上路由,上传ser2net.ipk,然后运行putty,登陆路由执行

opkg update opkg install 软件包地址

同昨日安装ov519驱动。

安装完毕ser2net后,需要进行一定的设置,在命令行界面下输入

cd /

进入路由根目录,再输入

cd etc

进入ect 目录后执行

vi ser2net.conf (当安装成功后才会出现此设置文件)

找到

2001:raw:600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS

#2002:raw:600:/dev/ttyS1:9600 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS

注意,这里"#"代表的是屏蔽,我们修改的是非屏蔽语句,可以看到,上位机发送的端口是2001,这就是我们需要发送的端口号,波特率是9600,其它的略。

设置完毕后记得保存退出,然后这里要执行一次ser2net,以开启服务。

一切设置妥当后,我们再次借用liuviking的程序进行串口通讯的测试,运行liuviking的程序,然后再运行"串口调试助手",在程序中点击发送串口数据,可以看到在"串口调试助手",有正确的数据输出,至此,Shy的串口连接部分设置完毕。

3   Linux平台:openwrt系统中添加自启动

添加自启动项的目的是为了在SHY启动的时候能够自动启动更多的服务,配合UCI命令。

在/etc/init.d里添加需要启动的shell脚本,假设名字为my-plugin。接下来模仿该目录下其他启动脚本的格式,添加你的代码。

[cpp] view plaincopyprint? 1. #!/bin/sh /etc/rc.common 2. # /init.d/my-plugin 3. START=50 #启动顺序 4. 5. start() { 6. #启动项执行的代码 7. } 8. 9. stop() { 10. killall my-plugin 11. }

之后还需要在rc.d目录下做一个链接,启动时系统会按顺序启动rc.d目录下的脚本链接,对应执行init.d目录下的启动脚本。

链接命令如下:ln -s ../init.d/my-plugin /etc/rc.d/S50my-plugin


 

4   单片机模块

4.1   构建STC11F02E最小系统

我们选用STC11F02E单片机作为SHY的控制芯片电路部分,关于STC11F02E的参数如下:

STC11F02E单片机为增强型的8051内核,具有2KB的片内Flash程序存储器、2KB的EEPROM存储器和256KB的片内SRAM数据存储器。

这款单片机的UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)模块的最大特点就是通过配置特殊功能寄存器AUXR1中的第7位UART_P1的状态可以使UART模块的两个引脚(RXD、TXD)接到P3端口的P3.0、P3.1引脚,或者接到P1端口的P1.6、P1.7引脚,从而可以充当两个串口使用。

因为制作SHY需要的引脚并不是很多,所以我们只需要20引脚的单片机即可。这片STC11F02E

符合20引脚,小巧,作为增强型STC芯片,功耗小。

有两个串口通讯接口,可一个用于下载,一个用于openwrt路由通讯。

从DATASHEET中得到STC11F02E 的芯片管脚图

在这里,我们需要用到:

P1.7 作为串口的TX(transmit) 传送 接口

P1.6 作为串口的RX(Recive) 接收 接口

P1.5 - P1.0 用于控制L298N($2.1300)驱动电路

P3.7 用于PWM控制LED灯

P3.6/RST 用于复位电路

XTAL2

XTAL1 用于11.0592MHZ晶振

RXD

TXD 用于在线下载线路

复位电路图

RST保持两个机器周期以上的高电平时自动复位

晶振,复位电路,VCC,GND,连接好后

至此,STC11F02E最小系统完成。

4.2   中断方式接收串口数据

接收串口数据的目的是为了与openwrt路由完成通讯,STC11F02E要准确无误的辨识出openwrt路由发过来的指令,编制测试程序如下:

#include #include #define uchar unsigned char #define uint unsigned int unsigned char Receive(void) { unsigned char dat; while(RI==0); //只要接收中断标志位RI没有被置"1" 当接收完毕时,中断标志RI被置1 //等待,直至接收完毕(RI=1) RI=0; //为了接收下一帧数据,需将RI清0 dat=SBUF; //将接收缓冲器中的数据存于dat return dat; } void main (void) { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2 TMOD|= 0x20; //定时器1工作方式2 TH1 = 0xFD; //baud /* 波特率9600、数据位8、停止位1。效验位无 (11.0592M) TL1 = 0xFD; TR1 = 1; REN=1; while(1) { if(Receive() == 'W') P1=~P1; } }

以上程序有一个缺点是,并没有使用串口中断,其实在在这个程序上,用不用中断处理程序对于单片机都是一样的,因为使用的是一样的开销。但是,我们在前

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top