0

关于投票
[原创]用M48的PWM功能控制风扇转速

   比较基础简单的试验,适合新手入门老鸟就不用看了,呵呵!

   ATMega48的定时器1工作在8位快速PWM模式,产生3906.25Hz的PWM波通过三极管来调整风扇的转速,风扇是CPU散热器上的直流12V风扇。程序是循环重低到高再到低来调整风扇转速。

点击看大图

代码如下:

/*************************************************************************
* Copyright (c) 2007 wormchen            
* All rights reserved             
* 文 件 名: main.c              
* 说    明: PWM 调整风扇转速                
*                            
* 主要硬件: AtemlMega48(内部1M)            
* 编译环境: WinAVR 20070525            
* 当前版本: 1.0               
* 作    者: wormchen               
* 完成日期: 2008年4月22日11:33:19          
* 取代版本: 1.0               
* 原作  者: wormchen              
* 完成日期: 2008年4月22日11:33:23          
************************************************************************/  
#include
#include
#include
unsigned int uchPWM = 0;

/************************************************************************
* 名称: void DelayMS(unsigned int uiMS)           
* 功能: 延时nms                     
* 参数: 无                                   
* 返回: 无                                     
************************************************************************/
void DelayMS(unsigned int uiMS)
 { 
  while(uiMS--)
   {
    _delay_loop_2(250); // 延时1ms(粗略)
   }
 }
/*************************************************************************
* 名称: void PORT_Init(void)              
* 功能: 端口初始化                    
* 参数: 无                                   
* 返回: 无                                     
*************************************************************************/ 
void PORT_Init(void)
 {
  PORTB &=  ~((1 << PB1) | (1 << PB2));
  DDRB = (1 << PB1) | (1 << PB2); 
 } 
/*************************************************************************
* 名称: void Timer1_Init(void)              
* 功能: TIMER1初始化                    
* 参数: 无                                   
* 返回: 无                                     
*************************************************************************/
void Timer1_Init(void)
{
 //快速PWM模式频率3906.25Hz
 TCNT1 = 0x0000;
 OCR1A = 0x0000;
 TCCR1A = (1 << COM1A1) | (1 << COM1B1) | (1 << WGM10);
 //比较匹配清零TOP置位
 TCCR1B = (1 << WGM12) | (1 << CS10);
 //定时器1工作于8位快速PWM模式无分频

int main(void)
 {
  PORT_Init();
  Timer1_Init();
  while(1)
   {
    for(uchPWM = 0 ; uchPWM < 255; uchPWM++)
    {
     OCR1A = uchPWM;
     if(uchPWM == 0)
     {
      DelayMS(2000);
     }
     else
     {
      DelayMS(100);
     }     
    }
    for(uchPWM = 255 ; uchPWM > 0; uchPWM--)
    {
     OCR1A = uchPWM;
     if(uchPWM == 255)
     {
      DelayMS(2000);
     }
     else
     {
      DelayMS(100);
     }
     
    }
   }
 }

 

系统分类: 单片机
用户分类: AVR
标签: PWM 转速 m48 AVR
来源: 原创
发表评论 阅读全文(215) | 回复(0)

0

关于投票
[原创]用L298驱动直流减速电机

   前一段有个朋友让我帮忙做一个电机控制的小东西要求是:控制直流减速的电机的启动、停止和正反转。起初我用4个N沟道IRF540N来做H桥驱动,发现H桥并不能输出12V电压给电机并且上桥避MOS很热,因为以前没有做过H桥后来查资料才知道是MOS管没有完全饱和导通再加上管子压降,所以输出电压不够。要想解决问题就必须提高上臂GS电压,电源是12V,栅极就必须是24V才能使上臂完全饱和导通。这样就必须提高电源,虽然有专用的桥驱动IC IRF2401但是一片几十元价格最后我还是放弃这种方案,选用小功率的直流电机驱动芯片L298,这是一款常用驱动IC,内部有两组H桥,驱动电流2A,40V正好满足我的要求(我的电机是直流12V15W),并且驱动电路简单。

   接下来我用ATTiny13来驱动L298来控制直流减速电机,程序到是很简单,但调试的时候又遇到了麻烦,搭好电路在运行的时候发现单片机有重启的现象,起初以为是电源功率不够电机启动拉低电源电压照成单片机重启,后来更换电源后问题依旧。既然不是电源问题,那就是有干扰信号影响单片机 ,我用示波器来监视单片机跟L298连接控制线并有杂波信号过来,这很让我感到很疑惑。一位同事看后我的电路说:“是不是管子电流不够啊?”我这才发现我的电源桥式整流用的是IN4007,电机消除反相电动势的是4个二极管是1N5819,这些管子电流都是1A,而我的电机电流是1.2A的,因为当时手头有这两种管子于是就随手焊上去了。在更换更大功率的管子1N5408和1N5822后,连续运行两天一切正常,问题的原因在于器件的参数不对。

   通过这次事情对于电机驱动我也总结了几点心得,以后再做这方面电路是值得注意的:

1.电机供电最好和单片机供电独立开来,中间加光耦隔离。防止电机通过回路干扰单片机。如果非要共用一个电源,那也要采取一些措施模拟地和数字地单点共地,采用0欧电阻或磁珠连接;

2.元件件的参数要留一定的富裕量,保证能可靠工作。IC器件VCC加104电容高频滤波;

3.PCB布线强弱电分开,尽量远离走线;

由于单片机程序比较简单就不在贴上来了,下面只放上原理图和实物图片:

点击看大图

点击看大图

点击看大图

系统分类: 单片机
用户分类: AVR
标签: L298 直流电机
来源: 原创
发表评论 阅读全文(290) | 回复(10)

0

关于投票
[原创]AVR并口下载线自制

今天上午我用STK500下载程序的时候发现烧不能烧录程序了,读芯片数据也是时对时错,芯片ID号每读一次都不一样很是奇怪。再确定目标板硬件连接没有问题后,更换STK500晶体后故障依旧。这下我可着急了手头没有别的烧录器了,因为是给一个朋友做的一个小项目催的很急,再买去新的下载器一来一回也要耽误几天。后来想到了并口下载线,这个制作简单不需要单片机只需要很少几个元件就可以制作完成,上位机可以用双龙的SLISP,下午去中州商场买齐元件(很遗憾没有买到配套的壳体),晚上焊接完毕后接目标板测试下载程序正常,又抱着试试的心态重新烧写STK500的固件,我的STK500又奇迹般的好了,o(∩_∩)o...这个并口下载器可给我帮了大忙了,其实对于初学者是个不错的选择,整个下来也就7、8块钱,唯一缺点就是速度不是很快!

参考ouravr网站上的原理图:

点击看大图

我自己作的并口ISP正面图: