灵动微电子

2022年12月6日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下世平推出基于灵动微电子(MindMotion)MM32SPIN560C的低压无刷电机驱动方案。

1.jpg

图示1-大联大世平基于MindMotion产品的低压无刷电机驱动方案的展示板图

在后电气时代,电机与人们的生活建立了密不可分的关系。从一早起床使用的电动牙刷到智能门锁,再到搭乘的交通工具都离不开电机的驱动。而在小型家用电动工具市场,具备小型化、集成化的低压无刷电机更是一片蓝海,吸引着无数厂商争相布局。在此趋势下,大联大世平基于MindMotion MM32SPIN560C推出了适用于电动工具的低压无刷电机驱动方案。

2.png

图示2-大联大世平基于MindMotion产品的低压无刷电机驱动方案的场景应用图

本方案在核心主控方面采用的MM32SPIN560C是灵动微电子(MindMotion)旗下专为电机与电源设计的新一代MCU。其集成了Arm®Cortex-M0高性能内核,最高工作频率可达96MHz,并内置128KB的Flash和8KB的SRAM高速存储器,拥有丰富的I/O端口和多种外设,包括采样速度可达3Msps的12位ADC、5个通用定时器、2个针对电机控制的PWM高级定时器、1个I2C接口、2个SPI接口和3个UART接口,能够满足不同家电应用。

由于MM32SPIN560C内部集成了一部分驱动电路,所以本方案的外围电路相对简单,这有利于客户节约成本。在驱动电路部分,方案采用6颗N-MOS管来做电机的电子换相控制。芯片采用了Nexperia的PXN012-60QL。该芯片具有体积小、功耗低的特点,漏源电压(VDSS)可以达到60V,连续漏电流(Id)可以达到42A,开关频率可以达到30KHz以上。在电源设计部分,方案采用圣邦微的SGM2225 LDO芯片,具有低噪音、低损耗电压的特点。

3.png

图示3-大联大世平基于MindMotion产品的低压无刷电机驱动方案的方块图

此外,在软件设计部分方案采用世平HALL FOC双电阻采样的软件库架构,其通过板载电位器使电机旋转,从而让整个软件结构清晰易懂。基于以上优势,方案可帮助如空气净化器、服务器风机、吊扇、落地扇、电动手工具、吸尘器、小型水泵等应用构建可靠的电机驱动模块,使产品在稳定运行的同时达到节能减排的优点。

核心技术优势

  • Arm® Cortex-M0 32位MCU,主频高达96MHz,内置预驱,比较器和放大器,整个驱动电路简单;

  • MCU电源使用5V,可由MCU内部LDO转换;

  • 支持有传感器/无传感器的BLDC/PMSM电机;

  • 支持1/2 Shunt R三相电流采样;

  • 可通过跳线选择不同的电机回授方式,比如:HALL、BEMF、IPD等;

  • 支持DC Bus电压,总电流量测;

  • 使用MCU内置比较器作为过电流保护;

  • ADC采样速率高达3Msps;

  • 支持单电阻PWM移相,降低单电阻算法复杂程度。

方案规格:

  • MCU:Arm® Cortex-M0 32-bit内核,主频高达96MHz;

  • MCU电源使用5V,可由MCU内部LDO转换;

  • 支持UART通信和LIN通信;

  • 支持2种电源输入接口:DC-Jack和接线端子;

  • 使用60V/40A N-MOS管×6;

  • 支持2种SWD调试接口;

  • 支持2种调速接口:电位器和外接电压;

  • 具备LED指示灯和按键;

  • 开发板尺寸:65mm×75mm。

如有任何疑问,请登陆【大大通】进行提问,超过七百位技术专家在线实时为您解答。欢迎关注大联大官方微博(@大联大)及大联大微信平台:(公众账号中搜索“大联大”或微信号wpg_holdings加关注)。

关于大联大控股:

大联大控股是全球第一、亚太区最大的半导体元器件分销商*,总部位于台(TSE:3702)旗下拥有世平品佳诠鼎友尚员工人数约5,000人,代理产品供货商超250家,全球80个分销据点,2021年营业额达278.1亿美金大联大开创产业控股平台,专注于国际化营运规模与在地化弹性,长期深耕亚太市场,以「产业首选.通路标杆」为愿景,全面推行「团队、诚信、专业、效能」之核心价值观,连续22年蝉联「优秀国际品牌分销商奖」肯定。面临新制造趋势,大联大致力转型成数据驱动(Data-Driven)企业,建置在线数字化平台─「大大网」,并倡导智能物流服务(LaaS, Logistics as a Service)模式,协助客户共同面对智能制造的挑战。大联大从善念出发、以科技建立信任,期望与产业「拉邦结派」共建大竞合之生态系,并以「专注客户、科技赋能、协同生态、共创时代」十六字心法,积极推动数字化转型。(*市场排名依Gartner 2022年03月公布数据)

围观 19

MM32F52 系列是灵动发布的首个采用安谋科技 “星辰” STAR-MC1 处理器的性能型 MCU 系列,其处理器采用了 Armv8 架构,相较于 Cortex-M3、Cortex-M4 有约 20% 的单位性能提升,并配备灵动独有的信号间互联矩阵 MindSwitch,相较于现有产品全面提升了性能、存储容量、总线架构和外设配置,旨在覆盖更广泛的工业、汽车和 IoT 应用。

