数字电源控制器大电流I/O pin特性解析
在MCU的所有I/O pin中,并不是所有I/O口的电流能力都是一样的,有一些特殊的pin其电容sink或者source能力会比普通pin大一些。这里以dsPIC33CK256MP506这个系列芯片为例说明。
规格书电气特性中列出了dsPIC33CK256MP508 系列的绝对最大额定值。长时间暴露于这些最大额定值的条件可能会影响器件的可靠性。设备的功能运行在这些或任何其他高于本规范操作列表中指示的参数的条件,并不包含在这里,如图1所示。

图1 规格书电气特性说明
通过这里提供的信息,可以看出最大的Vss电流和Vdd电流为300mA,而4xIO pin的最大sink或者source电流为15mA,而8xIO pin的最大sink或者source电流为25mA,值得注意的是所有I/O的sink或者source电流为200mA,同时这个最大绝对规格也给出了在两个VSS pin和两个Vdd pin之间的最大电流75m,注意他们和AVSS和AVDD pin无关,如图2所示。


图2 I/O电流规格
通过图2可以看到,I/O分为4xI/O pin和8x/I/O pin两类,二者电流的sink和soure规格不同,前者为15mA,后者为25mA……
查看原文:https://www.dianyuan.com/eestar/article-7945.html
KEIL调试那些事儿之基础调试(一)
本小节介绍 KEIL 的常用调试方法,部分内容对 51 单片机也适用。
KEIL 调试模式分为软件仿真和在线仿真。所谓软件仿真即用电脑模拟 51 或 32 的工作过程,可以在没有实际单片机开发板存在的情况下进行模拟运行。而硬件仿真则需要实际开发板的支持才能够进行(当然你的电脑也必不可少)。
本节内容以 STM32F103RET6 为例进行介绍,并且使用软件仿真的功能进行模拟,这样的介绍将更全面一些。而硬件仿真可能会在软件仿真的基础上减少一些功能,这些就视具体情况而定了。
不管是软件仿真还是硬件仿真(关于如何配置的问题可参考 STM32 工程模板相关内容),首先都是使用以下按钮进入调试模式(硬件仿真注意连接仿真器,比如 ST-LINK,可以看这章节内容C 语言的程序怎么烧进 STM32 里?):

之后就会进入如下界面:

这个界面和平常的编辑界面有很大不同,增加了不少调试功能。
首先介绍基本的功能:
1、Reset

这个按钮用于将单片机复位的(类似于用复位按键复位),复位之后程序回到最开始处,即复位中断处理函数处:

如果说你想让单片机在进入调试模式后直接运行到 main(),那么你可以在退出调试模式的情况下设置这个:

这样程序将自动在 main 的第一条指令停止(在此之前的代码自动运行完了):

注意:黄色光标指向的语句是准备执行的语句,但还没开始执行……
查看原文:https://www.dianyuan.com/eestar/article-7768.html
KUKA自定义点位应用编程
运动类型数据类型
1. AXIS 结构类型
- A1 至 A6 是指与机器人轴 1 至 6 相关运行的角度值(旋转轴)或平移值(平移轴)。
- STRUC AXIS REAL A1, A2, A3, A4, A5, A6
2. E6AXIS 结构类型
- E1 至 E6 是指附加轴 7 至 12 的角度值或平移值。
- STRUC E6AXIS REAL A1, A2, A3, A4, A5, A6, E1, E2, E3, E4, E5, E6
3. FRAME 结构类型
- X、Y、Z 是指空间坐标,A、B、C 是指坐标系的姿态。
- STRUC FRAME REAL X, Y, Z, A, B, C
4. POS 和 E6POS 结构类型
- S (Status - 状态)和 T (Turn - 转角方向)确定了轴的唯一位置。
- STRUC POS REAL X, Y, Z, A, B, C, INT S, T
- STRUC E6POS REAL X, Y, Z, A, B, C, E1, E2, E3, E4, E5, E6, INT S, T

