圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1887|回复: 26

基于M8的数控电源

[复制链接]

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-2-28 23:17:07 |显示全部楼层
用M8制作的电源,
电源含三路输出:
正负15V/200mA固定输出
5V/3A固定输出
1.5-12V/1A可调输出
可显示电压、电流,电路中采用了烧包的数字电位器。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回帖推荐

sunany 查看楼层

M8控制板原理图

sunany 查看楼层

电源功率板,采用LM317及78H05

sunany 查看楼层

PCB板,可用单层板DIY

sunany 查看楼层

// ICC-AVR application builder : // Target : M8 // Crystal: 8.0000Mhz // Author: Eagle Studio #include #include #include #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_t ...
拔剑四顾心茫然
回复

使用道具 举报

17

主题

2

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
帖子
54
精华
0
注册时间
2013-2-20
在线时间
72 小时
发表于 2013-3-1 00:12:01 |显示全部楼层
如果有各部分的电路及程序原理,那就绝了。

电路及程序楼主已贴在12层。
回复

使用道具 举报

1

主题

0

好友

233

积分

中级会员

Rank: 3Rank: 3

UID
79
帖子
7
精华
0
注册时间
2013-3-1
在线时间
2 小时
发表于 2013-3-1 12:31:44 |显示全部楼层
做的线性电源?不错,不错!恭喜恭喜!机箱也是你设计的哇?
回复

使用道具 举报

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-3-1 12:34:13 |显示全部楼层
等我有时间了我把电路图和源代码整理下再发出来
拔剑四顾心茫然
回复

使用道具 举报

1

主题

0

好友

229

积分

中级会员

Rank: 3Rank: 3

UID
81
帖子
7
精华
0
注册时间
2013-3-1
在线时间
3 小时
发表于 2013-3-1 13:02:50 |显示全部楼层
外壳不错 液晶那个孔是手开的还是机开的 不错
回复

使用道具 举报

26

主题

1

好友

3446

积分

超级版主

Rank: 8Rank: 8

UID
7
帖子
140
精华
0
注册时间
2013-2-26
在线时间
20 小时

突出贡献

发表于 2013-3-1 14:10:33 |显示全部楼层
做的漂亮~~~~~~~
回复

使用道具 举报

1

主题

0

好友

537

积分

高级会员

Rank: 4

UID
18
帖子
8
精华
0
注册时间
2013-2-26
在线时间
4 小时
发表于 2013-3-1 16:03:24 |显示全部楼层
喜欢,so mark
回复

使用道具 举报

2

主题

0

好友

680

积分

高级会员

Rank: 4

UID
44
帖子
12
精华
0
注册时间
2013-2-27
在线时间
3 小时
发表于 2013-3-1 22:50:09 |显示全部楼层
这板子刻得蛮好的,学习。。。
回复

使用道具 举报

2

主题

0

好友

419

积分

中级会员

Rank: 3Rank: 3

UID
105
帖子
55
精华
0
注册时间
2013-3-2
在线时间
15 小时
发表于 2013-3-2 12:59:38 |显示全部楼层
王手艺十三香      板刻的真好!!
回复

使用道具 举报

2

主题

0

好友

632

积分

高级会员

Rank: 4

UID
14
帖子
16
精华
0
注册时间
2013-2-26
在线时间
13 小时
发表于 2013-3-2 20:45:51 |显示全部楼层
很骚包啊
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

UID
131
帖子
1
精华
0
注册时间
2013-3-2
在线时间
0 小时
发表于 2013-3-2 21:01:55 |显示全部楼层
电路板是怎么做的?什么材料,工具,简要的步骤
回复

使用道具 举报

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-3-3 14:36:49 |显示全部楼层
M8控制板原理图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

拔剑四顾心茫然
回复

使用道具 举报

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-3-3 14:40:01 |显示全部楼层
电源功率板,采用LM317及78H05

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

拔剑四顾心茫然
回复