目前MM32F5270 全系列型号已开始批量供货,MM32F5280 系列可提供样片申请,并预计将于 12 月份量产。

MM32F52 系列选型信息与产品状态一览表 

1.png

MM32F5270系列产品 

2.jpg

MM32F5270 系列主要特点

  • “星辰”STAR-MC1 处理器,基于 Armv8-M Mainline 指令集架构,集成FPU 和 DSP

  • 4KB L1 I-Cache,4KB L1 D-Cache

  • 多达 256KB 内置 Flash

  • 多达 192KB 内置 RAM(包括 32KB ITCM、32KB DTCM 和 128KB System RAM)

  • 内置 QSPI 接口,支持程序在线执行(eXecute-in-Place,XIP)

  • 内置 FSMC 并行存储器接口

  • 2 个 12 位 SAR ADC,采样率高达 3MSPS,配置最高 24 个外部通道,支持最高 256 倍硬件过采样

  • 2 个 12 位 DAC、3 个比较器

  • 7 个 16 位定时器、2 个 32 位定时器

  • 8 个 UART 接口(包含1 个 LPUART)、3 个 SPI 接口、3 个 I2S 接口、2 个 I2C 接口

  • 1 个 USB OTG 全速接口

  • 2 个 FlexCAN 接口

  • 部分型号配置 10M/100M 以太网控制器

  • 支持的环境温度范围为 -40℃ - 105 ℃

  • 提供 LQFP144、LQFP100、LQFP64 封装

MM32F5280系列产品

3.jpg

MM32F5280 系列主要特点

  • Arm China STAR-MC1 处理器,基于 Armv8-M Mainline 指令集架构,集成FPU 和 DSP

  • 4KB L1 I-Cache,4KB L1 D-Cache

  • 多达 2.25MB 内置 Flash

  • 多达 192KB 内置 RAM(包括 32KB ITCM、32KB DTCM 和 128KB System RAM)

  • 内置 FSMC 并行存储器接口

  • 2 个 12 位 SAR ADC,采样率高达 3MSPS,配置最高 21 个外部通道,支持最高 256 倍硬件过采样

  • 2 个 12 位 DAC、3 个比较器

  • 7 个 16 位定时器、2 个 32 位定时器

  • 8 个 UART 接口(包含1 个 LPUART)、3 个 SPI 接口、3 个 I2S 接口、2 个 I2C 接口

  • 1 个 USB OTG 全速接口

  • 2 个 FlexCAN 接口

  • 部分型号配置 10M/100M 以太网控制器

  • 支持的环境温度范围为 -40℃ - 105 ℃

  • 提供 LQFP144、LQFP100 和 LQFP64封装

更多详细信息,请访问灵动官网:

www.mm32mcu.com

来源:灵动MM32MCU

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

围观 20

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易于实现等显著优点,被诸多电子设备包括消费电子、家用电器、安防器材等广泛采用,如智能手环、机顶盒、3D眼镜、智能扫地机、空调、电扇、通道闸、红外栅栏等,近年来也越来越多的应用到计算机和手机系统中。

灵动股份推出的MM32L0130系列MCU具有片上IRM红外调制器,该模块使用片上的定时器和串口,实现数据的 FSK/ASK 调制,以满足红外发码的需求。

1、IRM介绍

1.1 IRM功能框图

“使用MM32L0130

1.2 IRM主要特征

● 支持 APB 接口

● 两个调制信号源,分别为通道 1 和通道 2

● 通道 1 和通道 2 调制信号源均可选,来源包含

1)恒 0

2)恒 1

3)TIM3 的 OC1 通道

4)TIM4 的 OC1 通道

5)TIM16 的 OC1 通道

6)TIM17 的 OC1 通道

● 基带信号源可选,来源包含

1)IRM 数据寄存器

2)UART1_TX

3)UART2_TX

4)LPUART_TX

● 可实现数据的 ASK、FSK 调制,调制方式可选

● 输出信号极性可选

2、功能概述

2.1 波形产生单元

调制信号选择功能:两个通道, channel_1 和 channel_2,通过寄存器配置可选择通道输入为恒 0、恒1、 TIM3 的 OC1 通道、 TIM4 的 OC1 通道、 TIM16 的 OC1 通道、 TIM17 的 OC1 通道。

基带信号选择功能:被发送的红外信号对应源数据,可以通过寄存器配置选择源为 IRM_DR、 UART1_TX、UART2_TX、 LPUART1_TX。

调试方式:可选 FSK 或 ASK。

极性可选,输出可为正常或反相波形。

2.2 调制功能说明

2.21 FSK 调制

用不同的频率来表示不同的符号。本模块为二进制频移键控(2FSK)。信号可以看成是频载为 f1 和 f2的两个振幅键控信号的合成。该功能模式下,调制信号源为频率为 f1、 f2 的两个方波:被调制信号为 0,则对应输出 f1;被调制信号为 1 则对应输出 f2。
波形如下:

“FSK
FSK 调制波形

2.22 ASK 调制

