单片机

沁恒微电子推出了带有Type-C PD和USB双功能的单片机CH543,采用E8051内核,集成USB主机控制器和收发器,支持全速或低速的USB Host或USB Device功能、集成Type-C PD PHY带有DMA功能及灵活的中断配置,可方便地用于各种Source、Sink及DRP场景的PD通讯应用。

“沁恒微电子推出带有Type-C

“内部结构框图"
内部结构框图

CH543主要特点

1· 16KB Flash-ROM + 256B EEPROM + 32B OTP ROM + 512B RAM

2· 内置LDO,支持3.3~12V电源电压

3· 支持USB2.0全速/低速,支持Host主机/Device设备模式

4· 内置USB PD收发器PHY,支持DMA收发数据

5· 带有I²C从控制器,支持1MHz时钟

6· 4路PWM输出,支持驱动全桥

7· 9位可编程灌电流,支持PD PPS

8· 12通道12位ADC,有内置运放

9· Touch-Key、UART、SPI等其他外设

CH543内部还带有I²C从机控制器,可以方便的配合其他控制器,从CH543中读取数据及状态信息。这在笔记本、平板电脑、电动工具等带有锂电池充电需求的应用中可以提供很大的便利。

同时,CH543还集成有一个9位灌电流源,可以直接用于调节电源系统如DC-DC、TL431的FB反馈引脚。配合芯片内部集成的可高达12V输入电压的LDO、开漏输出引脚等功能,可以方便的实现可高度定制的PD电源、拓展坞、多媒体类应用。

Type-C转DP显示+USB3.0的典型应用

下图为一款Type-C转DP显示+USB3.0的典型应用框图。其中CH543在应用中负责Type-C正反插检测及切换控制、Type-C PD通讯与笔记本/平板电脑等设备握手进入显示模式、检测显示器接入/移除并通知主机。CH9445为一款差分高速信号双向模拟开关芯片,高宽带,低导通电阻,可通过I²C接口配置,实现2对高达5Gbps(USB3.1 Gen2),4对高达8Gbps(DisplayPort 1.4),和1对480Mbps(DisplayPort AUX,或USB2.0高速)信号的矩阵切换。

“CH543:支持12V的PD电源管理MCU"

CH543在Type-C PD电源中的典型应用

下图为CH543在Type-C PD电源中的典型应用框图。其中CH543通过FB端连接TL431或者DC-DC的参考电压端,用于3.3~12V的Type-C PD Source角色应用。

“CH543:支持12V的PD电源管理MCU"

来源:沁恒微电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 905

01、方案描述:

本方案采用瑞萨RA系列R7FA2E1A52DFJ实现无叶风扇的控制方案,通过PWM输出控制风扇运转,利用触摸按键控制无叶风扇功能,以及通过高精度AD采集电池充电电压,防止过冲,显示面板显示电量,转速等参数,该方案外设资源丰富,运行稳定可靠。

02、产品介绍

无叶电风扇的基座中带有40瓦电力马达,它每秒钟将33升的空气吸入风扇基座内部。再经由气旋加速器加速后,空气流通速度被增大16倍左右,接着被无叶电风扇的扇头环形内唇环绕,其环绕力带动扇头附近的空气随之进入扇头,并以每秒405升的速度向外吹出。

一、瑞萨RA2E1系列R7FA2E1A52DFJ芯片的适用性

方案框图里选用了R7FA2E1A52DFJ开发,具备以下丰富外设资源

1、内置大容量32K Flash与丰富外设资源,对于客户方案应用开发提供了更多的选择。

2、内置12位高精度,高速ADC,适合客户过压精准采样。

3、内置PWM控制设置方便控制电机运转。

4、内置大容量的4K Data Flash,能保存用户的设定数据和用户大量的使用数据。

5、支持超低功耗,对于锂电应用场景提高了超长续航的能力。

6、该系列MCU集成了触摸感应单元,可以实现在触摸面板,触摸按键上的应用。

二、瑞萨ISL8117 DCDC芯片参数特性

1、4.5-60V输入,输出0.6-54V。

2、12 Ld 4x3 DFN和16 Ld TSSOP封装。

三、RA MCU开发环境

RA系列使用瑞萨IDE e2 studio开发,里面集成FSP底层代码生成器与参考应用代码,给工程师开发提供了高效,便捷的工具。

四、无叶风扇设计框图

“基于瑞萨RA系列R7FA2E1A52DFJ

五、各部分电路概述

1、系统电源经过ISL8117产生3.3V对MCU芯片供电。

2、通过触摸按键可以方便调整无叶风扇的功能和参数。

3、MCU产生PWM,驱动MOS,控制无叶风扇的旋转。

4、MCU通过ADC模块采集到的电池电压信号,控制过冲电路的工作状态。

5、显示面板通过I2C接口与MCU通讯,显示实时温度与电量。

6、蜂鸣器电路通过声音,提醒用户异常特殊情况的提示。

7、LED显示当前的电量档位,并显示报警信息。

“控制板图片和产品图片"
控制板图片和产品图片

来源:瑞萨MCU小百科(作者:Eric Yuan)
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 57

随着微电子技术和计算机技术的发展,原来以强电和电器为主、功能简单的电气设备发展成为强、弱电结合,具有数字化特点、功能完善的新型微电子设备。

在很多场合,已经出现了越来越多的单片机产品代替传统的电气控制产品。单片机其控制功能通过软件指令来实现,其硬件配置也可变、易变。因此,一旦生产过程有所变动,就不必重新设计线路连线安装,有利于产品的更新换代和订单式生产。

