簡單好用的ISD1820語音錄放芯片

學習目標

  • 學習ISD1820語音芯片的使用方法
  • 學習STM32 GPIO的輸入輸出
  • 按鍵掃描功能實現

芯片特點

  1. 工作電壓3~5V;
  2. 單段錄放控制簡單;
  3. 帶話筒放大直通功能——可用作喊話器模塊;
  4. 邊沿/電平觸發放音;
  5. 內置8Ω喇叭驅動放大電路,即可直接驅動8歐0.5W小喇叭;
  6. 無需單片機參與即可實現錄放音功能;
  7. 取樣率和錄放音時間可以由外部振盪電阻調節。外接電阻調整錄音時間,可以實現8~20秒語音錄放。錄入的時間越短音質越好,錄入的時間越長音質越差;

振盪電阻(ROSC): 此端接振盪電阻至VSS,由振盪電阻的阻值決定錄放音的時間。

在這裏插入圖片描述

推薦應用電路:

在這裏插入圖片描述

應用場景

  • 錄音喊話器
  • 錄音門鈴
  • 留言
  • 播放固定歡迎語

封裝及引腳功能:

在這裏插入圖片描述

  • 1腳爲錄音端(REC),高電平有效。只要REC變高電平(不管芯片處在節電狀態還是正在放音),芯片即開始錄音。錄音期間,REC必須保持爲高電平。REC變低電平或內存錄滿後,錄音週期結束,芯片自動寫入一個信息結束標誌(EOM),使以後的重放操作可以及時停止。

如果用戶只需要電路做放音用,可以在芯片錄好音測試無誤後,將芯片的REC端長期接地,取消REC按鍵,這樣可以防止意外抹音。

  • 2腳爲邊沿觸發放音端(PLAYE),此端出現上升沿時,芯片開始放音。放音持續到EOM標誌或內存結束。開始放音後,可以釋放PLAYE。

  • 3腳爲電平觸發放音端(PLAYL),此端從低電平變高電平時,芯片開始放音。放音持續至此端回到低電平,或遇到EOM標誌,或內存結束。

  • 4腳爲話筒輸入端(MIC)。

  • 5腳爲話筒參考端(MICREF)。

  • 6腳爲自動增益控制端(AGC)。通常4.7μF的電容器在多數場合下可獲得滿意的效果。

  • 7腳、9腳爲喇叭輸出端(SP+、SP-),這對輸出端可直接驅動8Ω以上的喇叭。

ISD1820能夠直接推動喇叭,但音量不是很大。如果用戶需要更大音量的輸出,可以外加集成功率放大器。

  • 8腳、14腳爲地線(VSSA,VSSD),芯片內部的模擬和數字電路的不同地線匯合在這兩個引腳。

  • 10腳爲振盪電阻端(ROSC),此端接振盪電阻至VSS,由振盪電阻的阻值決定錄放音的時間。

  • 11腳爲電源端(VCC),芯片內部的模擬和數字電路使用的不同電源總線在此引腳匯合,這樣使得噪聲最小。去耦電容應儘量靠近芯片。

  • 12腳爲直通模式端(FT),此端允許接在MIC輸入端的外部語音信號經過芯片內部的AGC電路、濾波器和喇叭驅動器而直接到達喇叭輸出端,形成話筒擴音機功能。平時FT端爲低電平,要實現直通功能,需將FT端接高電平,同時REC、PLAYE和PLAYL保持低電平。

  • 13腳爲錄音指示端(/RECLED),處於錄音狀態時,此端爲低電平,可驅動LED。此外,放音遇到EOM標誌時,此端輸出一個低電平脈衝。此脈衝可用來觸發PLAYE,實現循環放音。

錄放音控制方式:

按鍵控制或者單片機IO控制;

實例分析

實現的功能
  • 按下鬆開按鍵PLAYE可以邊沿觸發播放語音;
  • 持續按下按鍵PLAYL可以電平觸發播放語音;
  • 持續按下按鍵REC實現錄音;

