功能說明: 本作品采用DAC0832作為電壓信號輸出。DAC0832是一款采用CMOS工藝制成的單片電流輸出型8位數 / 模轉換器。DAC0832有三種工作方式:不帶緩沖工作方式,單緩沖工作方式,雙緩沖工作方式。因為輸出電壓量程為10V,VREF基準電壓范圍為-10V---+10V,基準電壓可以為5.12V,這樣在DAC0832的8腳輸出電壓的分辨率為:即D/A輸入數據端每增加1,電壓增加0.02V。D/A的電壓輸出端接放大器OP27的輸入端,放大器的放大倍數為5 ,才能得到輸出電壓的電壓分辨率:0.02V×5=0.1V這樣當調節電壓的時候,以每次0.1V的梯度增加或者降低電壓。 硬件電路圖: 1.波形轉換與放大部分 選用51系列的單片機產生和控制波形。數模轉換器用的是DAC0832,本方案中DAC0832采用單緩沖模式。 電路如圖五所示,P0口和DAC0832的數據口直接相連,接地,DAC數據寄存器處于直通狀態,ILE=1,和連接后接P2.0。在選中該片的地址(=0)時,寫入數字量,該數字信號就立即傳送到DAC輸入寄存器,并直通至DAC數據寄存器,經過短暫的建立時間,即可以獲得相應的模擬電壓。 寫入操作結束, 和立即變為高電平,寫入的數據被輸入寄存器鎖存,直到再次寫入刷新。
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- sbit dp=P1^4;
- sbit sh=P1^5;
- void delay(unsigned int t);
- uchar Getkey(void);
- void Disp(uchar n);
- uchar Disptab[10]={0x11,0x7d,0x23,0x29,0x4d,0x89,0x81,0x3d,0x1,0x9};
- main()
- {
- uchar key;
- char Vol1=0x00,Vol2=0x00;
- Disp(Disptab[Vol2]);
- Disp(Disptab[Vol1]-1);
- P0=0x00;
- while(1)
- {
- key=Getkey();
- switch(key)
- {
- case 0x01:break;
- case 0x02:break;
- case 0x04:if(Vol1==0&&Vol2==0)break;
- Vol2--;
- if(Vol2<0)
- {
- Vol2=9;Vol1--;
- }
- Disp(Disptab[Vol2]);
- Disp(Disptab[Vol1]-1);
- P0=4.3*(Vol1*10+Vol2);
- break;
- case 0x08:if(Vol1==9&&Vol2==9)break;
- Vol2++;
- if(Vol2==10)
- {
- Vol2=0x00;Vol1++;
- }
- Disp(Disptab[Vol2]);
- Disp(Disptab[Vol1]-1);
- P0=4.3*(Vol1*10+Vol2);
- break;
- default:break;
- }
- }
- }
- uchar Getkey(void)
- {
- uchar key;
- P1|=0x0f;
- if(!(~(P1|0xf0))) return 0x00;
- delay(0x20);
- if(!(~(P1|0xf0))) return 0x00;
- key=~(P1|0xf0);
- while(~(P1|0xf0));
- return key;
- }
- void delay(unsigned int t)
- {
- while(--t);
- }
- void Disp(uchar n)
- {
- uchar i;
- for(i=0;i<8;i++){
- sh=0;
- if(0x80&n){
- dp=1;
- }
- else{
- dp=0;
- }
- sh=1;
- n=(n<<1)+1;
- }
- }
復制代碼
所有資料51hei提供下載:
數控直流電源.rar
(298.51 KB, 下載次數: 180)
2019-10-26 11:01 上傳
點擊文件名下載附件
|