• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

【单片机开源学习】跟着乐老师学习数控电源

   跟着乐老师学习数控电源,欢迎大家一起来学习、讨论。

个人还是比较喜欢有个电源指示灯,所以另外加了个“小红”

全部回复(62)
正序查看
倒序查看
2015-01-18 00:27

最近比较忙今天晚上才把板子焊完,不过功率板还没上电,只有一路电源过几天得去买个变压器。有谁买到了吗?给个淘宝链接,我不知道要买哪种

下载程序的时候要装一下驱动谁要我贴上来方便下载CH340IR.rar

下载软件用新版本的会自动读取COM口stc-isp-15xx-v6.70.rar

程序可以下载了,接下来就可以自己调程序啦。先睡觉,改天了。

0
回复
2015-01-18 00:33
@又一个暑假
最近比较忙今天晚上才把板子焊完,不过功率板还没上电,只有一路电源过几天得去买个变压器。有谁买到了吗?给个淘宝链接,我不知道要买哪种下载程序的时候要装一下驱动谁要我贴上来方便下载CH340IR.rar下载软件用新版本的会自动读取COM口stc-isp-15xx-v6.70.rar[图片]程序可以下载了,接下来就可以自己调程序啦。先睡觉,改天了。

3楼占着到时候留着贴程序

Projet.rar

Projet1.rar

Projet2.rar

0
回复
dzl5188
LV.3
4
2015-01-18 09:17
@又一个暑假
最近比较忙今天晚上才把板子焊完,不过功率板还没上电,只有一路电源过几天得去买个变压器。有谁买到了吗?给个淘宝链接,我不知道要买哪种下载程序的时候要装一下驱动谁要我贴上来方便下载CH340IR.rar下载软件用新版本的会自动读取COM口stc-isp-15xx-v6.70.rar[图片]程序可以下载了,接下来就可以自己调程序啦。先睡觉,改天了。

我买了一个,能用,

0
回复
2015-01-19 09:50
@dzl5188
我买了一个,能用,
麻烦你把链接贴出来
0
回复
2015-01-19 13:46
@又一个暑假
麻烦你把链接贴出来
对了,你的晶振频率要改一下,选择22.1184M
0
回复
lx1507
LV.4
7
2015-01-19 15:57
@yueyunno1
对了,你的晶振频率要改一下,选择22.1184M
请问为什么要选这个频率,选择其它的行吗?
0
回复
2015-01-19 20:10
@lx1507
请问为什么要选这个频率,选择其它的行吗?
我也不知道为什么要选,还是等着乐老师来回答。
0
回复
2015-01-20 09:03
@又一个暑假
我也不知道为什么要选,还是等着乐老师来回答。
主频高单片机的运算速度会快很多,PWM的频率也会高,最终控制数控电源的速度和纹波都会好很多。
0
回复
2015-01-20 09:26
@yueyunno1
主频高单片机的运算速度会快很多,PWM的频率也会高,最终控制数控电源的速度和纹波都会好很多。

噢,我知道了。板子上的晶振是供CH430用的。而单片机用了内部的。

0
回复
2015-01-20 09:31
@又一个暑假
噢,我知道了。板子上的晶振是供CH430用的。而单片机用了内部的。
GOOD
0
回复
2015-01-29 10:04
帖子已被推荐到帖子底部经典图库。更多请点击哦:http://www.dianyuan.com/bbs/classic/
0
回复
2015-01-29 10:10
赞一个  又一个暑假!~学习能力蛮强的嘛~
0
回复
hiyle
LV.1
14
2015-01-29 11:27

这个单片机我用过的,做数控电源,有点勉强!

0
回复
2015-01-29 11:31
@hiyle
这个单片机我用过的,做数控电源,有点勉强!
这个芯片学习和常规应用够了,如果要高精度就得加外置AD+高精度基准源。
0
回复
2015-01-29 13:24
@电源网-fqd
帖子已被推荐到帖子底部经典图库。更多请点击哦:http://www.dianyuan.com/bbs/classic/
不要乱推荐啊,最近比较忙帖子都没更新
0
回复
2015-02-09 17:02

乐老师的这个毫秒延时函数误差有点大吧,有人去算过吗

0
回复
2015-02-09 17:04
@电源网-娜娜姐
赞一个 又一个暑假!~学习能力蛮强的嘛~
多谢娜姐的夸奖
0
回复
2015-02-09 20:45
@又一个暑假
[图片]乐老师的这个毫秒延时函数误差有点大吧,有人去算过吗
可参考

