分享免费的编程资源和教程

网站首页 > 技术教程 正文

太阳能,WS2812,丝印反查,F1C100s,Cortex-M7技术文章分享

goqiw 2024-12-19 12:55:07 技术教程 92 ℃ 0 评论

太阳能电源管理模块电路分析

前阵子买了好几个微雪的USB转RS485转化器,用起来感觉还是很不错的,测试波形非常不错,丢包率也很少。买的是FT232版本的,体验还不错。需要的小伙伴也可以去阿宝自行搜索。感觉微雪的质量还是蛮有保障的。

然后今天去官网看,也有一些原理图是开源的,今天就分享一下太阳能电源管理模块方案,与各位同好一同分享,希望对各位的工作学习有所帮助:

这个充电模块支持micro usb口充电,或者太阳能板充电(6-24V),然后具有一些保护功能,例如防过充,过放等。

然后电源充电分两部分,先看第一部分,就是太阳能充电:这部分采用了芯片CN3791作为太阳能电池充电芯片,CN3791 是一款可使用太阳能板供电的PWM 降压模式单节锂电池充电管理集成电路,独立对单节锂电池充电进行管理。

D1可以不用,在CN3791的数据手册里写有,二极管D1用来作为阻流二极管,防止在输入电源掉电时消耗电池的能量。在睡眠模式,即使不用二极管D1, CN3791消耗的电池电流也只有约30微安,所以可以考虑去掉二极管D1。D1的作用是防止输入端没有电源输入的时候,电流通过芯片漏电。

然后防过充过放就是经典的DW01+8205(集成的双NMOS)方案了,也防过流,这个可以说很是经典。这个很多锂电池已经内置了这DW01+8205,阿宝卖的那个4056的锂电池充电小板上用的也是这个锂电池保护方案:

这个DW01的控制逻辑大概是(用单片机控制也是一样的思路),当DW01检测电池电量很低的时候(过放),控制让OD的NMOS截止,让OC的NMOS导通,然后此时电池就不可以放电(蓝色路径),只可以通过红色路径进行充电(通过OD的体二极管),以实现防止电池过放。

充电时,当DW01检测电池电量过高的时候(过充),控制让OD的NMOS导通,让OC的NMOS截止,然后此时电池就不可以充电(红色路径),只可以通过蓝色路径进行放电(通过OC的体二极管),以防止过充损坏电池……

查看原文:https://www.dianyuan.com/eestar/article-7987.html


手机拍摄下的WS2812,内部有颗小ic

最近买了几颗WS2812,今天拿手机拍出来还蛮好看的,分享给各位,可以看到里面是封了一颗小芯片的,也就是这颗芯片作为RGB的控制芯片:

这个RGB灯珠的芯片内部集成了电源钳位模块、信号解码模块、振荡模块、数据再生模块、输出电流驱动模块等。其中数据再生模块在接受本芯片的数据后,自动将级联输出的数据整形转发,保证数据串联传输过程不衰减。不得不说麻雀虽小,五脏俱全……

查看原文:https://www.dianyuan.com/eestar/article-7988.html


干货 | 如何快速准确的丝印反查

相信很多同好在工作中也会遇到拆解或者分析之类的,需要丝印反查,那么如何快速的丝印反查呢?本文就大致总结一下自己反查丝印的一点小技巧。

例如这个图,来自群友的提问,丝印TAF,这是什么器件?方法一:那么最快速最快速的查找方法,就是打开tb,然后搜索:丝印TAF。我敢说,基本这70%可以查的到型号。这种查找方法很直接,而且很有效,如果有不认识的器件,冷门的器件也可以直接拍照识物

方法二:半导小芯APP或者芯查查APP也有丝印反查的功能,不过查找效果个人感觉不如tb,大致例如下图:

方法三:丝印反查网站,不过可以看出这个应该是没有查到。个人还是更喜欢第一种方法。

http://www.smdmarkingcodes.com/chinese.php

