RS232串口在一些控制场合依然还有很大的市场应用, RS232协议十分简单,操作方便,但是目前低端的4位,8位MCU都不具有串口硬件.所以有不少技术人员开始使用软件模拟技术,但是,串口发送倒是比较简单,只要屏蔽中断,计算好波特率,模拟串口的发送一般都不会有问题,但是串口的接收就不一样了,即使使用IO口电平变化中断,但是中断的响应和中断优先级,中断嵌套等,都可能造成软件模拟的串口接收数据会不稳定.
而FPPA的诞生,却在软件模拟方面解决了很多的难题,模拟真正的全双工串口也可以模拟好几组,这是传统的MCU望尘莫及的.如下的RS232互动DEMO,正是利用多核心的优势,使用串口控制6路PWM的应用方案,
6路PWM的主要特性如下:
周期公式:(PWM周期数(|=0) + 15) * t
脉宽公式:(PWM脉宽(|=0) + 5 ) * t
备注:t为FPP的指令执行周期,一般为1us或0.5us.
当PWM脉宽参数为0时,无脉宽输出,即PWM输出为恒定低电平信号。
当PWM脉宽参数大于或等于PWM周期参数时,输出恒为高电平。
因此PWM在临界位置存在死区,如当PWM脉宽参数为0时,PWM输出恒为低电平,当PWM脉宽数为1时,PWM直接输出了6t的脉冲宽度。其实这一点死区也许永远都用不着的,因为可调的脉宽已经到了3~97%之间了,而且不包括恒定电平的输出.
别说6路这样的PWM,传统的MCU能够模拟一路都几乎是不可能的了.不信自己可以回家练练看看,呵呵.
既然是串口互动,就需要能够通过串口来控制MCU的运行了.所以选择了一个超级终端作为一种调试工具来用.超级终端有个好处就是可以把键盘的响应通过串口将键值的ASCII码发送出去,而且本身也提供串口的输入显示功能.也正是这样,我的6路PWM都可以通过PC端来控制了,呵呵.新手值得一试!
起初6路PWM都是控制各控制一个单色LED的,这样PWM的占空比只能通过观察LED的强弱来判断,实在比较费力.后来就取其中的3路PWM来控制全彩LED,呵呵,这下好了,人眼对颜色的反映还是很灵敏的,可惜我的相机太差了,无法反映真实的色彩.
随便发2张给各位看看吧:
留意椅子板面的颜色,呵呵.
三基色的混色原理就不说了,想想看3路250几的分辨率可以混成多少种颜色呀,250*250*250,呵呵,这比简单的7彩是否强多了呢.
也把超级终端拿来秀一下:
看看上面这些字符,都是通过FPPA在接收到键盘值后反馈回来的,因为FPPA有8和核心,所以就用了一个专门接收串口的键盘值,另外一个专门发送数据到PC端,其他6路就用来产生6路分辨率为1us左右的PWM了.
能够造出上面图片中的整齐字符命令,你必须要懂得几个特殊的ASCII码值,比如:
回车键: 0X0D
换行符: 0X0A
BACKSPACE: 0X08
BACKSPACE主要用在输入出错时,利用它清除之前的输入,而在MCU端接收时只需要将接收BUF的指针前移一个,并且不保存该键值就可以了.如下:
很多朋友学习单片机都是从点LED开始的,但是,如果你也能通过PC端来控制你的LED的话,无疑你的这一起步比别人大多了. 好了,这样的DEMO方案,欢迎任何使用8位MCU的朋友来挑战一下,别忘了,软件模拟哟. 当然有些朋友可能会说,我有硬件,干嘛需要软件模拟呢,问得好,如果你使用硬件的成本比FPPA更低,使用更灵活,的确可以不考虑,虽然我们是8核,但我们依然低价格.
|