打印

实用单片机系统(MS4基于STM32)将年底发布

[复制链接]
3986|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lldwsw|  楼主 | 2012-12-20 23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
经常看到坛内还有这么多人支持,也经常有网友联系我要之前的一些版本,让我觉得应该进一步完善与发展“实用单片机系统”,把这几年自己的一些项目经验融合进这个系统里面来,给大家一个参考,以感谢大家的支持!

多次想引入RTOS的任务切换,但当对客户的需求层层精确分析后发现,实际上根本不需要,并且引入RTOS,引入自己不熟悉的东西,系统稳定性更难控制,公司做linux、wince经验的同事,都反对我引入,觉得99%的工业项目或者小项目根本不需要,不应该随大流,还是进一步深入发掘应用为好,所以最后也都没有往RTOS的思路走,而是朝清晰化、简洁化编程思路设计,并且打算引入FPGA,实现真正的纯并行。

MS系统发展到现在,本质可以归纳为是一个前后台结构,最急的用中断(如各种保护),次之用高速系统时钟(如AD采样等),再次之用分频后的系统时钟,如按键、数码管刷新、显示刷新等。它们都可以抛出消息,快的抛出来,让慢的来处理,慢的抛出来,让Main主循环处理。这些可以满足绝大多数项目需求。而对于更复杂的项目,我现在也不考虑RTOS,而是采用扩展CPLD、FPGA,或者多MCU,中间用CAN通讯。因为本质上CPU永远是单线程的,RTOS只是让一个系统模拟的像多个并行的系统,但永远只有一个在运行,当在一些高可靠项目中,比如伺服电机等,要求多个保护,又有主程序运行,他们都要求第一优先级的,会导致系统比较复杂,而这个时候用FPGA可以很好的解决这些问题,可以说是彻底的并行,彻底的RTOS,这是做高可靠大功率数字电源的基础。现在正在解决CAN通讯问题,希望在今后的设计中,把大项目分解为一个个的小项目多MCU设计思路。

现在正在学习STM32F103,打算把MS4(第一版基于NXP LPC1343,用于高频焊接机)开始移植到STM上,因为要基于MS4做一套网络化的PLC系统,也就是分布式PLC,这个是一个比较重要的项目,需要做1年多时间,今后将长期维护,做成一套通用性的平台市场化。网络基于CAN总线,可以是STM32F103内带的,也可以采用MCU模拟的,目前CAN模拟已经成功,但还需要进一步完善。

之前基于MS4做了超高频涡流焊接机,功率是6KW,频率在1MHz,大功率,干扰很大的,系统运行非常可靠,目前已经量产、规模使用,软硬件都没有问题,火花机也是采用MS4。这个里面,本人基于界面需要,设计了基于消息机制的界面开发体系,觉得非常不错,是把函数指针跟消息比较好的结合起来了,类似显卡,当数据有变化的时候,系统时钟扫描到,再定时刷新,这样系统编程清晰度非常高,今后将在MS4基于STM32版本上发布出来,到时候请各位指正。
今后MS系统的一个发展方向将是结合CPLD或者是FPGA,因为本人最近都在开发FPGA,觉得需要把他跟ARM整合起来,看成一体,而软件呢,也要基于CPLD做一些功能扩展,这个将会在网络化PLC中有体现。

本人最近的一些技术思想,在blog上有写,各位有兴趣可以看看,尤其是从一位香港老先生那儿学了一套新型的控制理念,很值得借鉴,但他的技术难度非常高,系统要求很强,需要一定的功力才行。
跟香港老工程师的对话
http://forum.eet-cn.com/BLOG_ARTICLE_14830.HTM
学习FPGA
http://forum.eet-cn.com/BLOG_ARTICLE_14922.HTM

相关帖子

沙发
明月小厨| | 2012-12-21 13:30 | 只看该作者
把大项目分解为一个个的小项目多MCU设计思路。
我经常反着来,尽可能一片解决,多片单片机间的数据通讯,要占项目精力花费的大部分;反而搞复杂了;

不是绝对的.
例,你搞一粒51去扫描键盘可以的;你再搞一粒负责显示,也是可以的;再搞一片去处理数据计算存储;
回头再看看,是不是反而搞复杂了呢?

使用特权

评论回复
板凳
原野之狼| | 2012-12-21 13:52 | 只看该作者
硬件资源够的话  使用RTOS还是能够带来很大的方便的