/******************************************************************
 - 功能描述:1MS延时子程序   带(16位)参数
 - 隶属模块:
 - 参数说明:无
 - 返回说明:无
 - 注:      此处MAIN_Fosc=22.1184 MHz
 ******************************************************************/
void  Delay_ms(uint x_ms)
{
  unsigned int i;
  do
   {
     i = MAIN_Fosc / 13000;
     while(--i)	;   //14T 
   }while(--x_ms);
}

0
回复
2015-02-09 20:54

参考乐老师的程序改成本人自己的编程风格,一步步慢慢来。先给出最简单的,显示电源网的logo,且LED等闪起来,蜂鸣器”滴滴“。。。。源代码见3楼

0
回复
2015-02-10 09:21
@又一个暑假
参考乐老师的程序改成本人自己的编程风格,一步步慢慢来。先给出最简单的,显示电源网的logo,且LED等闪起来,蜂鸣器”滴滴“。。。。源代码见3楼[图片][图片]
不错,挺好的,继续。
0
回复
2015-02-10 11:55
@yueyunno1
不错,挺好的,继续。
白天太忙,今天晚上写用定时器部分
0
回复
2015-02-10 22:20

今天晚上回来写了一下定时器的程序,实现功能跟前面一样。

定时器配置如下:

中断服务函数:

源代码3楼

0
回复
苑留记
LV.8
24
2015-02-11 11:09

顶下吧,好同学,以后多帮帮我,可以吧

0
回复
2015-02-11 11:17
@苑留记
顶下吧,好同学,以后多帮帮我,可以吧
能忙得上的 肯定帮
0
回复
苑留记
LV.8
26
2015-02-11 11:47
@又一个暑假
能忙得上的肯定帮

无非胡是那些单片机基础知识,我还没入门,菜鸟小白一只

0
回复
2015-02-11 17:29
@苑留记
无非胡是那些单片机基础知识,我还没入门,菜鸟小白一只
有什么问题到这里来一起讨论
0
回复
2015-02-12 10:28
按键部分参照吴坚鸿的思想

源代码见3楼

0
回复
2015-02-12 15:10
@又一个暑假
按键部分参照吴坚鸿的思想[图片]源代码见3楼

还有一个按键的写法更酷,我用Proteus仿真了一下 ,不妨大家也可以看看这样的按键写法,不过核心算法我是原创的,我相信也很多人看过,没看过的朋友仔细看看,会有收获的。

源代码如下:

/******************************************************************
 - 功能描述:主要是想测试按键的算法 按键按下对应的LED灯翻转
                            又一个暑假  2015.02.12
 ******************************************************************/

#include "REG52.H"

#define  PINB   P1

sbit  LED0 = P2^0;
sbit  LED1 = P2^1;
sbit  LED2 = P2^2;
sbit  LED3 = P2^3;

volatile unsigned char Key_Value; 
volatile unsigned char Key_Trg; 
volatile unsigned char Key_Cont; 
volatile unsigned char Key_Release; 

void Key_Scan(void)  ;  //按键扫描函数
void Key_Service(void); //按键服务函数
void KeyRead( void );   //按键核心算法

/******************************************************************
 - 功能描述:中断服务函数
 - 参数说明:无   
 - 返回说明:无
 - 注: 
 ******************************************************************/
void T0_time(void) interrupt 1
{
  TF0=0;  //清除中断标志
  TR0=0;  //关中断
	
	
  Key_Scan();

  TH0=(65535-20000)/255;   //重装初始值
  TL0=(65535-20000)%255;
  TR0=1;  //开中断
}

/******************************************************************
 - 功能描述:单片机初始化
 - 参数说明:无
 - 返回说明:无
 - 注: 
 ******************************************************************/
void Init_Mcu(void)          //初始化单片机
{
  TMOD=0x01;  //设置定时器0为工作方式1
  TH0=0xff;   //重装初始值(65535-2000)=63535=0xf82f
  TL0=0xf0;
	EA=1;       //开总中断
  ET0=1;      //允许定时中断
  TR0=1;      //启动定时中断
}

/******************************************************************
 - 功能描述:主函数
 - 参数说明:无   
 - 返回说明:无
 - 注: 
 ******************************************************************/
void main ( void )
{
   Init_Mcu() ;
	 while(1)
	 {
    	 Key_Service();
	 }
}
/******************************************************************
 - 功能描述:执行按键按下 要执行的任务
 - 参数说明:无    
 - 返回说明:无
 - 注: 
 ******************************************************************/
