AT32

随着工业自动化,智能家居及汽车电子的发展普及,直流无刷电机(BLDC)和永磁同步电机(PMSM)在诸多领域有了广泛应用。电机作为机械装备上至关重要的组件之一,无论是产品的性能,或是消费者的使用感受,都关乎于电机驱动和控制技术的好坏。

雅特力致力于建立高效电机控制生态系统,不仅有适用于电机控制的MCU,硬件开发套件,还提供有免费且易于使用的电机控制软件算法。从方波驱动到弦波驱动,从霍尔感测器的回授到无感测器的回授,雅特力都有建立起相关资源,协助电机控制工程师快速实现高效的电机矢量控制方案。

低压电机控制开发板

雅特力电机开发板是一个泛用型的低压三相电机驱动器,应用AT32系列微控制器搭配雅特力电机函数库,可驱动直流无刷电机、交流同步电机,以及异步电机。具备一个微控制器转接插座,可使用不同的AT32系列微控制器,执行电机控制算法。雅特力目前已提供基于双ADC引擎AT32F413的低压电机开发板和基于高速比较器AT32F421的低压电机开发板。

1.png

电机开发板设有霍尔信号接口与编码器接口,可回馈转子位置,进行有位置传感器的FOC控制驱动或六步方波驱动。提供剎车电阻接口,可应用于高动态响应控制时的动态剎车功能。具备三相输出端电压检测连接至ADC,以及虚拟中性点电路和比较器电路,可实现多种直流无刷电机(BLDC)六步方波无位置传感器驱动应用。并具备3个相电流检测电阻与1个直流地端母线电流检测电阻,可应用三电阻、两电阻电流检测,以及单电阻电流检测等三种电流检测方式。可执行有位置传感器与无位置传感器等磁场导向(field-oriented)向量控制法则(vector control algorithm)驱动三相交流电机,实现家用、商用以及工业等产品的电机控制应用技术。

2.png

开发板系统架构图在命令输入接口部分,除具有USB转UART界面、UART界面以及I2C接口外,并提供一个电位器模拟输入接口,可改变电位器电阻分压,输出电压命令由ADC读取。此外,有两个指拨开关以及一个按钮开关,可提供程序做控制模式设定,并提供5个LED指示灯,其中包含一个错误指示灯。

AT32电机函数库

雅特力针对电机开发提供了方便易用的AT32F413与AT32F421电机库,包含矢量控制电机库函数(mc_foc_library.lib)和6-step方波控制电机库函数(mc_bldc_library.lib),用户可根据电机控制方式选择电机库,两类电机库皆包含有传感器的控制函数以及无传感器的控制函数,注意在使用电机库时皆须调用初始设定相关函数以进行软件的初始设定。

电机库函数、使用者自定义函数与UI函数均建构于BSP之上,而用户自行撰写的控制程序则植基于电机库函数、用户自定义函数与UI函数之上。因此用户可以很方便地调用电机控制函数控制MCU硬件外设,实现电机控制程序。并可同时经由UI控制函数与外部个人计算机UI软件工具链接,传输实时的电机控制状态或实时改变控制参数与命令。

以下为一个电机控制工程中电机库应用函数与其它MCU基础函数(BSP)、UI通讯程序,以及用户撰写的控制函数与自定义函数之间的关系图。

3.png

电机库控制程序架构图

以下为电机库文档结构说明图。头文件提供设定MCU外设、控制形式、电机参数、控制板参数、控制器参数,相关的设定参数于mc_xxx_globals.c中的函数设定变数初值,MCU外设规划则由mc_hwoio.c文件执行相关外设初使化设定。

4.png

电机库文档结构说明图

雅特力在电机成本、可靠性等方面不断做出突破与改进,AT32F421、AT32F4212、AT32F413三款电机MCU搭配Cortex-M4内核和雅特力电机库算法,具有快速高效的算法能力和高性价比的价格优势,可满足电机控制在系统复杂性、实时性和智能化等方面日益严苛的要求。

来源:AT32 MCU 雅特力科技

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

围观 191

CAN概述

CAN是Controller Area Network的缩写(以下称为CAN),它的设计目标是以最小的CPU负荷来高效处理大量的报文。1986年德国电气商BOSCH公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

CAN协议特点:

  • 多主控制:
    在总线空闲时,所有节点均可发送信息。如果出现两个及以上节点同时开始发送信息时,总线会根据标识符(Identifier以下称为ID)进行仲裁,ID越小则优先级高,则仲裁优胜,仲裁优胜的节点继续发送,仲裁失利的节点立即转入接收状态。需注意,ID并不是表示节点地址,而是指示所发送的报文的优先级。
  • 系统的灵活性:
    如上所述,与CAN总线的各节点没有类似于“地址”的信息。因此在总线上增减节点时,连接在总线上的其它节点的软硬件设计均不受影响。
  • 高可靠性:
    CAN协议具有错误检测、错误通知、故障封闭和错误恢复功能。CAN总线上的任意节点均可检测错误(错误检测);检测到错误后向总线发送错误帧以通知其他节点(错误通知);同时每个节点内部有一个错误计数功能,每次检测到错误之后,错误计数值累加,当某节点持续错误导致计数连续累加,直到大于256后,此故障节点从总线上断开,避免影响其他节点(故障封闭)。且发送节点如果在发送信息的过程中检测到错误,待错误结束后会自动重发此信息直到成功发送(错误恢复)。
  • 通信速度较快,通信距离远:
    最高1Mbps(距离小于40m),最远可达10km(速率低于5Kbps)。
  • 可连接节点多:
    CAN总线是可同时连接多个节点。节点数量理论上是没有限制的。但实际上节点数量受总线时间延迟及电气负载的限制。降低通信速度,可连接的节点数增加;提高通信速度,则可连接的节点数减少。

正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。本文例程使用的是1Mbps的通信速率,使用的是ISO11898标准。

CAN协议介绍

本章主要介绍CAN的网络拓扑结构、总线物理层特性、帧类型、帧结构、位填充机制、位格式、同步机制、仲裁机制、错误处理机制等。另外还有CAN协议的更多细节请参考BOSCH CAN协议,本文不再详述。

CAN网络拓扑结构

如下图1:CAN总线由两条差分线CANH和CANL组成,各个节点通过较短的支线接入CAN总线。各节点从通信协议而言是没有主从和地址区分的,每个节点均可以平等的收发数据。另外,在CAN总线的两端各有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。

1.png

图1 CAN网络拓扑结构

CAN总线物理层特性

如下图2:显性电平对应逻辑“0”,CANH和CANL压差2.5V左右。而隐性电平对应逻辑“1”,CANH和CANL压差为0V。在总线上,显性电平具有优先权,只要有一个节点输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的节点都输出隐性电平,总线上才为隐性电平。

2.png

图2 CAN总线电平特性

帧类型

如下表1,CAN包含了以下5种帧类型。其中数据帧和远程帧由用户控制收发;错误帧、过载帧和间隔帧是CAN总线上各节点硬件根据对应状态发送,用户不能也无需控制。

3.png

表1 CAN帧类型

如下图3,包含了各类型帧结构示意。

4.png

图3 CAN各帧类型

帧结构

本文仅对标准数据帧进行详细介绍,其他帧类型可参考图3与标准数据帧进行对比理解。

