找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1729|回复: 9
收起左侧

带霍尔传感器的直流电机的c1和c2接51单片机开发板那几个接口

[复制链接]
ID:1045221 发表于 2022-10-25 13:00 | 显示全部楼层 |阅读模式
用什么程序控制,求教大佬说一下

电机如图

电机如图
回复

使用道具 举报

ID:401564 发表于 2022-10-25 14:37 | 显示全部楼层
这就是相当于EC11编码器
接哪里取决于你程序的AB两相读取端口设置在哪个端口
回复

使用道具 举报

ID:1045221 发表于 2022-10-25 14:41 | 显示全部楼层
Y_G_G 发表于 2022-10-25 14:37
这就是相当于EC11编码器
接哪里取决于你程序的AB两相读取端口设置在哪个端口
  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  2. #include<stdio.h>
  3. #include"delay.h"
  4. #include"LCD1602.h"


  5. sbit DCOUT = P1^2;//定义电机信号输出端口
  6. sbit key1=P3^5;           //正转
  7. sbit key2=P3^4;           //反转
  8. sbit key3=P3^3;           //加速
  9. sbit key4=P3^2;           //减速
  10. sbit m=P1^0;
  11. sbit n=P1^1;
  12. /*------------------------------------------------
  13.                   全局变量
  14. ------------------------------------------------*/
  15. unsigned char PWM_ON,S;   //定义速度等级
  16. #define CYCLE 12        //周期


  17. /*------------------------------------------------
  18.                   函数声明
  19. ------------------------------------------------*/

  20. void Init_Timer0(void);//定时器初始化

  21. /*------------------------------------------------
  22.                     主函数
  23. ------------------------------------------------*/
  24. void main (void)
  25. {  
  26. int S=0;
  27. char displaytemp[16];//定义显示区域临时存储数组               
  28. PWM_ON=0;
  29. LCD_Init();         //初始化液晶屏
  30. Init_Timer0();    //初始化定时器0
  31. LCD_Write_String(2,1,"V:");           //正转

  32. while (1)         //主循环
  33.   {

  34.    if(key3==0)//第三个按键,速度等级增加
  35.       {
  36.           DelayMs(10);
  37.           if(key3==0)
  38.             {
  39.                if(PWM_ON<CYCLE)
  40.                  PWM_ON++;
  41.                          S++;
  42.                          if(S>=12)S=12;
  43.             }
  44.                 while(!key3);
  45.           }       
  46.    else if(key4==0)//第四个按键,速度等级减小
  47.           {
  48.                  DelayMs(10);
  49.                  if(key4==0)
  50.                    {
  51.                      if(PWM_ON>0)
  52.                         PWM_ON--;
  53.                                         S--;
  54.                                         if(S<=0)S=0;
  55.                    }
  56.                         while(!key4);
  57.               }
  58.         if(key1==0)//第一个按键,正转
  59.       {
  60.           DelayMs(10);
  61.           if(key1==0)
  62.             {
  63.                m=1;n=0;
  64.                    LCD_Write_String(0,0,"T");           //正转
  65.             }
  66.                 while(!key1);
  67.           }       
  68.    else if(key2==0)//第二个按键,反转
  69.           {
  70.                  DelayMs(10);
  71.                  if(key2==0)
  72.                    {
  73.                      m=0;n=1;
  74.                                  LCD_Write_String(0,0,"N");           //正转
  75.                    }
  76.                         while(!key2);
  77.               }                 
  78.         sprintf(displaytemp,"%3d",S);
  79.     LCD_Write_String(4,1,displaytemp);//显示第二行       

  80.   }
  81. }

  82. /*------------------------------------------------
  83.                     定时器初始化子程序
  84. ------------------------------------------------*/
  85. void Init_Timer0(void)
  86. {
  87. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  88. //TH0=0x00;              //给定初值
  89. //TL0=0x00;
  90. EA=1;            //总中断打开
  91. ET0=1;           //定时器中断打开
  92. TR0=1;           //定时器开关打开
  93. }
  94. /*------------------------------------------------
  95.                  定时器中断子程序
  96. ------------------------------------------------*/
  97. void Timer0_isr(void) interrupt 1
  98. {
  99. static unsigned char count;
  100. TH0=(65536-2000)/256;                  //重新赋值 2ms
  101. TL0=(65536-2000)%256;

  102. if (count==PWM_ON)
  103.     {
  104.      DCOUT = 0;               //如果定时等于on的时间,
  105.                          //说明作用时间结束,输出低电平
  106.     }
  107.   count++;
  108. if(count == CYCLE)       //反之低电平时间结束后返回高电平
  109.     {
  110.     count=0;
  111.         if(PWM_ON!=0)    //如果开启时间是0 保持原来状态
  112.            DCOUT = 1;      
  113.     }
  114. }
复制代码
回复

使用道具 举报

ID:1045221 发表于 2022-10-25 14:42 | 显示全部楼层
Y_G_G 发表于 2022-10-25 14:37
这就是相当于EC11编码器
接哪里取决于你程序的AB两相读取端口设置在哪个端口

在程序中,怎么看啊,小白一个
回复

使用道具 举报

ID:25310 发表于 2022-10-25 15:11 | 显示全部楼层
一般接两个中断口;或一个中断口,一个普通IO口。高级用法是A ,B 接到编码器引脚。
回复

使用道具 举报

ID:401564 发表于 2022-10-25 20:38 | 显示全部楼层
bouligand 发表于 2022-10-25 14:42
在程序中,怎么看啊,小白一个

小白做不了这个,先把自己变成小黑再做这个,实在不行就改行吧
你代码的8-11行,就那么几个端口,如果是我,我每个都试一下,这不就有结果了吗?
如果代码中并没有这个功能,你觉得这是我一两句话就能解决得了吗?
回复

使用道具 举报

ID:123289 发表于 2022-10-26 10:12 | 显示全部楼层
建议先读通设备手册,了解清除控制的逻辑关系。
回复

使用道具 举报

ID:844772 发表于 2022-10-26 14:55 | 显示全部楼层
程序不是给这种电机用的吧
回复

使用道具 举报

ID:384109 发表于 2022-10-26 15:03 | 显示全部楼层
代码里没有使用编码器的输出
回复

使用道具 举报

ID:94031 发表于 2022-10-26 15:29 | 显示全部楼层
高级单片机有直接读编码器信号硬件,直接能读出电机转向及转速,51只能通过中断口数脉冲测转速,C1或C2接51单片机中断口P32或P33.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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