使用自定义的点
01点的声明
DECL Axis P_axis1
DECL Pos P_pos1
DECL Axis P_axis2
02点的赋值
P_axis1 = {A1 0.0,A2 -90.0,A3 0.0,A4 0.0,A5 90.0,A6 0.0}
P_pos1 = {X 2226.0,Y 0.0,Z 1784.0,A -180.0,B 45.0,C -180.0}
P_axis2 = {A1 90.0,A2 90.0}
03点的应用
点的声明:DECL Axis P_axis1DECL Pos P_pos1DECL Axis P_axis2
点的赋值:P_axis1 = {A1 0.0,A2 -90.0,A3 90.0, A4 0.0, A5 90.0,A6 0.0}P_pos1 = {X 2226.0,Y 0.0,Z 1784.0,A -180.0,B 45.0,C -180.0}P_axis2 = {A1 90,A2 -90.0}
点的应用:$TOOL = TOOL_DATA[2]$BASE = BASE_DATA[2]SPTP P_axis1
SPTP P_axis2
SLIN P_pos1
SPTP {A1 0.0,A2 -90.0,A3 90.0, A4 0.0, A5 90.0,A6 0.0}
SPTP {A1 90,A2 -90.0}
SPTP {X 2226.0,Y 0.0,Z 1784.0,A -180.0,B 45.0,C -180.0}
SLIN {X 2226.0,Y 0.0,Z 1784.0,A -180.0,B 45.0,C -180.0}
SCIRC {X 2226.0,Y 0.0,Z 1784.0,A -180.0,B 45.0,C -180.0},{X 2326.0,Y 100
……
查看原文:https://www.dianyuan.com/eestar/article-7902.html
飞思卡尔i.MXRT1052微控制器CoreMark性能实测
在前面的文章 飞思卡尔i.MX RT系列微控制器介绍篇(1)- 概览 里,痞子衡给大家简介过恩智浦半导体在2017年推出的新一代跨界微控制器i.MX RT系列,该系列第一款芯片i.MXRT105x性能完爆同时期市面上所有的微控制器,官方公布的CoreMark跑分高达3020,有人可能不明白这个数字意味着什么,作为对比,我们再来看看意法半导体最流行的芯片STM32F103RB,它的CoreMark是108(此处应该有类似My God的尖叫),真是没有对比就没有伤害,那么i.MXRT105x性能到底有没有这么强?今天痞子衡为大家实测一下。
关于CoreMark标准的基本知识,痞子衡之前专门写过一篇文章 微控制器CPU性能测试基准(EEMBC-CoreMark) ,本篇就是基于了解CoreMark基本知识之后的一次实践。来,让我们开始吧。
一、准备工作
1.1 硬件平台NXP i.MX RT1050 EVK
要开始实测i.MXRT105x的CoreMark,首先你得有一块开发板,恩智浦官网上有i.MXRT105x配套的评估板,如下图所示,痞子衡今天用的就是这块板子,板载主芯片型号为iMXRT1052DVL6。

1.2 集成开发环境IAR EWARM
ARM Cortex-M微控制器的集成开发环境有很多,其中IAR EWARM凭借优良的特性备受广大工程师青睐,且痞子衡在CoreMark标准基本知识介绍文章的最后贴出了一张iMXRT1050与STM32H743性能对比图,其中CoreMark跑分就是在IAR下得到的,所以今天痞子衡也选用IAR作为软件环境,具体版本为IAR EWARM v8.20.2。
1.3 官方软件开发包NXP MCUXpresso SDK
在开始移植CoreMark程序到i.MXRT1052上之前,我们需要先有一个i.MXRT1052的基本hello world的例程,当然我们可以对着数据手册自己从头写一个,但是这里痞子衡推荐使用官方软件开发包。 注册并登录恩智浦官网,来到 MCUXpresso SDK Builder 页面,在"Select Development Board"里选择EVKB-IMXRT1050后点击Build MCUXpresso SDK后跳转到下一个页面,在"Developer Environment Settings"里选择IAR并点击Download SDK后便可得到SDK_2.3.1_EVKB-IMXRT1050.zip,下面是痞子衡*载下**的开发包具体版本信息:

二、开始实测
2.1 跑通hello world
给i.MXRT1050 EVK板子供电(J2口接5V输出的电源),并且使用USB线连接电脑与板子的J28 USB口,此时在设备管理器应该可以看到USB虚拟的串口(EVK板载OpenSDA调试器内含USB转串口功能,如果看不到串口,请自行安装PE Micro驱动)。
打开前一步*载下**的开发包里的\SDK_2.3.1_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\hello_world\iar\hello_world.eww工程,确认工程option里linker文件选择的是MIMXRT1052xxxxx_ram.icf,然后J21 JTAG口连接上Jlink Plus直接将工程*载下**进主芯片的RAM运行。 如果工程运行正常,你在串口调试助手(115200,8N1)里应该能看到"hello world."打印输出。
2.2 移植CoreMark程序
以hello_world工程为基础,将从EEMBC官网*载下**到的coremark_v1.0.tgz包解压,将\coremark_v1.0\以及\coremark_v1.0\barebones\路径下的如下所有源文件(.c或.h)全部拷贝到hello world工程目录下:
\coremark_v1.0
\barebones --移植到裸机下需要修改的文件
\core_portme.h -- 移植平台工程具体配置信息
\core_portme.c -- 计时以及板级初始化实现
\cvt.c
\ee_printf.c -- 打印函数串口发送实现
core_main.c --主程序入口
core_state.c --状态机控制子程序
core_list_join.c --列表操作子程序
core_matrix.c --矩阵运算子程序
core_util.c --CRC计算子程序
coremark.h --工程配置与数据结构定义
将上面的所有coremark源文件全部添加进hello_world工程,并从工程中移除原主函数入口文件hello_world.c,此时基本coremark工程就完成了。但注意此时工程无法编译,因为从\coremark_v1.0\barebones\下拷贝的源文件还需要进一步修改……
查看原文:https://www.dianyuan.com/eestar/article-7930.html
如何用PIT定时器的多通道链接模式去改善coremark测试?
早在 2018 年 i.MXRT 系列跨界处理器刚推出的时候,痞子衡就写了一篇 《i.MXRT1052性能实测(CoreMark)》,文章详细介绍了在 i.MXRT 上如何一步一步地移植标准 coremark 程序,这篇文章阅读量还不错,据说很多人移植 coremark 都是看得这篇文章。
当时痞子衡把移植好的 coremark 工程也一起开源了出来,并且这个仓库痞子衡也是在不断维护的(增加新 MCU 型号支持,以及除了 coremark 之外的一些其他经典程序)。最近有同事向痞子衡反映,这个 coremark 测试工程里关于计时部分有一些可以改进的地方,痞子衡看了一下,确实可以改进,这便是今天本文要聊的主题:
开源地址:https://github.com/JayHeng/cortex-m-apps

一、i.MXRT上的定时器简介
工欲善其事,必先利其器。在改进 coremark 测试工程里计时功能之前,我们先来了解一下 i.MXRT 上都有哪些跟计时/计数相关的模块,分别是什么特点,下面是详细列表。单从计时功能角度考虑,SysTick、GPT、PIT、TMR 都是不错的选择。

二、计时设计对coremark测试程序影响
我们知道 coremark 标准的测试逻辑是在某配置参数组合下单位时间内跑了多少次 coremark 程序,一般情况下要求至少跑 10s 以上,因此计时部分的设计是很重要的。
在早期 i.MXRT1050 coremark 工程里,痞子衡选用了 PIT(channel 0 - 32bit)负责计时,为 PIT 配置的时钟源是 24MHz 外部 OSC,定时器一次超时耗时约 178s,这种情况下,痞子衡也没有使能 PIT 中断,假定了一次 coremark 程序跑完不会碰到超时的情况,但显然这种设计是不完善的。
此外我们知道定时器时钟源频率越高,计时粒度越细,计时时间也就越精确。大部分定时器时钟源都可以配到系统 IPG bus 总线频率(在 i.MXRT10xx 上可到 125MHz/150MHz,在 i.MXRT1170 上可到 240MHz),我们可以尝试将定时器设到最高频率的时钟源,这时候就不得不考虑定时器超时中断处理问题了。
使能定时器超时中断,可以保证计时的严谨性,解决了 coremark 程序运行时间和次数的限制。但是频繁的定时器中断响应也会不断打断 coremark 程序的执行,对最终跑分结果产生不利影响,这个问题同样需要解决。
三、PIT定时器多通道链接模式
前面说了 SysTick、GPT、PIT、TMR 都可以用作 coremark 测试工程定时器,但最终痞子衡还是选定了 PIT,因为 PIT 是最适合作为系统运行生命周期总计时器的,这主要得益于 PIT 内部有 4 个 32bit 计时器,并且可以链接使用(串连)。
要是将 4 个 32bit 计数器串成一个 128bit 超强计数器(channel 0 计数溢出,channel 1 计数加 1...),即使系统运行到地老天荒都不会出现一次超时(这里指最后一链 channel 3 中断触发),所以也就根本不用管定时器中断处理的事。

PIT 通道链接模式使能也很简单,主要在 PIT->CHANNEL[x].TCTRL[CHN] 位上,这个位开启后,channel x 就和 channel x-1 连了起来。下面是 channel 0 和 channel 1 串连组成 64bit 计数器的初始化代码……
查看原文:https://www.dianyuan.com/eestar/article-7667.html
更多精彩内容,尽在电子星球 APP(https://www.eestar.com/)
六篇技术文章,让你秒懂电容的脾气秉性
七篇DIY技术文章献给你,让你脑洞全开
五篇文章帮你开启DSP的学习思路
汇总篇:关于PID知识,重点在此