一帧标准数据帧包含如下部分:

帧起始:为1bit显性位。由于CAN总线空闲时是隐性电平,帧起始的显性位用于提示总线上的节点“一帧信息传输开始了”。

仲裁段:表示该帧优先级的段,包含标识符和帧类型(数据/远程帧)。

控制段:表示数据的字节数、标识符类型(标准/扩展标识符)及保留位的段。

数据段:数据,一帧可发送0~8个字节的数据(数据长度根据控制段的DLC决定)。

CRC段:发送节点将CRC计算区域(不包含填充位)进行CRC计算后放入CRC段发送。接收节点也对CRC计算区域进行CRC计算,并与收到的CRC域进行对比,若CRC对比结果有误则向总线发送错误帧,若对比结果正确则随后发送应答。

ACK段:含应答位(ACK SLOT)和应答间隔符(ACK DELIMITER)。发送节点在ACK段均发送隐性电平;接收节点如果在接收过程中没有检测到错误,则在应答位输出1bit显性电平,以通知发送节点“这帧数据被正确的接收了”。

帧结束:表示数据帧结束的段,为7bit隐性电平。

5.png

图4 CAN标准数据帧

位填充

由于CAN总线只有CANH/CANL两条差分线,没有CLK线来做同步,所以CAN是直接通过数据流中间的跳变沿来做同步的(参考下文同步机制)。而为了避免数据流中出现大段没有跳变沿的情况,CAN加入了“位填充”机制。

即发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入一相反电平的填充位。例如,原始数据流为“0000000111110001…”,经过位填充后实际输出到CAN总线的数据流为“000001001111100001…”,加下划线的位即为填充位。

位填充的范围为帧起始(SOF)~CRC域(不含CRC间隔符),参考上图4。

位格式

AT32的CAN一个bit可分为3段:

  • 同步段(SYNC_SEG)
  • 位段1(BIT SEGMENT 1),包括CAN标准里的PROP_SEG和PHASE_SEG1,记为BSEG1。
  • 位段2(BIT SEGMENT 2),即CAN标准里的PHASE_SEG2,记为BSEG2。

这些段又由Time Quantum(以下称为Tq)的最小时间单位构成。

1位分为3个段,每个段又由若干个Tq构成,这称为位时序。

1位由多少个Tq构成、每个段又由多少个Tq构成等,可以任意设定位时序。用户通过设定位时序和Tq长度来设定CAN的波特率和采样点。关于波特率和采样点设置,后文详细介绍。

各段作用及AT32的CAN可配置的Tq数见下表2:

6.png

表2 位的各段的作用

如下图5,同步段、位段1和位段2组成一个bit。BSEG1和BSEG2段交界处为采样点,即接收节点采样的时间点。

7.png

图5 位时序

同步机制

硬同步(HARD SYHCHRONIZATION):

硬同步后,内部的位时间从同步段重新开始。因此,硬同步强迫由硬同步引起的沿处于重新开始的位时间同步段之内。即下图6的理想跳变沿情况。

重新同步跳转宽度(RESYHCHRONIZATION JUMP WIDTH):

重新同步的结果,使位段1增长,或使位段2缩短。位段增长或缩短的数量有一个上限,此上限由重新同步跳转宽度给定。重新同步跳转宽度应设置于1~4Tq之间。

如下图6:

当在BSEG1段检测到下降沿,则BSEG1段增长Tdelay,当前bit整体增长Tdelay,其中Tdelay<=重新同步跳转宽度。

当在BSEG2段检测到下降沿,则BSEG2段缩短Tadvance,当前bit整体缩短Tadvance,其中Tadvance<=重新同步跳转宽度。

8.png

图6 重同步跳跃

仲裁机制

只要总线空闲,任何单元都可以开始发送报文。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突。通过对ID进行逐位仲裁可以解决这个冲突。仲裁的机制确保了报文和时间均不损失。当具有相同ID的数据帧和远程帧同时初始化时,数据帧优先于远程帧。仲裁期间,每一个发送节点都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个节点可以继续发送。如果发送的是一“隐性”电平而监测到是一“显性”电平(见总线电平),那么该节点就失去了仲裁,必须立即退出发送状态并转入接收状态。

例如下图7,节点1和节点2同时发送一帧数据,ID段前几bit相同。直到红色处,节点1发送隐性电平“1”,节点2发送显性电平“0”。此时节点2仲裁优胜,继续发送,总线电平和节点2发送值一致;而节点1仲裁失利,在下一bit转入接收,后续节点1的发送引脚保持隐性电平。

9.png

图7 仲裁机制

错误处理机制

错误类型

CAN协议定义了以下5种不同的错误类型:

  • 位错误(Bit Error)
    单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误。AT32将位错误细分为显性位错误(发送显性位但检测到隐性位)和隐性位错误(发送隐性位但检测到显性位)。CAN节点在发送状态会出现此类错误。
    但是在仲裁场(ARBITRATION FIELD)的填充位流期间或应答间隙(ACK SLOT)发送一“隐性”位的情况是例外的——此时,当监视到一“显性”位时,不会发出位错误。当发送器发送一个被动错误标志但检测到“显性”位时,也不视为位错误。
  • 位填充错误(Stuff Error)
    如果在使用一帧报文的位填充区域(参考图4的“位填充区域”)检测到6个连续相同的位电平时,将检测到一个位填充错误。CAN节点在接收状态会出现此类错误。
  • CRC错误(CRC Error)
    CRC序列包括发送器的CRC计算结果。接收器计算CRC的方法与发送器相同。如果计算结果与接收到CRC序列的结果不相符,则检测到一个CRC错误。CAN节点在接收状态会出现此类错误。
  • 格式错误(Form Error)
    当一个固定形式的位场含有1个或多个非法位,则检测到一个格式错误。例如在CRC间隔符/ACK间隔符的位场检测到显性位,则会检测到格式错误。例外:接收器的帧末尾最后一位期间的显性位不被当作帧错误。CAN节点在接收状态会出现此类错误。
  • 应答错误(Acknowledgment Error)
    只要在应答位(ACK SLOT)期间所监测的位不为“显性”,则发送器会检测到一个应答错误。CAN节点在发送状态会出现此类错误。

错误状态

CAN节点检测到错误之后,根据不同状态和错误类型会对发送错误计数器(TEC[7:0])/接收错误计数器(REC[7:0])进行加1或加8(具体增加规则请参考BOSCH CAN协议),每正确的发送/接收一帧数据后,发送/接收错误计数器减1。因此发送/接收错误计数器值表明了CAN节点和网络的稳定程度。根据发送/接收错误计数器值,一个节点的状态会处于以下三种之一:

  • 错误主动
    “错误主动”的节点可以正常地参与总线通讯并在错误被检测到时发出主动错误标志(6个显性位)。见下图8,TEC<128且REC<128即为错误主动状态。
  • 错误被动
    “错误被动”的节点可参与总线接收和发送数据/远程帧。但检测到错误时只能发送错误被动标志(6个隐形位)。见下图8,255≥TEC>128且255≥REC>128即为错误被动状态。
  • 离线
    “离线”的节点相当于直接从CAN总线断开,不能收/发任何信息。见下图8,TEC>255即为离线状态。

AT32离线管理:AT32 CAN从离线状态恢复分两种情况:

