功能说明: 本作品采用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)
|