完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 tulesheng 于 2016-9-21 23:46 编辑
前几天写了步进电机T型加减速的程序,今天把指数加速度(俗称S加速度)研究了一下。 以上的图形就代表了指数的变化,可以看到刚开始Y值增加缓慢,随后随着X的增加,Y值陡然上升。步进电机速度先缓慢增加,然后突然疯转,让人猝不及防,有点温柔一刀的感觉。把28BYJ电机贴在耳朵上听,可以很清楚的感觉到速度的变化。 下面看看程序代码(11.0592M): #include "stc15f2k60s2.h" #include "math.h"//算次方当然要math头文件了 float n,x=2,y; void delay(unsigned int time); unsigned char speedh=1,speedl=1; #define dr_clr() {P0=0xf0;} unsigned char code CW[8]={0xf9,0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8}; unsigned char code CCW[8]={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9}; //蓝粉黄橙接P0.0-P0.3 void main() { unsigned int i,j,speed=0; for(j=512*1;j>0;--j) { for(i=0;i<8;i++) { if(speedh==1)//加速过程 { y = pow(x,n);//y等于x的n次方 n=n+0.1;//每次只增加0.1,这样让数值变化更加平缓 speed=(unsigned int)y;//强制转换成uint格式,去掉小数点 if(speed>500)//达到这个值后,delay的值达到最小delay(1200-500=700) speedh=0; } if(j<13&&speedl==1)//减速过程,13这个值越大,就会越提前减速 { n=n-0.1; if(n==0) speedl=0; y=pow(x,n); speed=(unsigned int)y; } P0=CW; delay(1200-speed); } } dr_clr(); while(1); } void delay(unsigned int time) { while(--time); } 百度搜索无数,有用的资料鲜见。自己摸索,共同提高。希望对大家有帮助。 对以上错误纠正,这是指数加速度,并非S加速度。S加速度我一直在钻研,我发现正弦函数的一段也很类似S曲线。我已经把程序写了出来 改天上传。2016年9月21日 |
|
相关推荐
|
|
|
|
|
|
|
|
494 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1050 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1151 浏览 0 评论
887 浏览 0 评论
928 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11841 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 08:16 , Processed in 0.600205 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号