传统电气设备采用的各种控制信号,必须转换到与单片机输入/输出口相匹配的数字信号。用户设备须输入到单片机的各种控制信号,如限位开关、 操作按钮、选择开关、行程开关以及其他一些传感器输出的开关量等,通过输入电路转换成单片机能够接收和处理的信号。输出电路则应将单片机送出的弱电控制信 号转换、放大到现场需要的强输出信号,以驱动功率管、电磁阀和继电器、接触器、电动机等被控制设备的执行元件,能方便实际控制系统使用。

针对电气控制产品的特点,本文讨论了几种单片机I/O的常用驱动和隔离电路的设计方法,对合理地设计电气控制系统,提高电路的接口能力,增强系统稳定性和抗干扰能力有实际指导意义。

输入电路设计

一般输入信号最终会以开关形式输入到单片机中,以工程经验来看,开关输入的控制指令有效状态采用低电平比采用高电平效果要好得多,如图1所示。当按下开关S1时,发出的指令信号为低电平,而平时不按下开关S1时,输出到单片机上的电平则为高电平。该方式具有较强的耐噪声能力。

“图1
图1 开关信号输入

若考虑到由于TTL电平电压较低,在长线传输中容易受到外界干扰,可以将输入信号提高到+24 V,在单片机入口处将高电压信号转换成TTL信号。这种高电压传送方式不仅提高了耐噪声能力,而且使开关的触点接触良好,运行可靠,如图2所示。其 中,D1为保护二极管,反向电压≥50 V。

“图2
图2 提高输入信号电平

“图3
图3 输入端保护电路

为了防止外界尖峰干扰和静电影响损坏输入引脚,可以在输入端增加防脉冲的二极管,形成电阻双向保护电路,如图3所示。二极管D1、D2、 D3的正向导通压降UF≈0.7 V,反向击穿电压UBR≈30 V,无论输入端出现何种极性的破坏电压,保护电路都能把该电压的幅度限制在输入端所能承受的范围之内。即:VI~VCC出现正脉冲时,D1正向导 通;VI~VCC出现负脉冲时,D2反向击穿;VI与地之间出现正脉冲时,D3反向击穿;VI与地之间出现负脉冲时,D3正向导通,二极管起钳位保护作用。缓冲电阻RS约为1.5~2.5 kΩ,与输入电容C构成积分电路,对外界感应电压延迟一段时间。若干扰电压的存在时间小于τ,则输入端承受的有效电压将远低于其幅度;若时间较长,则D1 导通,电流在RS上形成一定的压降,从而减小输入电压值。

此外,一种常用的输入方式是采用光耦隔离电路。如图4所示,R为输入限流电阻,使光耦中的发光二极管电流限制在10~20 mA。输入端靠光信号耦合,在电气上做到了完全隔离。

同时,发光二极管的正向阻抗值较低,而外界干扰源的内阻一般较高,根据分压原理,干扰源能馈送到输入 端的干扰噪声很小,不会产生地线干扰或其他串扰,增强了电路的抗干扰能力。

“图4
图4 输入端光耦隔离

在满足功能的前提下,提高单片机输入端可靠性最简单的方案是:在输入端与地之间并联一只电容来吸收干扰脉冲,或串联一只金属薄膜电阻来限制流入端口的峰值电流。

输出电路设计

单片机输出端口受驱动能力的限制,一般情况下均需专用的接口芯片。其输出虽因控制对象的不同而千差万别,但一般情况下均满足对输出电压、电流、开关频率、波形上升下降速率和隔离抗干扰的要求。在此讨论几种典型的单片机输出端到功率端的电路实现方法。

1、直接耦合

在采用直接耦合的输出电路中,要避免出现图5所示的电路。

“图5
图5 错误的输出电路

T1截止、T2导通期间,为了对T2提供足够的基极电流,R2的阻值必须很小。因为T2处于射极跟随器方式工作,因此为了减少T2损耗,必须将集射间电压降控制在较小范围内。

这样集基间电压也很小,电阻R2阻值很小才能提供足够的基极电流。R2阻值过大,会大幅度增加T2压降,引起T2发热严重。而在T2截止期间,T1必须导通,高压+15 V全部降在电阻R2上,产生很大的电流,显然是不合理的。

另外,T1的导通将使单片机高电平输出被拉低至接近地电位,引起输出端不稳定。T2基极被T1拉 到地电位,若其后接的是感性负载,由于绕组反电势的作用,T2的发射极可能存在高电平,容易引起T2管基射结反向击穿。

图6为一直接耦合输出电路,由T1和T2组成耦合电路来推动T3。T1导通时,在R3、R4的串联电路中产生电流,在R3上的分压大于T2 晶体管的基射结压降,促使T2导通,T2提供了功率管T3的基极电流,使T3变为导通状态。当T1输入为低电平时,T1截止,R3上压降为零,T2截止, 最终T3截止。R5的作用在于:一方面作为T2集电极的一个负载,另一方面T2截止时,T3基极所储存的电荷可以通过电阻R3迅速释放,加快T3的截止速度,有利于减小损耗。

“图6
图6 直接耦合输出电路

2.TTL或CMOS器件耦合

若单片机通过TTL或CMOS芯片输出,一般均采用集电极开路的器件,如图7(a)所示。集电极开路器件通过集电极负载电阻R1接至+15 V电源,提升了驱动电压。但要注意的是,这种电路的开关速度低,若用其直接驱动功率管,则当后续电路具有电感性负载时,由于功率管的相位关系,会影响波形 上升时间,造成功率管动态损耗增大。

