LD3320 Board
| ||||||||||||||||||||
| ||||||||||||||||||||
说明
产品简介
提供树莓派、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 的编程中,简单地通过设置芯片的寄存器,把诸如“你好”这样的识别关键词的内容动态地传入芯片中,芯片就可以识别这样设定的关键词语了。
通信协议
读数据:
写数据:
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接口
sudo reboot
请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查
安装库
如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可
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
本例程内置了四个关键词:闪烁,流水灯,按键,播放
模块上电工作会打印如下信息:
解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册
Python
- 进入python程序目录,并运行指令ls -l
cd python/ ls -l
- 运行main.py,程序支持python2/3
# python2 sudo python main.py # python3 sudo python3 main.py
本例程内置了四个关键词:闪烁,流水灯,按键,播放
模块上电工作会打印如下信息:
解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册
开发攻略
C语言
如果需要添加识别关键词,只需要进行如下几个步骤:
- LD3320_Driver.h文件中添加标识码
- LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。
- LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。
- LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:
- 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。
- 至此,语音识别功能已经开发完成,接下来是播放功能。注意:本模块的识别和播放功能不能同时进行。
- 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。
- Raspberry Pi例程提供了直接打开mp3文件的方法,把想要播放的音频文件放在程序目录下,在LD3320_Demo.c文件的Board_text函数中添加好处理函数,并把路径参数传递给函数。
- 在播放处理函数中依次进行打开文件,计算文件长度,播放模式初始化,调节播放音量,开始播放。用户只需要修改LD_Adjust_Volume函数调节音量即可(音量范围为15-0)。
- 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
- 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。
- 本例程提供三种库(BCM2835/WiringPi/文件IO)的实现方法,需要切换库只需要在Makefile中修改USELIB变量即可。
Python
Python使用方法和C语言一样,但修改时需要注意缩进和语法。
- 在LD3320.py中添加标识码。
- 在main.py中的主函数里增加相应标识码的语句提示分支。
- 在main.py中的Board_text函数添加相应的动作处理分支,把print()替换成你想要执行的函数。
- 在main.py文件中添加新的处理函数(放在主函数前),去执行你想要做的事,例如播放音乐:
- 在LD3320.py文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,可以根据需求更改。
- 至此,语音识别功能已经开发完成,接下来是播放功能。注意:本模块的识别和播放功能不能同时进行。
- 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。
- Raspberry Pi例程提供了直接打开mp3文件的方法,把想要播放的音频文件放在程序目录下,在main.py文件的Board_text函数中添加好处理函数,并把路径参数传递给函数。
- 在播放处理函数中依次进行打开文件,计算文件长度,播放模式初始化,调节播放音量,开始播放。用户只需要修改LD_Adjust_Volume函数调节音量即可(音量范围为15-0)。
- 修改完毕后保存退出,运行即可开始语音识别/播报之旅。
- 本例程所有全局变量/函数都有说明,请打开LD3320.py和各文件查看。
STM32使用教程
提供基于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程序文件目录。
使用Keil5打开LD3320 Board_code\STM32\LD3320_Demo\MDK-ARM目录下的LD3320_Demo.uvprojx,可看到程序,重新编译下载即可。
使用串口接收提示信息,上电会有RunASR表示语音识别准备好了,本例程预设了四个语音识别关键词:闪烁、流水灯、按键、播放,模块识别正确串口会有以下提示信息:
解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册
开发攻略
如果需要添加识别关键词,只需要进行如下几个步骤:
- LD3320_Driver.h文件中添加标识码
- LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。
- LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。
- LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:
- 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。
- 至此,语音识别功能已经开发完成,接下来是播放功能,注意:本模块的识别和播放功能不能同时进行。
- 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。
- STM32例程提供了从flash存取音频数据的方法,,在LD3320_Demo.c文件的Board_text函数中添加好处理函数
- 在播放处理函数中依次进行给文件长度赋值,播放模式初始化,调节播放音量,开始播放。用户只需要修改nMp3Size的值和LD_play的参数,可到mp3.h中查看定义,用户有需要可以自行增加数组,mp3转hex方法见文末。LD_Adjust_Volume函数调节音量(音量范围为15-0)。
- 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
- 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。
Arduino使用教程
提供基于UNO PLUS的例程
硬件连接
我们提供的例程是基于UNO PLUS的,提供的连接方式也是对应的UNO PLUS的引脚,如果需要移植程序,请按实际引脚连接
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程序文件目录。
使用Arduino IDE打开LD3320_Board_code\Arduino\Demo目录下的Demo.ino,重新编译下载即可。
使用串口接收提示信息,上电会有RunASR表示语音识别准备好了,本例程预设了四个语音识别关键词:闪烁、流水灯、按键、播放,模块识别正确串口会有以下提示信息:
解锁更多姿势请下拉查看开发攻略或查阅用户手册以及数据手册
开发攻略
如果需要添加识别关键词,只需要进行如下几个步骤:
- LD3320_Driver.h文件中添加标识码
- LD3320_Demo.c文件中的LD3320_test函数增加相应标识码的语句提示分支。
- LD3320_Demo.c文件中的Board_text函数添加相应的动作处理分支。
- LD3320_Demo.c文件中添加新的处理函数,去执行你想要做的事,例如流水灯:
- 在LD3320_Driver.c文件的LD_AsrAddKey函数中的两个数组添加关键词和标识码,sRecog是关键词使用的汉语拼音,pCode是第1步中添加的标识码。DATE_A是关键词数量,最多可以为50,DATE_B为关键词的长度,可以根据需求更改。
- 至此,语音识别功能已经开发完成,接下来是播放功能,注意:本模块的识别和播放功能不能同时进行。
- 播放功能可以由语音识别触发,首先是添加关键词,不太清楚可以再看一遍上面的内容,本例程中使用了关键词“播放”进入了播放处理函数中。
- Arduino例程提供了从flash存取音频数据的方法,在LD3320_Demo.c文件的Board_text函数中添加好处理函数
- 在播放处理函数中依次进行给文件长度赋值,播放模式初始化,调节播放音量,开始播放。用户只需要修改nMp3Size的值和LD_play的参数,可到mp3.h中查看定义,用户有需要可以自行增加数组,mp3转hex方法见文末。LD_Adjust_Volume函数调节音量(音量范围为15-0)。
- 修改完毕后保存退出,重新编译运行即可开始语音识别/播报之旅。
- 本例程所有全局变量/宏定义/函数都有说明,请打开LD3320_Driver.c和各文件查看。
- 注意:Arduino的SARM比较小,较大的数组只能存储在flash中,其存储方式比较特殊,需要额外添加PROGMEM关键词
- 使用时需要使用函数取值
资料
资料
提供文档、程序、数据手册等全套资料
文档
视频
程序
数据手册
软件
相关链接
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的的使能信号,可以直接接地
- 主要是做好错误吸收,增加垃圾垃圾关键词语,具体可查看:
LD3320芯片语音识别芯片LD3320高阶秘籍
- MP3格式,码率低于40kb
- 电容式,48~52db,9×7mm
- 在一个场景中,一次最多只能识别50条语句。在进入下一个场景后,可以装入新的50条语句。
- 如果需求同时识别超过50条语句,那LD3320是无法实现的。
- 不需要,CLK_IN是模块自带晶振,默认是22M