PDA(便携式旅行计算机):电路GPS记录器

我的业余爱好项目是GPS记录器 。 评论甚至建议称其为“旅行计算机”,因为 记录只是所有设备功能的一小部分。 已经完成了很多工作,但大多数工作尚未完成。

在先前的文章中,我描述了从arduino到STM32过渡STMCube / HAL) ,并谈到了构建系统引导加载程序构建复合USB设备并提高了速度 。 所有这些操作都是在基于Blue Pill STM32F103CB电路板的面包板上以及由电线制成的刺猬上完成的。 现在该是使设备成形的时候了,无论是电子(电路)还是物理(身体)。



我在现阶段必须解决的问题是相互联系的。 在为项目选择组件时,您需要大致想象一下可以将它们推入哪个外壳中。 反之亦然,必须为可用的组件和电路板制造外壳,再次需要注意外壳。 通常,存在一系列相互关联的问题。 当然,您可以拿一个更大的盒子然后将任何东西推到那里,但是您想要一个紧凑轻巧的东西。

立即开始之前,我要注意这不是设备的最终版本。 该方案最有可能出现错误,某些功能将无法按预期工作,在注释中它们将指示更正确的解决方案,一些方法将被重新考虑。 我认为无法避免使用第二版甚至第三版的设备。 因此,我很高兴您的建设性意见。

根据削减,他是多珠子的,但这将是工程。

什么和为什么


GPS记录仪Holux M241是我所有旅途的忠实伴侣。 他已经陪伴我数千公里。 记录器编写的轨迹主要用于对照片进行地理标记,但是路线本身也很有趣。 有趣的是,您了解滑雪的速度,飞机的飞行路线,公交车窗外刚刚闪过的景象。 在这里,我对该设备进行了小幅评论。

不幸的是,这种设备的功能早已不适合我:我厌倦了总是在最不合时宜的时候坐下来的电池。 USB速度也很慢,内部闪存很少,合并曲目的机制很不方便,显示屏上显示的信息很少,准确度很低,里程表非常原始,没有有关卫星的信息等等。

是的,您可以寻找现代追踪器所提供的功能-确保已经有一款符合我要求的销售设备。 但这是一种爱好,我想尝试自己做一些复杂,有趣,有用和必要的事情。 顺其自然,即使只有我会使用它。

整个项目的目标是用某种东西制造一个类似的设备,只塞满我的心愿单。 在该系列的第一篇文章中,我详细介绍了该设备的要求。 简而言之,我想执行以下操作:

  • 回收电源系统,转移到锂电池
  • 展示更多信息
  • 更精确的GPS
  • 使用SD卡扩展闪存
  • 添加指南针和加速度计
  • 我还想重新设计日志记录系统,以便以我需要的格式吐出曲目。

除了技术要求和愿望清单之外,还有非技术性(非功能性)要求。 因此,我想从头开始创建复杂的设备,以弄清各种电子元件的工作原理,如何对其编程,如何选种电路板和设计机箱。

如果所有现代手机都具有GPS,大屏幕和大量内存,为什么还需要单独的设备? 好吧,首先,我不确定在跟踪记录模式下启用GPS的手机能否承受一整天。 我真的不想在没有电话的情况下呆在陌生的国家。 另外,我个人使用单独的设备也更舒适。

也许随着时间的流逝,设备的概念将会改变。 因此,例如,现在放弃屏幕并通过蓝牙连接到电话,并在电话上进行所有逻辑操作,变得越来越合乎逻辑。 这个想法非常健壮和诱人。 但是在此阶段,我仍想进行展示-我总是有时间放弃它。

在第一年半的时间里,我在各种调试板上开发了该器件(首先是arduino nano,然后是STM32F103蓝色药丸,然后是STM32F407VE)。 我必须连接外围设备并购买模块。 结果,桌上出现了一根用电线制成的刺猬,无法测试街道上的GPS接收信号-有时,您甚至不能在不断开某处连接的情况下移动电线。 然后快乐调试。

每次坐下来编写有用的功能时,我遇到一个事实,即系统的其他部分停止正常工作,并且不得不花费数小时来调试完全不相关的内容。 因此,例如,该系统最重要的组件-GPS接收器-最终开发得最少,因为 我不得不开始调试USB,SD卡,设置库等。

最终,我对此感到厌倦,并决定制作我的调试板-这将是今天文章的主题。 我在项目的这一部分中为自己设定的目标如下:

  • 制作一个调试板,使非接触组件没有问题
  • 确定主要的技术和原理图解决方案
  • 大致决定下一步要使用的组件
  • 大致决定布局和主体
  • 电路应该足够通用,以能够试验不同的组件及其模式

尽管最终目标是紧凑型电池设备,但今天我不会做以下事情:

  • 微调功率模式
  • 消费设定
  • 睡眠模式


准备好电路板和主要代码后,我将处理功耗设置。 顺便说一下,今天的代码也不会,但是我肯定会回到这个问题,因为会有足够有趣的材料。

组成部分