为了改善开关速度,可采用2种改进形式输出电路,如图7(b)和图7(c)所示。图7(b)是能快速开通的改进电路,当TTL输出高电平 时,输出点通过晶体管T1获得电压和电流,充电能力提高,从而加快开通速度,同时也降低了集电极开路TTL器件上的功耗。图7(c)为推挽式的改进电路, 采用这种电路不但可提高开通时的速度,而且也可提高关断时的速度。输出晶体管T1是作为射极跟随器工作的,不会出现饱和,因而不影响输出开关频率。

“图7
图7 TTL或CMOS器件输出电路

3、脉冲变压器耦合

脉冲变压器是典型的电磁隔离元件,单片机输出的开关信号转换成一种频率很高的载波信号,经脉冲变压器耦合到输出级。由于脉冲变压器原、副边线圈间没有电路连接,所以输出是电平浮动的信号,可以直接与功率管等强电元件耦合,如图8所示。

“图8
图8 脉冲变压器输出电路

这种电路必须有一个脉冲源,脉冲源的频率是载波频率,应至少比单片机输出频率高10倍以上。脉冲源的输出脉冲送入控制门G,单片机输出信号 由另一端输入G门。当单片机输出高电平时,G门打开,输出脉冲进入变压器,变压器的副线圈输出与原边相同频率的脉冲,通过二极管D1、D2检波后经滤波还 原成开关信号,送入功率管。当单片机输出低电平时,G门关闭,脉冲源不能通过G门进入变压器,变压器无输出。

这里,变压器既传递信号,又传送能量,提高了脉冲源的频率,有利于减轻变压器的体重。由于变压器可通过调整电感量、原副边匝数等来适应不同 推动功率的要求,所以应用起来比较灵活。更重要的是,变压器原副边线圈之间没有电的联系,副线圈输出信号可以跟随功率元件的电压而浮动,不受其电源大小的 影响。

当单片机输出较高频率的脉冲信号时,可以不采用脉冲源和G门,对变压器原副边电路作适当调整即可。

4、光电耦合

光电耦合可以传输线性信号,也可以传输开关信号,在输出级应用时主要用来传递开关信号。

如图9所示,单片机输出控制信号经缓冲器7407放大后送入光耦。R2为光耦输出晶体管的负载电阻,它的选取应保证:在光耦导通时,其输出晶体管可靠饱和;而在光耦截止时,T1可靠饱和。但由于光耦响应速度慢使开关延迟时间加长,限制了其使用频率。

“图9
图9 光耦输出电路

结语

单片机接口技术在很多资料中均有详细的介绍,但在对大量电气控制产品的改造和设计中,经常会碰到用接口芯片所无法解决的问题(如驱动电流大、开关速度慢、抗干扰差等),因此必须寻求另一种电路解决方案。

上述几种输入/输出电路通过广泛的应用表明,其对合理、可靠地实现单片机电气控制系统具有较高的工程实用价值。

来源:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 123

↓↓ 抽奖方式详见文末 ↓↓

与郭天祥老师一起学习GD32F303系列主流型MCU开发实践

15年前,《十天学会单片机》系列视频课程如同一把火炬,点燃了整个单片机教育行业。它颠覆了传统的单片机教学风格,并配套开发板,至今累计下载量数千万次,已成为当今单片机入门普及不可或缺的一套优秀的视频教程。作为视频制作者的他,也成为了无数单片机爱好者的启蒙老师。

2009年,他又编著了《新概念51单片机C语言教程》,书籍上市后很快成为业内知名的教材,至今累计印刷30余次,销量达50多万册,连续多年销量排行同类书籍榜首,目前已经成为诸多高校的学生教材。

他就是大名鼎鼎的郭天祥,被电子爱好者们亲切地称为“郭老师”。无论是自学成才的单片机爱好者,或是在校学习电子专业的大学生,都通过这套视频和教材深受裨益。

“单片机大神郭天祥老师"
单片机大神郭天祥老师

❖ 2007年出版《十天学会单片机》系列视频教程

❖ 2009年编著《新概念51单片机C语言教程》

❖ 2012年创办北京海克智动科技开发有限公司

❖ 2020年开通"郭天祥老师"视频号讲解电子知识

❖ 2021年携手兆易创新GD32开展Arm MCU讲座

行业深耕廿余载

郭天祥老师深刻体会到,创作和分享优质知识内容是情怀更创造价值。知识口耳相授、长久流传,既可以帮助他人,也能够提升自我。怀抱着为电子行业持续培养人才的信念,以”强我强国,科技兴国“为己任,郭天祥老师自2020年12月在各视频平台开通"郭天祥老师"账号,深入浅出地讲解电子知识点,短短1年多时间,已汇聚了100多万名电子工程师和学生订阅收藏。

“”

MCU风潮来袭

近年来受到疫情和国际贸易争端的影响,电子元器件缺货、涨价的新闻层出不穷。国产化替代和供应保障已成为大势所趋,眼下正是产品开发导入的黄金窗口期。郭天祥老师在视频中谈到的联合中国领先的MCU厂商,重点推广中国自主的MCU嵌入式技术和应用。现已正式揭开谜底!

郭天祥老师与中国本土MCU“头把交椅”兆易创新GigaDevice合作,重磅推出《GD32F303系列MCU培训课程》,基于GD32F303系列讲授Arm MCU的开发设计和应用实践。由郭天祥老师和《十天学会单片机》系列视频时期的创业伙伴叶大鹏老师共同授课。为广大行业用户、嵌入式工程师、电子发烧友打造时下最受欢迎的优质内容,分享给大家在课本上学不到,但恰恰又是工作中经常用到的“葵花宝典”。