用不同的幅度来表示不同的符号。本模块为 OOK(On-Off Keying)调制,是 ASK 调制的一个特例,把一个幅度取为 0,另一个幅度为非 0,就是 OOK。又名 2ASK(二进制振幅键控)。该功能模式下,通道 1 信号源应为恒 0,通道 2 信号源应该频率为 f2 的方波:被调制信号为 0,则对应输出 0;被调制信号为 1 则对应输出 f2。
波形如下:

“ASK
ASK 调制波形

3、实验

本次实验使用MM32L0130片上IRM驱动红外发射管实现红外发码。硬件使用灵动股份设计的EVB-L0136开发板,红外模块原理图如下:

“使用MM32L0130

原理图中PA9连接D1(红外发射管)、PA10连接D2(红外接收头),红外发射电路使用T1(N-MOS管)控制红外发射管的导通或截至,在导通的时候,红外发射管会发射出红外光,反之,不会发射出红外光。要使两者通信成功,收/发红外波长与载波频率需一致,在这里波长就是940nm,载波频率就是38KHz。当红外接收头接收到红外载波信号时,其OUT引脚输出低电平,反之,OUT引脚输出高电平。

3.1 实验1:实现数据FSK调制

程序中配置PA9作为IRM红外调制器的发送引脚,配置调制信号通道1选择TIM3_OC1,调制信号通道2选择TIM4_OC1,基带信号源选择UART1_TX信号,调制方式选择FSK调制,以实现红外发码。主要代码如下:

3.11 IRM配置

void IRM_FSK_Config(void)
{
    IRM_InitTypeDef IRM_InitStruct;

    RCC_APB1PeriphClockCmd(RCC_APB1ENR_IRM, ENABLE);
    IRM_FSK_Clock_Init(TIM3, TIM4);
    IRM_StructInit(&IRM_InitStruct);
    IRM_SetIRMData(0);
    IRM_InitStruct.IRM_Polarity = IRM_Polarity_Normal;
    IRM_InitStruct.IRM_Modulation = IRM_Modulation_FSK;
    IRM_InitStruct.IRM_DataSelectSource = IRM_DataSource_UART1_TX;
    IRM_InitStruct.IRM_Channel1ClockSource = IRM_Channel1ClockSource_TIM3OC1;
    IRM_InitStruct.IRM_Channel2ClockSource = IRM_Channel2ClockSource_TIM4OC1;

    IRM_Init(&IRM_InitStruct);
    UART1_NVIC_Init(600);

    IRM_StartCmd(ENABLE);
}

3.12 调制信号配置

配置TIM3输出PWM,频率为38KHZ(和载波频率一致),占空比为1/2

配置TIM4输出PWM,频率为3.8KHZ(一个非载波频率),占空比为1/2

void IRM_FSK_Clock_Init(TIM_TypeDef* chan1_tim, TIM_TypeDef* chan2_tim)
{
    u32 ui_tim_value;

    ui_tim_value = (u32)((RCC_GetSysClockFreq()) / IRM_FREQUENCE);

    TIM_Init(chan1_tim, (ui_tim_value) - 1, 0);
    TIM_Init(chan2_tim, (ui_tim_value) * 10 - 1, 0);

}

定义IRM_FREQUENCE为38000

#define IRM_FREQUENCE                   38000

3.13 配置UART1 RX中断

void UART1_NVIC_Init(u32 baudrate)
{
    UART_InitTypeDef UART_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;

    RCC_UART_ClockCmd(UART1, ENABLE);

    NVIC_InitStruct.NVIC_IRQChannel = UART1_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPriority = 3;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);

    UART_StructInit(&UART_InitStruct);
    UART_InitStruct.BaudRate = baudrate;
    UART_InitStruct.WordLength = UART_WordLength_8b;
    UART_InitStruct.StopBits = UART_StopBits_1;
    UART_InitStruct.Parity = UART_Parity_No;
    UART_InitStruct.HWFlowControl = UART_HWFlowControl_None;
    UART_InitStruct.Mode = UART_Mode_Rx | UART_Mode_Tx;

    UART_Init(UART1, &UART_InitStruct);
    UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);
    UART_Cmd(UART1, ENABLE);

    UART1RX_GPIO_Init();
}

3.14 IRM收发测试

void IRM_Transmit_Test(void)
{

    u16 i, getcount;
    u8 irm_string[] = {0xFF, 0xFF, 0x55, 0xAA, 0xF0, 0x0F, 0x80, 0x01};
    u8 getbyte;
    IRM_Initialize();
    while(1) {
        getcount = 0;
        for(i = 0; i < sizeof(irm_string); i++) {
            Output_Byte(UART1, irm_string[i]);
            if(SUCCESS == UART1_CheckRxdByte(&getbyte, 10000)) {
                if(getbyte == irm_string[i]) {
                    getcount++;
                }
            }
            delay_x_cycle(1000);
        }
        if(getcount == sizeof(irm_string)) {
            __NOP();
        }
        else {
            __NOP();
        }
    }
}

定义数组irm_string[]存放需要IRM调制的数据,IRM对数据进行FSK调制后,通过IRM_TX引脚发送,控制MOS管驱动红外发射管以发射红外光,红外接收头对红外光进行解码后,由UART1_RX引脚接收,将收到的数据与数组irm_string[]中的数据进行比对,看收/发数据是否一致,并进行统计。

