完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
满意答案
我用的是控制一个步进电机的,这个是我以前写的,你的要求在下面的程序做修改就行了;程序如下: #include #define uchar unsigned char #define uint unsigned int //uchar table[]={0x18,0x30,0x60,0x48,0x48,0x60,0x30,0x18}; //二相励磁 uchar table[]={0x08,0x10,0x20,0x40,0x40,0x20,0x10,0x08}; //一相励磁 uchar num=0,maichong,zhengfan; ***it add_key=P3^2; //加速键 ***it reduce_key=P3^3; //减速键 ***it zhengfan_key=P3^4; //正反转按键 void delay(uint z) //延时1ms { uint x,y; for(x=z;x>0;x--) for(y=114;y>0;y--); } void only_key()//按键处理 { static uchar flag; //定义成静态只被定义一次 if(zhengfan_key==0) //检测正反按键是否被按下 { delay(5); if(zhengfan_key==0) { flag=~flag;//取反 if(flag==0) zhengfan=0; //正转,取数组前四位 else zhengfan=4; //反转,取数组后四位 while(!zhengfan_key); } } if(add_key==0)//检测加按键是否被按下 { delay(5); if(add_key==0) //消抖 { num++; //加速键按下,速度标志加1 if(num==4) //已达到最大值3 num=3; while(!add_key); } } if(reduce_key==0) //检测减按键是否被按下 { delay(5); if(reduce_key==0) { if(num!=0) num--;//减速键按下,速度标志减1 else num=0;//减速到0则保持 while(!reduce_key); } } } void deal()//根据速度标志进行数据处理 { switch(num) { case 0:P0=0x06; //数据管显示1 maichong=5; //转速最慢 break; case 1:P0=0x5b;//数据管显示2 maichong=4; break; case 2:P0=0x4f;//数据管显示3 maichong=3; break; case 3:P0=0x66; //数据管显示4 maichong=2; //转速最快 break; } } void start() //电机速度和正反控制处理 { uchar i,j; for(i=zhengfan;i<4+zhengfan;i++) { P1=table; for(j=0;j delay(2); } } void main() { while(1) { only_key(); deal(); start(); } } 02分享举报 |
|
|
|
直接使用单片机输出脉冲控制电机速度比较慢,受限于单片机的计算能力,可以使用国产的专用运动控制芯片hmc8045,做1--4轴加减速,直线插补,圆弧插补等非常简单,对单片机没有什么计算能力的要求。
|
|
|
|
只有小组成员才能发言,加入小组>>
2408 浏览 0 评论
8986 浏览 4 评论
36614 浏览 19 评论
5003 浏览 0 评论
24488 浏览 34 评论
1423浏览 2评论
1677浏览 1评论
2095浏览 1评论
1484浏览 0评论
444浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:07 , Processed in 1.088923 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号