SOGO論壇
  登入   註冊   找回密碼
查看: 2086|回覆: 0
列印 上一主題 下一主題

[心得分享] 利用NXP LPC2138與運算放大器產生任意正負電壓(最高為+10V,最低為-10V) [複製連結]

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-3-30 14:28:24 |只看該作者 |倒序瀏覽 | x 2
本帖最後由 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),其原理使用運算放大器中的減法電路就可以做到

      

三、原理圖

四、程式碼
  1. #include <lpc213x.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <math.h>

  6. //DAC output
  7. void DAC_Output(float voltage)
  8. {
  9.         float Vref=3.30;
  10.         uint16_t dac_value=0;
  11.         //NXP LPC2138具有10位元DAC輸出,轉換公式如下
  12.         dac_value=floor((1023.0*voltage)/Vref);
  13.            //其DAC值在DACR暫存器中bit6~bit15,故需左移6位元
  14.         DACR=(dac_value<<6);
  15. }

  16. void BSP_Init(void)
  17. {       
  18.         VPBDIV                         = 0x02;                                //設定周邊匯流排速度為核心工作頻率/2       
  19.            PINSEL1                        = (0x02<<18);                                //Set P0.25 pin 為DAC輸出功能       
  20. }
  21. int main()
  22. {
  23.         float voltage=0.0;

  24.         BSP_Init();
  25.        
  26.         DAC_Output(voltage); //實際電壓因經過減法電路與放大故真實電壓為 voltage=(0.0-1.65)*6=-10V
  27.        

  28.         while(1)
  29.         {
  30.                
  31.         }
  32. }
複製代碼
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

失敗只有一種:那就是半途而廢
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-6-6 10:23

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部