void Key_Service( void ) //第三区 按键服务的应用程序
{
  switch(Key_Value) //按键服务状态切换
  {
    case 1:  Key_Value = 0; LED0=!LED0;  break;
    case 2:  Key_Value = 0; LED1=!LED1;  break;                        
    case 3:  Key_Value = 0; LED2=!LED2;  break;              
    case 4:  Key_Value = 0; LED3=!LED3;  break;
    default:  break;		
  }                
}
/******************************************************************
 - 功能描述:按键核心算法
 - 参数说明:无
 - 返回说明:无
 - 注: 
 ******************************************************************/
void KeyRead( void ) 
{ 
  unsigned char read_data = PINB^0xff;           // 1  读键值
  Key_Trg = read_data & (read_data ^ Key_Cont);  // 2  得到按下触发值
  Key_Release=  (read_data ^ Key_Trg ^ Key_Cont);// 3  得到释放触发值
  Key_Cont = read_data;                          // 4  得到所有未释放的键值
}

/******************************************************************
 - 功能描述:按键扫描函数
 - 参数说明:无  
 - 返回说明:无
 - 注:  
 ******************************************************************/
void Key_Scan( void ) 
{
   KeyRead();

	switch(Key_Trg & 0xf0)  
  {
    case 0x10:  Key_Value = 1; break;
    case 0x20:  Key_Value = 2; break;           
    case 0x40:  Key_Value = 3; break;        
    case 0x80:  Key_Value = 4; break;
    default:    Key_Value = 0; break;				    		
  }      
}

0
回复
2015-02-12 15:24
@又一个暑假
还有一个按键的写法更酷,我用Proteus仿真了一下,不妨大家也可以看看这样的按键写法,不过核心算法我是原创的,我相信也很多人看过,没看过的朋友仔细看看,会有收获的。源代码如下:/******************************************************************-功能描述:主要是想测试按键的算法按键按下对应的LED灯翻转又一个暑假2015.02.12******************************************************************/#include"REG52.H"#definePINBP1sbitLED0=P2^0;sbitLED1=P2^1;sbitLED2=P2^2;sbitLED3=P2^3;volatileunsignedcharKey_Value;volatileunsignedcharKey_Trg;volatileunsignedcharKey_Cont;volatileunsignedcharKey_Release;voidKey_Scan(void);//按键扫描函数voidKey_Service(void);//按键服务函数voidKeyRead(void);//按键核心算法/******************************************************************-功能描述:中断服务函数-参数说明:无-返回说明:无-注:******************************************************************/voidT0_time(void)interrupt1{TF0=0;//清除中断标志TR0=0;//关中断Key_Scan();TH0=(65535-20000)/255;//重装初始值TL0=(65535-20000)%255;TR0=1;//开中断}/******************************************************************-功能描述:单片机初始化-参数说明:无-返回说明:无-注:******************************************************************/voidInit_Mcu(void)//初始化单片机{TMOD=0x01;//设置定时器0为工作方式1TH0=0xff;//重装初始值(65535-2000)=63535=0xf82fTL0=0xf0;EA=1;//开总中断ET0=1;//允许定时中断TR0=1;//启动定时中断}/******************************************************************-功能描述:主函数-参数说明:无-返回说明:无-注:******************************************************************/voidmain(void){Init_Mcu();while(1){Key_Service();}}/******************************************************************-功能描述:执行按键按下要执行的任务-参数说明:无-返回说明:无-注:******************************************************************/voidKey_Service(void)//第三区按键服务的应用程序{switch(Key_Value)//按键服务状态切换{case1:Key_Value=0;LED0=!LED0;break;case2:Key_Value=0;LED1=!LED1;break;case3:Key_Value=0;LED2=!LED2;break;case4:Key_Value=0;LED3=!LED3;break;default:break;}}/******************************************************************-功能描述:按键核心算法-参数说明:无-返回说明:无-注:******************************************************************/voidKeyRead(void){unsignedcharread_data=PINB^0xff;//1读键值Key_Trg=read_data&(read_data^Key_Cont);//2得到按下触发值Key_Release=(read_data^Key_Trg^Key_Cont);//3得到释放触发值Key_Cont=read_data;//4得到所有未释放的键值}/******************************************************************-功能描述:按键扫描函数-参数说明:无-返回说明:无-注:******************************************************************/voidKey_Scan(void){KeyRead();switch(Key_Trg&0xf0){case0x10:Key_Value=1;break;case0x20:Key_Value=2;break;case0x40:Key_Value=3;break;case0x80:Key_Value=4;break;default:Key_Value=0;break;}}

这个程序不是在数控电源的板子上运行的 

源代码就贴在这了。按键.rar

0
回复
2015-02-12 15:46
今年开头写了一点 ,过完年继续更新,还有AD、PWM、EEPROM,最后整合
0
回复