FSK模式下,调制信号源为频率为38K、3.8K的两个方波:被调制信号为0时,则对应输出38KHZ;被调制信号为1时,则对应输出3.8KHZ,逻辑分析仪获取一段数据如下:

“使用MM32L0130

通道4为IRM_TX发出的调制信号。

通道5是UART1_RX接收到的数据,符合红外接收头特性。

观察串口调试助手打印数据,和irm_string[]中的数据一致。

“使用MM32L0130

3.2 实验2:实现数据ASK调制

程序中配置PA9作为IRM红外调制器的发送引脚,配置调制信号通道1为恒1,调制信号通道2选择TIM4_OC1,基带信号源选择UART1_TX信号,调制方式选择ASK调制,以实现红外发码。

该实验与前面实验1相比,只是选择IRM的另一种调制模式,代码只需在实验1的基础上改动即可,主要代码如下:

3.21 IRM配置

void IRM_ASK_Config(void)
{
    IRM_InitTypeDef IRM_InitStruct;

    RCC_APB1PeriphClockCmd(RCC_APB1ENR_IRM, ENABLE);
    IRM_ASK_Clock_Init(TIM4);
    IRM_StructInit(&IRM_InitStruct);
    IRM_SetIRMData(0);
    IRM_InitStruct.IRM_Polarity = IRM_Polarity_Normal;
    IRM_InitStruct.IRM_Modulation = IRM_Modulation_ASK_PSK;
    IRM_InitStruct.IRM_DataSelectSource = IRM_DataSource_UART1_TX;
    IRM_InitStruct.IRM_Channel1ClockSource = IRM_Channel1ClockSource_KeepHigh;              
    IRM_InitStruct.IRM_Channel2ClockSource = IRM_Channel2ClockSource_TIM4OC1;

    IRM_Init(&IRM_InitStruct);
    UART1_NVIC_Init(600);

    IRM_StartCmd(ENABLE);
}

3.22 调制信号配置

配置TIM4输出PWM,频率为38KHZ(和载波频率一致),占空比为1/2

void IRM_FSK_Clock_Init(TIM_TypeDef* chan1_tim, TIM_TypeDef* chan2_tim)
{
    u32 ui_tim_value;
    ui_tim_value = (u32)((RCC_GetSysClockFreq()) / IRM_FREQUENCE);
    TIM_Init(chan1_tim, (ui_tim_value) - 1, 0);
}

定义IRM_FREQUENCE为38000

#define IRM_FREQUENCE                   38000 

其余代码同实验1,下载运行。

ASK模式下,被调制信号为1时,则对应输出38KHZ;被调制信号为0时,则对应输出0,截取逻辑分析仪的一段数据分析:

“使用MM32L0130

通道4为IRM_TX发出的调制信号。

通道5是UART1_RX接收到的数据,符合红外接收头特性。

观察串口调试助手打印数据,和irm_string[]中的数据一致。

“使用MM32L0130

实验简单演示了使用MM32L0130片上IRM模块实现红外发码,并判断收发数据的一致性。IRM模块使用片上的定时器和串口,实现数据的 FSK/ASK 调制,满足红外发码的需求。

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

围观 70

MM32F5270 系列控制器支持 I2S 总线接口,本章节在接下来会对 MM32F5270 I2S进行介绍,并使用 MM32F5270 和 CS4344 芯片进行 I2S 通信来演示播放一段声音。

I2S 简介

I2S ( Inter—IC Sound ) 总线是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。在飞利浦公司的 I2S 标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。

在 MM32F5270 中,SPI 与 I2S 共用引脚。在 I2S 的描述中,支持半双工通信,也支持全双工模式。I2S 与 SPI 区别在于,I2S 主模式的控制逻辑使用独立的时钟分频处理单元。在半双工模式下,可使用 MCK 引脚输出驱动时钟,用于驱动外部音频组件。在全双工模式下,为了能同时进行数据的收发,MCK 驱动时钟只能从专用的 MCK 功能引脚输出。I2S 的功能框图如图 1 所示,包括时钟单元,寄存器控制单元,主从模式控制单元等。

“图1.
图1. I2S 功能框图

MM32F5270 中 I2S 主要特征

● 支持半双工通信(仅发射机或接收机)和全双工通信(SD,extSD 的数据方向根据主/从模式配置决定)两种通信方式

● 9 位可编程线性预分频器,以达到精确的音频采样频率( 8KHz 到 192KHz)

● 数据帧格式可以是 16 位、 24 位或 32 位

● 数据包帧固定为 16 位(16 位有效数据)或 32 位(16 位、 24 位、 32 位有效数据)

● 可编程时钟极性(稳定状态)

● 发射模式下的下溢标志(仅从机),接收模式下的上溢标志(主和从机)和接收/发射模式下的帧错误标志(仅从机)

● 用于传输和接收的 32 位寄存器为两个声道分时复用

● 支持 I2S 协议

▶ 飞利浦标准

▶ MSB 对齐标准(左对齐)

▶ LSB 对齐标准(右对齐)

▶ PCM 标准(在 16 位信道帧上具有短帧和长帧同步或扩展到 32 位信道帧的 16 位数据帧)

● 数据方向始终是 MSB 优先