1)当CAN主控制寄存器(CAN_MCTRL)AEBOEN位为‘0’时,需要软件请求进入冻结模式,再请求退出冻结模式,然后在通信模式下等待CAN节点RX检测到128次11个连续隐性位,随后该节点会从离线状态恢复。

2)当AEBOEN位为‘1’时,通信模式下CAN节点RX检测到128次11个连续隐性位,就自动从离线状态恢复。

10.png

图8 错误状态

AT32的CAN

AT32的CAN支持标准CAN协议2.0A和2.0B。且在兼容标准CAN协议的基础上增加了一些功能和可配置选项。其中CAN 2.0A和2.0B的主要差别在于:CAN 2.0A仅支持11bit ID,即只支持标准帧;CAN 2.0B支持11bit/29bit ID,即支持标准帧和扩展帧。

本章节主要介绍AT32 CAN的主要设计结构和使用,介绍了AT32 CAN的正常通信流程,包括发送流程、接收流程、报文过滤、波特率及采样点设置等。其他AT32 CAN相关设计,例如错误管理、中断管理等,请参考RM相关章节。

整体功能介绍

随着CAN网络节点和报文数量的增加,需要一个增强的过滤机制处理各种类型的报文,减少接收报文的处理时间,采用FIFO的方案,使得CPU可以长时间处理应用层任务而不会丢失报文。同时发送报文由硬件控制发送优先级顺序。基于以上考虑,CAN控制器提供28组位宽可配置的标识符过滤器组,2个接收FIFO,每个FIFO都可以存放3个完整的报文。共有3个发送邮箱,发送调度器决定发送优先级顺序。整个收发过程完全由硬件管理,无需占用CPU资源。

11.png

图9 AT32 CAN整体功能介绍

CAN发送流程

CAN发送流程见下图10和以下的步骤:

用户使用时只需操作1)~3)。4)~7)由硬件自动完成,无需用户代码参与,不占用CPU资源。

1)程序选择1个空置的邮箱(发送邮箱空标志TMxEF=1)

2)将需要发送的报文写入对应的空邮箱。报文内容包含:ID、帧类型、数据长度和发送数据等

3)请求发送:将CAN_TMIx的TMSR位置1

4)邮箱挂号(等待成为最高优先级)

5)预定发送(等待总线空闲)

6)发送

7)邮箱空置

注:以上步骤1)~7)只简单介绍正常发送流程,下图10中还包含取消发送、发送失败、自动/不自动重传等情况,可参考RM文件报文发送一节,这里不再详述。

下图10中标志位和操作位说明如下:

TMxTCF:请求完成标志位(发送/中止请求)

TMxTSF:发送成功标志位

TMxEF:发送邮箱空标志位

TMSR:请求发送

TMxCT:中止发送

PRSFEN:禁止自动重传(PRSFEN=1时,禁止自动重传;PRSFEN=0时,自动重传直到发送成功)

12.png

图10 CAN发送流程

CAN接收流程

CAN常用接收流程如下,即下图11的“空”和“挂号_1”两个状态间循环:

1)FIFO空

2)收到有效报文

3)进入“挂号_1”状态(FIFO内有1条有效报文的状态)

4)读取有效报文:读取接收邮箱寄存器(CAN_RFIx,CAN_RFCx,CAN_RFDTLx,CAN_RFDTHx)。

5)释放邮箱:CAN_RFx寄存器RFxR位置1。

注:用户使用时只需操作4)~5)。1)~3)由硬件自动完成,无需用户代码参与,不占用CPU资源。

有效报文:

当报文被正确接收(直到EOF域的最后一位都没有错误),且通过了标识符过滤,那么该报文被认为是有效报文。过滤器相关介绍见下一节。

而如果接收过程中用户不参与操作(即不去读取有效报文和释放邮箱),硬件流程如下:

1)收到有效报文

2)进入“挂号_1”状态(FIFO内有1条有效报文的状态)

3)收到有效报文

4)进入“挂号_2”状态(FIFO内有2条有效报文的状态)

5)收到有效报文

6)进入“挂号_3”状态(FIFO内有3条有效报文的状态)

7)收到有效报文

8)进入“溢出”状态(FIFO内有3条有效报文,丢失了一条报文,溢出标志置起)

下图11中标志位和操作位说明如下:

RFxMN:FIFO内有效报文数量(取值0~3)

RFxOF:溢出标志位

RFxR:释放邮箱

13.png

图11 CAN接收流程

过滤器

在CAN协议里,报文的ID不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据ID的值决定软件是否需要该报文;如果需要,就存到接收FIFO里,用户可通过软件读取接收邮箱寄存器获取该报文;如果不需要,报文就被丢弃且无需软件的干预。

为满足这一需求,AT32 CAN控制器为应用程序提供了28个硬件过滤器组(AT32F435系列有28个过滤器组,0~27;但AT32F403A等系列只有14个过滤器组,0~13。具体请参考相应型号的RM),以便只接收那些软件需要的报文。用户配置好需要的ID后,整个过滤过程无需软件参与,不占用CPU资源。

过滤器的位宽

每个过滤器组由2个32bit的寄存器,CAN_FiFB1和CAN_FiFB2组成。通过配置CAN_FBWCFG寄存器的FBWSELx位,可以设置2个16位宽或者1个32位宽的过滤器。

32位宽的过滤器寄存器CAN_FiFBx包括:一组SID[10:0]、EID[17:0]、IDT和RTR位。

16位宽的过滤器寄存器CAN_FiFBx包括:两组SID[10:0]、IDT、RTR和EID[17:15]位。

过滤器模式

通过设置CAN_FMCFG寄存器的FMSELx位可以设置过滤器寄存器工作在标识符掩码模式或者标识符列表模式,掩码模式用来指定ID的哪些位需要与预设ID相同,哪些位无需比较,列表模式表示ID的每个位都必须与预设ID一致。

两种模式与过滤器位宽配合使用,可以有以下四种过滤方式:

14.png

图12 32位宽标识符掩码模式

15.png

图13 32位宽标识符列表模式

16.png

图14 16位宽标识符掩码模式

17.png

图15 16位宽标识符列表模式

更多CAN过滤器说明,例如CAN过滤器匹配序号,优先级规则等可参考RM文件报文过滤一节,这里不再详述。过滤器配置流程见后文案例介绍--CAN接收过滤器使用。

CAN波特率及采样点计算

如前文CAN位格式一节所述,CAN的一个bit被分为几段。其中第一段同步段(SYNC_SEG)固定为1Tq,1Tq的长度由CAN位时序寄存器(CAN_BTMG)的分频系数BRDIV[11:0]位定义;位段1(BSEG1)通过配置CAN位时序寄存器的BTS1[3:0]位,可设定为1~16Tq;位段2(BSEG2)通过配置CAN位时序寄存器的BTS2[2:0]位,可设定为1~8Tq。用户通过配置CAN时序寄存器,可设置CAN波特率和采样点,整个CAN总线上各节点的波特率和采样点一致最佳,不过由于各节点主频可能不一样,所以比较难保证波特率和采样点均一致。用户使用时应首先保证波特率一致,采样点尽量保持在较小的偏差范围内,这样CAN总线可以支持更多的节点和更长的线路。

波特率计算公式

其中

18.png

