一直从事于LED驱动电源及其他中小功率开关电源开发工作,现在算算也有五年多了,如果继续这样下去,再过几年,我顶多算个老手,但成不了电源专才,所以我觉得有必要尝试一下单片机的学习,让自己全面一点。
自定义项目主题:
INT中断检测交流过零信号的上升或下降沿,利用定时器0中断延时控制交流相角,利用内部EEPROM记忆断电后亮度,兼容对白炽灯和LED可调光灯调光。
目的:
鼓励那些自学单片机很迷惑或曾经想学单片机的同学、朋友们,其实单片机的入门真没有想象中的那么复杂,如果尝试用C语言编程的话,会更容易让你上手,要相信自己!同时这也是自我宣告,我将从之前开关电源的开发初步转行到智能产品的开发。
对于电子专业的朋友们,说起单片机,可能大家会对8051单片机颇有印象。因为在大学期间,电子专业的教科书,如微机原理、单片机的C语言等等全部都是以8051为蓝本来进行宣导授课的。这便导致我,在大学期间错误的以为单片机就叫8051,而8051就叫单片机的荒唐谬论,后来才知8051其实是单片机系统的最早的构架,由因特尔公司推出,后被各大半导体公司引用其内核来开发他们自己各种型号的8位单片机,例如Intel MCS-51系列,Atmel 89C51/52,89C2051等等,当然这也许是我在那个时候压根就没有认真去学的缘故所导致,现在想想都还觉得有点小惭愧。但我不得不承认的是,当时学校学的东西真的很落伍,其实那个时候单片机在中国已经流行十多年了,单片机的品牌、型号其实早已是遍地开,其中不乏一些流行面很广的品牌,如microchip PIC,台湾义隆、AVR、ST、Maxim 等等,下面要介绍的就是以PIC单片机来实现的一个例子。至于为什么选用PIC的单片机,除了它的哈弗总线精简构架外,最关键的原因就是它的受众面广泛,而且一些因仿制它可以直接替换的品牌也挺多。所以不会担心货源的问题。
在介绍之前,先推荐一下我正在拜读的三本书,对于像我们这些初学者,我个人觉得是很受用。 三本书是分时段买的,第一本是《51单片机的C语言教程》作者:郭天祥,短短6个月,目前这本书已破旧不堪。由于目前单片机的品牌型号很多,但对应的书籍却很少,只有51单片机系列的书满天飞,目前自学入门最好的书籍还是51单片机系列的,个人觉得这是一本极好的入门书籍,仿佛是作者在写他大学期间的自学传记,通俗易懂的语言会让你爱不释手。我就是从这本书开始对单片机、C语言有了初步的了解和最终的兴趣。
第二本书是《PIC单片机C语言》,这是隔了一个半月才买的,因为我的初衷就是想学会PIC单片机,所以这一本书让我开始对PIC单片机及其内部结构有了初步的认识,刚开始还真有些不太习惯,因为PIC单片机的IO口复用功能很多,而且都有相关的寄存器需要设定,且中断入口只有一个了,显得有些紧凑,慢慢的直到现在才完全习惯过来。
第三本书是《单片机C语言程序设计实训100例》,这是时隔两个月后再买的,这本的属于思路开拓篇,由于是基于Proteus仿真的一些例子,虽缺乏实际电路运行的效果,但其中作者写程序思路可以值得一看。其实对于一个功能的实现,无论难易程度高低与否,例如实现一个流水灯,会有N多种途径方法来实现它,每个人写法都会不一样,但看到的结果都是一样,那就是灯一个接一个的亮。所以对于我们这些初学者,最好的方法就是不断吸取别人好的方法,让自己的思维更加广泛,用最简介的程序语言来实现
你所需要的功能。
下面就正式介绍我的自定义项目主题: 先看看我租住处的开发环境,三个字乱、差,简。到现在我才明白搞技术开发的都是很苦逼的职业,惭愧的是到现在还没混出个名堂来,情不忍堪,奈何!
这是我要实现的功能演示裸板,说的好听点是全纯手工打造板,说的不好听就是乞丐板。说出来还不信,就连我的编程器(KIT 3.5)都是PIC单片机最低档的编程器,而且还不是原装(原装型号是 PICKIT 3.0),是淘宝上淘的山寨货,不过也还能用,至少现在还没坏。
功能简介:
1、采用PIC16F690单片机,DIP-20封装,插件封装易拆卸,方便学习用,实际采用贴片封装即可。
2、断电后亮度记忆功能,通电后亮度以50ms速度递增到上次断电后的亮度。
3、单个按键控制白炽灯亮度增加或减少,同样以50ms速度来增减,最大100 级灰度控制。
单片机实际引脚只用到5个,VCC、VSS、复位、信号采集、信号数据出、按键输入。利用单片机的内部RC振荡提供时钟,电路非常简洁,功能说白了就是调光,准确的名字是:交流后沿切相式调光。相对于可控硅调光器(前沿切向式),优点是:在相位过零处开启,电流应力很小,无噪音,干扰小,对MOS管基本零损伤开启,寿命长。然而可控制调光器刚好相反。缺点是:成本要高很多。基本国内很少用,基本流行于欧洲国家。
整个思路简介:首先将50HZ 220V的交流正弦波转换成50HZ 5V的直流方波,然后用单片机采集方波信号的上升沿或下降沿,然后开启MOS管,利用定时器0进行延时关断,但不能超出交流半周期10mS,最大最小亮度可以程序设定,100%亮度有100级灰度,渐变的过程会比较平滑。利用内部EEPROM实现断电后亮度记忆功能。通电后,如果没有按按键,亮度会以50ms的速度进行递增,增加到上次关电后的亮度。利用按键长按,同样以50ms速度来调节你需要的亮度。最大调节时间5秒钟。
右图为100%亮度
右图为50%亮度
下图为10%亮度
由于家里没有示波器,所以对波形的抓取就没有上传了,再后续还可以实现对无线RF遥控,红外遥控,或是其他传感器的对接功能,后续有时间再慢慢玩。 学至今,我依然只是个初学者,至少目前对C指针这一块还不熟练,如果要想进一步提高,写大型的、复杂的程序,需要融会贯通才行。现在时间伤不起,年纪也伤不起,如果没有必要的话,我会放弃继续深究这个C指针,因为现在如果要完成一个不是很复杂的功能的话,多练习一下,基本都能对付得了。当然我还是会鼓励那些想学单片机的朋友,如果在单片机方面要有很深的造诣的话,最好还是熟练C指针的用法,当然这得花一点功夫。
虽说我之前一直从事开关电源的开发,但我不得不承认的是模拟电路的掌控一定要比数字电路的掌控要复杂的多,目前我顶多掌握一些皮毛。所以我一直都认为电源开发入门要比单片机入门难许多,所以我还是建议那些想学电子的朋友们,还是先学学单片机吧,入门比较容易,没准过个几年你就是单片机的顶级高手,但是模拟电子领域我不敢这样说。