● DMA 传输能力

● 可配置输出 MCLK 来驱动外部音频组件,比率固定在 256× FS(其中 FS 为音频采样频率)

I2S 信号接口

I2S 和 SPI 共用三个公共管脚:

● 串行时钟 CK

映射在 SCK 引脚上,也叫位时钟 BCLK,是主模式下的串行时钟输出以及从机模式下的串行时钟输入。SCLK 频率 = 2 x 采样频率 x 采样位数

● 帧时钟 WS

映射在 NSS 引脚上,是主模式下的串行时钟输出以及从机模式下的串行时钟输入。用于切换左右声道,LRCK 频率 = 采样频率

● 串行数据 SD

映射在 MOSI 管脚上,二进制补码表示的音频数据,用于发送或接收两次多路数据通道(仅在半双工模式下)。

● 当某些外部设备需要主时钟输入时,可以使用一个附加的管脚输出时钟到音频设备

● 主时钟 MCLK

映射在 MISO 引脚或专用 MCK 引脚上,当 I2S 配置为主模式时使用此时钟。MCLK 频率 = 256 x 采样频率 Fs

● I2S 引脚信号如图 2 所示。

“图2.
图2. I2S 引脚信号

数据格式

三线总线处理音频数据,必须经过分时复用两个声道:右声道和左声道。因为只有一个 32 位寄存器用于传输或接收,所以软件应依次配置寄存器 TXREG 为各声道的数据,或依次读取寄存器 RXREG 为各声道的数据。按照 I2S 协议,总是先发送左声道,然后发送右声道。

数据格式可以采用以下格式进行发送:

● 16 位数据打包在 16 位帧中

● 16 位数据打包在 32 位帧中

● 24 位数据打包在 32 位帧中

● 32 位数据打包在 32 位帧中

当使用 32 位帧上发送 16 位数据时,前 16 位(MSB)是有效的位,16 位 LSB 制为 0,无需任何软件操作,通过硬件实现,其他格式相似。

通信标准

I2S 接口支持四种音频标准,通过配置寄存器 SPI_I2S_I2SCFGR 中的 I2SSTD[1:0]、PCMSYNC 位进行切换;数据格式则通过配置 DATLEN[1:0]、CHLEN 来进行选择。对于所有通信标准及数据格式,总是先发送最高位(MSB 优先)。

● 飞利浦标准

对于飞利浦标准,WS 信号用于指示正在传输的声道。发射器在 CK 的下降沿锁存数据,接收器并在 CK 的上升读取数据。WS 信号也在 CK 的下降沿被锁定。对于这种标准 I2S 格式的信号,无论有多少位有效数据,数据的最高位总是出现在 WS 变化(也就是一帧开始)后的第 2 个 CK 脉冲处,如图 3 所示。

“图3.
图3. 飞利浦标准示意图

● MSB 对齐标准

对于 MSB 对齐标准,第一个数据在 WS 变化后的第一个沿有效,如图 4 所示。

“图4.
图4. MSB 对齐标准示意图

● LSB 对齐标准

对于 LSB 对齐标准,每个数据包帧的最低有效位总(LSB 位)是出现在 WS 变化前的 1 个 CK 脉冲周期处,如图 5 所示。

“图5.
图5. LSB 对齐标准示意图

● PCM 标准

对于 PCM 标准,不需要使用声道信息。PCM 有两个模式:短帧模式和长帧模式,通过配置SPI\_I2S\_I2SCFGR 寄存器的 PCMSYNC 位进行切换。在 PCM 模式下,输出信号(WS, SD)在 CK 信号的上升沿进行采样。输入信号(WS, SD)在 CK 下降沿被捕获。注意在主模式下, CK 和 WS 被配置为输出,如图 6 所示。

“图6.
图6. PCM 对齐标准示意图

I2S 配置

I2S 的配置主要包括主从模式选择,时钟极性,全双工半双工模式选择,采样频率和通信标准的配置,从而进行数据传输。

主模式

I2S 功能的主模式下,选择全双工工作时,SD 引脚作为主机发送接口,extSD 作为主机接收接口,SCK 和 WS作为主机的输出信号,同时 MCK 向外部提供可选的驱动时钟(配置 SPI_I2S_I2SCFGR.MCKOE 位为 ‘1’ 使能 MCK 输出),如图 7 所示。

“图7.
图7. I2S 主模式全双工通信

基于 MM32F5270 的声音播放实验

CS4344 芯片是实现本次实验功能的重要器件之一。CS4344 是一种立体声音频数模转换器 (DAC) ,可使用单个 +3.3 V 或 +5 V 电源,仅需要最小的支持电路。该系列线性模拟低通滤波器和自动速度模式检测,当自动选择 2 kHz 和 200 kHz 之间的采样率,使用采样率和主时钟速率方法。

本实验的基本原理是 MM32F3270 读取正弦波采样计算出的左右声道的数组数据,通过 I2S 接口将 PCM 信号传输给 CS4344,再经过 TS4871(音频功率放大器)连接到耳机接口,可以接入耳机等音频播放装置。

硬件设计

如图 8-9 是 PLUS-F5270 的 I2S 电路部分,完整原理图可以通过官网下载。其中,引脚信号对应分别为:

