这个运动手表不久会和大家见面,并且开源

 

项目代号 MoriPark  第一个里程碑实验版本 Thylacine

今天是2017年9月7日,MoriPark项目正式启动。

81年前的今天,地球上最后一只Thylacine(袋狼)死在地球人类的动物园里。

为了纪念这些曾经生活在地球上的小家伙,MoriPark的第一个版本定为Thylacine。

我很想以此为契机,为热爱运动和炫酷科技的小伙伴们,为热爱开源分享和开发的小伙伴们,创造一座前所未有的桥梁,让彼此的世界更加广阔。

考虑到第一期的制作成本,这里暂且使用很大众的单片机STM32F103,后续会选择更优异的架构。

这是我第一次用STM32单片机开发东西,先在这里给出原理图的pdf:

A0-MoriPark-Thylacine-1CORE A0-MoriPark-Thylacine-3rdpartyGPSBD-ATGM336H-5N A0-MoriPark-Thylacine-3rdpartyGSM-GA6

届时产品对用户开放所有现成的工程文件。

Read more

小车使用的系统平台详细介绍

双目视觉小车使用的是三星处理器s5pv210,s5pv210又名“蜂鸟”(Hummingbird),是三星推出的一款适用于智能手机和平板电脑等多媒体设备的应用处理器。s5pv210和s5pc110功能一样,110小封装适用于智能手机,210封装较大,主要用于平板电脑和上网本,苹果的iPad和IPhone4上有的A4处理器(三星制造的),就用的和s5pv210一样的架构(只是3D引擎和视频解码部分不同),该处理器还被用在了Nexus S,魅族M9,三星GT-S8500 Wave,三星P1000(Galaxy Tab),三星i9000(Galaxy S)。s5pv210是旧时的叫法了,2011年2月,三星电子正式将自家基于ARM构架处理器品牌命名为Exynos。Exynos由两个希腊语单词组合而来:Exypnos和Prasinos,分别代表“智能”与“环保”之意。s5pv210获得了新的代号Exynos 3。Exynos 3是Exynos系列中唯一的单核处理器。下面是这款处理器的架构图:

Exynos3110_Diagram3110

 

将这款处理器的平台作为双目视觉小车的主控系统考虑到以下几方面原因:1.优秀的性能功耗比,性能不愁电池也不愁;2.官方提供linux和android的bsp不需要移植,视频传输也可以用以往开发移植的方案;3.我喜欢用消费类电子处理器做自控,因为比较好玩~

小车使用的是改造的三星Exynos 3标板,借鉴的开发板是飞凌的ok210:

63265143

 

 

三星的资料,包括电路原理图、cpu手册等 ok210-downloadfromsamsung

ok210的原理图和器件手册 ok210-schanddatasheet

引导用的uboot ok210-uboot_1.3.4.tar

移植好的linux 2.6.35内核 ok210-linux2.6.35.7.tar

NandFlash使用的Yaffs2文件系统 ok210-Yaffs2.tar

 

小车直流电机驱动L9110H和L298N的选择

L9110H是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片 IC 之中,使外围器件成本降低,整机可靠性提高。该芯片有两个 TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过 750~800mA 的持续电流,峰值电流能力可达 1.5~2.0A; 同时它具有较低的输出饱和压降; 内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用上安全可靠。L9110H被广泛应用于玩具汽车电机驱动、步进电机驱动和开关功率管等电路上,我所拆卸的遥控车玩具,大多使用L9110H。

当前的小坦克上在电机输入前接了L9110H,所以cpu的gpio可以直接通过74HC244后连接小坦克。我记得很多年前有人曾经问244能不能取代光耦隔离,实际上,如果回灌电流不是很猛,是可以起到隔离作用的,因为244有比arm cpu更大的承受能力,如果244烧不穿,自然也就保护了cpu,但如果244击穿,情况就另当别论了,所以,应该说能够部分取代光耦,并不能完全取代。

11

相比之下,在选择直流电机的情况之下,L298N显得杀鸡用牛刀。L298N主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

L298N驱动小车直流电机的典型模块电路和实现:

 

16059114562605911456

 

 

如果使用万向轮小车底盘,选用这个驱动模块是合适的,我习惯杀鸡用牛刀,哈哈。

 

小车底盘选型组装完毕,开发板到手,零碎器件到手

双目视觉小车的底盘初步定型为两款。分别是一个橡皮履带的坦克底盘和一个带万向轮的双轮小车底盘(最常用的寻迹小车底盘模型)。

1

第一款是带测速方波和减速直流电机的坦克,准备用210开发板的gpio直接经过74hc244后连接电机驱动L9110或L298,这款速度控制比较好,行驶可以非常慢,有助于第一步目标中各种实验的进行。

2

第二款是我以前非常常用的两个轮子带一个万向轮的小车底盘,这是最常用的寻迹小车的底盘模型,但是这款测试时十分灵活,速度较快,无法很慢的行驶(和电机与减速箱有关),在坦克上充分测试调试,算法足够健壮的情况下,可以使用这款经典的底盘。

3

 

开发板使用的是飞凌嵌入式的ok210,找一款靠谱的210开发板真不容易,难得有这么一款不错的产品,我自己投板的还不知道需要焊到哪年哪月。。初步计划把键盘按键拆了改成gpio经过74hc244增益连接电机驱动控制,在linux直接用字符驱动写方波即可,另外配置两个输入的gpio或者中断,从红外遮挡测速那里把信号读回来(坦克底盘上有现成的测速器,而万向轮双轮小车需要我自己接一下,主要是模具费劲,暂时先用坦克的吧)。

另外,今天去了中海园和中发,状况和当年差不多啊唉,中海园还是那样,周末没什么人,柜台大多数都锁门了,连个人影都看不见。。马路对面的知春电子城还不错,买到了74hc244和需要的零散器件,电池也找到了大容量锂电池排,重量可以接受,不过那卖电池的有点头晕,逆变升压电路参数说不清楚,看了半天我也不知道那个小电路从3.7逆变到5V能承受多大电流,改天再找家靠谱点的。。

先写这么多,组装像样了,驱动写差不多了再继续更新~ 期待吧~

几个以往用过的小系统回忆

已经很久没有做低功耗便携系统了,最近翻出以往的开发板,颇有味道的回忆了一番。尤其是想起第一次投板六层板的那一次,南京的那哥们答应给特价盲埋孔打样,高兴了一晚上。当年9000块钱就觉得好多好心疼哈,现在看看,还不够交一次房租…唉……还有后来合作卖2410开发板的硬件高手吴兄,不知道现在过得怎样了,还在飞思卡尔么…回忆起来很是想念…每次路过北交大都想起当年一起开发,好巧在北理工的刘老师和当年的吴兄长得特别像哈哈。

现在的系统能力真是强悍,当年这些arm9的片子,如今恐怕博物馆都找不到了吧。

44615_071016182928

 

05年最初使用的s3c2410开发板,我自己编写的多线程操作系统和第一次编写GUI的尝试是在这个板子上进行的,对我来说,这个开发板非凡的意义还有一点,那就是带我了解了诸多底层总线协议的具体实现和相关软件开发,诸如IDE、I2S、I2C、ISA等等。

 

44615_071016135026

这是一个ep9315的开发板,在这个板子上我第一次尝试了高频硬件驱动,它可插接的数据和地址总线,让我得以把很多外设挂载总线上进行各种调试,用总线直接驱动一下子就屏蔽了IO不够用的问题,但是有些貌似要挂244增大驱动能力才能带的动。

44615_071016135114

这是一个can总线和232/485的调试板,用单片机做了一些基本的实验,有了这些实验,才得以把这些总线顺利的挂到频率比较高的arm系统上去。

44615_071016182959

这同样是一个做低频实验用的arm7的板子。

 

44615_071207232232

这是一个ep9315的开发板,在上面扩展了很多实用的接口,如PCI、CF/SD卡、各种常用的扩展总线等。

 

我曾经用过的ARM系统MCU厂商列表

【2008】

以下是我曾经接触过的一些板子,简单总结对比一下,供大家参考. 现在这些系统标板在我们大陆市场上很容易买到,ic的货源也相对充足.

 厂商 当前主要型号 特点 官方资讯站点
 Cirrus Logic  EP93xx  资料全,有2D显示加速;但功耗往往都稍大,不适合做手持设备,适合做定点应用.  http://arm.cirrus.com/
 Samsung  S3C244x S3C64xx  起家早,质量较差,但功能迎合大众市场,适合普通消费类电子产品.  http://www.samsung.com/global/business/semiconductor /products/mobilesoc /Products_ApplicationProcessor_developmenttool.html
 Atmel  RM92xx  运行稳定,功耗控制优秀,军工级方案首选;性价比较高.  http://www.atmel.com/products/at91/default.asp
 Freescale  Mx31  高端pmp的典型方案  http://www.freescale.com/webapp/sps/site/taxonomy.jsp?nodeId=0162468rH31143
 Marvell  PXA27x PXA3xx  Intel扔掉的东西,给人感觉很一般,成本相对较高.  http://www.marvell.com/products/cellular /applications.jsp
 NXP  LPC291x  标板带有CAN和LIN,适合工业和汽车电子应用.  http://www.nxp.com/#/homepage/cb=[t=p,p=/50809/53962]|pp=[t=pfp,i=53962]

iDSL入手,开始解剖

【2008】

买了DS,我将对这个系统进行全面的研究解析学习,从硬件改造到系统内核,然后是游戏和工具软件开发,所以专门在blog里面建立了这样一个板块.说实话,这确实有点过时,但是作为一个经典的业内系统案例,我还是决定研究一下.小DS要拆开比较费劲,还要买个三角螺丝刀.解析的第一步自然是了解硬件系统结构,所以这里我将其他站点的一些资料转来(本文的后半部分),结合pcb阅读一下.详细的原理图我正在寻找,但是尚没有找到,所以也只是粗看,具体的问题碰到以后再做具体分析吧.

附图:我买的iDSL现场新鲜解剖

44615_080924172129

图1.拆开来先看到的主板反面

44615_080924172045

图2.翻过来看到了主板正面

cpu在屏幕的后面,我没拔掉屏幕拍照,直接转个别的站的日版nds拆机的相关部分吧(可能会有细节差异,这里仅是示意一下)。

44615_081105203613

图3.NDS的cpu照片(来自日経BP社)

实际上DS是一个由不带mmu的一片ARM946和一片ARM7构建的系统,初看起来挺像普通的手机或pmp方案.但和现在的多数类似的消费类电子产品相比,他并没有安排多线操作系统,从网上找来的以往的反向工程研究资料来看,他的构建比我想象的要简单很多.我昨天晚上大体阅读了一下网上流传的libnds的代码,发现操作果然是全裸式的,这也让喜欢做底层的我感觉十分亲切.可以直接和registers打交道,总归要比结合mmu的系统简单得多.我想,如果当年我不是做三星的开发板的话,大概在DS这种东西上尝试写个操作系统要更有趣一些.

以往已经有人把uClinux2.6跑在了DS上,可惜那群人的网站不知道为什么挂掉了(dslinux.org),联系不上他们(我都跑去linux.com的论坛上灌水找了),我也搞不清楚他们最开始的时候具体是怎么入手寻找切入点的,毕竟如果什么资料都没有的话(Nintendo并没有开放研发资料),这个porting还是很有难度的.今天我找到了NDS wiki这个站点,上面有不少关键有用的资料,我想这些基础研究应该是在uClinux移植之前完成的,大概的有了点头绪.

我还有些数学书没看完(最近在学些东西),今天先写到这里.

另外,偶要感谢动物之森联谊会和其他DS群组里的朋友给偶的帮助,谢谢大家.

—-以下内容供参考———————————————-