此番与兆易创新的强强联合,郭天祥老师正是看中了GD32 MCU庞大的用户群体和杰出的市场口碑。无论是丰富完善的MCU产品家族,还是已经得到多年验证的行业认可,都能为郭老师的课程提供施展和发挥的平台。兆易创新也相信通过郭老师标志性接地气的讲课风格,能让更多的行业从业者,真正实现“踏实学芯片、上手做项目”,培养出更多满足当下社会和企业的刚需人才。

“单片机大神郭天祥老师携手兆易创新GD32重出江湖,掀起MCU学习风暴!"

北京兆易创新科技股份有限公司(GigaDevice)成立于2005年,总部设于中国北京,并于2016年8月在上海证券交易所主板上市,目前拥有超过1300名员工,是一家致力于开发先进的存储器技术、MCU和传感器解决方案的领先半导体公司。

作为兆易创新的核心产品线之一,GD32 MCU是中国高性能通用微控制器领域的领跑者,中国最大的Arm MCU家族,也是中国首个Arm Cortex-M3/M4/M23/M33 MCU产品系列,并且在全球范围内首个推出RISC-V内核通用32位MCU产品系列。产品通过长期市场检验,连续六年在中国32位MCU市场位列本土厂商第一。以累计超过10亿颗的出货数量,超过2万家客户数量,35个系列近400余款型号选择所提供的广阔应用覆盖率稳居中国本土首位。现已成为系统设计与项目开发的创新首选。

GD32F303系列主流型MCU

F3系列是兆易创新于2017年推出的基于Arm Cortex-M4内核的经典主流型MCU产品,以优异的市场表现屡获殊荣。今年更推出多个全新型号,覆盖更全更广,更添供货保障!

“单片机大神郭天祥老师携手兆易创新GD32重出江湖,掀起MCU学习风暴!"

当下郭老师以GD32F303系列MCU为主题的Arm培训课程为系统开发工程师,电子爱好者奉上一场深入浅出的技术盛宴,助力单片机行业蓬勃发展和国产化替代的殷切需求。

GD32F303系列MCU视频课程内容

∎ 兆易创新公司及产品线介绍

∎ GD32F303芯片整体介绍及开发环境讲解

∎ 时钟、GPIO、中断子系统解读与实验

∎ 串口、ADC子系统解读与实验

∎ 定时器子系统解读与实验

∎ I2C、SPI串行总线解读与实验

∎ SDIO子系统解读与实验

∎ CAN子系统解读与实验

∎ USBD子系统解读与实验

∎ 行业应用案例介绍

3/10(周四)至4/28(周四)晚上8点起

每周两期(周二、周四)

“单片机大神郭天祥老师携手兆易创新GD32重出江湖,掀起MCU学习风暴!"

在西瓜、抖音、头条、知乎、B站、好看、视频号、YouTube、PN学堂自有平台等主流视频平台同时播出,在各平台搜索“郭天祥老师”关注即可查阅学习。

此外,GD32MCU微信视频号和技术网站也将同步收录系列培训课程,共同为广大用户提供优质的MCU原创视频知识库。

“单片机大神郭天祥老师携手兆易创新GD32重出江湖,掀起MCU学习风暴!"

收看GD32F303系列MCU培训视频并积极参与互动的小伙伴,还有机会获赠与本次课程配套的GD32F303E-EVAL全功能评估板以及其它精美礼品,参见上图,即刻添加微信“pnxuetang”加入群组参与幸运抽奖!

来源:电子创新网张国斌
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 260

公共场所的喷泉一般只是将音乐和喷泉高低简单配合, 或者是采用了高成本复杂的控制系统,搭建复杂的外围电路实现功能;并且多数只能在现场观赏,不能进入家庭。

本文主要介绍基于海速芯TM52F1376单片机控制的小型室内移动式音乐喷泉。它使用了较少的外围器件和较为简单的电路设计,成本低、体积小、水型变换多样,实用性强,适合室内观赏。

系统设计

该系统采集音乐信号,根据音乐信号的强弱来控制水泵电机的转速以及LED彩灯的亮灭。系统的总体结构由音乐输入部分、音响放大部分、单片机控制部分和输出控制部分组成。TM52F1376单片机作为系统的主芯片,一方面采集音乐信号,另一方面依据采集到的音乐信号的强弱输出延时不等的矩形波来控制可控硅的导通时间,进而控制水泵电机的转速,从而达到控制喷水高度的目的。彩灯的亮灭也由单片机依据音乐采样值的大小来控制。

系统硬件设计

硬件系统由单片机电路、音频电路、水泵控制电路、彩灯控制电路、电源电路等组成。

单片机电路

单片机要采集音乐信号,并据此调节I/O口的输出来控制水泵和彩灯。主芯片TM52F1376是8051架构的通用微控制器,片内集成多种功能,包括8K/16K字节的Flash程序存储器,128字节的EEPROM数据存储器,512字节SRAM,低电压复位(LVR),低电压检测(LVD),双时钟省电工作模式,8051标准UART和定时器Timer0/Timer1/Timer2,实时计时器Timer3,LCD/LED驱动器,3组16位脉冲宽度调制器,24通道的12位模数转换器(ADC),I2C串口和看门狗定时器(WDT)等等。

这样不仅可以简化单片机的外围电路,而且处理速度和灵活度都大大增强,并且具有片内调试电路,设计调试周期短。

“封装类型:LQFP32/SOP28/SSOP28/QFN28/SSOP24/SOP20/TSSOP20/QFN20/SOP16"
封装类型:LQFP32/SOP28/SSOP28/QFN28/SSOP24/SOP20/TSSOP20/QFN20/SOP16