以上功能實現不需要單片機參與。

  • 按下鬆開按鍵REC,LED1點亮,相當於指示有錄音留言;
  • 按下鬆開按鍵PLAYE,LED1熄滅,相當於指示留言已讀。
原理圖

在這裏插入圖片描述
在這裏插入圖片描述

代碼實現
  • 按鍵BTN_PLAYE和BTN_REC初始化
//按鍵初始化函數 
//PB12 設置成輸入
void KEY_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
 
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10|GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 
	GPIO_Init(GPIOC, &GPIO_InitStructure);	
} 
  • 按鍵聲明

#define BTN_PLAYE GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)
#define BTN_REC GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)

#define BTN_PLAYE_PRES	1
#define BTN_REC_PRES	2
  • 實現按鍵掃描函數
//按鍵處理函數
//返回按鍵值
//mode:0,不支持連續按;1,支持連續按;
//返回值:
//0,沒有任何按鍵按下
//BTN_PLAYE_PRES,BTN_PLAYE按下
//BTN_REC_PRES,BTN_REC按下
//注意此函數有響應優先級,PLAYE>REC!!
u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按鍵按鬆開標誌
	if(mode)
		key_up=1;  //支持連按	
	
	if(key_up&&(BTN_PLAYE==1||BTN_REC==1))
	{
		delay_ms(10);//去抖動 
		key_up=0;

		if(BTN_PLAYE==1)return BTN_PLAYE_PRES;
		else if(BTN_REC==1)return BTN_REC_PRES;
	}
	else if(BTN_PLAYE==0&&BTN_REC==0)
	{
		key_up=1; 
	}
	
	return 0;// 無按鍵按下
}
  • LED1聲明
#define LED1 PAout(15)	// PA15
  • LED1初始化,根據原理圖設計,LED1爲低電平的時候,LED1亮。
//LED IO初始化
void LED_Init(void)
{
 
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 
	
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
    
	GPIO_SetBits(GPIOA,GPIO_Pin_15);
}
  • 主函數實現,實現按鍵掃描,當得到BTN_PLAYE按鍵按下後,LED1熄滅;當得到BTN_REC按鍵按下後,LED1點亮。
#include "sys.h"
#include "delay.h"
#include "usart.h" 
#include "led.h" 		 	 
#include "key.h"  

int main(void)
{
    u8 key=0XFF;
	uart_init(115200);	
	 
	delay_init();
	LED_Init();
	KEY_Init();	
	
	//主循環	
	while(1) 
	{	
		key = KEY_Scan(0);
		
		if(key)   
		{ 
			switch(key)    
			{ 				
				case BTN_PLAYE_PRES:
					{
						LED1 = 1;	
						printf("BTN_PLAYE_PRES \r\n");		
					}
					break; 	
				case BTN_REC_PRES:
					{
						LED1 = 0;	
						printf("BTN_REC_PRES \r\n");			
					}
					break; 	
			}   
		}
		
		delay_ms(10); 
	}
	
}

在這裏插入圖片描述
從六月份開始,每個月會製作一個畢業設計難度的DIY作品,
前期作品以模塊組合的形式搭建,降低門檻,方便大家一起跟着做;
DIY過程只在微信公衆號中分享,大家沒關注的,趕緊關注哈。

每個月時間大致安排:

  • 上個月25號,公佈DIY作品名稱;
  • 每月1日公佈作品功能點及所需要的功能模塊鏈接;
  • 每月10日前繪製完模塊配合的線路板;
  • 每月15日之前硬件搭建完畢,之後按模塊撰寫代碼,調試,隨時公衆號更新進展;
  • 每月月底開源整個作品的源碼和PCB工程文件。

題目選取原則:

  • 公衆號每個月20日發起投票,25號截止,票數最多的作爲下個月的DIY內容;
  • 投票的備選項大家可以後臺留言給我,我會選出五種留言最多的作爲選項;
  • 每個月的DIY內容儘量與上個月分享的文章有一定的相關度,起到溫故知新的作用。

有什麼想法或者建議,留言給我哈。

下個月的每月一練內容已經在公衆號中開啓投票了,感興趣請關注哈!


喜歡請關注微信公衆號:程序員小哈
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章