例如,bsp例程project\at_start_f437\examples\can\communication_mode:

APB时钟:APB1_CLK=144MHZ

CAN分频系数:BRDIV=12

此时1Tq=1/(144MHZ/12)=(1/12)us

同步段:SYNC_SEG=1Tq(固定不变,无需用户配置)

位段1:BSEG1=8Tq(BTS1[3:0]=7)

位段2:BSEG2=3Tq(BTS2[2:0]=2)

此时Nomal Bit Timimg=1Tq*(SYNCSEG+BSEG1+BSEG12)=1us

此时BaudRate=1/(Nomal Bit Timimg)=1/1us=1Mbps

采样点计算公式

sample point=(SYNC_SEG+BSEG1)/(SYNC_SEG+BSEG1+BSEG12)

举例同上:

此时sample point=(1+8)/(1+8+3)=75%

关于采样点设置,CAN协议并没有明确规定,但根据各厂商CAN设备使用习惯,采样点设置建议如下

表3:

19.png

表3 采样点设置建议

波特率计算工具

为方便用户波特率设定,本文介绍一个AT专用波特率计算工具:

20.png

使用步骤如下:

1) 波特率设定:高速CAN波特率最大为1M,各厂商CAN设备常用波特率为125K、250K、333K、500K、1M等。用户可根据需要设定波特率。参考下图16“波特率(Kbit/S)”。

2) CAN时钟源频率设定:参考下图16“PCLK1(MHZ)”。

3) 采样位置设置:设置完波特率后,计算工具会自动填入一个推荐的采样位置值。若实际项目中无具体限定,可保持默认设定;若项目中有具体限定,根据需求更改即可。参考下图16“采样位置(%)”。

4) 波特率偏差设定:建议在不勾选“允许波特率偏差”项,仅在没有符合要求的计算结果时,再勾选此项。由于同一CAN网络的节点波特率有误差会增大通信错误几率,建议“偏差”值设置尽量小。参考下图16“允许波特率偏差”和“偏差”。

5) 波特率配置结果选择:根据以上设定即可计算出多组结果。在页面左下角选择一项计算结果,即会在页面右下角显示对应软件代码配置,点击“复制全部”即可获得对应代码。

21.png

图16 波特率配置工具

案例1 CAN正常通信-normal模式

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现两个CAN节点之间收发通信。

资源准备

1) 硬件环境:

两套对应产品型号的AT-START BOARD+CAN电平转化器

程序设计以bsp demo为例:

CAN1_TX(PB9)连接电平转换器的TXD;

CAN1_RX(PB8)连接电平转换器的RXD;

两个CAN节点的电平转换器的CANH和CANL分别相连。

CAN电平转换器硬件设计可参考下图:

22.png

图17 CAN电平转换器硬件设计

2) 软件环境:

project\at_start_f435\examples\can\communication_mode

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应的GPIO引脚
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断

2) 代码介绍

  • main函数代码描述

23.png

  • CAN配置函数代码描述

24.png

  • CAN发送函数代码描述
25.png
  • CAN接收中断函数代码描述
26.png
  • GPIO配置函数代码描述
27.png

实验效果

  • 如若数据传输无误,两块AT-START BOARD的LED2均会闪烁以指示收到ID=0x400的标准帧数据;LED4会持续闪烁以指示程序正常运行。

案例2 CAN接收过滤器使用

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现报文过滤:接收需要的报文,丢弃不需要的报文。

资源准备

1) 硬件环境:

两套对应产品型号的AT-START BOARD+CAN电平转化器

程序设计以bsp demo为例:

CAN1_TX(PB9)连接电平转换器的TXD;

CAN1_RX(PB8)连接电平转换器的RXD;

两个CAN节点的电平转换器的CANH和CANL分别相连。

CAN电平转换器硬件设计可参考下图:

28.png

图18 CAN电平转换器硬件设计

2) 软件环境:

project\at_start_f435\examples\can\filter

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应的GPIO引脚
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断
2) 代码介绍
  • 设定可通过过滤的ID
29.png
  • main函数代码描述
30.png
  • CAN配置函数代码描述
31.png
  • CAN发送函数代码描述

32.png
  • CAN接收中断函数代码描述
33.png
  • GPIO配置函数代码描述

34.png

实验效果

  • 如若数据传输无误,AT-START BOARD的LED2/3/4会翻转一次,以指示收到ID=FILTER_EXT_ID1,FILTER_EXT_ID2,FILTER_STD_ID1,FILTER_STD_ID2的4帧数据。

案例3 CAN调试-loopback模式

注:所有project都是基于keil 5而建立,若用户需要在其他编译环境上使用,请参考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。

功能简介

实现单板的环回模式通信。

环回模式(loopback mode):

环回模式可用于自测试。在环回模式下,CAN在内部把TX输出回馈到RX输入上,而完全忽略CAN_RX引脚的实际状态。因此此模式下CAN对应的GPIO引脚可以不配置,而如果对应的GPIO引脚配置了,发送的报文可以在CAN_TX引脚上检测到。见下图19。另外,为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。

平转换器硬件设计可参考下图:

35.png

图19 CAN loopback模式

资源准备

1) 硬件环境:

一块对应产品型号的AT-START BOARD

2) 软件环境:

project\at_start_f435\examples\can\loopback_mode

软件设计

1) 配置流程

  • 配置CAN1 TX和RX pin对应GPIO(loopback模式下,此项可忽略不配置)
  • 配置CAN基础选项
  • 配置CAN波特率
  • 配置CAN过滤器
  • 配置CAN中断
2) 代码介绍
  • main函数代码描述
36.png
  • CAN配置函数代码描述
37.png
  • CAN发送函数代码描述
38.png
  • CAN接收中断函数代码描述
39.png
  • GPIO配置函数代码描述
40.png
实验效果
  • AT-START BOARD的LED2会闪烁以指示收到自己发送的ID=0x400的标准帧数据;LED4会持续闪烁以指示程序正常运行。

来源:AT32 MCU 雅特力科技

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

围观 684

DVP简介

数字摄像头并行接口(DVP)用于捕获CMOS影像摄像机所输出的并行数据。依据摄像机输出,可选择以硬件同步模式或内嵌码同步模式进行帧同步与行同步。依使用需求,可透过帧率控制,调节每秒捕获的帧数。剪裁窗口功能可以保留兴趣区域数据,舍弃其他部分。使用图像尺寸调整功能,可依据比例对图像进行像素数或行数缩减。直接存储器访问的使用,可在不耗用CPU资源的状态下,将捕获数据传输至储存单元。使用者仅须透过状态中断与错误中断,监控数据接收状态即可。

DVP系统框图

1.png

图1. DVP系统框图

周边配置

SURF板

2.png

图2. AT-SURF-F437

DVP & Sensor pin

表1. DVP接口表

3.png

DVP基本环境介绍

表2. DVP环境介绍

4.png

DVP功能

数据长度

数字摄像头并行接口(DVP)将捕获的数据,包装成字(32位)数据,供直接存储器访问从寄存器DVP_DT取得。包装方式依DVP_CTRL寄存器PDL的配置而异。详见下图。

8位并行数据(PDL=0)

配置PDL为0,DVP在每个DVP像数时钟(DVP_PCLK)捕获一个8位数据,并以四个数据包装成一组字数据。最先捕获者放置于最低8位,最后捕获者放置于最高8位,依此类推。