让我们从组件和外围设备开始。 在此过程中,我们将估算连接该动物园所需的微控制器的支路数量以及功率参数。 因为 这是一个业余爱好项目,我从可以在商店/ ebay / ali上实际购买的部件以及可以在家焊接的部件(当然,也可以从我个人用品中购买的部件)中选择组件。 也许某些特定的微电路可以更好地解决该问题,但是可承受性和价格问题对我来说很重要。

  • 当然,GPS记录器的主要组件将是GPS接收器 。 就我而言,这是一个基于UBlox M8N芯片的诱骗的北天BN-880 。 HMC5883L芯片上的指南针也集成在模块中。

    连接:用于GPS的2针UART和用于指南针的2针I2C
    电源:从2.7V
    消耗电流:50mA

    • 还订购了Beitial BN-220模块。 它没有指南针,但天线更为紧凑(20x20mm与30x30)。 事实还不清楚,这将如何影响接收质量。 需要测试。 但是,根据数据表判断,该模块可以在1.4V的电压下工作,这将对器件的工作时间产生积极影响。
    • 实际上,这里的一切都是泥泞的。 看来BN-880是基于UBlox M8N,而BN-220是基于U-blox M8030-KT。 但在某些消息来源中,似乎似乎是同一回事。 更确切地说,M8N是模块,而M8030-KT是内部芯片组。 我担心这种混乱的电源问题-M8N从2.7V宣布,而M8030-KT从1.4V宣布。
    • 另外,我还可以选择放置SIM868模块。 其中除了GPS外,还有一个GSM / GPRS模块和蓝牙。 尽管它的棘手性和连接的复杂性令人恐惧。 您将需要首先使用调试板。
  • 该设备与“只是一个黑匣子”之间的主要区别在于显示器的存在。 在最初的原型中,我通过I2C连接显示器,但总线负载约为25%。 但是,要点甚至不是百分比,而是屏幕缓冲区的传输大约需要25ms的事实,在此期间不可能与总线上的其他设备进行通信。 这可能是一个问题,因此您需要将显示器放在单独的I2C总线上,或者考虑通过SPI连接

    连接:2条I2C线或3条SPI线(只写显示,因此不使用MISO线,但使用单独的数据/命令信号)
    电源:3V
    消耗电流:25mA
  • 为了控制设备,我将使用2个分别占据处理器2条腿的按钮
  • 在原始设备(我最初从中复制功能的Holux M241)中,不可能在任意时间点观看曲目。 必须将设备连接到计算机,并使用特殊程序合并数据。 在我看来,随时随地在手机或平板电脑上观看曲目的能力将非常受欢迎。 为此,我购买了蓝牙模块HM-13 。 选择该模块的原因是它除了BLE之外还具有SPP。

    连接:2条UART线,1条状态线(已连接/未连接)
    电源:2.5V-3.9V
    功耗:50mA(尽管数据表旁边是13mA的数字。也许这是峰值和平均值)
  • 就像我被告知的那样,如果您只是坐下来休息或去咖啡馆用餐,则保持接收机打开电源没有任何意义。 因此,我决定添加MMA8452 加速度计,并使用它来确定设备是静止的还是我们正在移动某处。

    连接:2线I2C,1线用于中断
    从2V到3.6V的电源,有些消耗很小
  • GPS轨迹将记录在SD卡上 。 我已经尝试过在SPI模式下使用该卡,这有点慢。 特别是在记录上。 SD卡的正确模式-SDIO

    连接:6线
    电源:从1.8V
    功耗未知,但我认为不会超过20mA
  • 为了节省能源,有必要关闭当前未使用的那些设备的电源。 因此,在每个用户附近,我都会戴上一个晶体管 ,该晶体管将控制微控制器的单独信号

    连接:5个信号,每个用户1英尺(GPS,蓝牙,加速度计,SD卡,显示屏)

    基于评论的UPD。 禁用加速度计是没有意义的-它已经消耗了一分钱。 有些设备很可能会一直工作(例如SD卡)-将来,我将能够卸下这些晶体管。 某些设备(例如GPS)能够根据命令从接口断开连接。 如果根据测试结果,该部分可以正常工作-我也将拒绝使用外部晶体管。 同时,我正在尽最大可能的总费用,让这些晶体管成为全部。 而且,我还没有决定外围设备。
  • 用于状态显示的双色LED (不带LED闪烁怎么办?)。 可以放置三色,但是到目前为止,我仍然看不到这种需要。

    连接:2针
    消耗电流:10mA
  • 除了蓝牙之外,还将通过USB实现更经典的合并曲目机制。 为此,将涉及4条线-一个用于数据的差分对,一个用于检测设备是否已插入USB的引脚,另一个用于逻辑连接的引脚(为什么我需要这两个引脚,我将在下面描述)
  • 食欲与进食有关。 自从我开始在梦device以求的设备中塞满所有东西后,为什么不添加高音扬声器呢? 好吧,还是振动马达 。 我尚未提出用户案例。

    连接方式:1线
  • 该设备仍将需要加电。 PT1502芯片将我视为锂电池充电器和电源控制器 。 要与微电路通信,您将需要使用两根电线:一根用于电源管理,另一根用于发出有关电池耗尽的信号。 出于兴趣考虑,可以使用另一条线来测量电池的电压。
  • 当然,基于电压来测量锂电池的电荷是不正确的。 因此,我添加了特殊的INA219功率计芯片

    电源电压:3-5V,建议3.3V
    连接:2线I2C

    如下所示,电源电压为3V会使连接不舒服。 我希望计数器芯片由2.7V或更低的电源供电。 但是在根据价格/案例/可用性进行了几种选择之后,我仍然没有发现2.7V的电压。 我将不胜感激。
  • 剩下的只是提供调试接口SWD (3条线)和调试UART (另外2条线)

我一直对为什么需要具有大量端口的控制器这一问题一直很感兴趣,并且我很容易就数出了我的功能所需的39个爪子。 这还不包括石英,复位和功率。 而且还有一些解决方法(例如,显示器可以通过Intel 8080或Motorola 6800并行接口连接)的想法。

当然,您可以拧紧I2C端口外接器,以减少使用的支脚数量。 但是首先,这些是板上的附加组件,其次,软件部分变得更加复杂,其次,小型微控制器仍然具有很少的内存,并且在有足够内存的地方,也有足够的端口。 因此,我认为没有任何理由使所有内容复杂化-共有39行。

