标题: 步进电机旋转一定角度用单片机控制的程序怎么写? [打印本页]

作者: koko5    时间: 2017-7-27 18:31
标题: 步进电机旋转一定角度用单片机控制的程序怎么写?
步进电机旋转一定角度用32单片机控制的程序怎么写?

作者: CLAY    时间: 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();                                                                                                                                               }
作者: koko5    时间: 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单片机




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