方法四:看芯片Logo,然后去对应的官网去查找,很多芯片的logo大家看得多了也就认识了,我列举一下平时见到比较多的一些国外大厂的logo,大致如下图……

查看原文:https://www.dianyuan.com/eestar/article-7989.html


如何操控未来:F1C100s(荔枝派)引领你踏入嵌入式世界

本文将涵盖以下主题:F1C100s简介、Uboot、Linux内核裁剪定制,以及使用C或C++进行应用程序开发。我们还将提供两个示例:一个控制LED灯闪烁的简单示例,另一个创建带有按钮的GUI界面程序。

F1C100s 性能参数

F1C100s是一款低成本、低功耗的32位处理器,常用于嵌入式系统和物联网设备中。它具有ARM926EJ-S CPU架构、16KByte D-Cache、32KByte I-Cache和32MB DDR1 SIP内存。它支持H.264 1920x1080@30fps解码和MJPEG 1280x720@30fps编码。F1C100s是一款720P高清多媒体处理器。

F1C100s 参数如下:

USB OTG(USB On-The-Go)是一种规范,允许某些Android智能手机和平板电脑充当USB主机,以便您可以将其他USB外设(例如键盘或闪存驱动器)插入它们。USB OTG可以通过单个USB端口实现这种功能。USB连接通常从计算机(主机)开始并链接到另一个设备,通常是外围设备,例如打印机、鼠标、键盘或USB闪存驱动器。支持USB OTG的设备可以作为主机或外围设备。许多Android智能手机都支持USB OTG,包括较新的三星手机。有些安卓设备产品包装上是否有USB OTG标志,或者在设备设置中查找USB OTG信息。iOS设备不支持USB OTG,但有办法获得类似的功能并将USB设备连接到iPhone和iPad。

F1C100S处理器的框图如下:

F1C100s 对比全志自家其他芯片:

除内存参数外,F1C200s 与F1c100s 参数完全一样,但是 F1C200s 的内存是64M, F1C100s 是32M。

荔枝派(Lichee Pi) Nano 开发板的参数如下……

查看原文:https://www.dianyuan.com/eestar/article-7981.html


利用GPIO模块来测量Cortex-M7系统中断延迟

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间

在 《Cortex-M系统中断延迟及其测量方法简介》 一文里,痞子衡介绍了 Cortex-M 中断延迟的基本概念及一种用 GPIO 模块来测量中断延迟时间的方法,今天我们就在 i.MXRT1xxx 系列芯片上用这种方法实测一下中断延迟:

一、官方指标

恩智浦 i.MXRT1xxx 系列目前有很多型号,都是基于 Cortex-M7 内核,主频从 500MHz 到 1GHz 不等。拿该系列第一款型号 i.MXRT1050 来说,在其官方主页可以看到其标称中断延迟时间低至 20ns。

在 《Cortex-M系统中断延迟》 一文第一小节里我们知道 Cortex-M7 的标准中断延迟是 12 - 14 个内核时钟周期,i.MXRT1050 主频是 600MHz ,理论计算可得 (1s / 600MHz) * 12 = 20ns,所以 i.MXRT1050 上这 20ns 的中断延迟是符合 ARM 标准的。

二、测试代码

现在我们在芯片上实测一下,痞子衡把 i.MXRT1011/1021/1052/1062/1176 这五个型号均测了一遍,测试代码可以基于其各自 SDK 包。

以 i.MXRT1052 为例,选用 \SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\driver_examples\gpio\input_interrupt 例程为模板(注意选择 debug build,即代码链接在 TCM 里,满足零等待内存的测试需求),按 《Cortex-M系统中断延迟》 一文第二小节设计思想修改主函数如下(关于 GPIO 中断使用可以参考 《以i.MXRT1xxx的GPIO模块为例谈谈中断处理函数(IRQHandler)的标准流程》 一文):

