标题: 基于51单片机的温控电机proteus仿真及源程序 [打印本页]

作者: 遇见之影    时间: 2017-7-14 08:50
标题: 基于51单片机的温控电机proteus仿真及源程序
温控电机项目特别提醒:
用Proteus软件进行电路仿真时,TLC549和AT89C51的
电源引脚均隐藏了,在制作电路板时一定要给TLC549
的Pin8接+5V,Pin4接地;AT89C51的的Pin40接+5V,
Pin20接地。





单片机温控电机源程序如下:
  1. //产生频率为100Hz的PWM

  2. #include<reg51.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit TLC549_SCLK=P1^5; //定义P1.5引脚位名称为TLC549_SCLK
  6. sbit TLC549_SDO=P1^3; //定义P1.3引脚位名称为TLC549_SDO
  7. sbit TLC549_CS=P1^4; //定义P1.4引脚位名称为TLC549_CS

  8. sbit L298_in1=P2^0;//定义P2.0引脚位名称为L298_in1
  9. sbit L298_in2=P2^1;//定义P2.1引脚位名称为L298_in2
  10. sbit L298_ena=P2^2;//定义P2.1引脚位名称为L298_in2

  11. uchar duty=0;//PWM波形的占空比



  12. uchar  TLC549_data(  )//TLC549的A/D转换程序
  13. {
  14.         uchar result;//定义result存放A/D转换结果
  15.         uchar i=0,j;
  16.   
  17.         TLC549_CS=1;//TLC549的CS引脚输出高电平,为A/D转换做准备
  18.         TLC549_CS=0; //TLC549的CS引脚输出低电平,开始一个A/D转换周期
  19.         result=0;//A/D转换结果清零
  20.         TLC549_SDO=1;// 51单片机读数据时得先把管脚置1
  21.         for(i=0;i<8;i++)
  22.         {
  23.                 if(TLC549_SDO==1)
  24.                         result=result|(0x80>>i);// 从高位到低位依次获取A/D转换的结果                        
  25.                 TLC549_SCLK=1;
  26.                 TLC549_SCLK=0;//输出TLC549的下降沿,从SDO端送出一位A/D转换结果
  27.                 for(j=0;j<2;j++);//下降沿产生后,400ns后新的位被写到数据线上,所以需延时
  28.         }

  29.         TLC549_CS=1;//一个周期结束后,TLC549的CS端设置为高电平
  30.         return result;//返回A/D转换结果

  31. }

  32. void  T0_int( )
  33. {
  34.    TMOD=0x02;       //定时器T1工作于方式2
  35.    TH0=256-100;      //送初值
  36.    TL0=256-100;
  37.    EA=1;           //设置总中断允许
  38.    ET0=1 ;         //设置允许T1中断
  39.    TR0=1;          //启动定时器T1
  40. }

  41. void  time1_int(void)  interrupt  1   //T1中断服务程序,
  42. {
  43.     static uchar i;
  44.          i++;
  45.          if(i==100)
  46.            i=0;
  47.          if(i<duty)
  48.            L298_ena=1;
  49.          else
  50.            L298_ena=0;
  51.   
  52. }



  53. void main()
  54. {
  55.         uint tt;

  56.         T0_int();
  57.         while(1)
  58.         {   
  59.              tt=TLC549_data();//读取温度转换的数字量
  60.             tt=tt*100/250;//计算温度值,根据LM35的特性,温度每变化1°C对应的输出电压为10mV
  61.                           //LM35输出的信号经过放大电路放大了4.9倍,经过TLC549进行A/D转换得到
  62.                          //数字量tt。所以由tt可得到温度值=数字量tt/51/4.9*100
  63.        if((tt<10)||(tt>50))//温度低于10°C或高于50°C,电机停转
  64.         {
  65.             L298_ena=0;
  66.             L298_in2=0;
  67.                                 L298_in2=0;
  68.         }
  69.        else  if(tt<=20)
  70.         {
  71.             duty=45;
  72.             L298_in2=0;
  73.             L298_in1=1;
  74.         }
  75.        else  if(tt<=30)
  76.         {
  77.             duty=100;
  78.             L298_in2=0;
  79.             L298_in1=1;
  80.         }
  81.        else  if(tt<=40)
  82.         {
  83.              duty=45;
  84.             L298_in2=1;
  85.             L298_in1=0;
  86.         }
  87.        else
  88.          {
  89.             duty=100;
  90.             L298_in2=1;
  91. ……………………

  92. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
直流电机.rar (50.58 KB, 下载次数: 64)





作者: harly2200    时间: 2018-1-11 16:54
楼主的这个是控制几度到几度的
作者: hx1314    时间: 2018-12-29 11:23
为什么我下载不了。。
作者: 单片机小能手    时间: 2018-12-30 18:29
为什么调整温度转速没有变化
作者: 林夕li    时间: 2019-12-23 11:09
能调温度吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1