这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【MAX78000FEATHERBOARD】语音控制小台灯

共5条 1/1 1 跳转至

【MAX78000FEATHERBOARD】语音控制小台灯

工程师
2025-07-12 17:53:49     打赏

测评1: 【MAX78000FEATHERBOARD】开箱与Eclipse环境搭建 

测评2:【MAX78000FEATHERBOARD】TFT屏幕驱动

测评3: 【MAX78000FEATHERBOARD】语音关键词训练 

(1)项目介绍

项目的出发点是想体验一下MAX78000,尤其是如何训练一两个简单的关键词,达到简单的控制小台灯的效果。MAX78000板载了数字麦克风,测评2也扩展了屏幕,测评3对开关灯进行了训练。本次展示一下最终的项目原型:

image.png

(2)硬件介绍(包含方案核心器件介绍)

主控模块MAX78000FTHR# 是由 Analog Devices Inc./Maxim Integrated 推出的一款基于 MAX78000 微控制器的 Feather 兼容型评估板。该开发板融合了 低功耗 Arm® Cortex®-M4 处理器 与 CNN(卷积神经网络)加速器,为边缘 AI 和嵌入式视觉处理任务提供强大的支持,适合用于语音识别、人脸识别、物体检测等人工智能应用。

显示模块是分辨率240*320的电阻屏,SPI接口,ILI9341芯片。

控制LED灯管的是MOS开关,参数为:20A50A100A大功率MOS触发开关驱动模块 场效应管 PWM调节开关控制

此外,还有锂电池充电模块。

(3)整体设计思路/功能效果(包含功能框图、软件流程图、具体思路)

image.png

(4)关键代码介绍

在main.c中,添加训练的关键词:

/* Set of detected words */
const char keywords[NUM_OUTPUTS][10] = { "UP","GuanDeng","LEFT","RIGHT","STOP","KaiDeng",
"YES","NO","ON","OFF","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","ZERO","Unknown" };


初始化CNN网络:

int cnn_init(void)
{
  *((volatile uint32_t *) 0x50001000) = 0x00000000; // AON control
  *((volatile uint32_t *) 0x50100000) = 0x00100008; // Stop SM
  *((volatile uint32_t *) 0x50100004) = 0x0000040e; // SRAM control
  *((volatile uint32_t *) 0x50100008) = 0x00000009; // Layer count
  *((volatile uint32_t *) 0x50500000) = 0x00100008; // Stop SM
  *((volatile uint32_t *) 0x50500004) = 0x0000040e; // SRAM control
  *((volatile uint32_t *) 0x50500008) = 0x00000009; // Layer count
  *((volatile uint32_t *) 0x50900000) = 0x00100008; // Stop SM
  *((volatile uint32_t *) 0x50900004) = 0x0000040e; // SRAM control
  *((volatile uint32_t *) 0x50900008) = 0x00000009; // Layer count
  *((volatile uint32_t *) 0x50d00000) = 0x00100008; // Stop SM
  *((volatile uint32_t *) 0x50d00004) = 0x0000040e; // SRAM control
  *((volatile uint32_t *) 0x50d00008) = 0x00000009; // Layer count

  return CNN_OK;
}

之后加载训练完成后的网络权重:

    cnn_load_weights();
    /* Configure state machine */
    cnn_configure();

判断是否识别到“开灯”“关灯”

                /* Treat low confidence detections as unknown*/
                if (!ret || out_class == NUM_OUTPUTS - 1) {
                    PR_DEBUG("Detected word: %s", "Unknown");
                } else {
                    PR_DEBUG("MGC-Detected word: %s (%0.1f%%)", keywords[out_class], probability);

                    if(out_class == 5){
                        LED_On(LED1);
                        MXC_GPIO_OutClr(lamp_control_pin.port, lamp_control_pin.mask);
                    }

                    if(out_class == 1){
                    	LED_Off(LED1);
                    	MXC_GPIO_OutSet(lamp_control_pin.port, lamp_control_pin.mask);
                    }
#if 0
                    switch (out_class) {
                    case 8:
                        LED_On(LED1);
                        MXC_GPIO_OutClr(lamp_control_pin.port, lamp_control_pin.mask);

                        break;

                    case 9:
                    	LED_Off(LED1);
                    	MXC_GPIO_OutSet(lamp_control_pin.port, lamp_control_pin.mask);
                        break;

                    default:
                    	;
                        //printf("UNKNOWN CLOCK SOURCE \n");
                    }//end of Switch-Case
#endif
                }//end of else


(5)功能展示(包含成果视频,或GIF文件)

image.png

image.png

image.png

视频已经发布在b站: 终版-语音控制台灯  https://www.bilibili.com/video/BV12BMQzoEgc/?vd_source=06b417808f9325071f39e5fd55985221

(6)技术难点与解决方案/心得体会

数据的准备是稍微费时间的,这次完成制作是在官方的kws20项目基础上。如果从0开始,难度会比较大。后续会慢慢深入学习,理解AI边缘计算的更多知识。



专家
2025-07-13 07:56:47     打赏
2楼

谢谢分享


专家
2025-07-13 15:33:54     打赏
3楼

感谢分享


专家
2025-07-13 15:35:13     打赏
4楼

感谢分享


院士
2025-07-16 10:18:43     打赏
5楼

现在MCU的性能突破 又突破啊


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]