营养学


使用电源,并非一切都那么清楚。 您可能可以通过3.3V为所有设备供电并保持冷静。 但是,尽管如此,我们仍将制造移动设备,这意味着我们需要考虑节省能源。 因此,您需要尝试选择较小的电源电压。 下面,我估计您可以尝试实现哪些节省。

这是板中所有设备的数据-以这种形式,选择连接该设备或该设备的电源域更加方便。

装置功率范围电源域沟通交流
中央处理器2-3.6伏2伏
加速度计2-3.6伏2伏I2C
SD卡1.8V或3.6V2伏SDIO
展示架1.65-3.3V
或3-5V
2伏I2C或SPI
全球定位系统2.7-5.5伏
或从1.4V开始
2.7伏串口
蓝牙功能2.5-3.9V2.7伏串口
功率计(INA219)3-5.5伏3vI2C
蜂鸣器3V-5VVbat

从板上可以很容易地看出某些设备可以在足够低的电压(1.8V以上)下工作。 其他人可以在2.7V电压下舒适地工作。 最后,其余低于3V的设备无法工作。 这个尖叫器通常需要5V电压,但对我来说,它将由电池提供的最高电压供电,无论它多少。

随着显示器的力量尚未完全被理解。 在带有ali的显示模块的描述中,范围为3-5V,而在矩阵控制器SSD1309的数据表中,范围为1.65-3.3V。 我假设需要3V电压来摆动显示模块板上的升压转换器,而1.65V的电压足以满足逻辑要求。 从有关布局的讨论中可以看出,放弃显示模块并直接连接显示器是有道理的,这将为2B域中的显示器供电。

关于GPS,我有相同的理由-不同的来源表示不同的电源电压。 到目前为止,我还不知道最终将使用哪个模块,因此让接收器在2.7V域中闲逛。

使用SD卡并不清楚。 该规范模糊地指出,通常该卡应使用3.3V供电,但是现代卡足够智能,可以理解它们卡在低压设备中,并且可以从1.8V切换至电源。 但是选择食物的机制还不是很清楚。 我将通过2B喂卡,看看会发生什么。 它不起作用-将在3V电压下工作。

因此,有4条电源总线-2V,2.7V,3V和一个电池。 我想将所有正在吃东西并且一直在工作的消费者(这就是控制器和GPS)放在最低电压的总线上,但是目前我还没有决定GPS模块(因此它的电源-2或2.7V),这意味着将有必要某种通用解决方案。 我将尝试分离电路板,以便轻松施加一个或另一个电压。

您从哪里得到这么多不同的压力? 即使在项目的早期阶段,我也研究了PT1502微电路,甚至设法在另一个项目中进行尝试 。 除了用于锂电池的充电器,该微电路还具有多达3个电源-一个脉冲和2个线性向下开关。 但是,这里的电压未在其中之一调节,为3V-我将尝试用它为INA219供电。 剩下的2个电源都不成问题,因为 在那里您可以选择电压。

估计消耗不是很成功。 峰值功耗在数据表中指示-这足以计算关键晶体管的功率,但不足以估计所需的电池容量。 因此,现在,我将根据外壳的可用空间来选择电池,在那里我将已经测量了实际消耗量。

可能会出现问题,但是如何匹配具有不同工作电压的设备? 让我们做对。

  • 微控制器的所有通信支路都标记为五伏耐压(PA2 / PA3支路上的UART2除外),这意味着,如果最高电压的设备出现3.3V,则不会发生任何不良情况
  • 加速度计虽然由2V供电,但可以与总线上的高压设备并联连接。 这个问题很容易解决-使用MMA8452Q微电路,可以从另一个电源(通过总线本身上的“高压”设备)分别为通信导线供电
  • 我将尝试使用与微控制器相同的电压为SD卡供电,这意味着我不需要进行任何协调。
  • GPS和蓝牙应该吃掉微控制器的“低”电压,而不会出现任何问题。 其他“高压”设备也是如此

最后,关于我为何为降低电源电压而奋斗的几句话。脉冲DC-DC转换器中的芯片,可以将伏特交换为安培(当然,如果您不考虑转换器本身的损耗)。更准确地说,将较高的电压与较低的电流交换为较低的电压和较高的电流。在这种情况下,我们对反向推理更感兴趣-如果您通过DC-DC馈入低压负载,则整个结构以及转换器的电流消耗将低于负载本身的电流消耗。好吧,由于电池容量以mAh为单位,因此降低电流消耗将增加电池寿命。

算什么
, 90%, DC-DC . . , DC-DC .

. 900 4.1 3.5 ( ). DC-DC 90% ( ). 100. .

, 900 100 9 . — 9.3 3.3, 11.4 2.7, 15 2. , , , .

微控制器


我仔细考虑了选择微控制器的问题-我在配置器上玩了很长时间,权衡了每个选项的优缺点。我真的很喜欢STM32微控制器,所以我看不出没有特殊需要的其他控制器的方向。而且,在STM32系列中,有针对每种口味和任何外围设备的控制器。在项目的前几个阶段中获得的经验使我们能够根据外围设备列表,已经编写的软件绑定以及我将来希望实现的功能来缩小控制器的选择范围。

因此,很明显,我的STM32F103CB的20kb内存确实很小-没有足够大小的缓冲区来与SD卡和USB通信。我什至还没有开始实现许多计划的功能,但是它已经占用了超过19kb的空间。但是事实证明,有了处理能力,这并不是特别必要。如果与外围设备的所有通信都被推入DMA,则中央处理器的份额仅剩下百分之几。

