STM32基于AD5663的UV灯电压控制
在開發臭氧發生器的時,我們使用UV燈來實現臭氧的產生。而UV燈的強度決定了臭氧產生的濃度,UV燈的光強則與其控制電壓密切相關。所以我們要控制產生的臭氧的濃度就需要調節其控制電壓。我們選擇了AD5663這一模擬量輸出模塊來實現這一點。
1、AD5663簡介
AD5663屬于nanoDAC系列,是低功耗、雙通道、16位緩沖電壓輸出數模轉換器(DAC),采用2.7V至5.5V單電源供電。AD5663采用多功能三線式串行接口,能夠以最高50 MHz的時鐘速率工作,并與標準SPI、QSPI、MICROWIRE、DSP接口標準兼容。它內置片內精密輸出放大器,能夠實現軌到軌輸出擺幅。其功能框圖如下所示:
2、硬件設計
我們用來產生臭氧的UV燈,其控制電壓約需要在AC300V到AC1500V的范圍,工作頻率約為10kHz到20kHz的范圍內,當然選用的燈不一樣可能會有些許差異。為了達到這個目的,我們使用兩個PWM控制電路產生低壓交流電源,然后通過高頻變壓器產生我們需要的交流電源。基于此,我們先要有一個連續可調的低壓直流電源才有可能通過PWM控制電路達到我們想要的結果。如下圖即是我們電壓控制電路:
上圖中我們采用LM2596S-ADJ作為電源模塊,以AD5663作為電源調節輸出。LM2596S的反饋電壓要求在1.23V,二極管的1N4001的管壓降設定為0.5V,根據R27、R28、R29幾個電阻電路就可以實現LM2596S輸出電壓的調節。由于二極管的存在,AD5663需要輸出大于1.73V(1.23V+0.5V)以上的電壓才能起到調節效果。我們設返回電壓為Vf=1.23V,LM2596S的輸出電壓為Vo,二極管的管壓降為Vd,AD5633的輸出電壓為Vs于是我們可以得到一個等式:
在上述等式中Vf=1.23V是確定的,二極管的管壓降Vd=0.5V也是確定的,所以等式有2中情況:第一種是AD5663的輸出電壓小于等于1.73時,AD5663的輸出對電壓輸出沒有影響;第二種是當AD5663的輸出電壓大于1.73時,可以通過AD5663的輸出調節LM2596S的輸出,而且為線性關系。
3、軟件設計
經過上述的分析和設計,相關軟件的編寫就變得相對容易了。AD5663有一個輸入移位寄存器,對AD5663操作都是通過輸入移位寄存器來實現的。
3.1、輸入移位寄存器
輸入移位寄存器為24位寬。前2位是無關位,后續三位是命令位C2至C0,然后是3位DAC地址A2至A0,其結構如下:
3.2、軟件復位
軟件復位也是通過操作輸入移位寄存器來實現的。命令位的定義沒有變化,數據段的最后一位作為軟件復位的模式設定,其它位無效。最后一位為0時,會清除DAC寄存器和輸入寄存器,而最后一位為1時清除掉全部寄存器。最后一位為1時,實際就是上電復位模式。輸入移位寄存器的數據格式如下:
其軟件實現如下:
void Ad5663SoftwareReset(AD5663ResetType resetMode,void (*WriteByteToAD5663)(uint8_t)) {uint32_t inputShiftData=0;if(resetMode==ResetSoftware){inputShiftData=RESET|Register_Reset_Software;}if(resetMode==ResetPoweron){inputShiftData=RESET|Register_Reset_Poweron;}uint8_t txData[3];txData[0]=inputShiftData>>16;txData[1]=inputShiftData>>8;txData[2]=inputShiftData;WriteByteToAD5663(txData[0]);WriteByteToAD5663(txData[1]);WriteByteToAD5663(txData[2]); }3.3、上電復位
上電復位也是通過操作輸入移位寄存器來實現的。命令位的定義沒有變化,數據段的DB5和DB4定義掉電的模式,而DB1和DB0定義操作的通道。輸入移位寄存器的數據格式如下:
其軟件實現如下:
/*設置AD5663上電/掉電工作模式*/ void Ad5663PowerUpDownMode(DACHANNEL channel,AD5663PowerdownType powerdownType,void (*WriteByteToAD5663)(uint8_t)) {uint32_t inputShiftData=0;if(channel==DAChannelA){inputShiftData=DAC_A;}if(channel==DAChannelB){inputShiftData=DAC_B;}if(channel==ChannelAll){inputShiftData=DAC_A|DAC_B;}switch(powerdownType){case NormalOperation:{inputShiftData=inputShiftData|Normal_Operation|Power_Down;break;}case R1K2GND:{inputShiftData=inputShiftData|_1K_GND|Power_Down;break;}case R100K2GND:{inputShiftData=inputShiftData|_100K_GND|Power_Down;break;}case ThreeState:{inputShiftData=inputShiftData|Three_State|Power_Down;break;}}3.4、輸出操作
對各輸出通道值的操作也是同過輸入移位寄存器來完成。其數據格式如前面輸入移位寄存器的介紹。后16位是數據(0-65535),然后是3位地址和3位命令。通訊的時序圖如下所示:
設置DA通道的值具體代碼如下:
void SetAD5663ChannelValue(DACHANNEL channel,uint16_t data,void (*WriteByteToAD5663)(uint8_t)) {uint32_t inputShiftData=0;if(channel==DAChannelA){inputShiftData=WriteTo_Update_DAC_Channel|DAC_Channel_A|data;}if(channel==DAChannelB){inputShiftData=WriteTo_Update_DAC_Channel|DAC_Channel_B|data;}uint8_t txData[3];txData[0]=inputShiftData>>16;txData[1]=inputShiftData>>8;txData[2]=inputShiftData;WriteByteToAD5663(txData[0]);WriteByteToAD5663(txData[1]);WriteByteToAD5663(txData[2]); }4、結論
經過實際應用后,應該說效果還是不錯的可以實現輸出電壓的連續調節。但也存在一些需要改進的地方。
第一,因為采用了二極管輸出,產生了管壓降無意中抬高了DAC輸出的零點。而由于電路結構的原因DAC的輸出需要大于1.73V才會進入調節段,實際上使DAC喪失了三分之一的精度。
第二,理論上輸出應該是線性的,但實際上由于電源元件和電阻反饋網絡的溫度效應等,其實在某些段線性并不太好。
第三,因為電源器件的輸出精度影響實現自動調節時,參數的整定變得較為麻煩,在不同的段其輸出精度不同參數的設置也要不同,或者降低調整速度。
對于這些問題,我們考慮了一些改進措施,如采用運放代替二極管,采用輸出精度高一點的DC/DC電源等。還在軟件上,我們采用專家PID來進行控制以提高調節的精度。
歡迎關注:
總結
以上是生活随笔為你收集整理的STM32基于AD5663的UV灯电压控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【论文党福利】如何提取图像中的数据
- 下一篇: MD5 算法描述及实现