使用特权

评论回复
地板
lldwsw|  楼主 | 2012-12-21 13:56 | 只看该作者
对于消费类电子,应该要一片搞定,可以降低成本

但对于工业场合,一是有区域上的分布要求,不可能一片搞定,二是一片搞定,所有功能都做在一起,系统过于庞大,除了自己熟悉之外,别人根本看不懂,不便于维护管理,尤其是推广,无法形成一个统一的平台。

这个完全看系统要求,2楼举得例子规模太小了,不适合我这儿。

并且我现在开始把CPLD作为ARM的扩展,尽可能的把按键扫描之类的,功能固化的东西,放入CPLD固化,尽可能少的占用ARM资源,同时简化ARM代码,让平台推广更加容易,让新客户更容易上手。

使用特权

评论回复
5
lihaolongli| | 2012-12-22 16:36 | 只看该作者
很好的思路,我现在还是学生,目前在学STM32,自己的模拟基础不太好,想把这块儿打好,往后初步是想以嵌入式STM32为主,结合模拟螺旋式上升,不知楼主能否给些建议,谢谢了

使用特权

评论回复
6
busdriver| | 2013-1-1 15:52 | 只看该作者
2013了,还没发布啊,不能老搞delay啊

使用特权

评论回复
7
lldwsw|  楼主 | 2013-1-1 18:06 | 只看该作者
程序在30号夜里调试完成了,还需要整理一下文档,我原意是过年前,农历的,没有指阳历,不好意思,让大家误会了。

这次的MS系统改进,主要有三点,一是把串口发送改成buff缓冲方式的,这样printf等串口发送不再需要等待了,要发送的数据直接到一个buff里面,之后利用系统节拍检测buff,慢慢的把数据发送出去,这个比较爽。
第二是充分利用系统节拍,分频分配给各个例行任务,这次做的比较彻底。
第三是界面开发,之前就引入了函数指针,实现跳转,现在进一步引入消息机制,系统节拍里有一个十分之一的检测变量,一旦发现有改变,就刷新屏幕,类似显卡,这样注册变量后,不需要为变量的变化而再去update。

后续两周将把精力放在uCOS等一些操作系统上,看看能否从中提取一些比较简单易用的东西,引入MS系统。为后续做网络化PLC做准备。实现一个软件平台。

使用特权

评论回复
8
sxhhhjicbb| | 2013-1-1 20:25 | 只看该作者
工业情况下,可靠的通信协议最重要.功能一般较单一.

使用特权

评论回复
9
lldwsw|  楼主 | 2013-1-1 20:43 | 只看该作者
考虑到跟之前的版本分开,用MS5表示,已经发给几个使用了MS系统做过产品的朋友,让他们先发现一些bug,指点一下先。

这次这个版本的升级,主要是为了做PLC系统,包括软硬件,做成分布式的,通讯采用CAN,类似西门子S7-300系列。

考虑到嵌入式领域,做的人太多了,都已经是白菜价格,所以我们在工业领域突破,并且PLC,还没有做DIY的,那就我来做,并且我对这方面比较了解,不仅本身就在做工业核心设备,如高频机、火花机等电源,后续还要做伺服电机等,我们还有自动化设备公司,本身他就有很强的需求,通过他可以把我们的PLC完善起来,通过验证之后推广给别的客户。同时我们的一些工业核心设备,也采用这个PLC系统来设计,这样公司的所有产品都可以实现标准化。

我后续一年将全力做这个PLC,名字就叫msPLC,把整个商业过程都开源,包括设计构想、硬件设计、软件设计,一步步的完善起来,也希望大家能给予支持。

使用特权

评论回复
10
busdriver| | 2013-1-1 21:08 | 只看该作者
本帖最后由 busdriver 于 2013-1-1 21:13 编辑

坚决支持。!本人7年硬件经验,也涉足单片机驱动开发,做过一些工控产品,如电机调速器,现在觉得不做驱动不过瘾,想往驱动发展;先在单片机系统有一个突破,看上了阁下的实用单片机操作系统;然后是ARM linux驱动,关于uboot移植方面,已经开始有一点研究了。不过有时候也挺纠结,一是本身觉得硬件还有可供提高的空间;二是软件基础不是很好,怕做成了个半吊子。阁下意见呢。

使用特权