在估算了控制器所需的清单之后,我计算出以下内容:

  • > = 128kb闪存(当前使用约50k)
  • > = 40 kb的内存(现在占用19k)
  • > = 40英尺GPIO(请参见上面的推理)
  • > = 40MHz(您不需要太多,主要是减少功耗)
  • DMA(我真的很喜欢)
  • > = 2个I2C,> = 3个UART,> = 1个SPI
  • SDIO(通过SPI的闪存驱动器非常慢)
  • USB Full Speed, High Speed
  • ( )
  • LCD ( FSMC)

STMicroelectornics微控制器只是一角钱-每种口味,颜色和钱包都可以。首先,我尝试从系列中选择一个控制器。标尺L0和F0太弱并且没有足够的内存,相反,S7和H7太花哨,L4中没有SDIO(UPD:SDIO是,他们只是在系列书的标题页上未提及)。在本系列的其余部分中,您可以根据我的需要进行选择,因为我没有特别的要求。

STM32WB系列给蓝牙留下了深刻的印象,但VFQFPN68外壳在某种程度上降低了在业余项目中使用它的渴望。而且我没有在零售中找到这样的控制器。

我针对的是LQFP64外壳-支脚数量足够,但不能同时很大,可以在家焊接。最好有一个CubeMX配置器,您可以在其中使用过滤器选择所需的内容。

我选择STM32F103RB控制器的原因有三个。首先,我已经使用Blue Pill板对F103系列进行了很好的研究。通常,STM32F103CB控制器完全适合我,仅内存不足。其次,我已经有一个引导程序和该控制器的低级代码,而其他的则必须重做。第三,大约一年前,我已经很高兴购买3个STM32F103RB。然后,我没有对可用的控制器进行详细研究,只是从F103系列中选了一个较厚的控制器。现在不要扔掉它:)

正如我已经指出的,我对外围设备或性能没有特别的要求。但是,如果遇到问题,请记住我已经有F4系列的控制器(如果需要更强大的产品)或L152RD(如果您需要根据消耗量来决定一些事情的话)(UPD:我也研究了L433RC)。令人欣慰的是,使用STM32,几乎所有引脚到引脚控制器都是兼容的,并且F4和L1 / L4几乎可以焊接而无需更换电路板。您甚至可以收集和比较不同MK的消费量。

关于车身和布局的几句话


我们决定了细节。 现在是时候绘制图表,然后跟踪电路板,然后尝试将其装入机箱中。 还是不行 坦白说,起初我只是这样走,但后来我得出结论,一切都必须以相反的顺序进行。 好吧,或者至少在同一时间。

我想要一个紧凑的设备。 为此,您需要准确地了解可用空间的大小,进而了解板子的放置位置及其大小,电池可容纳的大小,按钮,屏幕,USB连接器和其他外部组件的放置位置,并弄清楚如何安装这些组件。在它们之间铺设电线是否方便。 在不了解所有这些情况的情况下开始筹集董事会根本没有意义。 因此事实证明,您需要先处理主体和布局,然后再进入电路。

另外,在绘制外壳的过程中,我不得不多次修改组件的选择。 因此,起初我以为是使用便宜的128x64 0.96英寸显示器 (工作区域的大小为21.7 x 11.2mm),但是在更大的外壳背景下,这种显示器看起来是完全微观的。 然后订购了1.3英寸显示器 (工作区域29.4 x 14.7毫米),但并没有得到更好的改善。 然后我得到了一个1.54英寸显示屏 (35 x 17.5毫米)-它看起来或多或少是正常的。 这是当前的主要工作选项。

据估计,一块1.8英寸“ -2”的显示器看起来会更好,但是这些显示器已经具有色彩和更高的分辨率,因此屏幕缓冲区对于我的控制器来说足够大(35kb而不是1kb)。 好吧,将大型显示器推入外壳也可能是一个问题,因为 此类模块的着陆支架明显大于显示屏的活动区域。

当我在用ali写这篇文章时, 单色的2.42英寸显示器以相同的分辨率(128x64)和与1.54完全相同的绑定出现。 我订购了一个进行测试-有机会将其粘贴到我的手机壳中,而不会显着增加设备。

在此案工作阶段的另一个重要意义是要了解,所购买的显示模块会占用过多的空间,并且会大大减少主板的空间。 因此,我决定放弃成品的显示模块,而是将显示器及其绑定物放置到我的板上。 电路中的零件数量略有增加,但整体设计显着简化并变得更加紧凑。

我对GPS模块的主题也有类似的想法。 它不是那么大,但是无论它如何放置或受到干扰,或者天线被一些电池关闭。 将模块的填充物放置在板上,然后将天线放置在其他位置,可能是个好主意。

通过对外壳的研究,还可以确定电池的大小和容量。 在可用容量中,仅发现了900mAh电池-我们将重点关注它。 我希望设备能使用15到20个小时的电池,这意味着功耗应在45到60mA的水平。

目前,我无法称呼船体的工作完成。 首先,某些组件(显示器,GPS)的选择问题仍然悬而未决。 其次,目前尚不清楚我的电路是否将在原则上启动,或者是否有必要从根本上改变任何东西。 第三,该板太紧凑了-我不确定我能否溶解,焊接和调试它。 因此,在本文中,我仍将重点讨论电路问题,将以更简单和更易理解的步骤进行操作,并且下一次将讨论该情况。 在这里,您有几个渲染图和照片作为种子。









方案


现在您可以做电子产品了。 我将详细介绍电路解决方案。 首先,对于与我一样的电子新手,以及我自己的简介。 经验丰富的电子工程师可以浏览电路,倒退至下一部分。

让我们从营养开始。

该设备将由锂电池供电,这意味着您需要充电控制器。 此外,某些组件的电压上限约为3.6V,而电池最终容易超过4V。 因此,您需要一个降压电源。 正如我们已经发现的,我们将需要几个不同的压力。

