- 註冊時間
- 2004-10-30
- 最後登錄
- 2025-1-23
- 主題
- 查看
- 積分
- 265
- 閱讀權限
- 50
- 文章
- 219
- 相冊
- 0
- 日誌
- 0
狀態︰
離線
|
本帖最後由 alphi 於 2012-3-30 14:31 編輯
一、前言
因在工作上高頻常常採用Bias/Modulator 模組,而這些模組常常會需要正負電壓,最早是由別人使用類比電源搭配旋鈕,然後進而偵測顯示其電壓,但因一般MCU 無法偵測負電壓,且常因阻值跟電路上差異造成都有誤差需要微調.之後覺得這樣也麻煩使用者也無法得到精確的電壓值,故考慮採用具有DAC的MCU,最早版本採用NXP
LPC2138(ARM7TDMI).之後使用STM32F2/F4系列.在這邊我將其他跟DAC無關的程式碼與電路都移除.這樣比較精簡.
二、原理
因使用的電源電路可以提供+12V/-12V,且LPC2138 DAC產生為0~3.3V(VAcc)電壓,故規劃0~1.64V(3.3V/2)為負電壓部分,而1.65V~3.3V為正電壓部分.而要達到
+10V/-10V,須將電壓放大6.06倍左右(10/1.65=6.06),其原理使用運算放大器中的減法電路就可以做到
三、原理圖
四、程式碼- #include <lpc213x.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- //DAC output
- void DAC_Output(float voltage)
- {
- float Vref=3.30;
- uint16_t dac_value=0;
- //NXP LPC2138具有10位元DAC輸出,轉換公式如下
- dac_value=floor((1023.0*voltage)/Vref);
- //其DAC值在DACR暫存器中bit6~bit15,故需左移6位元
- DACR=(dac_value<<6);
- }
- void BSP_Init(void)
- {
- VPBDIV = 0x02; //設定周邊匯流排速度為核心工作頻率/2
- PINSEL1 = (0x02<<18); //Set P0.25 pin 為DAC輸出功能
- }
- int main()
- {
- float voltage=0.0;
- BSP_Init();
-
- DAC_Output(voltage); //實際電壓因經過減法電路與放大故真實電壓為 voltage=(0.0-1.65)*6=-10V
-
- while(1)
- {
-
- }
- }
複製代碼 |
|