2

关于投票
[原创]电机调速

利用上一篇的过零检测电路,过零信号接51单片机外部中断1(下降沿触发),单片机延时触发可控硅导通实现调速。

点击看大图

点击看大图

*感谢郭隆红网友帮我找出错误

点击看大图

部分程序:

/*********************************************************************
函数名称: void ISR_Int1OverZeroDetect() interrupt IE1_VECTOR             
函数功能: 外部中断1过零信号捕获中断服务程序                
入口参数:                      
返回  值:                                
*********************************************************************/
 void ISR_Int1OverZeroDetect() interrupt IE1_VECTOR
{   
  switch(g_uchWindSpeed)//设置定时器延时
 {
  case 0:
  {
   TH1 = (65536 - 1800) / 256;                         
      TL1 = (65536 - 1800) % 256;     
   break;
  }
  case 1:
  {
   TH1 = (65536 - 6000) / 256;                         
      TL1 = (65536 - 6000) % 256; 
   break;
  }
  case 2:
  {
   TH1 = (65536 - 7000) / 256;                         
      TL1 = (65536 - 7000) % 256; 
   break;
  }
  }
 TR1 = 1; // 启动定时器1

/*********************************************************************
函数名称: void ISR_Timer1TriacsTrigger() interrupt TF1_VECTOR            
函数功能: 定时器0触发可控硅中断服务程序               
入口参数:                       
返回  值:                                
*********************************************************************/
void ISR_Timer1TriacsTrigger() interrupt TF1_VECTOR
{
  TH1 = 0xFF; //定时器0延时200                        
    TL1 = 0x38;
 if(g_bTirggerFlag)
    {
  P2_5 = 1;
        g_bTirggerFlag = 0;
        TR1 = 0; // 关闭定时器0
    }
    else
    {
  P2_5 = 0;
        g_bTirggerFlag = 1;
    }
}

/*********************************************************************
函数名称: void Init_System(void)               
函数功能: 系统初始化                  
入口参数:                      
返回  值:                                
*********************************************************************/ 
void System_Init(void)
{  
 TMOD = 0x11; //定时器0,1工作模式1, 16位定时方式

 ET1 = 1; //使能定时器1溢出中断
 EX0 = 1;
 IT0 = 1;
 EX1 = 0; //外部中断1禁止
 IT1 = 1; //外部中断1下降沿触发中断
  EA = 1; //全局中断使能
}

系统分类: 单片机
用户分类: 51
标签: 电机 调速 51
来源: 原创
发表评论 阅读全文(1101) | 回复(3)

0

关于投票
[整理]单片机C51编程规范

传一个我在网络上找的关于C51编程规范的资料,主要针对C51编程语言和keil编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。一个良好的编程风格,不但程序清晰易读,维护起来也很方便。特别是在一些大项目团队合作的情况显的尤其重要!俺现在就在这方面努力改进,呵呵...

pdf《单片机C51编程规范》

系统分类: 单片机
用户分类: 51
标签: 编程 规范 单片机
来源: 整理
发表评论 阅读全文(662) | 回复(1)

2

关于投票
[原创]用PCF8563时钟芯片遇到的问题

最近做一个控制板用到PCF8563时钟芯片,芯片的初始化和读写都很正常,但是再我实验掉电后时钟是否运行正常的时候(我用3VRC2032作备用电池)发现再次上电的时候分钟会很快增加。刚开始我还以为是我在五十几秒的时候掉电呢,后来经过几次不同时间掉电再上发现分钟还是很快会增加。后来我把秒也显示出来才发现每次掉电后再上电秒都是从54开始走起,这种问题我还是头一次遇到。程序能读出来和写入,我感觉驱动程序上应该不会有问题,那是什么问题呢:( ,难到是初始化的问题,再次看过一边手册并没有说要初始化,只是有一个启动和停止时钟的操作位。我掉电后是由备份电池供电继续供电,所以不需要初始化这一点我也排除了,再有就是上电的时候电源会不会影响8563,我仔细检查电路后觉得也不会因为这个,8563供电部分加有100uf的电容滤波况且手册上说他的供电电源范围很宽1~5.5V。然后我开始在QQ上请教一些朋友,结果他们也看不出我的程序有什么问题。后来我加的“AVR技术讨论”群里的一位朋友问了我一句:“加上拉电阻没?”,我的电路确实没加上拉电阻,当初我设计图纸的时候用的51的P1口,本身是带上拉电阻的,虽然手册典型应用电路里有上拉电阻但设计电路时我就没加,后来在调试程序的时候PCF8563时钟数据读取和写入都很正常所以就觉得不加也可以。我实在是想不出还有其他什么问题会造成现在问题,索性焊上两个4.7K的电阻吧,反正又不费事如果不行不也就排除了这种可能性吗?在焊上两个上拉电阻后,掉电后再上电竟然正常了,我不放心又在不同秒的时候反复实验,发现时钟走的很正常。难道就没有加上拉电阻上电的时候影响了时钟芯片,我很疑惑,虽然问题解决了但我感觉还是糊里糊涂的,不知道问题的根源出在什么地方,希望看到这篇文章知道原因的朋友告诉我。

写这篇文章的目的是为了大家在用PCF8563时能够注意到这个问题(或许你根本不会遇到),在设计电路时也能细心仔细,不要应为一时的疏忽大意带来后期不必要的麻烦!下面是官方的典型应用电路:

点击看大图

系统分类: 单片机
用户分类: 51
标签: PCF8563 RTC 51
来源: 原创
发表评论 阅读全文(1275) | 回复(3)

4

关于投票
[原创]交流电机驱动电路

 

点击看大图

我用来单片机控制交流电机正反转和调速用的。

 

 

系统分类: 单片机
用户分类: 51
标签: 交流电机 调速
来源: 原创
发表评论 阅读全文(668) | 回复(1)

2

关于投票
[原创]PCF8563驱动

    上一篇文章提到PCF8563时钟芯,写I2C驱动也就是为了读写PCF8563的,在这里我再附上51下驱动PCF856库函数,虽然不是很难的东西但我想对于新手来说还是有帮助的,可以少走点弯路。。。。有点老王买瓜的味道,废话少说转入正题:

PCF8563手册:pdf                驱动库函数:rar

系统分类: 单片机
用户分类: 51
标签: PCF8563 51
来源: 原创
发表评论 阅读全文(581) | 回复(0)

3

关于投票
[原创]I2C总线驱动

最近工作时要用51驱动PCF8563,随手把以前写的驱动DS1302的I2C库文件加入工程仿真竟然不通过,汗~。后来仔细检查发现是I2C驱动有问题,也许是以前写的时候没严格要求时序,这次认认真真仔仔细细研究了一下I2C总线协议,重新编写了I2C标准驱动库函数,欢迎大家测试交流!

下载: rar

系统分类: 单片机
用户分类: 51
标签: I2C 51
来源: 原创
发表评论 阅读全文(630) | 回复(1)
总共 , 当前 /