我已经提到过,我将使用PT1502芯片。 非常适合,因为 实现充电控制器,3个电源以及按钮开关设备电路。 微电路包含几个功能块,为清楚起见,在图中已将其划分。 该电路本身是略作修改的数据手册电路。 这是锂电池充电控制器



电阻R3设定充电电流。 默认情况下,这对应于470mA。 也许根据测试结果,我会将这个电阻的值减小到510欧姆,这将产生大约900mA(1C)的充电电流。

控制器可以通过脚CHG_STAT报告当前的充电模式。 此外,他知道如何发出多达3个信号-正在充电,未充电,已经充电但仍连接到插座。 在第一个版本中,内部晶体管将脚压到地面,这很容易被控制器识别。 在第二实施例中,晶体管完全闭合,并且支脚进入高阻抗状态。 使用上电,控制器也很容易读取此类信号。

但是用第三种状态并不是那么简单。 那里的晶体管是开路的,有20μA的电流流过它。 为了考虑这种情况,我被提示选择升降机,以使大约一半的营养都在我的腿上。 然后,可以使用ADC轻松检测这种状态。 根据欧姆定律,我们得出R5 = 1V / 20mkA = 50k。

就像我说的那样,PT1502芯片不仅是充电器,而且还是所有功率的棘手控制器。 微电路监视电路中的电压,并使用RESET信号可以控制主处理器(他们说您仍然必须提早启动,电源尚未稳定)。



同样,微电路可以通过按下按钮(BTN1)来启动设备,并且,根据来自微控制器的信号(PWR_HOLD),可以完成操作并关闭电源。 好吧,为了通知处理器电池BAT_LOW信号已用完。

这是主要的动力来源。



输出电压由BUCKFB端子上的电压设置,并由电池电源设置为2V。 但是使用两伏电源时,发现了一个问题-USB无法正常工作。 即 电池将被充电,但将无法传输数据-微控制器无法将信号传递到幅度足够大的USB总线。 Datashit建议电压至少为2.7V,优于3.3V。

为了不阻塞其他电源并考虑如何在它们之间切换,我决定只调整分频器R1 / R4 + R7的比率。 有了这个包含,脉冲就连续运行。 将设备插入USB后,晶体管就会打开并分流R7。 驱动电阻的比率发生变化,我们在输出端得到3.16V(我们仍然可以使用额定值并将其保持在3.3V)。

PT1502还具有2个线性控件。



低功耗组件(INA219)或寿命短的组件(蓝牙)都将连接到这些控制器,因此这些信号源的效率将不会成为问题。 可以使用LDO2_SETx信号来调节LDO2电源电压。

由于我仍然对电源电压有疑问,因此我决定分离跳线以选择LDO2_SETx模式。 另外,为了能够测量相应总线上的实际消耗,我还将桥接跳线JP1 / JP2 / JP3到了梳子上。

完成电源主题后,我们需要提及显示器的电源。 我写得更高一点,以紧凑性为名,我不得不放弃购买的显示模块,并用捆扎好的板子拿起显示器。 该显示器需要一个特殊的7-16V升压转换器。 方便地,可以使用EN信号打开和​​关闭此源。 电路本身是从升压器的数据表中复制的,与带有ali的显示模块完全相同。



PT1505
在Internet上寻找PT1502芯片的替代产品时,我遇到了她的姐姐PT1505芯片。 这几乎是相同的电源控制器,但有额外的升级。 使用这种控制器,可以减少板上的元件数量。 不幸的是,我没有找到PT1505芯片。

顺便说一句,如果您知道其他制造商的类似电源控制器,我将不胜感激。

现在介绍一下微控制器的功能。 微电路很大,有6条电源线-4条用于数字部分,1条模拟电源和1条时钟。 根据STM32F103的数据表,在所有电源线上(也许除了时钟之外),电容器上应有一个100nF的电容器,而另一个通常为4.7uF。

但是,在STM32F4的数据表中,据说尽管微控制器在输出方面实际上是兼容的,但它们的电源方案仍然有些不同。 因此,在两个端子上,端子和地面之间应该有2.2mkF的电容器(而不是像F1一样在地面和电源之间)。 因此,我必须考虑这两种选择,并且对于特定的微控制器,只能焊接部分电容器。



继续营养主题,您需要弄清楚如何测量营养。 您可以依靠BAT_LOW信号,如果电池电量不足,请用户快速卷曲。 但这恰恰是我在最初的Holux M-241中所不喜欢的,因为 这个信号似乎来不及了,很容易错过。 我需要某种更多有关电池电量的信息。



以防万一,我放了最普通的分压器来测量电池电压。 但是对于锂电池,这仅是一个有用的指标,不应依赖。 为了使互联网上的电池读数更为真实,他们建议使用“吊坠”。



这个小芯片可以计算通过电池或从电池中通过的能量。 在分流器R10上进行测量。 可以通过I2C读取微电路的读数。 微电路能够测量电池上的电压,流经电阻的电流,并且还能彼此相乘。 不幸的是,她不知道如何累积Watt *所经过的小时数,因此她将不得不进行连续调查。

让我们继续到数字部分。 整个系统的核心是STM32F103RB微控制器。



两个石英形式的捆扎带是从互联网上发现的其他方案中获得的(数据表中已再次检查)。 我不需要从RAM引导,而是因为信号BOOT1拉到了地面。 可以使用跳线选择BOOT0以从主闪存或内置UART引导加载程序进行引导(例如,对于设备的主固件)

接下来是LED。



由于主电源电压会在2到3.3V之间变化,因此不应该将LED连接到它-亮度和电流消耗会发生很大变化。 因此,LED I将连接到2.7V总线,相应地计算了限流电阻。 由于由电池供电时,微控制器脚上的电压不能超过2V,因此无法使用GPIO推挽模式。 仅开漏。

