本帖最后由 weifengdq 于 2014-10-26 08:37 编辑
演示视频:
http://v.youku.com/v_show/id_XODExMjY3ODY0.html
板载资源:
这是我本科毕业前的一个作品,工作快4个月了,虽然手里焊过调试过的板子没有一千,也有八百了,但,还是自己的看着亲啊! 现在拿出来开源到底,包括PCB、元件库,大家可以随意引用或更改文档、代码、PCB,只需新浪微博@weifengdq即可, 不必等待作者同意。 目前完成的资料(只要有点STC89C52的基础就能很快上手,当然但愿对于所有的电子爱好者来说,有点参考价值)有:
手册基本编写完成,目录如下:
IAP15F2K61S2是STC目前主推的单片机,老姚STC官网截图为证:
虽然早就耍过STM32了,但心中总有一个想法:做一块自己的开发板,又恰逢大四下带学弟学妹学单片机,不想索然无味的教,去年电赛的时候了解过STC新推出的IAP15,看中了可仿真、自带复位电路、33.1776MHz的内部时钟,索性就拿来直接教了,虽然我也是第一次用。这样,直到我大学毕业,期间一共画了5版IAP15的板子:
可以看出,从第3版(学校的航模大赛期间画的)开始才基本定型,第5版是修复了第4版的Bug后的定型版。
板上放了500mA.h的聚合物锂电池(自带过充、过放保护电路),使用海绵胶粘到了电路板上,板子上有TP4057锂电池充电管理芯片和CE8301升压电路(输出5V):
第4版的时候,电池在断电的时候总是无缘无故的放电,CE8301发热严重,想起学习电力电子时升压电路后面的电容,在第5版中的CE8301后加了个104电容,就好了!
两个摇杆,10个独立按键(仿照天地飞和游戏手柄),可以做什么,你懂的!
程序自适应主时钟:使用内部时钟,可以在下载软件中使用5.5296、6、11.0592、12、18.432、20、22.1184、24、27、30、33.1776MHz的任意频率,默认所有程序运行在最高频率33.1776MHz,但程序是可以自适应主时钟的。
关于IAP15的仿真,2013年8月刚拿到IAP15这个片子时,我死活仿真不到33.1776MHz,还以为是芯片Bug,当时在博客上妄下结论,但到了2014年,一个偶然的机会我才发现,原来使用PL2303只能到6M,使用CH340却是可以仿真到33.1776MHz!困扰了我一年的问题也解决了,后来又发现仿真时串口1切换到P36/P37还可以照常使用!看来永远没有终点,也永远没有完美吧!完美不大会让人体会到喜悦,追求完美会让人很累。
程序编写的基本思想如下图解释,实现1s亮灯一次,一看便知:
可以看出,按键扫描和消抖也用定时器中断来实现了,按键扫描函数中使用了静态变量,通过定时器中断扫描按键和消抖,基本不占用CPU。
程序中大量使用全局变量标志位,每一个任务给一个标志位,在定时器中断中进行调度,在while中执行任务。如演示程序的代码如下:
这样,初始化后的主程序完全没有了ms级的Delay,大大提高了CPU的效率!
关于打游戏那段,是我的大学舍友毕业前用Python花了一个下午写的,包括上下位机的协议制定,都是他完成的!是用串口虚拟按键。
千言万语说不尽,一切尽在代码中!
关于编码器的专题:
其实是很久就有的一些想法,只不过未全部实践过,应该可行:
以M法测速为例(记取一个采样周期Tc内旋转编码器发出的脉冲个数M来算出转速n)的公式为:
采样周期Tc可以用一个定时器中断来实现,单片机对外唯一需要做的是捕获脉冲,而捕获脉冲的方法大体有:
(1)定时器的计数器模式,来一个脉冲计一个数(传统的51单片机都有Timer0、Timer1,STC89C52和IAP15F2K61S2均有Timer2,STC12系列没有Timer2。STM32的定时器有一大堆,不过可以直接配置为正交编码模式)。 (2)外部中断(一般都有INT0、INT1,有的有INT2、INT3等),如STC89C52有INT0、INT1,支持下降沿触发和低电平触发。IAPF2K61S2有INT0~4共5路外部中断,其中INT0和INT1支持上升沿或下降沿均可触发方式和仅下降沿触发方式、INT2、INT3和INT4仅支持下降沿触发模式。 (3)PCA (可编程计数器阵列Programmable Counter Array)脉冲捕获(STC12C5A有2路、STC12C56有4路、STC15F2K有3路。STM32的普通定时器即可实现脉冲捕获)。 使用IAP15F2K61S2的一个定时器做时基定时器测速,剩余的2个定时器计数器+5路外部中断+3路PCA=10路编码器测速,再占用10个IO口可以判断编码器旋转方向。其中INT0、INT1和3路PCA是可以上升沿下降沿均捕获,是可以编码器2倍频的。 那么问题来了: 这样,给10个编码器测速,合适么?小伙伴们可以自由讨论,演示程序使用了定时器1的计数器模式来计数,只记数不中断,这样,避免了CPU频繁中断,另一方面,在作任务调度的时基定时器0的中断中速度也能测出来了!
最后,上传一下上位机软件、演示程序、慕司板PCB文件(Altium Designer)、慕司板用到的元件库、最小系统板(兼容3.3V和5V直插)PCB、慕司板原理图的资料:
lizhibo.rar
(2.71 MB)
演示程序v20141025--重要.rar
(256.05 KB)
最小系统板.rar
(484.5 KB)
weifengdq元件库.rar
(35.71 KB)
慕司板(IAP15L2K61S2)原理图.pdf
(1015.04 KB)
其余的视频教程、文档、程序源码等放到了度盘:http://pan.baidu.com/s/1hqj8HDi
不过鉴于度娘总是吞链接,最新的视频、例程、BUG修复和新的链接会第一时间在我的新浪微博:@weifengdq更新,欢迎大家关注,也欢迎小伙伴们反馈问题!
再有两天就工作四个月了,每天的工作就是给公司焊板子,调板子,下班回去才有时间搞自己的东西,基本每天整理文档到半夜1点,只是因为自己大学时的一个心愿!正如歌手少司命所说:
如果不再满意别人为你建造的越来越嘈杂的世界,那么自己动手建一个吧,虽然简陋,却足够承载自己的那些白日梦!(以此作结)
|