找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4403|回复: 1
收起左侧

五路灰度循迹小车PWM调速单片机源程序

[复制链接]
ID:519606 发表于 2019-5-6 16:33 | 显示全部楼层 |阅读模式
我用的灰度传感器是输出模拟信号(D0)的,循黑线,而且因为一开始轮子转的很快,所以我还用了PWM来调速附带两张灰度传感器的图片(有一张灰度传感器的图片上边圈了一个红圈,那是上拉电阻,不要忘记焊接这个上拉电阻,否则比较器输出的电压达不到4.5V左右)
灰度传感器 输出模拟信号的话就焊接D0,输出数字信号就要把A0那一段也焊接上,当然要想焊接容易一些可以焊接数字信号那一端,当然还得用AD模块转换成模拟信号发送给单片机IO口,而且程序较难写,虽然使用输出模拟信号比较难焊接,但是程序简单。

被圈出来的是上拉电阻

被圈出来的是上拉电阻

被圈出来的是上拉电阻


灰度传感器

灰度传感器

灰度传感器


单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. unsigned char QTIState;
  5. unsigned char pulses;
  6. sbit IN1=P1^1;
  7. sbit IN2=P1^2;
  8. sbit IN3=P1^3;
  9. sbit IN4=P1^4;
  10. sbit ENA=P2^0;
  11. sbit ENB=P2^1;          


  12. uint MA=0,MB=0;
  13. uint SpeedA=20;//50%占空比
  14. uint SpeedB=20;


  15. void Forward(void)//向前行走子程序
  16. {IN1=0;IN2=1;IN3=0;IN4=1;}
  17. void Pivot_Left(void)/*左转子程序,带pivot的都是中间和左边或者中间和右边
  18. 同时检测到轨迹,pivot就是以左电机或者右电机为轴进行旋转*/
  19. {IN1=0;IN2=1;IN3=1;IN4=0;}
  20. void Pivot_Right(void)
  21. {IN1=1;IN2=0;IN3=0;IN4=1;}
  22. /*void Rotate_Left(void)
  23. {IN1=1;IN2=0;IN3=0;IN4=1;}
  24. void Rotate_right(void)
  25. {IN1=0;IN2=1;IN3=1;IN4=0;}*/
  26. void Get_QTI_State()
  27. {
  28.         QTIState = P3&0x1f;        /*P3接灰度传感器那五路,P3收到的数据
  29.         和0001 1111按位与*/
  30. }

  31. void Follow_Line(void)
  32. {
  33.      Get_QTI_State();
  34.      switch(QTIState)
  35.     {
  36.      case 0x04 : Forward();break;//00100
  37.          case 0x02 : Forward();break;//00010 从右往左第二个灯亮了就直走,以防小车停止
  38.          case 0x08 : Forward();break;//01000
  39.          case 0x00 : Forward();break;
  40.      case 0x06 : Pivot_Left();break;/*01100
  41.          这个绕轴转的和不绕轴转的
  42.          可以先随便写,到时候再替换
  43.          */
  44.          case 0x0c : Pivot_Right();break;//00110 中间和四号灯
  45.          case 0x10 : Pivot_Left();break;// 10000从右往左 最高位第五个,左转
  46.          case 0x01 : Pivot_Right();break; // 00001从右往左第一个灯低位亮了,右转
  47.     default:break;
  48.         }
  49. }


  50. void main(void)
  51. {

  52.         TH0 = 0xF4;
  53.         TL0 = 0x48;
  54.         TH1 = 0xF4;
  55.         TL1 = 0x48;
  56.         TMOD = 0x11;
  57.         TR0 = 1;
  58.         TR1 = 1;
  59.         ET0 = 1;
  60.         ET1 = 1;
  61.         EA  = 1;          
  62.         while(1)
  63.         {
  64.                 Follow_Line();
  65.         }
  66. }                  

  67. //时钟0中断处理函数
  68. void time0_int() interrupt 1 using 1
  69. {
  70.         TR0=0;                               
  71.         TH0=0xF4;
  72.         TL0=0x48;
  73.         MA++;                                                 
  74.         if(MA< SpeedA)
  75.         {
  76.           ENA = 1;
  77.         }
  78.         else ENA = 0;
  79.         if(MA == 40)
  80.         {
  81.           MA = 0;
  82.         }
  83.         TR0 = 1;
  84. }

  85. //时钟1中断处理函数
  86. void time1_int() interrupt 3 using 1
  87. {
  88.         TR1=0;
  89. ……………………

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

所有资料51hei提供下载:
51黑论坛_五路灰度循迹小车PWM调速源代码.rar (9.71 KB, 下载次数: 37)

评分

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

查看全部评分

回复

使用道具 举报

ID:542410 发表于 2019-5-19 22:00 | 显示全部楼层
多谢楼主分享!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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