锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

步进电动机速度调节和方向控制实验

时间:2023-06-07 22:07:00 集成电路00k3

一﹑实验目的
1﹑掌握步进电机控制系统的硬件设计方法。﹑掌握步进电机速度调节﹑方向控制技术。
3·进一步学习编制步进电机驱动程序的软件设计方法。﹑教学要求
1﹑编程控制步进电机的运行速度。﹑编程控制步进电机的旋转方向。﹑主要仪器设备
机电实验平台﹑步进电机,万用表示波器,电脑四﹑实验内容
如图所示:单片机电路:

从上图可以看出,通过单片机输入芯片的电路是集成的 P1.O~P1.3分别连接到INA,INB,INC,IND,芯片输出J80端子引出。

步进电机A,A- ,B,B-分别接到J81端子上的OUTA,OUTB,OUTC,OUTD,将JP1的K1-K4连接到P1.4-P1.写一个程序,将PO口接到J8脚的a,b,c,d,e,f,g,dp上,单片机P2分别连接到JP1的KEY1到KEY8·根据实验确定步进电机的初始速度。

完成以下内容:

1)按下K步进电机正在旋转

2)按下K2.停止电机。
3)按下K步进电机反转。
4)按下K4.步进电机转速增加一个档位(每个档位初始速度增加50%)。5)按下K5.步进电机转速降低一个档位(每个档位初始速度降低50%) 。6)电机工作时,步进电机的速度档分别显示在显示器上。

#include "reg52.h"  typedef unsigned int u16;  typedef unsigned char u8;  sbit IN1_A=P1^0; sbit IN2_B=P1^1; sbit IN3_C=P1^2; sbit IN4_D=P1^3;   sbit KEY1=P2^1; sbit KEY2=P2^0; sbit KEY3=P2^2; sbit KEY4=P2^3;   #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0   // ×?D?D?2??üD?óú1 #define STEPMOTOR_MAXSPEED        1   #define STEPMOTOR_MINSPEED        5     #define smg P3  void delay_10us(u16 ten_us) {  while(ten_us--);  } void delay_ms(u16 ms) {  u16 i,j;  for(i=ms;i>0;i--)   for(j=110;j>0;j--); } void step_motor_28BYJ48_send_pulse(u8 step,u8 dir) {  u8 temp=step;    if(dir==0)    temp=7-step;  switch(temp)//8????ú??????£oA->AB->B->BC->C->CD->D->DA  {   case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;   case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;   case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;   case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;   case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;   case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;   case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;   case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;   default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;//í£?1?1?àDò   }    } u8 key_scan(u8 mode) {  static u8 key=1;   if(mode)key=1;  if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//è?òa°′?ü°′??  {   delay_10us(1000)???   key=0;   if(KEY1==0)    return KEY1_PRESS;   else if(KEY2==0)    return KEY2_PRESS;   else if(KEY3==0)    return KEY3_PRESS;   else if(KEY4==0)    return KEY4_PRESS;   }  else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)   {   key=1;     }  return KEY_UNPRESS;   }   void main() {   u8 key=0;  u8 dir=0;  u8 speed=STEPMOTOR_MINSPEED;  u8 step=0;   u8 code_smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  int i=0;  while(1)  {      key=key_scan(0);   if(key==KEY1_PRESS)   {    dir=!dir;      i=speed;     smg=~code_smg[i];       }   else if(key==KEY2_PRESS)   {    if(speed>STEPMOTOR_MAXSPEED)     speed-=1;      i=speed;     smg=~code_smg[i];       }   else if(key==KEY3_PRESS)/   {    if(speed

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章