关于重置按钮,没有什么特别的要说的。



由于三伏设备(INA219)将位于I2C总线上,因此您还需要对三伏进行支撑



SWD连接器也是标准的。 需要一个二极管来在电池和编程器的外部电源之间切换。



惊叹于他们没有这样做,并且这样的连接并没有真正断开电池的连接。 是的,它不会关闭,但是二极管不适合这样做。 如果未连接电池,则需要此东西才能通过编程器为设备供电。 如果连接,则让它开始工作。 好吧,如果连接了电池,则需要保护编程器本身不受电池上的4.2V电压的影响。

但是按钮应该更详细。



事实上,第一个按钮不仅是按钮,而且还可以用作设备开关-BTN1信号连接到PT1502电源控制器芯片。 当设备关闭时,不会为微控制器和其他用户供电。 这就是按钮不连接电源(VCC)而是连接电池(BAT)的原因。 按下此按钮,PT1502将打开所有电源并启动微控制器。 之后,该按钮可以像常规按钮一样工作。 为了避免用电池的高电压烧毁微控制器,我构建了一个小型分压器,该分压器将BTN1信号驱动到必要的帧中(但是,没有这种情况,这是可能的-微控制器具有可承受5V的输入)

第二个按钮不明显。 在处理器内部,将包括对地面的拉力,并且按钮会将一个单元馈送到生产线...

无缝移动到沉重的外围。 USB接口



USB连接器将从设备中伸出,并且静电可能会在设备中蔓延。 事实证明,存在特殊的微电路(例如STF202-22)可以保护微控制器免受外部影响。

但是这里还有其他有趣的事情。 STF202芯片内部隐藏了一个1.5k电阻,该电阻连接在VBUS支路和D +线之间。 根据USB规范,需要使用此电阻器-它告诉主机它卡在某些东西中。 在许多电路中,此电阻器始终连接在电源和D +线之间。 一旦主机在D +线上看到这样的电阻,它就会立即开始与设备通信。 这并不总是适当的,因为 某些设备可能未立即准备好进行通信。

这只是我的情况。 有一个简单的技巧( 在此处侦听)。 您可以使用晶体管打开和关闭此电阻器:我们需要通信-我们打开电阻器,只想由USB供电-将其关闭。 当您将手机插入USB时,他通常会问:“我们将做什么? 数据合并还是只是收费?” -就电子学而言,这仅是连接一个上拉电阻。

但是如何知道设备是否卡在USB中? 为此,我提供了USB_PLUGGED信号,该信号已从最简单的分频器中删除。



USB提供的5V电压也可以直接馈入微控制器的脚-它们仍然可以承受5V电压。 但是让它已经通过分频器了。

现在加速计



该方案摘自数据表。 该模块通过I2C连接,但是为了向微控制器发信号通知有消息,还使用了中断线。 同样,由于三伏INA219仍挂在同一I2C总线上,因此加速度计的通信支路也由3B总线供电以协调电平。

我已经提到过,我想节约能源并关闭不使用的电器。 因此,加速度计的电源由晶体管打开。

顺便说一句,我真的很喜欢所谓的 数字晶体管-带有两个电阻的晶体管。 这样可以节省板上的少量空间。 遗憾的是,在使用两伏电源的情况下,我无法使用至少具有适当电流(最大20-30 mA)的数字晶体管。 因此,越来越多的消费者不得不与MOSFET连接。

前进GPS



GPS位于单独的板上,并通过环回连接。 由于尚未确定GPS模块,因此我提供了2种不同的电源。 除了处理器板侧的功率晶体管外,没有什么比这更有趣了。

我只想谈谈UART。 最初,我计划使用全部3种方法-一种用于上载固件和调试,第二种用于GPS,第三种用于蓝牙。 但是事实证明,UART3与我最初打算用于显示的I2C 2号在相同的引脚上。 我不得不选择。 结果,我得出的结论是,我可以通过为GPS保留的同一UART上传固件和进行调试(当然,必须禁用GPS)。 好吧,如果您需要启动GPS本身,那就是USB CDC(您可以在其中上传日志)和SWD。 不久之后,我放弃了使用2号I2C的想法,因此UART3免费了,但是为了节省电池,我决定专注于两个UART。

蓝牙功能



根据数据表中的方案连接了蓝牙。 引脚PIO1可以在两种模式下运行。 首先,一个LED与其连接,并且模块与此LED一起闪烁。 不同的眨眼意味着不同的状态。 在另一种模式下,此引脚用作数字引脚-建立通信时为数字引脚,否则为0。 在模块初始化期间,通过AT命令切换模式。

SD卡

尽管SD卡连接方案是标准的,但由于某种原因,这对我来说非常困难。 互联网上有太多不同的连接选项,要弄清楚哪个是正确的并非易事。



在大多数情况下,我对套管有疑问。 有时,有些方案会将电阻置于1k。 有些电路放置了22 Ohm电阻,显然是为了防止静电。 但是,大多数电路都不提供直通电阻,我可能会采用同样的方法。 我也不会有静电,因为 闪存驱动器将位于机箱内部。

在我看来,功率晶体管也将不再需求,我认为该卡将一直可用-它是一个记录器。 但是,既然这是一个测试板,那就顺其自然。 线圈也有同样的问题-显然是在原件中包含了偏执狂,或者该卡在功率或干扰较弱的环境中使用。 我认为在这里焊接一个零电阻,然后尝试不带线圈。

展示架