▶ I2S2_SD 对应于引脚 E6

▶ I2S2_CK 对应于引脚 D3

▶ I2S2_WS 对应于引脚 E4

▶ I2S2_MCK 对应于引脚 E5

“图8.
图8. I2S 电路图(1)

“图9.
图9. I2S 电路图(2)

GPIO 初始化 BOARD_InitPins()

配置 I2S 引脚,I2S_CK 为 PD3 引脚,I2S_SD 为 PE6 引脚,I2S_WS 为 PE4 引脚,I2S_MCK 为 PE5 引脚,复用通道为 AF5 。

void BOARD_InitPins(void)
{
    /* PB7 - UART1_TX. */
    GPIO_Init_Type gpio_init;
    gpio_init.Pins  = GPIO_PIN_6;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_AF_PushPull
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &gpio_init);
    GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);

    /* PB6 - UART1_RX. */
    gpio_init.Pins  = GPIO_PIN_7;
    gpio_init.PinMode  = GPIO_PinMode_In_Floating; //GPIO_PinMode_In_Floating
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &gpio_init);
    GPIO_PinAFConf(GPIOB, gpio_init.Pins, GPIO_AF_7);

    /* PD3 - I2S_CK. */
    gpio_init.Pins  = GPIO_PIN_3;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_In_PushPull
    gpio_init.Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOD, &gpio_init);
    GPIO_PinAFConf(GPIOD, gpio_init.Pins, GPIO_AF_5);

    /* PE6 - I2S_SD. */
    gpio_init.Pins  = GPIO_PIN_6;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_In_PushPull
    gpio_init.Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOE, &gpio_init);
    GPIO_PinAFConf(GPIOE, gpio_init.Pins, GPIO_AF_5);

    /* PE4 - I2S_WS. */
    gpio_init.Pins  = GPIO_PIN_4;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_In_PushPull
    gpio_init.Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOE, &gpio_init);
    GPIO_PinAFConf(GPIOE, gpio_init.Pins, GPIO_AF_5);

    /* PE5 - I2S_MCK. */
    gpio_init.Pins  = GPIO_PIN_5;
    gpio_init.PinMode  = GPIO_PinMode_AF_PushPull; //GPIO_PinMode_In_PushPull
    gpio_init.Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOE, &gpio_init);
    GPIO_PinAFConf(GPIOE, gpio_init.Pins, GPIO_AF_5);
}

I2S 配置初始化 app_i2s_master_init()

初始化 I2S,配置时钟频率、采样率、数据长度、通信协议、传输模式及是否使能 MCLK 。

void app_i2s_master_init(void)
{
    /* setup I2S master module. */
    I2S_Master_Init_Type i2s_master_init;

    i2s_master_init.ClockFreqHz  = BOARD_I2S_FREQ;
    i2s_master_init.SampleRate   = BOARD_I2S_SAMPLE_RATE;
    i2s_master_init.DataWidth    = BOARD_I2S_DATA_WIDTH;
    i2s_master_init.Protocol     = BOARD_I2S_PROTOCOL;
    i2s_master_init.EnableMCLK   = true;
    i2s_master_init.Polarity     = BOARD_I2S_CPOL;
    i2s_master_init.XferMode     = I2S_XferMode_TxOnly;

    I2S_InitMaster(BOARD_I2S_PORT, &i2s_master_init);

    /* enable I2S. */
    I2S_Enable(BOARD_I2S_PORT, true);
}

● Protocol

通信标准格式选择,可选 I2S Philips 标准、左对齐标准、右对齐标准、 PCM 短帧标准或 PCM 长帧标准,它设定 SPI\_I2S\_I2SCFGR 寄存器 I2SSTD位和 PCMSYNC位的值。一般设置为 I2S Philips 标准即可。

● DataWidth

数据格式选择,设定有效数据长度和帧长度,可选标准 16bit 格式、扩展 16bit( 32bit 帧长度) 格式、 24bit 格式和 32bit 格式,它设定 SPI\_I2SCFGR 寄存器 DATLEN 位和CHLEN 位的值。对应 16bit 数据长度可选 16bit 或 32bit 帧长度,其他都是 32bit 帧长度。

● EnableMCLK

主时钟输出使能控制,可选使能输出或禁止输出,它设定 SPI_I2SPR 寄存器 MCKOE 位的值。为提高系统性能一般使能主时钟输出。

● SampleRate

采样频率设置,标准库提供采样采样频率选择,分别为 4KHz、8kHz、 11kHz、12KHz、16kHz、22kHz、32kHz、44kHz、48kHz、96kHz、192kHz 以及默认 2Hz,它设定 SPI\_I2S\_SPBRG 寄存器的值。

● Polarity

空闲状态的 CK 线电平,可选高电平或低电平,它设定 SPI\_I2S\_CCTL 寄存器 CPOL位的值。一般设置为低电平即可。

左右声道数据

采样函数 f (t) = A *sin( B*t ) , t 为采样时间,单位: s。采样位宽为 16bit,采样频率为 8 khz,系数 A 为10000,B 为2000π。

/* i2s left channel xfer data. */
const int16_t sound_buf_left[SOUND_BUF_SIZE] =
{
    0, 3535, 5000, 3535, 0, -3535, -5000, -3535,
    0, 3535, 5000, 3535, 0, -3535, -5000, -3535,
};