使用道具 举报

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-3-3 14:42:58 |显示全部楼层
PCB板,可用单层板DIY

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

拔剑四顾心茫然
回复

使用道具 举报

6

主题

2

好友

3315

积分

论坛元老

Rank: 8Rank: 8

UID
12
帖子
30
精华
2
注册时间
2013-2-26
在线时间
12 小时
发表于 2013-3-3 14:50:36 |显示全部楼层
// 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);
}
}
拔剑四顾心茫然
回复

使用道具 举报

66

主题

4

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
2
帖子
339
精华
0
注册时间
2013-2-20
在线时间
349 小时
发表于 2013-3-3 15:23:18 |显示全部楼层
必须加精,不加精不足以平民愤。
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

UID
173
帖子
1
精华
0
注册时间
2013-3-4
在线时间
1 小时
发表于 2013-3-4 08:50:26 |显示全部楼层
好东西呀
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

UID
186
帖子
1
精华
0
注册时间
2013-3-4
在线时间
0 小时
发表于 2013-3-4 13:14:54 |显示全部楼层
学习了
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

UID
187
帖子
2
精华
0
注册时间
2013-3-4
在线时间
0 小时
发表于 2013-3-4 14:28:48 |显示全部楼层
很牛逼。。
回复

使用道具 举报

1

主题

1

好友

641

积分

高级会员

Rank: 4

UID
42
帖子
17
精华
0
注册时间
2013-2-27
在线时间
8 小时
发表于 2013-3-4 18:36:36 |显示全部楼层
那用已有的电脑电源能改成这样的数控电源么?
回复

使用道具 举报

1

主题

0

好友

547

积分

高级会员

Rank: 4

UID
51
帖子
15
精华
0
注册时间
2013-2-28
在线时间
4 小时
发表于 2013-3-4 21:05:09 |显示全部楼层
虽然现在还不是很懂,但是真心感觉太牛逼了,非常佩服楼主的动手能力,强人 && 强帖啊。
回复

使用道具 举报

6

主题

1

好友

3385

积分

超级版主

Rank: 8Rank: 8

UID
10
帖子
48
精华
1
注册时间
2013-2-26
在线时间
27 小时
发表于 2013-3-12 09:17:28 |显示全部楼层
任哥的LCD一如既往地用软排线连接啊
天之道,利而不害;圣人之道,为而不争
回复

使用道具 举报

3

主题

0

好友

3058

积分

版主

Rank: 7Rank: 7Rank: 7

UID
9
帖子
9
精华
0
注册时间
2013-2-26
在线时间
3 小时
发表于 2013-3-18 23:38:54 |显示全部楼层
不错哦,很紧凑哦
回复

使用道具 举报

1

主题

0

好友

652

积分

高级会员

Rank: 4

UID
21
帖子
45
精华
0
注册时间
2013-2-26
在线时间
11 小时
发表于 2013-3-26 09:15:07 |显示全部楼层
还是很精致的哈
回复

使用道具 举报

8

主题

0

好友

161

积分

初级会员

Rank: 2

UID
353
帖子
45
精华
2
注册时间
2013-4-10
在线时间
9 小时
发表于 2013-4-10 15:54:37 |显示全部楼层
外壳做的很精致,顶贴
回复

使用道具 举报

1

主题

0

好友

289

积分

中级会员

Rank: 3Rank: 3

UID
100
帖子
21
精华
0
注册时间
2013-3-1
在线时间
6 小时
发表于 2013-5-30 15:45:51 |显示全部楼层
很好,这个必须顶,学习了
回复

使用道具 举报

0

主题

0

好友

19

积分

新手上路

Rank: 1

UID
588
帖子
4
精华
0
注册时间
2014-3-14
在线时间
0 小时
发表于 2014-3-14 10:18:04 |显示全部楼层
好东西,佩服楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2020-11-30 15:51 , Processed in 0.340558 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部