完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
单片机型号是:STC90C516RD+,步进电机型号:NMB-PM42S-096-SYH6,四线双极性
下载到单片机里面,步进电机只有刚刚开始转一小下,然后就不转了,一直发热,修改了延时时间,由10000改到了50000,还是不转。 求大神帮忙~ 代码: #include #include #define NOP() _nop_() /* 定义空指令 */ #define uchar unsigned char #define uint unsigned int #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; static unsigned int count; //计数 static int step_index; //步进索引数,值为0-7 static bit turn; //步进电机转动方向 static bit stop_flag;//步进电机停止标志 static int speedlevel;//步进电机转速参数,数值越大转速越慢 static int spcount; //步进电机转速参数计数 void delay(unsigned int endcount);//延时函数,延时为endcount*0.5ms void gorun(); //步进电机控制步进函数 //定义管脚 ***it IRIN1 = P3^5; //红外接收器数据线(红,绿,黄) ***it IRIN2 = P3^6; ***it IRIN3 = P3^7; ***it PH1 = P0^0; //定义管脚 ***it PH2 = P0^1; ***it I01 = P0^2; ***it I11 = P0^3; ***it I02 = P0^4; ***it I12 = P0^5; void main(void) { count=0; step_index=0; spcount=0; stop_flag=1; //不允许转 PH1=0; PH2=0; I01=0; I11=0; I02=0; I12=0; EA=1; //允许cpu中断 TMOD=0x11; //设定时器0和1为16位模式1 ET0=1; //定时器0中断允许 TCON=0x01; //触发方式为脉冲负边沿触发 IRIN1=1; IRIN2=1; IRIN3=1; TH0=0xFE; TL0=0x0C; //设定时每隔0.5ms中断一次 TR0=1; //开始计数 turn = 0; speedlevel = 2; delay(10000); //控制转动的角度 // stop_flag=1; //一段时间后停止转动 speedlevel = 1; do{ speedlevel=2; //数值越大转的越慢 delay(10000); speedlevel=1; //快速 delay(10000); speedlevel=2; delay(10000); stop_flag=1; //停止 }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 //相当于这个函数每隔0.5ms执行一次 { TH0=0xFE; TL0=0x0C; //设定时每隔0.5ms中断一次 count++; if(!IRIN1&&!IRIN2) { turn=0; //正传 stop_flag=0; } if(!IRIN3&&!IRIN2) { turn=1; stop_flag=0; } spcount--; //步进电机转速参数计数 if(spcount<=0) //speedlevel=2表示两次中断转动一下 { spcount=speedlevel; gorun(); } } void delay(unsigned int endcount) { count=0; do{}while( count void gorun() { if(stop_flag==1) { PH1=0; PH2=0; I01=0; I11=0; I02=0; I12=0; return; } switch(step_index) { case 0: // A/ PH1 = 0; //PH1为0 A组线圈为反向电流 I01 = 0; I11 = 0; //以最大电流输出(没细分) 以下相同 均是此意思 PH2 = 1; //PH2为1 B组线圈为正向电流 I02 = 1; I12 = 1; //关闭电流输出,以下相同均是此意思 break; case 1: // A/B PH1 = 0; //PH1为0 A组线圈为反向电流 I01 = 0; I11 = 0; PH2 = 1; //PH2为1 B组线圈为正向电流 I02 = 0; I12 = 0; break; case 2: // B PH1 = 1; I01 = 1; I11 = 1; PH2 = 1; I02 = 0; I12 = 0; break; case 3: // AB PH1 = 1; I01 = 0; I11 = 0; PH2 = 1; I02 = 0; I12 = 0; break; case 4: // A PH1 = 1; I01 = 0; I11 = 0; PH2 = 0; I02 = 1; I12 = 1; break; case 5: // AB/ PH1 = 1; I01 = 0; I11 = 0; PH2 = 0; I02 = 0; I12 = 0; break; case 6: // B/ PH1 = 0; I01 = 1; I11 = 1; PH2 = 0; I02 = 0; I12 = 0; break; case 7: // A/B/ PH1 = 0; I01 = 0; I11 = 0; PH2 = 0; I02 = 0; I12 = 0; break; if(turn==0) { step_index++; if(step_index>7) step_index=0; } else { step_index--; if(step_index<0) step_index=7; } } } |
|
相关推荐
4个回答
|
|
求帮忙,求帮忙~
|
|
|
|
好牛 。。。。。。。。。。。。。。。。。。
|
|
|
|
|
|
|
|
期待高人出现,也会一起学习到之方面知识。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
434 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
297 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1266 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1603 浏览 1 评论
1589 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11614 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 15:25 , Processed in 0.761375 second(s), Total 84, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号