/* i2s right channel xfer data. */
const int16_t sound_buf_right[SOUND_BUF_SIZE] =
{
    0,  3827,  7071,  9238,  10000,  9238,  7071,  3827,
    0, -3827, -7071, -9238, -10000, -9238, -7071, -3827
};

左右声道数据传输

/* put data into left channel. */
void app_i2s_put_data_left(void)
{
    I2S_PutData(BOARD_I2S_PORT, (uint32_t)sound_buf_left[sound_buf_index_left]);
    sound_buf_index_left++;
    if (sound_buf_index_left >= SOUND_BUF_SIZE)
    {
        sound_buf_index_left = 0;
    }
}

/* put data into right channel. */
void app_i2s_put_data_right(void)
{
    I2S_PutData(BOARD_I2S_PORT, (uint32_t)sound_buf_right[sound_buf_index_right]);
    sound_buf_index_right++;
    if (sound_buf_index_right >= SOUND_BUF_SIZE)
    {
        sound_buf_index_right = 0;
    }
}

main() 函数

main() 函数结合上述操作,串口打印 "i2s_master_basic" ,初始化 I2S 后,将发送数组数据到左右声道缓冲区,进行声音播放。

int main(void)
{
    BOARD_Init();

    printf("i2s_master_basic.\r\n");

    app_i2s_master_init();

    while (1)
    {
        while(0u != (I2S_GetStatus(BOARD_I2S_PORT) & SPI_I2S_CSTAT_TXFULL_MASK) )
        {}

        app_i2s_put_data_left(); /* sending left channel data. */

        while(0u != (I2S_GetStatus(BOARD_I2S_PORT) & SPI_I2S_CSTAT_TXFULL_MASK) )
        {}
        app_i2s_put_data_right(); /* sending right channel data. */
    }
}

实验演示

本实验以搭载 MM32F5277E9PV 的 PLUS-F5270 开发板为平台,其扬声器将会播放左声道数据,演示视频如下:

演示1. 播放左声道数据

“

音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,例如数字音频录音带、数字声音处理器。对于设备和生产厂家来说,标准化的信息传输结构可以提高系统的适应性。

本文介绍了 MM32F5270 中通过 I2S 和 CS4344 芯片进行通信来演示播放一段声音,后续将进行 MP3 的播放,未完待续!

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

围观 392

本文将介绍在使用 MM32F0140 系列 MCU 实现 UDS Bootloader 过程中涉及到的 FlexCAN、UDS 和 Bootloader 等相关基本概念。

MM32F0140 简介

MM32F0140 使用高性能的 Arm® Cortex-M0 内核的 32 位微控制器,最高工作频率可达 72MHz,内置 64KB Flash 和 8KB SRAM,有丰富的增强型 I/O 端口和包括 FlexCAN 在内等多种外设,适用于汽车诊断仪,后装汽车协控制器和消防监控等多种应用场合。

“图
图 1 MM32F1040 简介

什么是 FlexCAN?

CAN 是控制器域网 (Controller Area Network, CAN) 的简称,是一种功能丰富的车用总线标准,被设计用于在不需要主机(Host)的情况下,允许网络上的单芯片和仪器相互通信。是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发了,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。FlexCAN 是 CAN 协议的一个高完成度版本。

MM32F0140 系列 MCU 内嵌的 FlexCAN,符合 ISO 11898-1 标准,支持 CAN 2.0B 版本协议,位速率高达 1 Mbps,具有非常灵活的用于传输和接收的邮箱系统,可以接收和发送 11 位标识符的标准帧,也可以接收和发送 29 位标识符的扩展帧,主要被设计用作车载串行总线,可满足实时处理、车辆在电磁干扰环境下的可靠操作、成本效益、带宽等要求。

什么是 UDS?

UDS(Unified Diagnostic Services,统一诊断服务)是一种用于汽车电子控制器 ECU (Electronic Control Units) 环境下的一种诊断通信协议,可实现诊断、固件更新、日常测试等功能,在 ISO 14229 中规定了其实现标准。

在本实例中,UDS 通信是在客户端-服务端关系中执行的。客户端是上位机下载软件运行于 PC 机,服务端是 MM32F0140 系列 MCU。例如,将 CAN 总线接口连接到 MCU,并将 UDS 请求发送到 MCU。当 MCU 支持 UDS 服务时,它将根据客户端发出的请求做出相应的响应。

为什么用 Bootloader?

对于 ECU 而言,如果程序内置有基于FlexCAN Bootloader,则每次更新 ECU 的固件可不必再使用烧录器进行烧录,而可直接通过 CAN 总线来更新程序,而且随着汽车智能化的普及,甚至可以对 ECU 进行远程升级。有无 Bootloader 功能程序结构对比如图 2 所示:

“图
图 2 程序结构对比框图

为什么要基于 UDS?

为了规范 Bootloader 的全过程。因 UDS 在设计时考虑了 Bootloader 的需求,并为 Bootloader 提供了相关服务以供使用,故主机厂普遍会要求在 UDS 规范的基础上完成 Bootloader 功能。

使用到哪些 UDS 服务?