评论回复
11
busdriver| | 2013-1-1 21:10 | 只看该作者
单片机驱动,主要用的是前后台系统,做过LCD显示,按键切换,类似以前的功能手机;LCD界面使用状态机切换。

使用特权

评论回复
12
busdriver| | 2013-1-1 21:15 | 只看该作者
大侠,能否先打包发给我,先行研究一下。非常感谢!
邮箱:33468591@qq.com

使用特权

评论回复
13
jbb2013| | 2013-1-1 21:38 | 只看该作者
小弟用了几个月MS3,在一个项目中遇到一个问题,就是用虚拟定时器启动一个任务后,在任务最后又把自己注册到系统中去。这样这个任务就可以循环执行了。现在的问题是:执行一段时间后我想停止这个任务,应该是调用MSTimerStop(u8 Id)来停止,可这个形参id应该怎样得到。望指教

使用特权

评论回复
14
lldwsw|  楼主 | 2013-1-1 22:27 | 只看该作者
本帖最后由 lldwsw 于 2013-1-1 22:30 编辑

回jbb2013,你说的用法是对的,我也是这么用的,你可以看看函数原型即可。目前我在6KW高频焊接机上稳定使用,开发的非常爽,调理很清晰,特别建议在cortex下用,毕竟32bit的MCU,临界态少,可靠性高。现在我带的几个同事,都在学习,很容易上手。

回busdriver,你可以后续跟我一起学,跟我同步,这样把你以前的基础也学会了,需求也解决了,我的QQ为:26033613,因为还没有标准化,还不方便直接公布,可以单独先传。


本人擅长资源复用,平台搭建,这次算是通过这个msPLC,整合这么多年的积累成一体,MS系统从02年开始到今天,一步步的完善积累,今后将把MS系统发展为适合用于工业控制领域的开发平台,而不是操作系统。

使用特权

评论回复
15
bh7kve| | 2013-1-1 23:09 | 只看该作者
Ms系列一路追随过来,总的感觉:大道至简!有格局,有营养,易为己用。
个人觉的非常值得我等菜鸟学习和其他高手借鉴下。
祝老师新年愉快!

使用特权

评论回复
16
bh7kve| | 2013-1-1 23:18 | 只看该作者
jbb2013 发表于 2013-1-1 21:38
小弟用了几个月MS3,在一个项目中遇到一个问题,就是用虚拟定时器启动一个任务后,在任务最后又把自己注册 ...

我的理解:Saveid = MSTimerStart(),即调用的时候保存这个返回值备用即可。

使用特权

评论回复
17
busdriver| | 2013-1-2 08:49 | 只看该作者
本帖最后由 busdriver 于 2013-1-2 09:18 编辑

多谢!那我先研究MS4吧。以后多向阁下学习!

使用特权

评论回复
18
jbb2013| | 2013-1-2 10:26 | 只看该作者
bh7kve 发表于 2013-1-1 23:18
我的理解:Saveid = MSTimerStart(),即调用的时候保存这个返回值备用即可。 ...

我也是这么做的,但是有时停止不了呀。我想是这个原因:在调用MSTimerStop()之前,在中断里执行的函数MSTimerService()正好将这个任务入消息了,入了消息再去停止肯定是不行的

使用特权

评论回复
19
jbb2013| | 2013-1-2 10:37 | 只看该作者
lldwsw 发表于 2013-1-1 22:27
回jbb2013,你说的用法是对的,我也是这么用的,你可以看看函数原型即可。目前我在6KW高频焊接机上稳定使用 ...

版主你好,我遇到的问题还是没解决,不知道你有没有遇到这样的问题,就是用MSTimerStop( )停止任务的时候有时停止不了

使用特权

评论回复
20
busdriver| | 2013-1-2 11:42 | 只看该作者
本帖最后由 busdriver 于 2013-1-2 11:43 编辑

printf采用的是查询方式还是中断方式?查询方式会占用CPU时间吧。我用的是自己写的单片机串口发送程序,采用查询方式。没用过库函数自带的printf函数。今天研究STM32的串口打印,发现其用的是重定义标准库函数,这样用比较新奇,学习了!是否大多说ARM都采用这种方式就不得而知了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:致力于设计开源网络化组合式PLC系统(msPLC),目前推广嵌入式微系统(msOS),欢迎加入QQ群:291235815

96

主题

859

帖子

50

粉丝