電工之家_電工基礎知識學習網站
當前位置:電工之家 > 電工知識 > 單片機 > 正文

單片機輸出模擬量方式及具體實現原理

時間:2019-10-05 10:41 來源:電工之家

單片機輸出模擬量,主要有兩種方式,通過DA模塊或者PWM模塊輸出;
以我目前經常使用的ST的Cortex-M0系列的處理STM32F051處理器為例。

在我負責的產品中,有一款產品需要由單片機產生鈴聲,為了節省成本,沒有使用專用的鈴聲芯片,而是由單片機的D/A模塊輸出模擬量以產生鈴聲,同時根據外接的可調電組,調節輸出的電壓幅度以調節的音量。

具體實現原理如下:

1)將產品部提供的wmv的鈴聲文件,通過goldenwave軟件按照16kHz的采樣率重新采樣。

2)將重采樣得到的音頻數據進行放縮平移轉成偏置為128,范圍為0-255之間的8bit整型的數據。

3)將得到的數據存儲到外置的SPI Flash。

4)選用單片機的某個定時器,將定時器的定時時間設置為62.5us,并使用中斷。

5)配置單片機的DA以及SPI模塊,在定時器中斷時,通過SPI模塊讀取其FIFO的數值,將讀到的數值通過DA模塊輸出到端口,同時發送命令通過SPI模塊讀取下一個byte的數據。

定時器中斷代碼如下:

if(SPI1->SR & SPI_SR_RXNE)\
{
temp = SPI_Receive(SPI1);
DAC->DHR12R1 = (((U16)temp) << 2);
DAC->DHR12R1 = (((U16)temp) << 4);
}
if(SPI1->SR & SPI_SR_TXE)
{
SPI_SendData(SPI1, 0xFF);
addr ++;
}
另外一種常用的模擬量輸出的方式為PWM輸出。
即通過頻率固定,占空比可調的信號輸出PWM,PWM帶通過低通濾波電路濾成幅度受占空比控制的模擬量信號;

可以通過單片機的PWM模塊或者是直接用定時器中斷產生PWM信號。

PWM信號通過簡單的R、C低通濾波電路就可以濾成模擬量;

一般R、C的時間常數需要選為10倍的PWM信號的周期。

模擬量輸出的幅度為PWM信號的輸出高電平*占空比;

比如以下的程序,就是通過單片機的PWM模塊輸出10KHz的占空比,并通過時間常數為1ms(電阻為10k,電容為0.1uF)的R、C過濾成模擬量;

用來接入直流電機控制器,調節直接電機的轉速。

void fnMT_InitPWM(void){

SET_IO_AFMODE_PP(P_MOTOR_B_PULSE_PORT, P_MOTOR_B_PULSE_PIN); 

fnMN_MAPR_And(~AFIO_MAPR_TIM1_REMAP)

RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;//Timer1 clock enable

MOTOR_PWM->CR1 = TIM_CR1_ARPE;//自動加載

MOTOR_PWM->PSC = (64 - 1);//fck_psc/(PSC[15:0] + 1)=1MHz

MOTOR_PWM->EGR = 0x0001;//Reload immediate

MOTOR_PWM->CCMR1 = 0x0068;//使能PWM功能,并開啟自動加載CH1 

MOTOR_PWM->ARR = (U16)(MOTOR_FREQ_DEFAULT - 1); 

MOTOR_PWM->CCR1 = 100; 

MOTOR_PWM->BDTR = 0x8000; 

MOTOR_PWM->EGR = 0x0001;

MOTOR_PWM->CCER |= 0x0009;

MOTOR_PWM->DIER |= 0x000001; 

MOTOR_PWM->CR1 |= 0x0001;

}

void fnMT_ConPWM(U16 period, U16 duty){ 

MOTOR_PWM->ARR = period; 

MOTOR_PWM->CCR1 = duty;

}

上一篇:單片機如何實現模擬輸出的
下一篇:沒有了
看過《單片機輸出模擬量方式及具體實現原理》的人還看了以下文章
單片機如何實現模擬輸出的 單片機如何實現模擬輸出的
想要單片機輸出模擬信號,屬于數字信號轉化為模擬信號,簡稱數模轉換;而單片機內部的ADC模塊屬于模擬信號轉化為數字信號,簡稱模數轉換,比如電壓電流采樣、溫度測量、濕度測量、壓力測量等都屬于模數轉換。 由于帶DA轉換接口的單片機很少,可以使用DA芯片...
MSP430F5529型號的單片機引腳為什么這么亂 MSP430F5529型號的單片機引腳為什么這么亂
查看MSP430F5529這個單片機型號的數據手冊發現,其引腳定義布局還是比較規范的,具體表現如下: (1)引腳Pin1~Pin8,全部都是普通IO引腳,可以被同時定義A4~A15,CB4~CB11或者P6.4~P7.3; (2)引腳Pin9~Pin20,幾乎都是單功能定義引腳,軟件或者硬件工程師在...
單片機程序怎么寫占用資源少 單片機程序怎么寫占用資源少
單片機一般是用匯編語言編程,盡量減少代碼的數量是一個高級程序設計者所追求的。單片機編程中,第一部分一般是初始化,這段程序一點也少不了多少。以后的部分基本上是功能性的,所以在部分應該是結構化、模塊化的編程可以實現程序代碼最少,而且由于采用結...
單片機總是學不會怎么辦 單片機總是學不會怎么辦
學會單片機的開發和應用其實并不難,關鍵是你的基礎知識夠不夠用。如果你是一個大三學生,已經有了數學、物理、電路的基本知識,就是自學單片機應該也能很快入門。如果你已經有了單片機原理的基礎知識,只是沒有實踐經驗,那就要從實際動手開始。因為光有理...
單片機能代替plc嗎 單片機能代替plc嗎
就個人經歷談談我的看法吧,僅供參考。 07研究生期間,我當時研究方向是嵌入式,但因為老板的軍工項目接觸了PLC。項目是在國家的一個研究所后來改制成有限責任公司進行,目前應該是行業內非常大的一家企業了。一開始接觸項目時,我發現是個大工程,涉及兩臺...
信誉搏彩平台