找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2888|回复: 2
打印 上一主题 下一主题
收起左侧

步进电机旋转一定角度用单片机控制的程序怎么写?

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:219729 发表于 2017-7-27 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
步进电机旋转一定角度用32单片机控制的程序怎么写?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:137999 发表于 2017-7-27 19:19 | 只看该作者
#include <reg52.h>   sbit LeftA1 = P1^0; sbit LeftA2 = P1^1; sbit LeftB1 = P1^2; sbit LeftB2 = P1^3; sbit EnLeft = P2^3;  sbit RightA1 = P1^4; sbit RightA2 = P1^5; sbit RightB1 = P1^6; sbit RightB2 = P1^7; sbit EnRight = P2^4;  unsigned char T0RH; unsigned char T0RL; signed long LeftBeats = 0; signed long RightBeats = 0;  void ConfigTimer0(unsigned int ms); void StartLeftMotor(signed long angle); void StartRightMotor(signed long angle);   unsigned char code BeatCode[8] = {//不同的引脚驱动代码不一样     0xE,0xA,0xB,0x9,0xD,0x5,0x7,0x6 };  void main() {     EA = 1;      EnLeft = 0;     EnRight = 0;     ConfigTimer0(3);//此值越大,转的越慢     StartLeftMotor(360*25);//调整转的角度     StartRightMotor(360*25);      while (1); }  void StartRightMotor(signed long angle) {     EnRight = 1;     EA = 0;     RightBeats = (angle*400)/360;     EA = 1; }  void StartLeftMotor(signed long angle) {     EnLeft = 1;     EA = 0;     LeftBeats = (angle*400)/360;     EA = 1; }  void LeftMotor() {     unsigned char tmp;      static unsigned char index = 0;        if(LeftBeats != 0)     {         if(LeftBeats > 0)         {                     index++;                                index = index & 0x07;             LeftBeats--;                }          else         {             index--;             index = index & 0x07;             LeftBeats++;         }           tmp = P1;                            tmp = tmp & 0xF0;                     tmp = tmp | BeatCode[index];         P1  = tmp;                    }     else     {         P1 = P1 | 0x0F;     }   }  void RightMotor() {     unsigned char tmp;     static unsigned char index = 0;      if(RightBeats != 0)     {         if(RightBeats > 0)         {             index--;             index = index & 0x07;             RightBeats--;         }         else         {             index++;             index = index &0x07;             RightBeats++;         }         tmp = P1;         tmp &= 0x0F;         tmp |= (BeatCode[index]<<4);         P1 = tmp;     }     else     {         P1 = P1 | 0xF0;     } }  void ConfigTimer0(unsigned int ms) {     unsigned long tmp;      tmp = 12000000/12;     tmp = (tmp * ms)/1000;     tmp = 65536 - tmp;     tmp = tmp + 2;     T0RH = (unsigned char)(tmp >> 8);     T0RL = (unsigned char)tmp;     TH0 = T0RH;     TL0 = T0RL;     TMOD &= 0xF0;     TMOD |= 0x01;     ET0 = 1;     TR0 = 1;         } void InterruptTimer0() interrupt 1 {        TH0 = T0RH;     TL0 = T0RL;     LeftMotor();     RightMotor();                                                                                                                                               }

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:219729 发表于 2017-7-28 08:55 | 只看该作者
CLAY 发表于 2017-7-27 19:19
#include    sbit LeftA1 = P1^0; sbit LeftA2 = P1^1; sbit LeftB1 = P1^2; sbit LeftB2 = P1^3; sbit EnL ...

不好意思,用的是STM32单片机
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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