10位并行数据(PDL=1)

配置PDL为1,DVP在每个DVP像数时钟(DVP_PCLK)捕获一个10位数据,并以二个数据包装成一组字数据。包装将字数据分成两组半字进行。先捕获者放置于低位半字的最低10位,最捕获者放置于高位半字的最低10位,余者清零。

12位并行数据(PDL=2)

配置PDL为2,DVP在每个DVP像数时钟(DVP_PCLK)捕获一个12位数据,并以二个数据包装成一组字数据。包装将字数据分成两组半字进行。先捕获者放置于低位半字的最低12位,最捕获者放置于高位半字的最低12位,余者清零。

14位并行数据(PDL=3)

配置PDL为3,DVP在每个DVP像数时钟(DVP_PCLK)捕获一个14位数据,并以二个数据包装成一组字数据。包装将字数据分成两组半字进行。先捕获者放置于低位半字的最低14位,最捕获者放置于高位半字的最低14位,余者清零。

5.png

图3. PDL配置与输出包装之关系

同步模式

数字摄像头并行接口(DVP)以DVP像素时钟(DVP_PCLK)来捕获CMOS影像摄像机所输出的像素并行数据(DVP_D),DVP_PCLK是由CMOS影像摄像机提供。透过配置DVP_CTRL的寄存器CKP,DVP可选择使用DVP_PCLK的上升缘或下降缘进行捕获。捕获的数据可以区分为有效像素数据与消隐区间数据,用户仅只关心有效像素数据的部分。CMOS影像摄像机可提供一种或数种模式的同步信息,供接收端进行帧分割,并提取有效像素数据。数字摄像头并行接口(DVP)支持两种同步模式,硬件同步模式与内嵌码同步模式,可透过配置DVP_CTRL的寄存器SM来选择。

硬件同步模式

相关寄存器:

-SM(Synchronization mode)=0

-DVP_CTRL HSP

-DVP_CTRL VSP

CMOS影像摄像机可提供水平同步讯号与垂直同步信号,供接收端进行同步。配置DVP_CTRL的寄存器SM为0,DVP可以此同步模式进行接收。水平同步讯号用于区分有效像素与消隐区间,DVP由DVP水平同步讯号引脚(DVP_HSYNC)导入此讯号,依据此讯号进行行分割,并提取有效像素数据。需配置DVP_CTRL的寄存器HSP来调整该讯号极性,使其与数字摄像头之输出一致。垂直同步信号用于帧之间的分隔,DVP由DVP垂直同步信号引脚(DVP_VSYNC)导入此讯号,依此讯号进行帧分割。
内嵌码同步模式

相关寄存器:

-SM(Synchronization mode)=1

-DVP_SCR

-DVP_SUR

为了节省引脚使用,部分厂商的CMOS影像摄像机,可在有效像素数据与消隐区间数据之间嵌入同步码作为同步信息,取代水平同步讯号与垂直同步信号之使用。配置DVP_CTRL的寄存器SM为1,DVP可以此同步模式进行接收。同步码由四笔数据构成,前三笔数据内容固定,第一笔为全1数据,之后接续两笔全0数据。第四笔数据则依同步信息而异,需依摄像机厂商所使用的同步码型式与内容,配置DVP_SCR寄存器。

1. FS/FE/LS/LE型式

欲接收FS/FE/LS/LE型式,需配置DVP_SCR寄存器如下。

FMSC:配置成影像摄像机使用的FS第四笔数据最高八比特位。

LNSC:配置成影像摄像机使用的LS第四笔数据最高八比特位。

LNEC:配置成影像摄像机使用的LE第四笔数据最高八比特位。

FMEC:配置成影像摄像机使用的FE第四笔数据最高八比特位。

6.png

图4. FS/FE/LS/LE型式下的帧组成

2. SAV/EAV型式

欲接收SAV/EAV型式,需配置DVP_SCR寄存器如下:

FMSC:配置成0xff。(配置为无帧开始同步码之内嵌码同步模式)

LNSC:配置成影像摄像机使用的Active SAV第四笔数据最高八比特位。

LNEC:配置成影像摄像机使用的Active EAV第四笔数据最高八比特位。

FMEC:配置成0xff。(配置为任意帧结束同步码之内嵌码同步模式)

7.png

图5. SAV/EAV型式下的帧组成

捕获模式

单帧捕获模式

相关寄存器:

-DVP_CTRL CFM=1

此模式下,用户置起DVP_CTRL的寄存器CAP后,DVP会根据接收到的同步信息,于次帧开始后,进行数据捕获。于该帧结束之时,DVP会自动重置寄存器CAP,并停止数据捕获。

8.png

图6. 单帧捕获模式示意图

连续捕获模式

相关寄存器:

-DVP_CTRL CFM=0

此模式下,用户置起DVP_CTRL的寄存器CAP后,DVP会根据接收到的同步信息,于次帧开始后进行数据捕获,此捕获行为会持续进行。当使用者对寄存器CAP置0时,DVP会维持CAP的置起状态并持续捕获数据,直到同步信息反应当帧结束。此时DVP会重置寄存器 CAP,并停止数据捕获。

9.png

图7. 连续捕获模式示意图

帧率控制功能

相关寄存器:

DVP_CTRL CFM=0

数字摄像头并行接口(DVP)可透过帧率控制,调节每秒捕获的帧数。帧率控制仅当DVP配置于连续捕获模式(CFM=0)下,方可作用。帧率控制单元可区分成基本型帧率控制与进阶型帧率控制两种。

10.png

图8. 帧率控制功能示意图

基本型帧率控制

相关寄存器:

11.png

图9. DVP_CTRL BFRC

配置DVP_CTRL的寄存器BFRC,可选择让DVP每两帧捕获一帧,或是每四帧捕获一帧。
进阶型帧率控制

相关寄存器:

12.png

图10. DVP_ACTRL EFRCE

13.png

图11. DVP_FRF EFRCTF/EFRCSF

如需更精细的帧数调节,可使用进阶型帧率控制。使用时须禁止基本型帧率控制(BFRC=0),并置起DVP_ACTRL的寄存器EFRCE,DVP会依据DVP_FRF的寄存器EFRCSF与EFRCTF之配置来调整帧数,调整公式如下:

目标帧率=(EFRCTF/EFRCSF)×原始帧率

请注意,当使用进阶型帧率控制功能时,寄存器EFRCSF与EFRCTF值不得为0,且EFRCTF不得大于EFRCSF。

剪裁窗口功能

相关寄存器:

14.png

图12. DVP_CWST CVSTR/CHSTR

15.png

图13. DVP_CWSZ CVNUM/CHNUM

剪裁窗口功能可以供用户保留兴趣区域数据,舍弃其他部分。置起DVP_CTRL的寄存器CRP,DVP会依据DVP_CWST与DVP_CWSZ之寄存器配置进行剪裁,如下图所示意。

16.png

图14. 剪裁窗口功能示意图

请注意,由于DVP会将捕获的数据,包装成字(32位)数据,供直接存储器访问提取。故使用剪裁窗口功能时,CHNUM有下述限制:8位并行数据(PDL=0)时,CHNUM+1须为4的倍数。10或12或14位并行数据(PDLǂ0),CHNUM+1须为2的倍数。

