LD3320 Board

来自Waveshare Wiki
Eng50讨论 | 贡献2022年8月11日 (四) 17:02的版本 (文本替换 - 替换“<h1>售后</h1>”为“<h1>技术支持</h1>”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
{{{name2}}}
{{{name3}}}
功能简介
特性 LD3320 语音识别
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 SPI

说明

产品简介

提供树莓派、STM32、Arduino例程

产品参数

  • 内置单声道mono 16-bit A/D 模数转换
  • 内置双声道stereo 16-bit D/A 数模转换
  • 内置 20mW 双声道耳机放大器输出
  • 内置 550mW 单声道扬声器放大器输出
  • 支持并行接口或者 SPI 接口
  • 内置锁相电路 PLL,输入主控时钟频率为 2MHz - 34MHz
  • 工作电压:(VDD: for internal core) 3.3V
  • 48pin 的 QFN 7*7 标准封装
  • 省电模式耗电:1uA

功能引脚

功能引脚 描述
3.3V 3.3V电源正
GND 电源地
MISO SPI数据输出
MOSI SPI数据输入
SCK SPI时钟输入
NSS 片选,低电平有效
NC 悬空
RST 复位
WR 写允许,低电平有效
IRQ 中断输出,输出下降沿

主要特色功能

LD3320 是一颗基于非特定人语音识别(SI-ASR:Speaker-Independent Automatic Speech Recognition)技术的语音识别/声控芯片。提供了真正的单芯片语音识别解决方案。LD3320 芯片上集成了高精度的 A/D 和 D/A 接口,不再需要外接辅助的 Flash 和 RAM,即可以实现语音识别/声控/人机对话功能。并且,识别的关键词语列表是可以动态编辑的。基于 LD3320,可以在任何的电子产品中,甚至包括最简单的 51 作为主控芯片的系统中,轻松实现语音识别/声控/人机对话功能。为所有的电子产品增加 VUI(Voice User Interface)语音用户操作界面。

  • 高准确度和实用的语音识别效果。
  • 非特定人语音识别技术:不需要用户进行录音训练。
  • 真正单芯片解决方案:不需要任何外接的辅助 Flash 和 RAM,真正降低系统成本。
  • 内置高精度 A/D和D/A通道:不需要外接 AD 芯片,只需要把麦克风接在芯片的AD 引脚上;可以播放声音文件,并提供 550mW 的内置放大器。
  • 支持用户自由编辑 50 条关键词语条:在同一时刻,最多在 50 条关键词语中进行识别,终端用户可以根据场景需要,随时编辑和更新这 50 条关键词语的内容。
  • 可动态编辑的识别关键词语列表:只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效。比如,用户在 51 等 MCU 的编程中,简单地通过设置芯片的寄存器,把诸如“你好”这样的识别关键词的内容动态地传入芯片中,芯片就可以识别这样设定的关键词语了。

通信协议

读数据:
Read LD3320 SPI.png
写数据:
Write LD3320 SPI.png
SCS为从机片选, 仅当SCS为低电平时,芯片才会被使能。
SDI主设备数据输出,从设备数据输入(本模块为从设备)。
SDO为主设备数据输入,从设备数据输出(本模块为从设备)。
SDCK为SPI通信时钟。
对于SPI通信而言,数据是有传输时序的,即数据的捕获需要时钟信号的某个边沿触发,而这个边沿就是由时钟极性(CPOL)与时钟相位(CPHA)的组合决定的:
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平;CPOL = 1,为高电平。
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHA = 0,在第一个跳变沿进行数据采集;CPHA = 1,在第二个跳变沿进行数据采集。
从图中可以看出本模块的SPI传输规则:SDCK空闲时是高电平在第一个边沿时开始传输数据,即传输模式为模式二(0x10);8bit数据;按位传输,高位在前(MSB);另外,本模块的SPI速度建议小于1.5MHz

补充说明

  • 如果播放音频有卡顿感,请尝试降低音频文件的比特率(建议:C语言版本不高于32k,python不高于16k)
  • 本模块没有喇叭,使用播放功能需要外接耳机或音响
  • 音频转hex方法:请见资料页-软件-音频转数组工具
  • 模块的两路3.3V和GND推荐都接上
  • 各平台开发攻略请前往相应平台资料页查看,重点函数讲解请前往资料页用户手册查看

RPI使用教程

提供BCM2835、WiringPi、文件IO、RPI(Python)库例程

硬件连接

连接树莓派的时候,选择用2*6PIN排线连接,请参考下方的引脚对应表格

树莓派连接引脚对应关系
LD3320 Raspberry Pi
BCM2835编码 Board物理引脚序号
3.3V 3.3V 3.3V
GND GND GND
MISO 9 MISO
MOSI 10 MOSI
SCK 11 SCLK
NSS 12 GPIO.26
RST 25 GPIO.6
WR 27 GPIO.2
IRQ 22 GPIO.3

开启SPI接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config
选择Interfacing Options -> SPI -> Yes 开启SPI接口

RPI open spi.png
然后重启树莓派:

sudo reboot

请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查

安装库

如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用

BCM2835

#打开树莓派终端,并运行以下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/

wiringPi

#打开树莓派终端,并运行以下指令
cd
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错

lgpio

#打开树莓派终端,并运行以下指令
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install

# 更多的可以参考官网:https://github.com/gpiozero/lg
  • 安装Python函数库
#python2
sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-pil
sudo apt-get install python-numpy
sudo pip install RPi.GPIO
sudo pip install spidev
#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

下载测试程序

打开树莓派终端,执行:

sudo apt-get install p7zip-full
sudo wget  http://www.waveshare.net/w/upload/c/cd/LD3320_RPi_code.7z  
7z x LD3320_RPi_code.7z -O./LD3320_RPi_code
cd LD3320_RPi_code/

运行测试程序

以下命令请在LD3320_RPi_code目录下执行,否则索引不到目录;

C语言

  • 重新编译,编译过程可能需要几秒
cd c
sudo make clean
sudo make -j 8

编译完成后生成了main文件,输入以下指令:

sudo ./main

本例程内置了四个关键词:闪烁,流水灯,按键,播放
模块上电工作会打印如下信息:
Start RPI LD3320.png

模块识别到正确的关键词串口会打印如下信息:
Successful RPI LD3320.png

模块识别失败会打印如下信息:
Unsuccessful RPI LD3320.png

解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册

Python

  • 进入python程序目录,并运行指令ls -l
cd python/
ls -l

可以查看到所有的Python源文件:
1 CODE RPI.png

  • 运行main.py,程序支持python2/3
# python2
sudo python main.py
# python3
sudo python3 main.py

本例程内置了四个关键词:闪烁,流水灯,按键,播放
模块上电工作会打印如下信息:
Start RPI LD3320 py.png

模块识别到正确的关键词串口会打印如下信息:
Successful RPI LD3320 py.png

模块识别失败会打印如下信息:
Unsuccessful RPI LD3320 py.png

解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册

开发攻略

C语言

如果需要添加识别关键词,只需要进行如下几个步骤:

  • LD3320_Driver.h文件中添加标识码

1 RPi C LD3320.png

  • LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。

2 RPi C LD3320.png

  • LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。

3 RPi C LD3320.png

  • LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:

4 RPi C LD3320.png

  • 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。

5 RPi C LD3320.png

  • 至此,语音识别功能已经开发完成,接下来是播放功能。注意:本模块的识别和播放功能不能同时进行。
  • 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。

7 RPi C LD3320.png

  • Raspberry Pi例程提供了直接打开mp3文件的方法,把想要播放的音频文件放在程序目录下,在LD3320_Demo.c文件的Board_text函数中添加好处理函数,并把路径参数传递给函数。

8 RPi C LD3320.png

  • 在播放处理函数中依次进行打开文件,计算文件长度,播放模式初始化,调节播放音量,开始播放。用户只需要修改LD_Adjust_Volume函数调节音量即可(音量范围为15-0)。
  • 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
  • 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。
  • 本例程提供三种库(BCM2835/WiringPi/文件IO)的实现方法,需要切换库只需要在Makefile中修改USELIB变量即可。

Python

Python使用方法和C语言一样,但修改时需要注意缩进和语法。

  • 在LD3320.py中添加标识码。

1 RPi Python LD3320.png

  • 在main.py中的主函数里增加相应标识码的语句提示分支。

2 RPi Python LD3320.png

  • 在main.py中的Board_text函数添加相应的动作处理分支,把print()替换成你想要执行的函数。

3 RPi Python LD3320.png

  • 在main.py文件中添加新的处理函数(放在主函数前),去执行你想要做的事,例如播放音乐:

4 RPi Python LD3320.png

  • 在LD3320.py文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,可以根据需求更改。

5 RPi Python LD3320.png

  • 至此,语音识别功能已经开发完成,接下来是播放功能。注意:本模块的识别和播放功能不能同时进行。
  • 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。

7 RPi Python LD3320.png

  • Raspberry Pi例程提供了直接打开mp3文件的方法,把想要播放的音频文件放在程序目录下,在main.py文件的Board_text函数中添加好处理函数,并把路径参数传递给函数。

8 RPi Python LD3320.png

  • 在播放处理函数中依次进行打开文件,计算文件长度,播放模式初始化,调节播放音量,开始播放。用户只需要修改LD_Adjust_Volume函数调节音量即可(音量范围为15-0)。
  • 修改完毕后保存退出,运行即可开始语音识别/播报之旅。
  • 本例程所有全局变量/函数都有说明,请打开LD3320.py和各文件查看。

STM32使用教程

提供基于STM32F103RBT6的例程

硬件连接

我们提供的例程是基于STM32F103RBT6的,提供的连接方式也是对应的STM32F103RBT6的引脚,如果需要移植程序,请按实际引脚连接

STM32F103RBT6连接引脚对应关系
LD3320 STM32
3.3V 3.3V
GND GND
MISO PA6
MOSI PA7
SCK PA5
NSS PA10
RST PA9
WR PA8
IRQ PB0

运行程序

例程是基于HAL库进行开发的。 下载程序,找到STM32程序文件目录。
1 CODE STM32 LD3320.png
使用Keil5打开LD3320 Board_code\STM32\LD3320_Demo\MDK-ARM目录下的LD3320_Demo.uvprojx,可看到程序,重新编译下载即可。
使用串口接收提示信息,上电会有RunASR表示语音识别准备好了,本例程预设了四个语音识别关键词:闪烁、流水灯、按键、播放,模块识别正确串口会有以下提示信息:
Successful LD3320 example.png

识别失败会有以下提示信息:
Unsuccessful LD3320 example.png

说出播放指令后:
Play LD3320 example.png

解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册

开发攻略

如果需要添加识别关键词,只需要进行如下几个步骤:

  • LD3320_Driver.h文件中添加标识码

1 STM32 LD3320.png

  • LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。

2 STM32 LD3320.png

  • LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。

3 STM32 LD3320.png

  • LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:

4 STM32 LD3320.png

  • 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。

5 STM32 LD3320.png

  • 至此,语音识别功能已经开发完成,接下来是播放功能,注意:本模块的识别和播放功能不能同时进行。
  • 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。

7 STM32 LD3320.png

  • STM32例程提供了从flash存取音频数据的方法,,在LD3320_Demo.c文件的Board_text函数中添加好处理函数

8 STM32 LD3320.png

  • 在播放处理函数中依次进行给文件长度赋值,播放模式初始化,调节播放音量,开始播放。用户只需要修改nMp3Size的值和LD_play的参数,可到mp3.h中查看定义,用户有需要可以自行增加数组,mp3转hex方法见文末。LD_Adjust_Volume函数调节音量(音量范围为15-0)。

9 STM32 LD3320.png

  • 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
  • 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。

Arduino使用教程

提供基于UNO PLUS的例程

硬件连接

我们提供的例程是基于UNO PLUS的,提供的连接方式也是对应的UNO PLUS的引脚,如果需要移植程序,请按实际引脚连接

Arduino UNO连接引脚对应关系
LD3320 UNO
3.3V 3.3V
GND GND
MISO D12
MOSI D11
SCK D13
NSS D10
RST D9
WR D8
IRQ D2

arduino IDE 安装教程

arduino IDE 安装教程

运行程序

下载程序,找到Arduino程序文件目录。
使用Arduino IDE打开LD3320_Board_code\Arduino\Demo目录下的Demo.ino,重新编译下载即可。
使用串口接收提示信息,上电会有RunASR表示语音识别准备好了,本例程预设了四个语音识别关键词:闪烁、流水灯、按键、播放,模块识别正确串口会有以下提示信息:
Successful Arduino LD3320 example.png

识别失败会有以下提示信息:
Unsuccessful Arduino LD3320 example.png

说出播放指令后:
Play Arduino LD3320 example.png

解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册

开发攻略

如果需要添加识别关键词,只需要进行如下几个步骤:

  • LD3320_Driver.h文件中添加标识码

1 Arduino LD3320.png

  • LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。

2 Arduino LD3320.png

  • LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。

3 Arduino LD3320.png

  • LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:

4 Arduino LD3320.png

  • 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。

5 Arduino LD3320.png

  • 至此,语音识别功能已经开发完成,接下来是播放功能,注意:本模块的识别和播放功能不能同时进行。
  • 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。

7 Arduino LD3320.png

  • Arduino例程提供了从flash存取音频数据的方法,在LD3320_Demo.c文件的Board_text函数中添加好处理函数

8 Arduino LD3320.png

  • 在播放处理函数中依次进行给文件长度赋值,播放模式初始化,调节播放音量,开始播放。用户只需要修改nMp3Size的值和LD_play的参数,可到mp3.h中查看定义,用户有需要可以自行增加数组,mp3转hex方法见文末。LD_Adjust_Volume函数调节音量(音量范围为15-0)。

9 Arduino LD3320.png

  • 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
  • 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。
  • 注意:Arduino的SARM比较小,较大的数组只能存储在flash中,其存储方式比较特殊,需要额外添加PROGMEM关键词

Ex.1 Arduino LD3320.png

  • 使用时需要使用函数取值

Ex.2 Arduino LD3320.png

FAQ


LD3320-------MCU

MISO<------> SPI的MISO

MOSI<------> SPI的MOSI

SCK <------> SPI的SCK

NSS <------> SPI的片选

RST <------> 接普通IO口

WR <------> 接普通IO口

IRQ <------> 接外部中断口

NC <------> 悬空

如果和测试程序使用相同型号的MCU(STM32F103ZET6),则可直接连接为:

MISO<------> PA6

MOSI<------> PA7

SCK <------> PA5

NSS <------> PA4

RST <------> PB15

WR <------> PB13

IRQ <------> PB12

NC <------> 悬空


  • WR共用SPI的的使能信号,可以直接接地







  • 在一个场景中,一次最多只能识别50条语句。在进入下一个场景后,可以装入新的50条语句。
  • 如果需求同时识别超过50条语句,那LD3320是无法实现的。




技术支持


联系人:林工
EMAIL:3005425717@qq.com
电话:0755-83043099
QQ:3005425717
微信:扫下方二维码添加
Lzr.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证