|
数控电源,51单片机+tlc5615+tlc1543
源程序:
- /*最大电流为6A,最大电压为40V*/
- #include<reg52.h>
- sbit sclk5615=P1^0; /*dac tlc5615串行时钟*/
- sbit din5615=P1^1; /*dac tlc5615串行数据输入*/
- sbit cs5615=P1^2; /*dac tlc5615片选*/
- sbit dout5615=P1^3; /*dac tlc5615串行数据输出*/
- sbit eoc1543=P3^0;
- sbit sclk1543=P3^1;
- sbit addr1543=P3^2;
- sbit dout1543=P3^3;
- sbit cs1543=P3^4;
- void Delayms(unsigned int t) //延时毫秒函数:
- {
- unsigned int x,y;
- for(x=t;x>0;x--)
- for(y=120;y>0;y--);
- }
- void TLC1543_init(void)
- {
- cs1543=1;
- sclk1543=0;
- }
- unsigned int ReadADC_TLC1543(unsigned char ch)
- {
- unsigned char temp;
- unsigned int adc_value=0;
- ch<<=4;
- cs1543=0;
- for(temp=0;temp<10;temp++) // 将判断语句改为 temp<12
- { // 程序可移殖至 TLC2543.
- adc_value<<=1;
- ch<<=1;
- addr1543=CY;
- if(dout1543)
- adc_value+=1;
- sclk1543=1;
- Delayms(1);
- sclk1543=0;
- }
- cs1543=1;
- return adc_value;
- }
- void WriteTLC5615(unsigned int wdata) //写TLC5615数据函数:
- {
- unsigned char i;
- cs5615=0; //片选使能
- wdata<<=2; //将数据左移两位,补两位扩展位,组成12位数据写入
- for(i=0;i<12;i++) //写入12位数据
- {
- sclk5615=0;
- din5615=(wdata&0x0800)?1:0; //取出最高位(第11位)写入
- sclk5615=1; //上升沿送数据
- wdata<<=1; //下一位移到最高位
- }
- cs5615=1; //片选禁止
- }
- float get_average(unsigned char ch,unsigned char time)
- {
- unsigned char i;
- float v;
- v=ReadADC_TLC1543(ch);
- for(i=0;i<time;i++)
- {
- v+=v;
- Delayms(5);
- }
- return v/time;
- }
- /*unsigned char KEY_Scan()
- {
- unsigned char temp=0;
- unsigned char com=0x55,com1=0,com2=0;
- P2=0xf0;
- if(P2!=0xf0)
- {
- com1=P2;
- P2=0x0f;
- com2=P2;
- }
- P2=0xf0;
- while(P2!=0xf0);
- temp=com1|com2;
- switch(temp)
- {
- case 0xee:com=0;break;
- case 0xed:com=1;break;
- case 0xeb:com=2;break;
- case 0xe7:com=3;break;
- case 0xde:com=4;break;
- case 0xdd:com=5;break;
- case 0xdb:com=6;break;
- case 0xd7:com=7;break;
- case 0xbe:com=8;break;
- case 0xbd:com=9;break;
- case 0xbb:com=10;break;
- case 0xb7:com=11;break;
- case 0x7e:com=12;break;
- case 0x7d:com=13;break;
- case 0x7b:com=14;break;
- case 0x77:com=15;break;
- }
- return(com);
- }*/
- void main(void)
- {
- float dat1,dat2,volt,current;
- TLC1543_init();
- while(1)
- {
- WriteTLC5615(100);/*向dac写入数据*/
- dat1=get_average(0,10);/*通道0测电压*/
- dat2=get_average(1,10);/*通道1测电流*/
- volt=dat1*8;/*最大电压为40v,分压为5v,分压倍数为8倍*/
- current=dat2*6/5;/*最大电流6A,采样电阻为1mΩ,采样电阻上面最大电压为6mv,差分放大100倍,即最大电压为6v,分压电阻分压后变成5v*/
-
- …………余下代码请下载附件…………
复制代码
下载:
电源.zip
(30.14 KB, 下载次数: 62)
|
|