sanicle注:idsl/ndsl,ids/nds是有细节差异的,部分配件不太一样,现在网络上的很多详细资料是针对日版nds的(日版nds的主板上写着C/NTR-CPU-01,而我买的idsl主板上的title是C/USG-CPU-01)。

《日经电子》拆卸小组的DS剖析(针对日版NDS)
http://china.nikkeibp.co.jp/china/news/digi/200411/digi200411260113.html
http://techon.nikkeibp.co.jp/members/NEWS/20041123/106554/

NDS硬件系统非官方解析(针对日版NDS)
http://www.bottledlight.com/ds/index.php/Main/Hardware

在EP9315(arm920t)标板外扩can总线控制 其他ARM9可类比实现

【2007.10】
压缩包里有原理图和对应的linux标准字符设备驱动程序,原理图中的标号与edb9315a标板中的标号对应.
汽车总线can在工业控制中因其低功耗优于ip互联网,因其性能优于传统485等总线,越来越受应用开发和系统集成者青睐.这里给出一个在arm9平台ep9315实现的can总线外扩的解决方案.方案将常用can总线控制器sja1000t挂在数据总线,使用一个外部片选和两个gpio控制,提供了在linux2.4的sja1000字符设备驱动程序,实现sja1000在peliCAN模式下(支持CAN2.0)的can数据侦收发,经测试可以正常使用.
像类似的扩展在arm9或其他应用中十分常见,最常见到的是一些arm9结合dsp ic的平台,它们也是使用这种方式,以前我做过一个2410控制ac488的ip电话方案就也是如此.一般的控制扩展都是将外部控制ic挂在数据总线,用cpu的外部片选,gpio或地址总线组合控制时序.在linux系统中,对这种扩展经常使用常规字符驱动程序编写具体的时序控制,为应用软件提供控制接口.这里给出的sja1000驱动程序十分简单,和其他此类的应用类似(简单的实现sja1000的初始化,开辟一个小数据缓冲,实现can总线数据的读写,request一个irq,处理sja1000发出的中断).
在开发中主要遇到的问题有以下几点.
一是对peliCAN模式下can2.0b扩展侦的收发尝试,因为sja1000对于29bitID数据侦那部分数据存储器是多出来交叠复用的寄存器,驱动程序想弄个标准数据侦和扩展侦复用的比较麻烦,懒得写了,给出的这个是写死了只支持标准11bitID数据侦的,如果需要扩展的can2.0b收发,就麻烦点自己再改改弄弄吧..
二是起初can总线连接线无法过长,才几十厘米就发不通了,很短的时候可以收发正常.我的数据收发测试是使用microchip的pic单片机pic18f2580外接2551can收发器直接与这里arm板外扩的can总线相连的,直接测线比较长时传输线上的扰波十分猛..最开始认为是端电阻没加会不会有问题,后来发现其实加不加似乎都一样,又怀疑了其他地方的干扰或不同的can收发器ic会不会带来兼容性问题,后来这方面也排除了..最后发现居然是电源干扰过大引起的,再次印证了那句话,”管什么不好,先查电源”..ft~
这个ep9315平台扩展can总线的方案主要用于以下网络模型:
一个ep9315的系统作为核心结点,下面通过can总线接很多单片机板做成的结点,一个个单片机结点可以控制或采集一些io等,而这些单片机又通过一定的协议被核心ep9315结点控制,这样一个ep9315结点就可以通过can总线控制和采集很多io或其他信号(如rs232,spi,iic etc.),而ep9315自身的接口如uart,spi,iic等也可以另外单独使用,每个ep9315结点实际上相当于一台嵌入式工控机.多个9315的核心结点再用以太网连接组成局域网,最终数据汇总到一台互联网上的服务器,服务器可以分别控制各个ep9315结点(一般直接使用普通tcp连接即可,不同操作系统间进行socket通讯).整体形成一个低功耗高性能的优质工业控制网络.实际上类似的网络我几年前已经实现过一个(以太网和485,没用can总线),当时没有项目可以具体应用,所以后来搁置不理了.
ps. 在写这篇文的时候ep9315的所有开发资料是在cirrus logic网站公开的,不需要签什么保密协议就可以全部免费download到,其实大多数厂商都是很开放的,包括atmel等,用9200的时候获得资料也很容易..不像marvell那么变态,搞几片破arm还要签保密协议,鄙视(-n-)…cirrus logic本身做的开发十分到位,这也是我喜欢用9315的原因之一哈~