总体来讲,设计的喷泉控制系统可基于TM52F1376单片机,采用音频放大、可控硅控制等简洁的外围电路,经过焊接、组装、调试后,很好地实现控制功能,具有很强的实用性,尤其是具有体积小、易移动、适合家庭和室内使用的特点。本方案也可以在功能上加以扩展,如加上对乐曲的频域分析,结合频域特点控制水泵;还可以制作雾化器来渲染效果等。

来源:国芯思辰
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 46

在平常的项目开发过程中,会遇到各种各样的问题,下面分享一篇文章,是常见问题的解决思路和解决办法。

1、问题复现

稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。

1.1 模拟复现条件

有的问题存在于特定的条件下,只需要模拟出现问题的条件即可复现。对于依赖外部输入的条件,如果条件比较复杂难以模拟可以考虑程序里预设直接进入对应状态。

1.2 提高相关任务执行频率

例如某个任务长时间运行才出现异常则可以提高该任务的执行频率。

1.3 增大测试样本量

程序长时间运行后出现异常,问题难以复现,可以搭建测试环境多套设备同时进行测试。

2、问题定位

缩小排查范围,确认引入问题的任务、函数、语句。

2.1 打印LOG

根据问题的现象,在抱有疑问的代码处增加LOG输出,以此来追踪程序执行流程以及关键变量的值,观察是否与预期相符。

2.2 在线调试

在线调试可以起到和打印LOG类似的作用,另外此方法特别适合排查程序崩溃类的BUG,当程序陷入异常中断(HardFault,看门狗中断等)的时候可以直接STOP查看call stack以及内核寄存器的值,快速定位问题点。

2.3 版本回退

使用版本管理工具时可以通过不断回退版本并测试验证来定位首次引入该问题的版本,之后可以围绕该版本增改的代码进行排查。

2.4 二分注释

二分注释即以类似二分查找法的方式注释掉部分代码,以此判断问题是否由注释掉的这部分代码引起。
具体方法为将与问题不相干的部分代码注释掉一半,看问题是否解决,未解决则注释另一半,如果解决则继续将注释范围缩小一半,以此类推逐渐缩小问题的范围。

2.5 保存内核寄存器快照

Cortex M内核陷入异常中断时会将几个内核寄存器的值压入栈中,如下图:

“30个单片机常见问题解决办法!"

我们可以在陷入异常中断时将栈上的内核寄存器值写入RAM的一段复位后保留默认值的区域内,执行复位操作后再从RAM将该信息读出并分析,通过PC、LR确认当时执行的函数,通过R0-R3分析当时处理的变量是否异常,通过SP分析是否可能出现栈溢出等。

3、问题分析处理

结合问题现象以及定位的问题代码位置分析造成问题的原因。

3.1 程序继续运行

3.1.1 数值异常

3.1.1.1 软件问题

1、数组越界

写数组时下标超出数组长度,导致对应地址内容被修改。

如下:

“30个单片机常见问题解决办法!"

此类问题通常需要结合map文件进行分析,通过map文件观察被篡改变量地址附近的数组,查看对该数组的写入操作是否存在如上图所示不安全的代码,将其修改为安全的代码。

2、栈溢出

0x20001ff8 g_val
0x20002000 栈底
………… 栈空间
0x20002200 栈顶

如上图,此类问题也需要结合map文件进行分析。假设栈从高地址往低地址增长,如果发生栈溢出,则g_val的值会被栈上的值覆盖。

出现栈溢出时要分析栈的最大使用情况,函数调用层数过多,中断服务函数内进行函数调用,函数内部申明了较大的临时变量等都有可能导致栈溢出。

解决此类问题有以下方法:

  • 在设计阶段应该合理分配内存资源,为栈设置合适的大小;
  • 将函数内较大的临时变量加”static”关键字转化为静态变量,或者使用malloc()动态分配,将其放到堆上;
  • 改变函数调用方式,降低调用层数。

3、判断语句条件写错

“30个单片机常见问题解决办法!"

判断语句的条件容易把相等运算符“==”写成赋值运算符“=”导致被判断的变量值被更改,该类错误编译期不会报错且总是返回真。

建议将要判断的变量写到运算符的右边,这样错写为赋值运算符时会在编译期报错。还可以使用一些静态代码检查工具来发现此类问题。

4、同步问题

例如操作队列时,出队操作执行的过程中发生中断(任务切换),并且在中断(切换后的任务)中执行入队操作则可能破坏队列结构,对于这类情况应该操作时关中断(使用互斥锁同步)。

5、优化问题

“30个单片机常见问题解决办法!"

如上图程序,本意是等待irq中断之后不再执行foo()函数,但被编译器优化之后,实际运行过程中flg可能被装入寄存器并且每次都判断寄存器内的值而不重新从ram里读取flg的值,导致即使irq中断发生foo()也一直运行,此处需要在flg的申明前加“volatile”关键字,强制每次都从ram里获取flg的值。

3.1.1.2 硬件问题

1、芯片BUG

芯片本身存在BUG,在某些特定情况下给单片机返回一个错误的值,需要程序对读回的值进行判断,过滤异常值。

2、通信时序错误

“30个单片机常见问题解决办法!"

例如电源管理芯片Isl78600,假设现在两片级联,当同时读取两片的电压采样数据时,高端芯片会以固定周期通过菊花链将数据传送到低端芯片,而低端芯片上只有一个缓存区.

如果单片机不在规定时间内将低端芯片上的数据读走那么新的数据到来时将会覆盖当前数据,导致数据丢失。此类问题需要仔细分析芯片的数据手册,严格满足芯片通信的时序要求。

3.1.2 动作异常

3.1.2.1 软件问题

1、设计问题

设计中存在错误或者疏漏,需要重新评审设计文档。

2、实现与设计不符

代码的实现与设计文档不相符需要增加单元测试覆盖所有条件分支,进行代码交叉review。