我有机会通过SPI将显示模块之一与ali连接,并与通过I2C进行的连接进行比较。没有特别的困难,只需要稍微浪费代码即可。同时,SPI的速度比I2C的速度高一个数量级。添加了数据表上的功耗数据(SPI为4 mA,I2C为10 mA),I2C需要上拉电阻后,我决定通过SPI连接显示器。



不幸的是,BS0信号没有输出到显示环路,因此您不能选择3线SPI模式,而只能选择4线SPI。在3线模式下,附加D / C线(数据/命令)之间的差异由SPI数据的第9位传输。但是,也许4-Wire模式更好,因为STM32中的SPI只能发送8位。

该方案的其余部分与数据表相对应。

最后是尖叫者。没什么特别的-只需通过晶体管导通即可。



如果要用振动马达代替高音扬声器,我提供了一个保护二极管。但是,我听到这样的观点,即保护二极管也不会伤害高音扬声器。

中铁


上面,我描述了我对军团的看法。实际上,我什至试图为这种情况选一个董事会。不幸的是,董事会太局促了。我必须使用双面安装,从组件1206切换到0805,但是所有相同,板上的组件非常紧。而且,该方案的每一次变更都是痛苦的,因为我不得不重新繁殖近一半的董事会。

因此,我在她身上摆弄了好几个星期,但董事会击败了我,我放弃了该项目将近一年。踢成了这里这篇文章。但实际上,这只是一个原型,并且是其中的第一个。如果您可以在一块大板上调试所有东西,为什么还要打扰一个超级紧凑的板,而又不能用烙铁或示波器爬行呢?

嗯,您不必制作像iPhone这样的大板,但是完全有可能进入促销性100x100mm 2层JLCPCB。您实际上可以限制自己。因此,板上有一个巨大的2.42英寸显示屏,用于测量所有电源线消耗的跳线,需要和不需要的功率电容器,以及通常无法安装的许多零件。还有一个地方。





在照片视图中




关于接线没有太多要说的。我沿上层分开了大部分信号线和场线,而下层则几乎完全埋在地下。不幸的是,布局仍然非常密集,一些信号线不得不沿着较低的层拖动到整个电路板的一半。因此,这片土地被“撕裂”成几个松散连接的岛屿。我希望这不是问题。

我没有在蓝牙天线下进行接地,但仍然不得不将一根信号线拖入该区域。但是,这是BT_ON线,信号通常不沿这条线运行(信号是打开还是关闭),这意味着它不会特别影响信号。

夏天快到了,我正打算带假期去租房。为了让酒店的女仆不怕带有风扇的裸露调试板,最好将其隐藏在外壳中。我不能否认自己的喜悦,并同时开发了案件和委员会。因此,外壳中有安装板,用于安装显示器支架。

GPS模块是几个板的三明治和12毫米厚的天线。我决定不将其挂在板上,而是将其放置在同一水平上。这减少了外壳的厚度,但从板子的一个角上掉了一点。

董事会和最终设备(在项目的此阶段)的几张照片。







电池可以很好地放在显示屏下方,但是我不得不装一个小盒子,以将显示屏抬高到更靠近顶盖。

组装板上的几句话。我大约在3个晚上焊接了所有东西,在大约一个晚上的时间里,我花了很长时间从软件方面进行调试和检查。令我惊讶的是,成立董事会没有根本性的困难,几乎所有事情都按原计划启动。

事实证明,焊接0805并不比焊接1206难得多,在家里用放大镜就可以食用。您甚至可以在0603摆动。但是,通过焊接微控制器和显示连接器(间距为0.5毫米),我不得不进行修补。在YouTube上,它看起来就像是人们-我只是用烙铁花了它,仅此而已,但我的所有结论很快就被卡住了。

并非没有小问题。在某些地方没有喝酒,在某些地方有“鼻涕”。事实证明USB连接器的占用空间是错误的-他得出的结论是没有必要的结论(因此,请相信Internet产生的占用空间!)。我不得不稍微下结论,以使它们成为现实。在Ali上购买的FPC显示连接器原来是下面的触点,而我需要顶部的触点(我以前没有怀疑这样的区别)。我不得不从标准显示板上“吹走”连接器。

将电路板塞入外壳后,事实证明不可能仅通过拔出连接器来断开电池,但我不想让调试后的电路板通电。我不得不拨动开关。

设置电路板时,事实证明,在可以将探头连接到示波器的任何地方都没有接地。我不得不用鳄鱼抓紧USB连接器。在板的下一版本中必须提供测试站点。

电路也发现了问题。因此,RESET引脚上的PT1502芯片产生3V的电压是完全出乎意料的事实(我完全确定其中有一个集电极开路)。结果,即使我计划那里只有2V,这些3V也会泄漏到电源线。

这是发生的事情的简化图,这


要归功于伟大的头脑和easyelectronics.ru的支持,这是通过增加一个二极管来决定的。稍作手术后,该部分即可正常工作。

此外,我不小心将蓝牙模块(由2.5V供电)连接到主电源(2V),而不是固定的3V。现在,只有在连接USB且主电源的电压升至3.3V时,蓝牙才能为我工作。

原则上,可以用手术刀挥动并将蓝牙焊接到正确的电源,但是与蓝牙连接的UART2不能承受5V的电压(他本人在分析阶段在数据表中读取了该电压,他本人在上面的文字中指出了这一点,并最终在为电路板布线时忘记了)因此,将蓝牙连接到电源要比微控制器的电源高。在下一个版本的电路板上,我只是将蓝牙连接到其他一些UART。

可变电压的DC-DC转换器也按计划工作-当由电池供电时,它会发出2V电压,当您连接USB时,它会升至3.16V(您需要使用额定电压并达到3.3V)。但是,这里又出现了电路的另一个缺陷:在由编程器供电时,还需要能够提高电压。我认为这可以通过增加另一个二极管来解决。我待会儿再玩。