转篇宋宝华的Linux设备驱动编程之内存与I/O操作

还是十分不错的,最近看了一些相关的代码,想找篇比较系统的应用笔记,搜了一搜,发现宋兄有这么好的文~ 不用自己写了,直接转来~
操作IO和总线上的设备是很多情况下最基本的必须操作.我搞过的机器人玩具操作步进电机,ARM9扩展CAN总线等,都是通过普通字符设备驱动直接操作地址和数据总线或GPIO来和外设交互.这篇文对使用linux系统的设计来说很有用~

我05年在2410标板上写的时间片多线操作系统

旧版本下载 SanOS_public_0.1_s3c2410x 往下看,有更新过的
有GUI(640*480),
可以把2410的lcd信号直接接adv7121做成VGA输出接显示器显示.
有英文和数码字库,
带有串口鼠标驱动程序,
支持时间片均分调度,
支持有优先级的64个线程
代码/ADS工程
年代有点久远,
我自己的备份找不到了,
网上居然有转载的要收费才能下,真晕~
这份是拜托arronwu兄提供的,
在此十分感谢 🙂
构建这个小系统主要参考了WinCE4.2的nboot和uCOS2系统内核.
———————————————————————-
今天是08年3月20号,我今天突然发现,去年放这里的这个版本GUI不带字库…
昏迷..把大家给忽悠了…@_@
实在不好意思,我自己也不知道,今天找到了05年9月的版本,对比的时候突然发现的…
下面赶紧放出我今天收拾旧电脑硬盘找到的05年9月的比较新的版本,
这个版本是我当年参加电子设计比赛的时候修改的,
连比赛的试题和我做的示例也一起提供给大家了,都在里面.
新版本下载 SAOS_2410

在点阵lcd上显示上位机点阵字模库中的汉字字符

我在2006年开发usb电话的时候,需要将上位机的点阵字库中的汉字显示到电话机的屏幕上,本文略去usb传送汉字编码,显示控制等数据的自定协议不谈,仅说明一下一些常见的字符编码转换.
我需要做的一个工作是: 用字模软件提取一个gb2312字符点阵集,将windows程序中字符串使用的汉字从点阵集中找出来,把点阵数据送到单片机以显示.
我们用VC6编写的应用程序中使用的汉字字符串(比如使用一个lpstr),在编译后以机器内码的形式保存在应用程序中.我们需要将机器内码转换成汉字在字模软件提取的gb2312点阵集中的位置.
首先需要将机器内码转换成区位码,这一步只需要把机器内码的高低字节分别减去0xa0即可.然后我们需要通过得到的区位码,找到对应汉字在gb2312字符点阵集中的位置.
假设每个字符点阵汉字都是16×16大小的,一个汉字站用32字节.设我们得到的区位码为AB,A为高字节,B为低字节,则我们需要的”对应汉字在gb2312字符点阵集中的位置”(即对应的汉字点阵数据开头离整个字符点阵集开头的字节数,下文简称”偏移码”),根据gb2312和区位码的编码规则,可以通过如下计算获得:
 [(A-1)x94+(B-1)]x32
=[Ax94-94+B-1]<<5
=(Ax94+B-95)<<5 …①
根据以上的论述,可以得到VC6中汉字字符在内存中使用的机器内码直接转换成字模偏移码的算法:
设机器内码位CD,C为高字节,D为低字节.
有 A+0xa0=C, B+0xa0=D.
代入①得:
 [(C-160)x94+(D-160)-95]<<5
整理出最快式得:
 (Cx94+D-15295)<<5 …②