3、状态变量异常

例如记录状态机当前状态的变量被篡改,分析该类问题的方法同前文数值异常部分。

3.1.2.2 硬件问题

1、硬件失效

目标IC失效,接收控制指令后不动作,需要排查硬件。

2、通信异常

与目标IC通信错误,无法正确执行控制命令,需要使用示波器或逻辑分析仪去观察通信时序,分析是否发出的信号不对或者受到外部干扰。

3.2 程序崩溃

3.2.1 停止运行

3.2.1.1 软件问题

1、HardFault

以下情况会造成HardFault:

  • 在外设时钟门未使能的情况下操作该外设的寄存器;
  • 跳转函数地址越界,通常发生在函数指针被篡改,排查方法同数值异常;
  • 解引用指针时出现对齐问题:

以小端序为例,如果我们声明了一个强制对齐的结构体如下:

“30个单片机常见问题解决办法!"

“30个单片机常见问题解决办法!"

此时a.val1的地址为0x00000001,如果以uint16_t类型去解引用此地址则会因为对齐问题进入HardFault,如果一定要用指针方式操作该变量则应当使用memcpy()。

2、中断服务函数中未清除中断标志

中断服务函数退出前不正确清除中断标志,当程序执行从中断服务函数内退出后又会立刻进入中断服务函数,表现出程序的“假死”现象。

3、NMI中断

调试时曾遇到SPI的MISO引脚复用NMI功能,当通过SPI连接的外设损坏时MISO被拉高,导致单片机复位后在把NMI引脚配置成SPI功能之前就直接进入NMI中断,程序挂死在NMI中断中。这种情况可以在NMI的中断服务函数内禁用NMI功能来使其退出NMI中断。

3.2.1.2 硬件问题

① 晶振未起振
② 供电电压不足
③ 复位引脚拉低

3.2.2 复位

3.2.2.1 软件问题

看门狗复位

除了喂狗超时导致的复位以外,还要注意看门狗配置的特殊要求,以Freescale KEA单片机为例,该单片机看门狗在配置时需要执行解锁序列(向其寄存器连续写入两个不同的值),该解锁序列必须在16个总线时钟内完成,超时则会引起看门狗复位。此类问题只能熟读单片机数据手册,注意类似的细节问题。

3.2.2.2 硬件问题

① 供电电压不稳
② 电源带载能力不足

4、回归测试

问题解决后需要进行回归测试,一方面确认问题是否不再复现,另一方面要确认修改不会引入其他问题。

5、经验总结

总结本次问题产生的原因及解决问题的方法,思考类似问题今后如何防范,对相同平台产品是否值得借鉴,做到举一反三,从失败中吸取经验。

原文:https://www.cnblogs.com/jozochen/p/8541714.html

来源:小麦大叔
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 53

智能电表和HVAC控制器等连接到网络的设备不仅需要具备实时性能,以同时实现复杂的系统执行和网络通信。还需要定期更新固件(FW),以确保持续稳定的应用。

也就是说,负责设备主控的单片机也需要上述性能和功能。那么您是否希望拥有一款在单个芯片中实现这些特性的单片机,以及一款能够对其进行轻松评测的套件呢?

今天,我为大家介绍的就是能够满足上述要求的32位单片机RX66N,以及能够轻松快速地进行评测和PoC试制的评测套件Target board for RX66N。

RX66N卓越的实时性能完全得益于它搭载的CPU和闪存。由RX系列独有RXv3内核组成的CPU在120MHz的主频下可提供707CoreMark的卓越性能,而4MB闪存能够确保CPU以零等待周期运行,因此即使运行的是闪存中存储的代码,也能够保持较高的处理速度。

“32位单片机RX66N帮您解决联网设备面临的难题"

另外,4MB闪存可以实现方便固件更新的双存储区配置,再配合后台操作功能,在系统运行过程中也可以将更新固件下载到闪存中。

“32位单片机RX66N帮您解决联网设备面临的难题"

此外,RX66N还配备有Target board for RX66N套件,可对上述特性进行轻松评测。该套件搭载有仿真电路,只需使用USB线与PC连接即可轻松评测RX66N卓越的实时性能。并且该套件通过将Wi-Fi模块连接到板载Pmod连接器,可以实现基于实际场景中RTOS操作的云连接,以及构建基于网络的固件更新系统。

“32位单片机RX66N帮您解决联网设备面临的难题"

利用针对RX系列的云解决方案以及固件更新用中间件*和样例程序,还可简单快捷地进行评测和PoC试制。

*点击链接查看:RX产品家族系列技术干货分享(八)-介绍可以轻松实现RX系列FOTA(Firmware Update Over-The-Air)固件更新的中间件

如果您对RX66N Target Board感兴趣,并希望体验卓越的实时性能以及可轻松实现固件更新的闪存,那么RX66N绝对是您的不二选择。在下次的相关文章中,我将实际使用RX66N Target Board来为大家展示它的固件更新功能。敬请期待!

来源:瑞萨电子
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 24

嵌入式编程的需求千变万化,要做到系统稳定,又要代码可复用,就要做到高内聚低耦合。

前言

我们通常认为,在中断中,不能执行耗时的操作,否则会影响系统的稳定性,尤其对于嵌入式编程。对于带操作系统的程序而言,可以通过操作系统的调度,将中断处理分成两个部分,耗时的操作可以放到线程中去执行,但是对于没有操作系统的情况,又应该如何处理呢

比较常见的,我们可能会定义一些全局变量,作为flag,然后在mainloop中不停的判断这些flag,再在中断中修改这些flag,最后在mainloop中执行具体的逻辑,但是这样,无疑会增加耦合,增加程序维护成本。