Note1: 为了结果的准确性,痞子衡同时测试了多个不同类型的 GPIO 中断,因为部分 i.MXRT 型号中包含普通 GPIO 和 HSGPIO,并且有些 GPIO 事件既可以触发 Combined 型中断,也可以触发独立的中断。

Note2: 输出信号用的 GPIO 类型对于本次测试不重要,无论选择普通 GPIO 还是 HSGPIO 去翻转,其翻转时长不影响最终测试结果。

uint32_t s_pin_low  = 0x000000;
uint32_t s_pin_high = 0x800000;

////////////////////////////////////////////////////////////////////////////////
// User Button SW8 - Pin4 in RT1050-EVKB
void GPIO5_Combined_0_15_IRQHandler(void)
{
    GPIO2->DR = s_pin_low;
    GPIO2->DR = s_pin_high;
    GPIO_PortClearInterruptFlags(GPIO5, 1U << 0);
    __DSB();
}

void init_gpio5_0(void)
{
    gpio_pin_config_t din_config = {kGPIO_DigitalInput, 0, kGPIO_IntFallingEdge};       
    IOMUXC_SetPinMux(IOMUXC_SNVS_WAKEUP_GPIO5_IO00, 0U); 
    GPIO_PinInit(GPIO5, 0, &din_config);
    NVIC_EnableIRQ(GPIO5_Combined_0_15_IRQn);
    GPIO_PortEnableInterrupts(GPIO5, 1U << 0);    
}

////////////////////////////////////////////////////////////////////////////////
// Arduino Interface, J24-2 in RT1050-EVKB
void GPIO1_Combined_0_15_IRQHandler(void)
{
    GPIO2->DR = s_pin_low;
    GPIO2->DR = s_pin_high;
    GPIO_PortClearInterruptFlags(GPIO1, 1U << 2);
    __DSB();
}

void GPIO1_INT2_IRQHandler(void)
{
    GPIO2->DR = s_pin_low;
    GPIO2->DR = s_pin_high;
    GPIO_PortClearInterruptFlags(GPIO1, 1U << 2);
    __DSB();
}

void init_gpio1_2(void)
{
    gpio_pin_config_t din_config = {kGPIO_DigitalInput, 0, kGPIO_IntFallingEdge};
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B0_02_GPIO1_IO02, 0U); 
    GPIO_PinInit(GPIO1, 2, &din_config);
    NVIC_EnableIRQ(GPIO1_Combined_0_15_IRQn);
    //NVIC_EnableIRQ(GPIO1_INT2_IRQn);
    GPIO_PortEnableInterrupts(GPIO1, 1U << 2);    
}

////////////////////////////////////////////////////////////////////////////////
// TP26
void init_gpio2_23(void)
{
    gpio_pin_config_t dout_config = {kGPIO_DigitalOutput, 0, kGPIO_NoIntmode};
    IOMUXC_SetPinMux(IOMUXC_GPIO_B1_07_GPIO2_IO23, 0U); 
    IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_07_GPIO2_IO23, 0x70F9U); 
    GPIO_PinInit(GPIO2, 23, &dout_config);
    GPIO2->DR |= 0x800000;
}

int main(void)
{
    BOARD_ConfigMPU();
    BOARD_InitBootClocks();
    CLOCK_EnableClock(kCLOCK_Iomuxc);           
    CLOCK_EnableClock(kCLOCK_IomuxcSnvs);     
    
    init_gpio5_0();
    init_gpio1_2();
    init_gpio2_23();

    while (1);
}

三、测试结果

现在我们来看 5 个 i.MXRT 型号的详细测试结果,根据测试结果,我们得出如下结论……

查看原文:https://www.dianyuan.com/eestar/article-7937.html


更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)

六篇技术文章,让你秒懂电容的脾气秉性

七篇DIY技术文章献给你,让你脑洞全开

五篇文章帮你开启DSP的学习思路

汇总篇:关于PID知识,重点在此

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表