找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4581|回复: 4
收起左侧

基于51单片机的温控电机proteus仿真及源程序

[复制链接]
ID:110456 发表于 2017-7-14 08:50 | 显示全部楼层 |阅读模式
温控电机项目特别提醒:
用Proteus软件进行电路仿真时,TLC549和AT89C51的
电源引脚均隐藏了,在制作电路板时一定要给TLC549
的Pin8接+5V,Pin4接地;AT89C51的的Pin40接+5V,
Pin20接地。

L0NH0%[1B2CEYDJN8}7$MVP.png

0.png

单片机温控电机源程序如下:
  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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:106211 发表于 2018-1-11 16:54 | 显示全部楼层
楼主的这个是控制几度到几度的
回复

使用道具 举报

ID:457895 发表于 2018-12-29 11:23 | 显示全部楼层
为什么我下载不了。。
回复

使用道具 举报

ID:457733 发表于 2018-12-30 18:29 | 显示全部楼层
为什么调整温度转速没有变化
回复

使用道具 举报

ID:369182 发表于 2019-12-23 11:09 | 显示全部楼层
能调温度吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表