cpost

cpost正是应用在这种情况下的一个简单但又十分方便的工具,它可以特别方便的进行上下文的切换,减少模块耦合。

cpost链接:

https://github.com/NevermindZZT/cpost

cpost借鉴的Android的handler机制,通过在mainloop中跑一个任务,然后在其他地方,可以是中断,也可以是模块逻辑中,直接抛出需要执行的函数,使其脱离调用处的上下文,运行在mainloop中。cpost还支持延迟处理,可以指定函数在抛出后多久执行

使用

cpost的使用十分简单,这里以使用在嵌入式无操作系统中为例,主要用作中断延迟处理的情况

1、配置系统tick

配置cpost.h中的宏CPOST_GET_TICK(),配置成获取系统tick,以stm32 hal为例

#define     CPOST_GET_TICK()            HAL_GetTick()

2、配置处理进程

在mainloop调用cpostProcess函数

int main(void)
{
    ...
    while (1)
    {
        cpostProcess();
    }
    return 0;
}

3、抛出任务

在中断等需要进行上下文切换的地方调用cpsot接口,使其在mainloop中运行

cpost(intHandler);

原理解析

cpost的原理其实很简单,其代码量也十分少,总共加起来就只有几十行代码,cpost维护了一个而全局的数组

CpostHandler cposhHandlers[CPOST_MAX_HANDLER_SIZE] = {0};

其中,数组的每一个元素表示包含了需要执行的函数和参数,当调用cpost接口时,被post的函数和参数会被保存在这个数组中,然后mainloop中运行的cpostProcess函数会遍历这个数组,当满足条件时,执行对应的函数,从而达到上下文切换的目的

void cpostProcess(void)
{
    for (size_t i = 0; i < CPOST_MAX_HANDLER_SIZE; i++)
    {
        if (cposhHandlers[i].handler)
        {
            if (cposhHandlers[i].time == 0 || CPOST_GET_TICK() >= cposhHandlers[i].time)
            {
                cposhHandlers[i].handler(cposhHandlers[i].param);
                cposhHandlers[i].handler = NULL;
            }
        }
    }
}

其实,cpost的方式,和一开始提到的使用全局的flag进行上下文切换的方法很像,只不过,cpost通过一个数组的维护和直接post函数的方式,省去了维护flag的成本,也不需要将需要执行的函数耦合到mianloop中,从而变得简单易用。

完美解耦 - cevent应用

对于模块化编程来说,如何实现各模块间的解耦一直是一个比较令人头疼的问题,特别是对于嵌入式编程,由于控制逻辑复杂,并且对程序体积有控制,经常容易写出各独立模块之间相互调用的问题。由此,cpost中的cevent组件,通过模仿Android系统中的广播机制,提供了一种非常简单的模块间解耦实现。

原理

cevent借鉴的是Android系统的广播机制,一方面,各模块在工作的时候,都会有多个具体的事件点,在高耦合的编程中,可能会在这些地方调用其他模块的功能,比如说,在通信模块接收到指令的时候,需要闪烁一下指示灯。

使用cevent,我们可以在这些地方抛出一个事件,当前模块不需要关心在这各地方需要执行哪些其他模块的逻辑,由其他模块,或者用户定义一个事件监听,当具体的事件发生时,执行相应的动作。

使用

cevent使用注册的方式监听事件,会依赖于编译环境,目前支持keil,iar,和gcc,对于gcc,需要修改链接文件(.ld),在只读数据区添加:

_cevent_start = .;
KEEP (*(cEvent))
_cevent_end = .;

1、初始化cevent

系统初始化时,调用ceventInit

ceventInit();

2、注册cevent事件监听

在c文件中,调用CEVENT_EXPORT导出事件监听

CEVENT_EXPORT(0, handler, (void *)param);

3、发送cevent事件

在事件发生的地方,调用ceventPost抛出事件

ceventPost(0);

使用cevent解耦模块初始化

嵌入式编程中,我们习惯会在程序启动的时候,调用各个模块的初始化函数,其实这也是一种耦合,会造成main函数中出现很长的初始化代码,借助cevent,我们可以对初始化进行优化解耦。

1、定义初始化事件

定义初始化事件的值,对于初始化,有些模块可能会依赖于其他模块的初始化,会有一个先后顺序要求,所以这里我们可以把初始化分成两个阶段,定义两个事件,当然,如果有更复杂的要求,可以再多分几个阶段,只需要多定义几个事件就行

#define     EVENT_INIT_STAGE1       0
#define     EVENT_INIT_STAGE2       1

2、初始化cevent,抛出事件

在main函数中初始化cevent,并抛出初始化事件

int main(void)
{
    ...
    ceventInit();

    ceventPost(EVENT_INIT_STAGE1);
    ceventPost(EVENT_INIT_STAGE2);
    ...
    return 0;
}

3、注册事件监听

对所有需要初始化的函数注册事件监听,这里我以对letter-shell注册事件监听为例,分为两个部分,初始化串口和初始化shell。

在serial模块中,将串口初始化注册到初始化第一阶段,cevent支持将不大于7个的参数直接传递到注册的监听函数中,下面的注册方式,相当于在EVENT_INIT_STAGE1事件发生的地方,也就是main函数中对应的位置,调用serialInit(&debugSerial)

CEVENT_EXPORT(EVENT_INIT_STAGE1, serialInit, (void *)(&debugSerial));

然后再shell模块中,将shell初始化函数注册到初始化第二阶段。

CEVENT_EXPORT(EVENT_INIT_STAGE1, shellInit);

使用cevent解耦mainloop