● 在 Bootloader 中,使用到 UDS 的 $10、$11、$27 和 $3E 基础诊断服务,$22、$2E 读写 DID 服务,$31、$34、$36 和 $37 固件数据传输相关服务。

● 在 APP 中,使用到 UDS 的 $85 和 $28 服务,保证暂停 CAN 正常通信,暂停记录 DTC,让被升级设备升级。

UDS 提供的服务概览如图 3 所示:

“图
图 3 UDS 服务概览

CAN、UDS 和 OSI 模型之间的关系

为了更好的理解 UDS, 让我们了解一下 CAN 总线、UDS 和 OSI 模型之间的关系。

CAN 对应于 OSI 模型中的数据链路层和物理层描述(根据 ISO 11898)。

与 CAN 相比, UDS (ISO 14229) 是一种 “更高层协议”, 在 OSI 模型中使用到会话层和应用层,如下图 4 所示:

“图
图 4 UDS 与 OSI 模型对应图

UDS 的消息结构

PDU

Network_Protocol Data Unit, 网络层协议数据单元

PDU 是用于建立对等实体间的通信,是一组信息和数据的集合,表示了发送发和接收方对等实体之间传递的信息和数据。由地址信息(CAN ID)、协议控制信息(PCI) 和数据构成。

图 5 为 UDS 消息结构示意图,图 6 为 UDS 消极响应示意图。

“图
图 5 UDS 消息结构

“图
图 6 UDS 消极响应示意

PCI

Protocol Control Information,协议控制信息

PCI 字段本身与 UDS 请求本身没有关系,但是对于在 CAN 总线上发出的诊断 UDS 请求是必需的。PCI 字段可以长达 1 ~ 3 字节,并且包含与传输不适合单个 CAN 帧的消息有关的信息。

SID

Service ID,服务标识符

当希望使用特定的 UDS 服务时,UDS 请求消息应该在数据有效负载中包含 UDS 服务标识符 (SID)。标识符分为请求 SID 和响应 SID。

SFB

Sub Function Byte,子函数字节

在一些 UDS 请求帧中使用,在一些 UDS 服务中,如 0x22,子函数字节没有使用。一般来说,当一个请求被发送到 ECU 时,ECU 可以做出正向或负向的响应。在响应为正向的情况下,测试人员可能想要抑制响应(因为它可能是不相关的)。这是通过在子函数字节中将第 1 位设置为 1 来完成的。负向的反应是无法被抑制的。剩下的7位可以用来定义最多 128 个子函数值。例如,当通过 SID 0x19(读取诊断信息)读取 DTC 信息时,子函数字节可用于控制报告类型。

DID

Data Identifier,数据标识符

在大多数 UDS 请求服务中,各种类型的请求数据参数用于提供 SID 和可选子函数字节以外的请求进一步配置。

ISO-TP 标准

ECU 固件更新通常涉及大量有效载荷的通信,而 ISO-TP 标准(ISO 15765 )就是为了解决基于 CAN 的车辆诊断的大量有效载荷问题而提出。该标准指定了基于CAN 的车辆网络传输协议和网络层服务,最常见的用例就有 UDS (ISO 14229-1)。

ISO-TP 标准概述了如何通过分段、流量控制和重组来传输高达 4096 字节的 CAN 数据有效载荷。ISO-TP 定义了用于通信的 CAN 帧,如下图 7 所示。

“图
图 7 ISO-TP 帧类型

通过使用 ISO-TP 标准将 UDS 的消息结构 PDU 分为了四种类型:

SF (Single Frame, 单帧)

描述单帧传输。

FF (First Frame, 首帧)

描述多帧传输的起始。

CF (Consecutive Frame,连续帧)

用于在多帧传输中传输数据。

FC (Flow Control Frame,流控帧)

用于在多帧传输过程中,对报文流控制。

UDS 的单帧通信和多帧通信:

单帧通信如图 8 所示:

“图
图 8 单帧通信

多帧通信过程如图 9 所示:

“图
图 9 多帧通信

基于 UDS Bootloader 实现更新 APP 流程框图

MM32F0140 系列 MCU 使用 FlexCAN 实现基于 UDS Bootloader 更新 APP 的流程框图如10所示:

“图10
图10 更新 APP 流程

结语

本文以 MM32F0140 系列 MCU 的 FlexCAN 为例,简要介绍了在使用 MM32F0140 系列 MCU 实现 UDS Bootloader 过程中涉及到的 FlexCAN、UDS 和 Bootloader 等相关基本概念,并介绍了 UDS 的消息结构和 ISO-TP 标准,以及展示了 MM32F0140 系列 MCU 使用 FlexCAN 实现 UDS Bootloader 更新 APP 的流程框图。

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

围观 596

今年七月份以来,全国大范围持续高温,多地突破7月历史极值,最高温度在40度以上。灵动微夏日送清凉,推出升级版家用空调内风机方案。相比上一代方案,硬件平台和软件平台同步升级。

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

围观 27

随着科技的发展,越来越多的领域需要用到双电机,然而,在市场上为双电机设计的控制芯片大多为M4内核,成本为比较高,得益于灵动微电子为电机控制设计的SPIN0280的超高性能,我们可以用M0内核来实现双电机的控制。

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

围观 57

页面

订阅 RSS - 灵动微电子