找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求一个能控制步进电机转动角度的C语言程序

[复制链接]
跳转到指定楼层
楼主
ID:208365 发表于 2017-10-1 23:08 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 单小白 于 2017-10-1 23:15 编辑

我想要实现如下的功能:单片机P2^1口输出低电平蜂鸣器报警,同时步进电机顺时针转动90度或45度,当P2^1口输出高电平时蜂鸣器停止报警,同时步进电机逆时针转动90度或45度。
主要是步进电机转动角度不知道怎么控制,对步进电机了解的不多。单片机型号是STC89C52,驱动芯片是ULN2003,步进电机型号是28BYJ-48 5VDC。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

板凳
ID:222394 发表于 2018-4-10 08:14 | 只看该作者
/******************************步进电机的驱动************************************* ;FOSC = 12MHz ;--------------------------------------------------------------------------------- ; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!! ; 本步进电机步进角为 5.625 度 . 一圈 360 度 , 需要 64 个脉冲完成!!! ;--------------------------------------------------------------------------------- ; A 组线圈对应 P0.0 ; B 组线圈对应 P0.1 ; C 组线圈对应 P0.2 ; D 组线圈对应 P0.3 ; 正转次序: AB 组--BC 组--CD 组--DA 组 (即一个脉冲,正转 5.625 度) ;---------------------------------------------------------------------------------- **********************************************************************************/ /*头文件*/ #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define nop() _nop_() uchar code table1[]={0x03,0x06,0x0c,0x09}; /*正转表*/ uchar code table2[]={0x03,0x09,0x0c,0x06}; /*反转表*/ #define motor P0 void delay(uchar ms) /*延时*/ { uchar j; while(ms--){ for(j=0;j<250;j++) {;} } }void main() { uchar i,j; while(1){ //正转 3 圈共 192 个脉冲 j=0; for(i=0;i<192;i++){ motor = 0x00; motor = table1[j]; j++; if(j>=4) j=0; delay(2); } delay(200); delay(200); delay(200); delay(200); delay(200); //正转 2 圈共 128 个脉冲 j=0; for(i=0;i<128;i++){ motor = 0x00; motor = table2[j]; j++; if(j>=4) j=0; delay(2); } delay(200); delay(200); delay(200); delay(200); delay(200); } }
回复

使用道具 举报

沙发
ID:222394 发表于 2018-4-10 08:13 | 只看该作者
#include<reg51.h> #define uchar  unsigned char #define uint unsigned int typedef unsigned int u16;          //对数据类型进行声明定义 typedef unsigned char u8;  sbit IN1=P0^0; /*第一个电机*/ sbit IN2=P0^1;        /*第一个电机*/ sbit IN3=P0^2;         /*第一个电机*/ sbit IN4=P0^3;         /*第一个电机*/ sbit IN5=P2^3;          sbit IN6=P2^4;          void delay(u16 i) {         while(i--);         }    void main()  {          int a=128;         P2=1;//使能         while(1)         {              IN5=1;//使能         IN6=1;//使能                  //                a--; //                if(a==0)P2=0;                 IN1=1;IN2=0;IN3=0;IN4=0;                 delay(150);      IN1=1;IN2=1;IN3=0;IN4=0;    delay(150);    IN1=0;IN2=1;IN3=0;IN4=0;    delay(150);           IN1=0;IN2=1;IN3=1;IN4=0;    delay(150);    IN1=0;IN2=0;IN3=1;IN4=0;    delay(150);     IN1=0;IN2=0;IN3=1;IN4=1;    delay(150);     IN1=0;IN2=0;IN3=0;IN4=1;    delay(150);        IN1=1;IN2=0;IN3=0;IN4=1;    delay(150);                                                           }   }
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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