再无操作系统的嵌入式编程中,我们如果同时希望运行多个模块的逻辑,通常是在mainloop中循环调用,这种将函数写入mainloop的做法,也会增加耦合

int main(void)
{
    ...

    while (1)
    {
        // 写在mainloop中的模块逻辑
        shellTask(&shell);
        LedProcess();
        ...
    }
    return 0;
}

通过使用cevent,也可以很方便的消除这种耦合

1、定义mainloop事件

定义mainloop事件的值

#define     EVENT_MAIN_LOOP         3

2、在mainloop中抛出事件

去掉mainloop中对其他模块的调用,改为排除mainloop事件

int main(void)
{
    ...

    while (1)
    {
        ceventPost(EVENT_MAIN_LOOP);
    }
    return 0;
}

3、在各模块中注册事件监听

分别在各个模块中,注册对mainloop事件的监听

CEVENT_EXPORT(EVENT_MAIN_LOOP, shellTask, (void *)(&shell));
CEVENT_EXPORT(EVENT_MAIN_LOOP, LedProcess);

结语

cevent是一个非常小的模块,本身代码及其简单,但是,通过模仿广播机制,让cevent可以发挥很强大的功能,通过,还可以结合cpost,实现延迟事件等功能。

来源:
https://blog.csdn.net/qq_34245464/article/details/111804661

围观 56

瑞萨电子微控制器产品重点系列

“瑞萨电子单片机一览"
  • 为满足客户不断增长的需求,瑞萨电子推出的微控制器产品,可让客户充分利用现有资源,同时提供出色的可扩展性。

  • 瑞萨微控制器提供多种存储器和封装选项,具有运行快速、可靠性高、低成本和环保的特性。

  • 融合最新工艺技术、集成大容量闪存、应用范围广泛,包括需要高质量和高可靠性的要求严苛应用领域。

  • 配备强大的支持系统,以帮助减少研发成本,缩短研发时间。包含各种开发工具,包括来自其他公司的产品,并受到广泛的技术文档、软件库和活跃用户社区的支持。作为全球位列前茅的MCU供应商,瑞萨在各种微控制器 (MCU) 的基础上,带来最出色、最强大的解决方案。

RL78系列-真正的低功耗微控制器

“RL78:为下一个十年提供动力"
RL78:为下一个十年提供动力

RL78 8/16位微控制器(MCU)具有业界领先的低功耗特点,正常工作期间功耗可低至41μA/MHz(RL78/G23),时钟工作期间为0.355μA,从而大大提高了电源效率。高精度(±1%)高速片上振荡器、可重写 100 万次的后台操作数据闪存、温度传感器和用于多个电源的接口端口等内置功能有助于降低系统成本和尺寸。

RX系列:性能市场领导者

“瑞萨电子单片机一览"

RX系列由四个产品子系列组成, 可提供从小规模到大规模应用的无缝可扩展性。

  • 旗舰RX700系列,具有最快的性能和最先进的功能。

  • 标准RX600系列和RX200系列,在功率效率和高性能之间实现了最佳平衡。

  • 入门级RX100系列,具有极低的功耗。

RA系列:引领物联网革命

“瑞萨电子单片机一览"
  • 瑞萨电子(RA)32位微控制器(MCU)是业界领先的32位MCU,具有Arm® Cortex®-M33、-M23、-M4处理器内核和PSA认证。

  • 与竞争对手Arm Cortex-M MCU相比,RA通过提供更强的嵌入式安全性、卓越的CoreMark® 性能和超低功耗操作,进而使得自身具有关键优势。PSA认证为客户提供了快速部署安全物联网端点和边缘设备以及面向工业4.0智能工厂设备的信心和保证。

  • RA系列MCU的独特之处在于极低功耗、一流的安全选项,包括Arm TrustZone®技术以及支持所有RA系列产品的瑞萨电子灵活软件程序(FSP)。

  • FSP包括高效的驱动程序和中间件,以简化通信和安全性的实施。FSP的GUI简化并加速了开发过程。它支持灵活使用旧代码,并可与其他RA系列设备轻松兼容和扩展。使用FSP的设计人员还可以访问广泛的Arm生态系统、提供广泛的工具、帮助加快上市时间以及瑞萨电子广泛的合作伙伴网络。

RA:灵活的软件包 (FSP),支持安全设备和物联网连接

生产就绪型外设驱动程序

- 用于访问MCU外设和所需功能的HAL API,ARM 信任区已启用

- 直观的配置器和代码生成器

- 经过测试的单元和系统

- 使用行业标准工具进行静态和动态分析

使用实时操作系统

- 最新的Azure RTOS、FreeRTOS和Flexible软件包集成

- 工具可配置的RTOS资源(线程、互斥锁等)

- 包括裸机支持

连接

- 包括Azure RTOS NetX Duo&add-ons、FreeRTOS TCP/IP stack、Secure Sockets、Wi-Fi&BLE

- 包括MQTT和TLS

- 支持与所有主要云平台的连接

- 用于CDC、MSC、HID(主机和外设)的USB中间件

安全性

- 基于Arm Mbed PSA、NetX Crypto和FSP Crypto API的加密API

- 支持加密硬件加速

- PSA 2级认证

- 安全调试

Renesas MCU生态系统:以技术为导向的广泛应用

“瑞萨电子单片机一览"

瑞萨电子正在实现一个全面的合作伙伴生态系统,以提供一系列软件和硬件构建模块,这些构建模块将与瑞萨电子MCU一起开箱即用。瑞萨电子MCU生态系统将有助于加速物联网应用的开发,包括安全性、连接性和HMI等核心技术。

来源:瑞萨MCU小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 213

页面

订阅 RSS - 单片机