图像尺寸调整功能

使用图像尺寸调整功能,可依据比例对图像进行像素数或行数缩减。图像尺寸调整功能单元可区分成基本型图像捕获舍弃控制与进阶型图像尺寸调缩功能两种。

17.png

图15. 图像尺寸调整功能示意图

基本型图像捕获舍弃控制

相关寄存器:

18.png

图16. DVP_CTRL

配置DVP_CTRL的寄存器PCDC或LCDC,可启用基本型图像捕获舍弃控制功能。将LCDC置1后,可在每两条捕获的图像行中舍弃一条,将图像的垂直轴尺寸减半。配置LCDS可以选择捕获前一条并舍弃下一条,或是反向为之。寄存器PCDC可以调整图像的水平轴尺寸,由PCDS与PCDES决定捕获何者。如下图所示。

19.png

图17. LCDC/LCDS与帧组成

20.png

图18. PCDC/PCDS与行组成

进阶型图像尺寸调缩功能

相关寄存器:

21.png

图19. DVP_ACTRL

22.png

图20. DVP_HSCF

23.png

图21. DVP_VSCF

如需更精细的图像调缩,可使用进阶型进阶型图像调缩功能。使用此功能需启用进阶功能数据管理(EFDM=1),并依CMOS影像摄像机之输出格式配置进阶功能数据格式(EFDF)。使用进阶型进阶型图像调缩功能时,须禁止图像捕获舍弃控制功能(PCDC=0且LCDC=0),并置起DVP_ACTRL的寄存器EISRE,DVP会依据DVP_HSCF的寄存器HSRSF与HSRTF之配置来调缩图像的水平轴尺寸,并依据DVP_VSCF的寄存器VSRSF与VSRTF之配置来调缩图像的垂直轴尺寸,调整公式如下:

目标水平轴尺寸=(HSRTF/HSRSF)×原始水平轴尺寸

目标垂直轴尺寸=(VSRTF/VSRSF)×原始垂直轴尺寸

请注意,当使用进阶型进阶型图像调缩功能时,寄存器HSRSF、HSRTF、VSRSF、VSRTF值不得为0,且HSRTF不得大于HSRSF,并VSRTF不得大于VSRSF。此外,计算所得的目标水平轴尺寸与目标垂直轴尺寸必须为整数,且目标水平轴尺寸需为4的倍数,否则此单元可能会产生不预期之结果。

灰阶图像二值化转换

相关寄存器:

24.png

图22. DVP_ACTRL MIBE

25.png

图23. DVP_BTH

灰阶图像二值化转换单元提供将图像亮度转换成一比特位表示之格式。使用此功能需启用进阶功能数据管理(EFDM=1),并依CMOS影像摄像机之输出格式配置进阶功能数据格式(EFDF),设定方式请参考錯誤!找不到參照來源。置起DVP_ACTRL的寄存器MIBE可使能灰阶图像二值化转换功能。

灰阶图像依DVP_BTH之寄存器MIBTHD配置进行二值化转换,数值大于阀值者判定为1,小于阀值者判定为0。图像数据若为无法直接取出图像亮度的格式,则无法使用该功能。

中断与中断控制

相关寄存器:

26.png

图24. DVP_STS

27.png

图25. DVP_ESTS

28.png

图26. DVP_IENA

29.png

图27. DVP_ISTS

30.png

图28. DVP_ICLR

数字摄像头并行接口(DVP)的中断控制,由四组寄存器所构成。DVP_ESTS是只读寄存器,用于纪录捕获过程中所发生的同步状态或错误事件。DVP_IENA用于控制中断讯号之使能,配置该寄存器可以使能对应位的同步状态或错误中断,并以送至CPU。使能后所产生的中断会被记录在只读寄存器DVP_ISTS中,由于DVP是以全局中断连接CPU的NVIC,使用者需于此寄存器确认中断信息。纪录于DVP_ESTS与DVP_ISTS的状态,透过对DVP_ICLR的对应位上置1可清除之。

DVP_ICLR是唯写寄存器,无须置0解除。

DVP支持三组同步状态中断,描述如下:

帧捕获完成(Capture frame done)

CFDES与CFDIS于捕获功能(CAP)使能时,表现当前帧捕获已完成。根据同步讯号,帧捕获完成讯息会于获取帧结束讯号时发生。若剪裁窗口功能(CRP)始能时,帧捕获完成讯息会提前至剪裁窗口完成时产生。若捕获功能(CAP)未使能,CFDES与CFDIS不作用。
垂直同步状态(Vertical synchronization)

VSES与VSIS用于表现垂直同步信息已获取。垂直同步信息可被定义为帧开始或帧结束,配置DVP_ACTRL的寄存器VSEID可以调整其定义。

水平同步状态(Horizontal synchronization)

HSES与HSIS用于表现水平同步信息已获取。水平同步信息可被定义为行开始或行结束,配置DVP_ACTRL的寄存器HSEID可以调整其定义。
DVP支持两组错误中断,描述如下:

输出缓冲溢出(Output data FIFO overrun)

OVRES与OVRIS于捕获功能(CAP)使能时,表现输出缓冲溢出的错误状态。若直接存储器访问无法及时将捕获数据传输至储存单元,而导致输出缓冲全部蓄满数据,此时DVP所捕获的数据将会被舍弃,并产生输出缓冲溢出错误讯息。若捕获功能(CAP)未使能,OVRES与OVRIS不作用。
内嵌同步码译码错误(Embedded synchronization error)

ESEES与ESEIS于捕获功能(CAP)使能,且使用时内嵌码同步模式时时(SM=1),表现内嵌同步码译码错误的错误状态。若译码器解译出非预期之同步码,译码器会舍弃当前的同步状态,并重新对后续的数据进行解译。此时DVP将会停止数据捕获,并产生内嵌同步码译码错误讯息。若捕获功能(CAP)未使能,或是使用硬件同步模式时(SM=0),ESEES与ESEIS不作用。

DVP应用

Sensor常见影像数据格式

依厂商不同,CMOS影像摄像机可提供的图像输出格式极多,本章节仅针对常见格式进行简单描述。

RGB与YUV格式

RGB:每一个像素由RGB三原色组成,“R”代表红色,“G”代表绿色,“B”代表蓝色。主要应用在计算机屏幕上,每一个像素色彩表现较丰富, 但无法将 RGB 三种值分开。常见格式有RGB565、RGB555…。

YUV:每一个像素由YUV字段组成,“Y”表示明亮度(Luma),“UV”表示的是色度(Chroma)。主要应用在电视屏幕上,特点在于可以只储存Luma(黑白画面),或是压缩UV的储存空间,方便压缩影像数据。UV代表RGB三原色。常见格式有YUV444、YUV422、YUV420…。

31.png

图29. YUV Format

4:4:4、4:2:2与4:20是YUV的取样方法。YUV4:4:4即是无通道压缩的全像传送;YUV4:2:2即是把后面两个信道的讯号抽掉一半,所以只需要YUV4:4:4的三分之二带宽。

YUV与RGB有算法可以互相转换。
RGB565

此格式下,CMOS影像摄像机每两个像素时钟输出一个半字(16位)数据的像素。每组半字数据包含三种像素分量,红色R、绿色G和蓝色B,分别以5位、6位和5位进行数据编码。第一个像素时钟输出R分量与G分量的低位部分,第二个像素时钟则输出G分量的高位部分与B分量。或是在第一个像素时钟输出B分量与G分量的低位部分,第二个像素时钟输出G分量的高位部分与R分量。錯誤!找不到參照來源。示意在RGB565格式下,DVP数据捕获与包装方式。

32.png

图30. RGB565格式数据捕获与包装

RGB555

此格式下,CMOS影像摄像机每两个像素时钟输出一个半字(16位)数据的像素。每组半字数据包含三种像素分量,红色R、绿色G和蓝色B,皆以5位进行数据编码。第一个像素时钟输出R分量与G分量的低位部分,第二个像素时钟输出G分量的高位部分与B分量。或是在第一个像素时钟输出B分量与G分量的低位部分,第二个像素时钟输出G分量的高位部分与R分量。因有效数据一共只有15位,故第二个像素时钟的最高位数据并不使用,CMOS影像摄像机会通常直接输出低电平。錯誤!找不到參照來源。示意RGB555格式下,DVP数据捕获与包装方式。

33.png

图31. RGB555格式数据捕获与包装

YUV422

此格式下,CMOS影像摄像机每两个像素时钟输出一个半字(16位)数据的像素。每组半字数据包含一个亮度像素分量Y,与一个色度像素分量U或V,皆以8位进行数据编码。色度分量U与V会在各像素间交替,相邻两像素使用不同色度分量。摄像机于每个像素时钟输出一组像素分量,第一个像素时钟输出Y分量,第二个像素时钟则输出U分量或V分量。或是在第一个像素时钟输出U分量或V分量,第二个像素时钟输出Y分量。錯誤!找不到參照來源。示意在YUV422格式下,DVP数据捕获与包装方式,色度像素分量U与V顺序可互换。

34.png

图32. YUV422格式数据捕获与包装

Y8

Y8(Y-only)格式此格式下,CMOS影像摄像机每一个像素时钟输出一个字节(8位)数据的像素表示亮度Y,以8位进行数据编码。于此格式下,CMOS影像摄像机不输出色度信息。錯誤! 找不到參照來源。示意在Y8(Y-only)格式下,DVP数据捕获与包装方式。

35.png

图33. Y8(Y-only)格式数据捕获与包装

DVP Lib

DVP功能开启/关闭

DVP各功能在设定上没有先后顺序,只有dvp_capture_enable开启后马上会有影像输出,所以必须在完整设定(包含I2C/EDMA/…)后再启动

  • dvp_enable

36.png

开启后 DVP 各功能活化,但不会有影像输出

  • dvp_capture_enable

37.png

开启后DVP就会马上会有影像输出, 所以必须在完整设定(包含I2C/EDMA/…)后再启动
同步模式-硬件同步

  • dvp_sync_mode_set(DVP_SYNC_MODE_HARDWARE)

38.png

  • dvp_hsync_polarity_set

39.png

视sensor而定,不同的sensor设定值可能不同

  • dvp_vsync_polarity_set

40.png

视sensor而定,不同的sensor设定值可能不同
同步模式-内嵌码同步

  • dvp_sync_mode_set(DVP_SYNC_MODE_EMBEDDED)

41.png

  • dvp_sync_code_set

42.png

dvp_sync_code_set(0xFF, 0xFF, 0xC7, 0xDA)

  • dvp_sync_unmask_set

43.png

dvp_sync_unmask_set(0, 0, 0, 0)
捕获模式

  • dvp_capture_mode_set

44.png

单帧捕获模式

dvp_capture_mode_set(DVP_CAP_FUNC_MODE_SINGLE)

连续捕获模式

dvp_capture_mode_set(DVP_CAP_FUNC_MODE_CONTINUOUS)

帧率控制-基本型

  • dvp_basic_frame_rate_control_set

45.png

需搭配连续捕获模式

dvp_capture_mode_set(DVP_CAP_FUNC_MODE_CONTINUOUS);

可以将sensor的帧率再往下调整

-不改变sensor帧率

dvp_basic_frame_rate_control_set(DVP_BFRC_ALL)

-将sensor帧率降低为两帧取一帧

dvp_basic_frame_rate_control_set(DVP_BFRC_HALF)

-将sensor帧率降低为四帧取一帧

dvp_basic_frame_rate_control_set(DVP_BFRC_QUARTER)
帧率控制-进阶型

  • dvp_enhanced_framerate_set

46.png

需搭配连续捕获模式

dvp_enhanced_framerate_set(M, N, TRUE)

M>=N
剪裁窗口

  • dvp_enhanced_framerate_set

47.png

  • void dvp_window_crop_set

48.png

dvp_window_crop_enable(TRUE)

dvp_window_crop_set(crop_x, crop_y, crop_w, crop_h)

crop_x / crop_y / crop_w / crop_h单位为pixel

crop_x(0x0000~0x3FFF): cropping window horizontal start pixel

crop_y(0x0000~0x1FFF): cropping window vertical start pixel

crop_w(0x0001~0x3FFF): cropping window horizontal pixel number

crop_h(0x0001~0x3FFF): cropping window vertical pixel number

crop_x+crop_w>=sensor输出到dvp的影像宽度(pixel)

crop_y+crop_h>=sensor输出到dvp的影像高度(pixel)
图像尺寸调整-基本型

  • dvp_zoomout_set

49.png

dvp_zoomout_set(dvp_pcdc, dvp_pcds, dvp_lcdc, dvp_lcds);

dvp_pcdc:

-DVP_PCDC_ALL, 全部捕获,或是使用进阶型图像尺寸调缩功能

-DVP_PCDC_ONE_IN_TWO, 启用捕获舍弃控制,于两个像素数据之中,捕获一个

-DVP_PCDC_ONE_IN_FOUR, 启用捕获舍弃控制,于四个像素数据之中,捕获一个-DVP_PCDC_TWO_IN_FOUR, 于四个像素数据之中,捕获连续两个

dvp_pcds:

-DVP_PCDS_CAP_FIRST, 捕获第一组数据(一个或两个像素数据),舍弃下一组

-DVP_PCDS_DROP_FIRST, 舍弃第一组数据(一个或两个像素数据),捕获下一组

dvp_lcdc:

-DVP_LCDC_ALL, 全部捕获,或是使用进阶型图像尺寸调缩功能

-DVP_LCDC_ONE_IN_TWO, 启用捕获舍弃控制,于两条图像行之中,捕获一条

dvp_lcds:

-DVP_LCDS_CAP_FIRST, 捕获第一条图像行之数据,舍弃下一条

-DVP_LCDS_DROP_FIRST, 舍弃第一条图像行之数据,捕获下一条
图像尺寸调整-进阶型

  • dvp_enhanced_scaling_resize_enable

50.png

  • dvp_enhanced_data_format_set

51.png

dvp_enhanced_scaling_resize_enable(TRUE)

dvp_enhanced_data_format_set(dvp_efdf)

dvp_efdf:

-DVP_EFDF_YUV422_UYVY, YUV422(UYVY / VYUY)格式数据输入

-DVP_EFDF_YUV422_YUYV, YUV422(YUYV / YVYU)格式数据输入

-DVP_EFDF_YUV444, YUV444格式数据输入