由②知:
 对应汉字在gb2312字符点阵集中的位置=(机内码高字节x95+机内码低字节-15295)<<5;
其他可能需要的是一些windows api可以直接提供的转换,还有就是简单的三字节utf-8与unicode的转换等,只需要简单的移位或加减操作即可完成.
在usb电话上显示出好看的楷体和宋体汉字字符后,喝了口茶,感觉很不错~

ST7565小黑白LCD在单片机上的使用

这是我在2006年USB电话开发中的显示屏幕驱动笔记的摘抄.
Skype-usb电话一般使用小黑白lcd,我选了一些lcd,最终确定使用了一款ST7565核心的点阵lcd,屏幕大小是128×64.本来想选oled的,可是成本比较高,我06年问的一个双色128×64大小的oled一般卖到17块左右,用不起中= =b.而同样大小的lcd一般只有10块左右.
这里首先说一下我选lcd调试时遇到的一些问题,帮助大家少走一些弯路.因为单片机的io往往比较有限,所以我们在选这种小lcd的时候往往使用串行控制的lcd,一般都是标准的spi接口的.而一些初次尝试驱动小lcd的朋友通常回想到,在没有spi的单片机用io模拟时序略显复杂,所以想直接选用并行数据控制的lcd,这种小黑白lcd往往使用一组8位的数据总线D0–D7来交互显示数据,看起来io写时序控制比较容易.我起初也是用了一款并行数据控制的lcd,然而却没调试成功.问题出在时序的匹配上.我们必须考虑lcd所能接受的最慢时序单片机性能是否能满足.如果单片机不仅仅用来显示,而还要同时完成一些其他的必须及时进行的操作,这个问题尤其突出.所以,最终我的感觉是,能用spi则用spi,否则也还是用io模拟串行时序做起来简单一些,否则一但遇到性能问题,将十分棘手.一般来说,如果你纯粹使用io做时序,连接一个使用ST7565核心的lcd需要使用至少5个io管脚,分别接lcd的信号SI(串行数据),SCL(串行时钟),A0(数据指令选择),RES(复位),CS(片选).
下面说一下ST7565P的使用中遇到的一些问题.首先,lcd要使用一般必须外部接电容构成正倍压电路,有了pump才能显示.我在开发usb电话时使用了一组datasheet上说明的4倍压电路.在用电容时遇到了问题,一般我们调试的时候喜欢焊接直插件,而电容一般有极性.很多ST7565P核心的lcd在管脚标识的时候,正负号与电容的正负正好相反,所以出现调试的时候倍压不能的情况,一般显示器的厂商会提醒全部使用无极性电容,一般直接用产品化后设定的贴片电容来焊接即可,不需要刻意买一些直插的.
我使用的holtek hr82a832r单片机来做的usb电话,这个片子有现成的spi接口,所以使用lcd不需要使用io模拟,比较容易.用io模拟时序的方式我也试了,完全可行.用单片机的spi记得调整SCL上升沿还是下降沿锁定数据,否则这样的低级错误被遗忘会浪费不少时间迷茫~ 其他时序完全参照mcu和lcd核心ic的datasheet搞定即可.
一般屏幕的初始化和显示测试程序可以向lcd提供商索要,他们一般有pic或是普通51的测试程序.有了初始化的demo做起来省很多时间.这里还要补充一点,如果屏幕初始化了不显示,各种电气信号又都测量出正常,不要着急,调整一下lcd的显示亮度.我一开始就是因为lcd的显示对比度设置不妥当,导致全是黑屏.对于ST7565P,微调指令是0x81 0xmm (mm=00–3f) 粗调指令是0x2n (n=0–7),我使用不同厂家的屏幕,发现显示对比度设置后,效果差距较大,一个设置0x0d 0x26正好,一个需要设置0x0a 0x27才可以,第一个屏幕使用第二条设置会几乎黑屏.
调试ok以后,显示几个图形,心情很不错.

Contact Magic Zestination | 联系豆包