新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Atmega16单片机的重物提升控制系统设计

基于Atmega16单片机的重物提升控制系统设计

作者: 时间:2011-07-20 来源:网络 收藏

5位移量的计算
微处理器内包含3个独立的定时器/计数器模块,其中T/C0、T/C2是8位定时器/计数器模块,T/C1是16位的定时器/计数器模块。硬件中选择T0、T1作为正反转计数器,记录光电编码器输出的正、负脉冲数。在软件中一定要将T0、T1计数器进行扩展,使其有足够的计数空间,扩展位移测量范围。笔者在软件时,将T0、T1进行扩展,使它们都是长整数(32位)形式,利用的就是计数器满产生溢出中断的形式扩展的。这样T0计数256个脉冲产生中断一次, T1计数65 536个脉冲产生中断一次。
T0、T1控制寄存器设置及产生溢出中断程序为:

TCCR0=0x06; //计数脉冲由T0引脚输入,下降沿有效。
TCCR1B=0x06; //计数脉冲由T1引脚输入,下降沿驱动
有效。

  #pragma interrupt_handler timer1_ovf_isr:9//正计数 16bits
void timer1_ovf_isr(void){
   cnt1++; //32位计数
  }
  #pragma interrupt_handler timer0_ovf_isr:10 //负计数8bits
  void timer0_ovf_isr(void){
   long c;
   cnt0++; //32位计数
   c=(cnt0>>8); //防止cnt0,cnt1溢出
   if(c (cnt1>=c))
   {cnt1-=c; //计算计数差值
   cnt0=cnt00xff; //只保留低8位
} }
设计中,选择型号为S38-J3V100光电编码器,输出编码是500码/转,则脉冲当量是πd/500,当前的位移量就是总脉冲数与脉冲当量的乘积。软件计算程序如下:
  …
  posicnt=(cnt116)|TCNT1; //正脉冲数
  negcnt=(cnt08)|TCNT0; //负脉冲数
  totalcnt =posicnt-negcnt; //产生位移量大的总脉冲数
  curPosi=(totalcnt*(meterCyl*1000+ CentCyl));
  curPosi/=PLS_PER_ROUND; //当前的位移量

  执行运行命令,微处理器就要对设定的位移量进行计算,把位移量大小转换成脉冲数的多少。在运行中进行脉冲数的比较,如果相等,则停止运行,表示已经达到目标位置。软件计算程序如下:
sysStatus = SYS_RUN;
PosiSet=meterPosi*1000+CentPosi; //毫米计算
cntSet=(PosiSet*PLS_PER_ROUND)/(CentCyl+
meter Cyl*1000);
if(cntSet>totalcnt) Command=CMD_FWD;
//执行正转命令
else if(cntSettotalcnt) Command=CMD_REV;
//执行反转命令
else sysStatus=SYS_IDLE; //停止状态
本方案设计的在实际运行过程中获得了良好的动态性能,控制精确,智能化程度高。利用光电编码器作为位移传感器,能获取高精度控制信号。高性价比的使成本大大降低,提高了软件设计的灵活性,简化了硬件电路设计,具有很好的实用价值。
参考文献
[1] 李劲松.实轴增量式光电编码器测量电路的设计[J].实验室研究与探索 2007.26(2): 12~14.
[2] Atmel Corporation.ATMEG16 用户手册[Z].Atmel Corporation,2002.
[3]/Atmega16L Datasheet: 8 b Microcont roller with 128K bytes in 2 System Programmable Flash[Z].
[4] 阎石.数字电子技术基础[M].北京:高等教育出版社, 1997.
[5] 沈文,詹卫前. AVRC语言开发入门指导[M]. 北京:清华大学出版社,2003.
[6] 马潮,詹卫前,耿德根著.ATmega 8原理及应用手册[M]. 清华大学出版社,1998.


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