-DVP_EFDF_Y8, Y8(Y only)格式数据输入

dvp_enhanced_scaling_resize_set(src_w, des_w, src_h, des_h)

需搭配连续基本型全部捕获

src_w: 水平尺寸调缩来源系数,使能进阶型图像尺寸调缩功能时(EISRE=1),此寄存器值不得为0

des_w: 水平尺寸调缩目标系数,使能进阶型图像尺寸调缩功能时(EISRE=1),此寄存器值不得为0,亦不得大于src_w

src_h: 垂直尺寸调缩来源系数,使能进阶型图像尺寸调缩功能时(EISRE=1),此寄存器值不得为0

des_h: 垂直尺寸调缩目标系数,使能进阶型图像尺寸调缩功能时(EISRE=1),此寄存器值不得为0,亦不得大于src_h

灰阶图像二值化转换

  • dvp_monochrome_image_binarization_set

52.png

dvp_monochrome_image_binarization_set(mibthd, TRUE)

mibthd: 灰阶图像二值化阀值,灰阶图像依此阀值进行二值化转换,数值大于阀值者判定为1,小于阀值者判定为0

Sensor-DVP-LCD

53.png

图34. Sensor–DVP-LCD

Step1: Initiate sensor OV5640 (By I2C) and LCD (By XMC)

Step2: Configure DVP

Step3: Configure EDMA

54.png

图35. dvp_dma_init

Step4: Enable DVP

Step1~3无顺序相依性,但Step4一定要最后执行

可从LCD上直接显示实际影像

Sensor-DVP-SRAM(or SDRAM)

55.png

图36. Sensor–DVP–SRAM(or SDRAM)

Step1: Initiate sensor OV5640 (By I2C) and SRAM/SDRAM

Step2: Configure DVP

Step3: Configure EDMA

56.png

图37. dvp_dma_init

Step4: Enable DVP

Step1~3无顺序相依性,但Step4一定要最后执行

可以循以下方式输出影像(影像传输完毕后须关闭DMA以及DVP防止影像被覆盖):

1、使用J-Link或其他软件撷取出影像buffer内容,再用可看指定影像格式的软件观看

2、使用UART或其他方式将影像buffer内容传输至PC,再用可看指定影像格式的软件观看

57.png

图38. PC View

EDMA link list mode

如果应用上不会改变DVP输出影像的大小,就可以考虑用EDMA的link list mode来提高DMA的效率。

经由链接列表传输机制,用户可以将几种不同的传输链接在一起,以提高DMA应用程序的系统吞吐量。每个传输信息都可以通过软件存储在描述符中,并且DMA从主存储器加载描述符。

Link list机制为:

1. 预先规划一块buffer存放link list table,内容格式如下,详细内容请参考EDMA章节

58.png图39. 描述符格式

59.png

图40. 链接列表指针的用法

2. 建立link list table(需预先规划存放影像的地址)

Example:

60.png

图41. link list table

(1) 假定影像输出的大小为320x240格式为YUV422/RGB565

单张图像文件案大小为320x240x2=153600 bytes

单张影像有240条vertical line

每一条line有320 pixel=640 bytes

(2) 规划一块固定的Buffer存放link list table(假定位于0x20010000, 大小为4000 bytes)

(3) 假定影像输出的地址为0x20020000

(4) 建立link list table

每一条vertical line都需要填以下信息

CNT[15:0]=0xA0(DMA长度为word 4 bytes, 所以DMA CNT填640/4=0xA0)

PADDR[31:0]=DVP_DT, 固定为0x5005_0028

M0ADDR[31:0]=每条vertical line存放的地址(存放影像的起始地址*0x280*vertical line index)

LLP[31:0]=下一笔link list entry所在地址(link list的起始地址*0x10*(vertical line index+1)), 最后一笔LLP为0代表影像结束,如要重新传输影像则填link list的起始地址

案例 OV5640 Capture 

功能简介

实现将影像从 Sensor OV5640 输入到 DVP, 再透过 EDMA 搬移至 LCD 显示

资源准备

1) 硬件环境:对应产品型号的AT-START BOARD

2) 软件环境

project\at_start_f4xx\examples\dvp\ov5640_capture

软件设计

1) 配置流程开启DVP、EDMA、I2C、XMC时钟配置LCD、OV5640、DVP配置EDMA数据流开启DVP、EDMA相关中断开启DVP、EDMA数据流确认LCD显示是否正确

2) 代码介绍

  • main函数代码描述

61.png

  • LCD函数代码描述

62.png

  • OV5640函数代码描述

63.png

  • EDMA函数代码描述

64.png

  • DVP函数代码描述

65.png

实验结果

66.png图42. LCD View

来源:AT32 MCU 雅特力科技

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

围观 600

概述

HTTP server作为最为普遍的网络应用,我们每日开启浏览器访问的都是HTTP server,因此本使用指南,将展示如何控制流水灯以及ADC取样。

硬件资源

1) DM9162以太网模块
2) AT-START-F407 V1.0实验板
3) 以太网线

软件资源

http_server: HTTP server源程序,运行HTTP服务端程序

AT32 HTTP server程序设置

管脚配置

“表1.
表1. 管脚配置

LwIP设置

硬件资源只提供从PHY到MAC的信号处理,若要进行开发,则需要实作TCP/IP协议栈,在本应用中使用LwIP协议栈,该协议栈主要关注的是怎样减少减少内存的使用和程序代码的大小,这样就可以让LwIP适用于资源有限的小型平台例如嵌入式系统,更详细的内容可以访问官方网站。

由于整个协议栈已经整合到代码中,大部分的内容都无须修改,使用者只要根据自己的网段去设定IP地址及闸口地址即可,这两个全局变量宣告在netconf.c的上头。

“图1.
图1. 配置芯片的IP地址

HTTP server project设置

在本应用中,会透过网页控制开发板上的周边,故在启动HTTP server之前,我们必须先配置好被控制的周边,LED的部份由于在AT的例程中已经写好,用户可以直接调用at32_board_init();ADC的部份则需要用户自行撰写,在代码中有提供一个参考代码使用,用户也可以直接调用adc_configuration()来始能ADC的采集,或者根据应用去修改代码以符合需求。

“图2.
图2. 配置ADC

在配置完待控制的周边后,就可以始能HTTP server了,本应用中用户可以直接调用httpd_init()这个函式,深入地追踪这个函式,可以发现到是透过注册http_recv()到TCPlayer后,解析来自用户端的请求,有兴趣的用户可以研究这支函式来了解本应用的设计方式,在此不加赘述。

通过浏览器控制开发板周边

1) 设定上位机的IP地址、网路屏蔽及闸口,IP地址与闸口需要跟芯片设置在同一个网段下。

2) 打开PC端的浏览器,输入HTTP server的IP,网页加载后会显示开发板拥有的通讯接口。

3) 点击LED Control,跳转进入LED控制页面,勾选欲控制的LED后,点选Send Command去点亮LED,或者是取消勾选使之熄灭。

4) 点击ADC sampling,跳转后会显示当前ADC取样的电压值

“图3.
图3. 设置PC端的IP、网路屏蔽与闸口

“图4.
图4. HTTP server页面

“图5.
图5. LED控制页面

“图6.
图6. ADC采样页面

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

围观 63

页面

订阅 RSS - AT32