SOGO論壇
標題:
利用NXP LPC2138與運算放大器產生任意正負電壓(最高為+10V,最低為-10V)
[列印本頁]
作者:
alphi
時間:
2012-3-30 14:28:24
標題:
利用NXP LPC2138與運算放大器產生任意正負電壓(最高為+10V,最低為-10V)
本帖最後由 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),其原理使用運算放大器中的減法電路就可以做到
2012-3-30 14:17:34 上傳
下載附件
(7.46 KB)
三、原理圖
2012-3-30 14:28:14 上傳
下載附件
(39.85 KB)
四、程式碼
#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)
{
}
}
複製代碼
附件:
SubOPA.JPG
(2012-3-30 14:17:34, 7.46 KB) / 下載次數 24
https://oursogo.com/forum.php?mod=attachment&aid=MTgzNzU5N3wwNjIxMjAwN3wxNzM5Mjc4MzUwfDB8MA%3D%3D
附件:
layout.JPG
(2012-3-30 14:28:14, 39.85 KB) / 下載次數 26
https://oursogo.com/forum.php?mod=attachment&aid=MTgzNzY0MHw0MDkyYmMzNHwxNzM5Mjc4MzUwfDB8MA%3D%3D
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM