圣龙扬特-AVR电子
标题:
基于M8的数控电源
[打印本页]
作者:
sunany
时间:
2013-2-28 23:17
标题:
基于M8的数控电源
用M8制作的电源,
电源含三路输出:
正负15V/200mA固定输出
5V/3A固定输出
1.5-12V/1A可调输出
可显示电压、电流,电路中采用了烧包的数字电位器。
作者:
admin
时间:
2013-3-1 00:12
如果有各部分的电路及程序原理,那就绝了。
电路及程序楼主已贴在12层。
作者:
c_avr128
时间:
2013-3-1 12:31
做的线性电源?不错,不错!恭喜恭喜!机箱也是你设计的哇?
作者:
sunany
时间:
2013-3-1 12:34
等我有时间了我把电路图和源代码整理下再发出来
作者:
小涛电子工作室
时间:
2013-3-1 13:02
外壳不错 液晶那个孔是手开的还是机开的 不错
作者:
铜河
时间:
2013-3-1 14:10
做的漂亮~~~~~~~
作者:
I'm51
时间:
2013-3-1 16:03
喜欢,so mark
作者:
小顺
时间:
2013-3-1 22:50
这板子刻得蛮好的,学习。。。
作者:
多啦A梦
时间:
2013-3-2 12:59
王手艺十三香 板刻的真好!!
作者:
尘起风扬
时间:
2013-3-2 20:45
很骚包啊
作者:
Helloafer
时间:
2013-3-2 21:01
电路板是怎么做的?什么材料,工具,简要的步骤
作者:
sunany
时间:
2013-3-3 14:36
M8控制板原理图
作者:
sunany
时间:
2013-3-3 14:40
电源功率板,采用LM317及78H05
作者:
sunany
时间:
2013-3-3 14:42
PCB板,可用单层板DIY
作者:
sunany
时间:
2013-3-3 14:50
// ICC-AVR application builder :
// Target : M8
// Crystal: 8.0000Mhz
// Author: Eagle Studio
#include <iom8v.h>
#include <macros.h>
#include <math.h>
#include "init.h"
#include "LCD1602_H4.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uint ADC_data[2]={0}; //四通道AD转换值
uint ADC0_temp[10]={0};
uint ADC1_temp[10]={0};
uchar data[4]={48,48,48,48};
unsigned char flag_timer0_1s=0;
unsigned char coder_num=1;
/******************************* ADC Convert function ******************************/
uint ADC_Convert(void)
{
uint temp1,temp2;
temp1=(uint)ADCL;
temp2=(uint)ADCH;
temp2=(temp2<<8)+temp1;
return(temp2);
}
void AD_conversion(void)
{
unsigned int i;
unsigned char j;
ADCSRA = 0xe3; //star ADC mode,
ACSR=(1<<ACD); //关闭模拟比较器
ADMUX=0x00; //选择外部AREF为基准,REF=2.75V
for(j=0;j<10;j++)
{
ADMUX &=0xFE;
delay_us(25);
ADC0_temp[j]=ADC_Convert();
delay_us(25);
ADMUX |=0x01;
delay_us(25);
ADC1_temp[j]=ADC_Convert();
delay_us(10);
}
ADCSRA = 0x00; //disable adc
ADC_data[0]=Avg_ADC(ADC0_temp);
ADC_data[1]=Avg_ADC(ADC1_temp);
}
/* ****************************************************************
** 函 数 名: Avg_ADC(uint *data )
** 功能描述: 中值滤波
*************************************************************** */
unsigned int Avg_ADC(unsigned int *data )
{
unsigned char count,i,j;
unsigned int value_buf[10];
unsigned long sum=0,temp;
for (count=0;count<10;count++)
{
value_buf[count] =data[count];
}
for (j=0;j<9;j++)
{
for (i=0;i<9-j;i++)
{
if ( value_buf[i]>value_buf[i+1] )
{
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
for(count=1;count<9;count++)
{
sum += value_buf[count];
}
sum =sum>>3;
return (unsigned int)sum;
}
/******************Write LCD function******************/
void LCD_Display(void)
{
LCD1602_sendstr(0,0,"U:",2);
LCD1602_sendstr(0,6,"v",1);
LCD1602_sendstr(0,8,"I:",2);
LCD1602_sendstr(0,13,"mA",2);
LCD1602_sendstr(1,0,"u:",2);
LCD1602_sendstr(1,6,"v",1);
LCD1602_sendstr(1,8,"Co:",3);
}
void Data_to_ASCII(unsigned int i,unsigned char *data)
{
data[0]=i/1000+48;
i=i%1000;
data[1]=i/100+48;
i=i%100;
data[2]=i/10+48;
i=i%10;
data[3]=i+48;
}
unsigned int Process_U0(void)
{
unsigned int I,U;
//I=(ADC_data[1]-ADC_data[0])*2750/102400 //REF为2.75V,采样电阻为100mΩ
//I=(ADC_data[1]-ADC_data[0])*55/2048; //理论值
//U=ADC_data[0]*13.4; //理论值 ,电压放大4.99倍
I=(ADC_data[1]-ADC_data[0])*7/256; //修正值
U=ADC_data[0]*16.64; /修正值
if(U>9999)
{
U=U/10;
Data_to_ASCII(U,data);
CD1602_sendstr(0,2,&data[0],1);
LCD1602_sendstr(0,3,&data[1],1);
LCD1602_sendstr(0,4,".",1);
LCD1602_sendstr(0,5,&data[2],1);
}
else
{
Data_to_ASCII(U,data);
LCD1602_sendstr(0,2,&data[0],1);
LCD1602_sendstr(0,3,".",1);
LCD1602_sendstr(0,4,&data[1],1);
LCD1602_sendstr(0,5,&data[2],1);
}
Data_to_ASCII(I,data);
LCD1602_sendstr(0,10,data,3);
}
unsigned int Process_U1(void)
{
unsigned int U;
U=ADC_data[1]*16.64; //修正值
if(U>9999)
{
U=U/10;
Data_to_ASCII(U,data);
LCD1602_sendstr(1,2,&data[0],1);
LCD1602_sendstr(1,3,&data[1],1);
LCD1602_sendstr(1,4,".",1);
LCD1602_sendstr(1,5,&data[2],1);
}
else
{
Data_to_ASCII(U,data);
LCD1602_sendstr(1,2,&data[0],1);
LCD1602_sendstr(1,3,".",1);
LCD1602_sendstr(1,4,&data[1],1);
LCD1602_sendstr(1,5,&data[2],1);
}
}
/******************Timer0 interrupt function******************/
#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF //8ms溢出中断
void timer0_ovf_isr(void)
{
static uint CNT0=0;
TCNT0 = 0x06; //reload counter value
CNT0++;
if(CNT0==125) //askdistance flag,every 2s once
{
CNT0=0;
flag_timer0_1s=1;
}
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
//static uint CNT0=0;
//TIMER1 has overflowed
TCNT1H = 0xFF; //reload counter high value
TCNT1L = 0xFE; //reload counter low value
//coder_num++;
if(CoderA_Read==0)//==0x00) //Forward
{
coder_num=coder_num+1;
if(coder_num>30)
{
coder_num=30;
}
}
if(CoderA_Read==1)//==0x10) //Forward
{
coder_num=coder_num-1;
if((coder_num<1)||(coder_num>30))
{
coder_num=0;
}
}
}
void SPI_MasterTransmit(unsigned char data)
{
SPDR = data; //启动命令传输
while(!(SPSR & (1<<SPIF))) //等待传输结束
;
}
void SPI_Max5484_Data(unsigned int Max5481_data)
{
unsigned char tempH,tempL;
Max5481_data=Max5481_data<<6; //将D9移到最高位,所有往高位移6位
tempH=Max5481_data>>8; //取高八位
tempL=Max5481_data; //取低八位,强制转换
SPI_CS_L; //启动从机芯SPI模式
SPI_MasterTransmit(0x00); //发送写数据命令
SPI_MasterTransmit(tempH); //发送高八位
SPI_MasterTransmit(tempL); //发送低八位
SPI_CS_H; //关闭从机芯SPI模式
}
void SPI_Max5484_Cmd(unsigned char Max5481_cmd)
{
SPI_CS_L; //启动从机芯SPI模式
SPI_MasterTransmit(Max5481_cmd);
SPI_CS_H; //关闭从机芯SPI模式
}
/****************************main function*******************************/
void main(void)
{
init_devices(); //system init
LCD1602_init();
delay_ms(500);
LCD1602_clear();
LCD1602_sendstr(0,2,"Hello world!",12);
LCD1602_sendstr(1,2,"Eagle Studio",12);
delay_ms(2000);
LCD1602_clear();
while(1)
{
WDR ();
if(flag_timer0_1s==1)
{
flag_timer0_1s=0;
AD_conversion();
Process_U0();
Process_U1();
}
if(Reset_Read==0) //按键复位为0V
{
coder_num=0;
}
LCD_Display();
Data_to_ASCII(coder_num,data);
LCD1602_sendstr(1,11,data,4);
SPI_Max5484_Data(coder_num);
}
}
作者:
箫天
时间:
2013-3-3 15:23
必须加精,不加精不足以平民愤。
作者:
落笔一哥
时间:
2013-3-4 08:50
好东西呀
作者:
holged
时间:
2013-3-4 13:14
学习了
作者:
木马
时间:
2013-3-4 14:28
很牛逼。。
作者:
腹黑男
时间:
2013-3-4 18:36
那用已有的电脑电源能改成这样的数控电源么?
作者:
avr_freshman
时间:
2013-3-4 21:05
虽然现在还不是很懂,但是真心感觉太牛逼了,非常佩服楼主的动手能力,强人 && 强帖啊。
作者:
八斤
时间:
2013-3-12 09:17
任哥的LCD一如既往地用软排线连接啊
作者:
cqmiao
时间:
2013-3-18 23:38
不错哦,很紧凑哦
作者:
oneway
时间:
2013-3-26 09:15
还是很精致的哈
作者:
SengChuary
时间:
2013-4-10 15:54
外壳做的很精致,顶贴
作者:
quanpengfei
时间:
2013-5-30 15:45
很好,这个必须顶,学习了
作者:
zheng156
时间:
2014-3-14 10:18
好东西,佩服楼主!
欢迎光临 圣龙扬特-AVR电子 (http://avr.cnta.net/)
Powered by Discuz! X2.5