DIY机器人系列:工程师自制蓝光呼吸WIFI机器人
面提到过,完成Shy的一个目的是学习,所以我们要使用串口中断完成这个程序的编制 完成串口中断的编写,如下:
#include #include #define uchar unsigned char #define uint unsigned int void InitUART (void) { SCON = 0x50; TMOD|= 0x20; TH1 = 0xFD; TL1 = 0xFD; TR1 = 1; REN=1; ES=1; //允许串行口中断 EA =1; //单片机中断允许 } unsigned char Receive(void) { unsigned char dat; while(RI==0); RI=0; dat=SBUF; return dat; } void main (void) { InitUART(); while(1){} } void serial (void) interrupt 4 using 3 { if(Receive() == 'W') P1=~P1; }可以看到,程序被精简,并且模块化,主函数中几乎没有代码。经过测试,能够正常使用。
在这里:
interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器;51单片机的中断编号如下:
51单片机的中断功能号如下:
几个比较重要的概念如下:
EA、EX0、ET0、EX1、ET1、ES、ET2
中断名称、中断号、入口地址
中断允许控制寄存器(interrupt enable)
中断优先级控制寄存器(interrupt priority)
SHY的中断方式接收串口数据部分完毕。
4.3 PWM调光编程
正规的解释如下:
脉冲宽度调制(PWM),是英文"Pulse Width Modulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而在镍氢电池智能充电器中采用的脉宽PWM法,它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。
可以看到,以上的解释非常抽象。
在我的单片机开发板中,有PWM的示例程序,但不是以函数的形式,改写为函数的形式如下:
unsigned int CYCLE=600,PWM_LOW=0;//PWM-定义周期并赋值 void PWM_LED (void) { LED0=1; Delay(60000($0.3591)); //特意加延时,可以看到熄灭的过程 for(PWM_LOW=1;PWM_LOW0;PWM_LOW--){ //与逐渐变亮相反的过程 LED0=0; Delay(PWM_LOW); LED0=1; Delay(CYCLE-PWM_LOW); } }
示例程序的流程图
图片来源:《LY-51S开发板说明书v1.1.pdf》
烧制入单片机后演示
此刻,在官方的解释中"是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术"此句,是否以不再抽象?
基本上来说,在这个LED应用中,是采用时分法,用时差来进行电压连续变化量的模拟。因为在单片机中,管脚的输出不是1就是0
如何输出一定电压范围的模拟量,PWM就是解决这个问题的一种方式。
此刻,相信我们已经可以猜测到了,Shy呼吸灯的变幻方式。
5 电机驱动模块
5.1 用L298N制作电机驱动电路
L298N的管脚图。
L298N芯片是常用于驱动直流电机和步进电机的一种芯片,我们用于驱动Shy的两个直流减速电机,在单片机的控制下完成前进,转向,后退的操作。
从网络上下载到L298N的线路连接图。
但是这张图是有光耦的线路连接图,对于Shy目前来说并不需要用光耦进行电气上的隔离,我们需要的是一个简单,高效的L298N电路连接。
图中分析L298N可以看到,其实L298的电路非常简单,只需要两个滤波电路进行电源滤波和八个IN4007防止电源回流,因此我们这里选择自己绘制电路图
打开DXP 2004,从元件库中选择出适当的元件,关于L298N在DXP 2004中已经带有,因此只要搜索出即可,另外找出八个IN4007,两个100uF的有极性电容,两个104电容,如图:
参照有光耦的L298N电路图或者L298N的DATASHEET进行线路连接,如图,虽然线
- 创意制作:LED汽车表情仪DIY制作(07-02)
- 多图详细教你怎样做一部Arduino小车(06-24)
- 超酷摩托车:您能相信这是学生制作的吗?(06-27)
- 国外天才学生DIY 19岁学生造可骑乘液压机器人(07-06)
- 超酷炫装备:国外牛人DIY超宽任天堂双摇杆N64游戏手柄(07-07)
- 工程师电子制作故事:1000米4路无线遥控窗帘(图文)(06-24)