最后,在开发板上的过程中,我仍然不了解如何通过欠压为SD卡正确供电。短暂的谷歌搜索并没有导致任何结果。显然,您需要专心阅读紧凑的页面规范(此外,该规范部分处于关闭状态)。同时,我将R7短路了,现在该板由固定的3.16V(3.3V)供电。在接下来的几个月中,我将以这种方式离开它,而我将处理软件部分。

说到软件。出乎意料的是(尽管很令人期待),但总的来说,一切开始都没有问题。由于我在相同系列的微控制器(从F103CB到F103RC)之间切换,因此不需要更改软件部分。仅更正了引脚号,但增加了晶体管。不过,我不得不修补2个不平凡的时刻。

首先是电池电量。我使用USB电源调试了电路板,并且一切正常。但是主板一直不希望打开电池。它可以工作(如果在连接USB时先将其打开,然后拔出电源线),则无法从冷的状态启动。

根据PT1502芯片的设计,电路板应该这样启动。用户按下BTN1按钮,并在三分之一秒后,芯片打开所有电源。当一切正常后,PT1502会“释放” RESET信号,从而启动微控制器。处理器依次将信号PWR_HOLD设置为1,表示它已开始。之后,PT1502会定期为电路供电,直到微控制器将PWR_HOLD信号降低到零为止。

但这是理论上的。实际上,一旦处理器设置了PWR_HOLD信号,该板就会立即关闭。我铲起了整个电源电路,查看了主信号的波形,来回切换引导加载程序中的代码,但是我无法理解问题。我还犯了一个罪过,因为我忘记安装PWR_HOLD线上没有下拉电阻,但数据表建议这样做(很可能仍然需要)。但是,将其添加到顶棚并不能解决问题。只有当我借出四通道示波器时,一切都变得清晰了。



当用户按下按钮(橙色线)时,PT1502芯片打开电源(紫色线)。所有这些都在此波形上的事件发生之前很长时间(300ms)发生。然后发生了一些有趣的事情。 PT1502释放RESET(蓝线),处理器启动,由于某种原因将按钮线降低到零。即使微控制器仍在尝试提高POWER_HOLD线(绿线)-为时已晚,PT1502已经关闭了所有电源。再有一些惊厥,但电路仍然安静地消失。

问题是,按钮上的零从何而来?这完全是因为引导加载程序中出现了一个不明显的错误,这是由于在BTN1脚上设置了输出模式(可能在那一刻在另一条腿上也发生了奇迹),并且那里出现了一个低信号。

SD卡还需要努力解决。旧的微控制器中根本没有SDIO模块,因此我不得不从头开始研究这一部分。我几乎整天都在尝试获取地图,从Internet上的示例中复制代码片段以及C​​ubeMX生成的内容。尽管该卡在计算机上可读性很强,但它始终不希望在我的电路中启动。我因焊接不良,上拉电阻选择不正确,电路笨拙以及数据手册解释不当而感到犯罪。但是令我惊讶的是,另一张具有相同代码和同一块板上的卡的启动没有问题。有必要更详细地研究这个问题。

卡有另一个问题。用示波器拨入不同的线路,我只看到D0线路上的活动,而在D1-D3上却寂静无声-该卡以单位模式工作。在HAL中,甚至找到了HAL_SD_ConfigWideBusOperation()函数,该函数可以启用4位传输模式。不幸的是,当卡切换到4位模式时,SDIO外设进入深度RX FIFO超限并停止工作。

问题原来是非常有趣的。事实证明,在HAL_SD_ReadBlocks()函数内部,存在一个轮询SDIO标志的特定循环。当新数据从卡中到达时,此代码将字节从内部FIFO缓冲区传输到用户存储器。因此,卡传输字节的速度如此之快,以至于HAL_SD_ReadBlocks()中的代码根本没有时间传输数据。我不得不暂时降低卡的时钟频率。好吧,将来我将使用DMA,原则上不会出现这样的问题。

结论和下一步


那些希望在这里看到完成的设备的人将令我失望-只有测试板才完成,甚至只有一块铁。现在您需要为它注入生命,进行编程,微调模式和消耗。好吧,实际上是写一个日志代码-这就是整个项目开始的原因。

尽管如此,对我个人而言,这个阶段是一个非常重要的成就。电子不是我的专长,我对设备甚至启动感到非常高兴。我设法在设计电路,匹配多个设备,为电路板布线,选择组件等方面投入了足够的精力。

我会在另一时间谈论软件。以及有关设置的细微差别。事实是,必须首先恢复并测试整个填充物。目前,我们设法启动了板上的所有设备(除了高音扬声器),但仅以“启动并以某种方式响应”的量启动了。尚未编写任何处理逻辑。

近期计划:

  • 以不同的模式驱动电子设备,检查电路是否仍然有效。修复门框第二版中的门框
  • 测量整个外围设备的功耗,并找到优化功耗的方法。
  • 在不同的微控制器上组装几个板选件(例如L152或L433)
  • 仔细阅读SD规范,并弄清楚如何在低电压信令模式(1.8V)下正确连接卡
  • 尝试使用不同的GPS模块,然后最终决定下一步
  • 订购单独的指南针芯片(例如,HMC5883L或HSCDTD008A)并尝试以某种方式使用它们
  • 从HAL开始进行内部代码重构,升级所有主要库
  • 最后,开始编写功能。实际实现设备的预期用途

在这方面,请允许我请假。对于电路设计和电路板布局的建设性意见,想法和建议,我将不胜感激。

来源:

代码
Bootloader代码
普拉塔
房屋

Source: https://habr.com/ru/post/zh-CN454434/


All Articles