完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
改变clock的值,即能改变送给电机的脉冲频率,从而改变电机速度,可是我试了很多clock的值,电机速度一直未变化。 86二相四线步进电机,2HB618M驱动器。。程序如下,大神们教教我。。。
#include ***it Clk = P1^0; //脉冲端 ***it En = P1^1; //使能端 ***it Dir = P1^2; //方向端 //驱动器的三端控制(共阳接法) ***it CW = P3^0; //正转运行按键 ***it STOP = P3^1; //停止运行按键 ***it CCW = P3^2; //反转运行按键 ***it ADJ = P3^3; //调速运行按键 bit Run_Status; //运行状态位标志, //=0表示电机在停止状态,可以按键正转、反转均可 //=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。 unsigned char Run_Dir; //电机运行方向 #define F_DIR 0 //正转 #define R_DIR 1 //反转 unsigned int clock; //周期变量 void Delayms(unsigned int xms) //延时函数 { unsigned int i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void Forward(void) //电机正转 { TR0=1; //开定时器1中断 TH0=(65536-clock)/256; //初值大小由clock值决定 TL0=(65536-clock)%256; //clock增大,speed减小;clock减小,speed增大 Dir=0; En=1; } void Reversal(void) //电机反转 { TR0=1; TH0=(65536-clock)/256; TL0=(65536-clock)%256; Dir=1; En=1; } void Keyscan() { if(!STOP) //任何时候按停止键,电机停止运行 { Delayms(10); //延时去抖动 if(!STOP) { Run_Status=0; //电机正在停止的状态标志 Clk=0; En=0; TR0=0; } } if(!CW&&!Run_Status) //按正转键同时电机不是正在运行时,电机正转运行 { Delayms(10); //按下延时去抖动 if(!CW&&!Run_Status) { Run_Status=1; //电机正在运行的状态标志 Forward(); Run_Dir=F_DIR; //电机运行方向正转 } } if(!CCW&&!Run_Status) //按反转键同时电机不是正在运行时,电机反转运行 { Delayms(10); //延时去抖动 if(!CCW&&!Run_Status) { Run_Status=1; //电机正在运行的状态标志 Reversal(); Run_Dir=R_DIR; //电机运行方向反转 } } if(!ADJ) //调速键 { Delayms(10); //延时去抖动 if(!ADJ) { if(clock>201) clock-=200; else clock=1000; Run_Status=1; TR0=1; } } } void Init(void) { Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可 Clk = 0; En = 0; TMOD=0X01; EA=1; ET0=1; } void main(void) { Init(); clock=75; while(1) { Keyscan(); } } void timer0_ISR(void) interrupt 1 { TH0=(65536-clock)/256; TL0=(65536-clock)%256; Clk = ~Clk; } |
|
相关推荐
10 个讨论
|
|
|
在同学帮助下,找到了错误。这是已经改正好的程序,另外由于电机驱动器的限制,脉冲频率最多只能给到20khz,所以clock值必须大于2.5,取3. 当达到最大频率区间时改变一下clock值时,速度变化不易察觉。 希望大家多提意见,方便我纠正,谢谢。
#include ***it Clk = P1^0; ***it En = P1^1; ***it Dir = P1^2; ***it CW = P3^6; //正转运行按键 ***it STOP = P3^4; //停止运行按键 ***it CCW = P3^5; //反转运行按键 ***it ADJ = P3^7; //调速运行按键 bit Run_Status; //运行状态位标志, //=0表示电机在停止状态,可以按键正转、反转均可 //=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。 unsigned char Run_Dir; //电机运行方向 #define F_DIR 0 //正转 #define R_DIR 1 //反转 unsigned int clock; //周期变量 void Delayms(unsigned int xms) //延时函数 { unsigned int i,j; for(i=xms;i>0;i--) for(j=9;j>0;j--); } void Forward(void) //电机正转 { TH0=(65536-clock)/256; //初值大小由clock值决定 TL0=(65536-clock)%256; //clock增大,speed减小;clock减小,speed增大 Dir=0; En=1; TR0=1; //开定时器1中断 } void Reversal(void) //电机反转 { TH0=(65536-clock)/256; TL0=(65536-clock)%256; Dir=1; En=1; TR0=1; } char flag1 =0x00; bit flagstop=0; void Keyscan() { if(STOP==0 && flagstop==0) //任何时候按停止键,电机停止运行 { Delayms(1); //延时去抖动 if(STOP==0) { TR0=0; Clk=0; En=0; flag1=0; flagstop=1; Run_Status=0; //电机正在停止的状态标志 } } else if(!CW && !Run_Status && (flag1&0xf0)==0x00) //按正转键同时电机不是正在运行时,电机正转运行 { Delayms(10); //按下延时去抖动 if(!CW && !Run_Status) { flag1 =0x10; Run_Status=1; //电机正在运行的状态标志 Forward(); Run_Dir = F_DIR; //电机运行方向正转 flagstop=0; } } else if(!CCW && !Run_Status && (flag1&0x0f)==0) //按反转键同时电机不是正在运行时,电机反转运行 { Delayms(10); //延时去抖动 if(!CCW && !Run_Status) { flag1 = 1; Run_Status=1; //电机正在运行的状态标志 Reversal(); Run_Dir=R_DIR; //电机运行方向反转 flagstop=0; } } if(!ADJ) { Delayms(10); //延时去抖动 if(!ADJ) { if(clock>201) clock-=200; else clock=1000; Run_Status=1; TR0=1; } } } void Init(void) { Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可 Clk = 0; En = 0; TH0=(65536-clock)/256; TL0=(65536-clock)%256; TMOD=0X01; EA=1; ET0=1; TR0 =0; } void main(void) { Init(); clock=3; P1=0xff; P3 =0XFF; while(1) { Keyscan(); } } void Timer0_ISR(void) interrupt 1 { TH0=(65536-clock)/256; TL0=(65536-clock)%256; Clk = ~Clk; } |
|
|
|
|
|
|
|
|
楼主能不能留个QQ,我刚刚接触电机,希望你能教教我
|
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
国产芯片真的 “稳” 了?这家企业的 14nm 制程,已经悄悄渗透到这些行业…
832 浏览 2 评论
同是电流检测芯片FP137 与 INA139,实际性能差距有多大?
1261 浏览 0 评论
2023 浏览 0 评论
1432 浏览 1 评论
9343 浏览 2 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 08:10 , Processed in 0.919738 second(s), Total 74, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1285