步进电机加速的c语言编程,关于步进电机S型加速程序编写
给你看一篇文章吧http://wenku.baidu.com/view/39fe ... 71.html?from=search
我是参照这个来写的
[mw_shl_code=applescript,true]//=========================================================================//
//M542 DRIVER CODE:定义驱动器的端口
//
//创建日期:2015/12/30
//=========================================================================//
//初始化PE1/PE3为输出口.并使能这2个口的时钟
//PE1对应pulse,PE3对应DIR(方向)
#include "driver.h"
#include "delay.h"
#include "usart.h"
#include "adc.h"
void Driver_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能GPIOE时钟
//GPIOE5初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//分别用这个口 控制方向
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIO
}
int cnt;
int value2[]={994,994,994,994,992,992,992,992,992,990,990,990,990,988,988,988,986,986,986,984, //S型加减速曲线,时PWM的输出频率
984,982,982,982,980,980,978,978,976,974,974,972,970,970,968,966,964,964,962,960, //从1KHz变到10Khz,即使得步进电机
958,956,954,950,948,946,944,940,938,934,932,928,926,922,918,914,910,906,902,898, //加速运动,加速运动即让它反过来
892,887,882,877,872,866,860,855,848,842,835,828,821,814,807,799,791,783,775,766, //速度约从1.3cm/s加速到12cm/s左右
758,750,740,730,720,712,702,692,682,670,660,650,638,628,616,606,594,584,572,562,
550,538,528,516,506,494,484,472,462,450,440,430,418,408,398,388,380,370,360,350,
342,334,324,316,308,300,292,286,278,272,264,258,252,244,240,234,228,222,218,212,
208,202,198,194,190,186,182,178,174,172,168,166,162,160,156,154,152,150,146,144,
142,140,138,136,136,134,132,130,130,128,126,126,124,122,122,120,120,118,118,118,
116,116,114,114,114,112,112,112,110,110,110,110,108,108,108,108,108,106,106,106,106};
int value1[]={ 994,994,994,992,992,992,992,992,990,990,990,990,988,988,988,986,986,986,984,984, //从1KHz加速到1000/66=15KHz左右
984,982,982,980,980,978,978,976,974,974,972,972,970,968,966,964,964,962,960,958, //速度约从1.3cm/s加速到19.2cm/s左右
956,954,950,948,946,944,940,938,936,932,928,926,922,918,914,910,906,902,898,892,
888,882,878,872,866,860,854,848,842,836,828,822,814,806,798,790,782,774,766,756,
748,738,728,718,708,698,688,678,666,656,646,634,622,612,600,588,576,566,554,542,
530,518,506,494,484,472,460,448,438,426,414,404,394,382,372,362,352,342,332,322,
312,304,294,286,278,270,262,254,246,238,232,224,218,212,206,200,194,188,182,178,
172,168,162,158,154,150,146,142,138,134,132,128,124,122,120,116,114,112,110,106,
104,102,100,98 ,96 ,96 ,94 ,92 ,90 ,88 ,88 ,86 ,86 ,84 ,82 ,82 ,80 ,80 ,78 ,78 ,
76 ,76 ,76 ,74 ,74 ,74 ,72 ,72 ,72 ,70 ,70 ,70 ,70 ,68 ,68 ,68 ,68 ,68 ,66 ,66 ,66};
int value[]={596,596,596,596,596,596,596,594,594,594,594,594,594,594,592,592,592,592,592,590, //从1.6KHz加速到1000/64=15.6KHz左右
590,590,590,588,588,588,586,586,586,584,584,584,582,582,580,580,578,578,576,576, //速度约从2.1cm/s加速到19.8cm/s左右
574,574,572,570,570,568,566,564,562,560,560,558,556,552,550,548,546,544,542,538,
536,532,530,526,524,520,516,514,510,506,502,498,494,488,484,480,476,470,466,460,
454,450,444,438,432,426,420,414,408,402,396,390,384,376,370,364,356,350,344,336,
330,324,316,310,304,296,290,284,276,270,264,258,252,246,240,234,228,222,216,210,
206,200,194,190,184,180,176,172,166,162,158,154,150,146,144,140,136,134,130,128,
124,122,118,116,114,112,110,108,104,102,100,100,98 ,96 ,94 ,92 ,90 ,90 ,88 ,86 ,
86 ,84 ,84 ,82 ,82 ,80 ,80 ,78 ,78 ,76 ,76 ,76 ,74 ,74 ,74 ,72 ,72 ,72 ,70 ,70 ,
70 ,70 ,68 ,68 ,68 ,68 ,68 ,66 ,66 ,66 ,66 ,66 ,66 ,66 ,64 ,64 ,64 ,64 ,64 ,64 ,64};
/********************************************************
函数名:HeadADC
功 能:让电机一边前进一边进采样
输 入:无
输 出:无
********************************************************/
void HeadADC(void) //
{
GPIO_SetBits(GPIOE,GPIO_Pin_5); // PE5与驱动器DIR-对应,使之高电位,沿一个方向运动
delay_us(20);
TIM_Cmd(TIM3,ENABLE);
TIM_Cmd(TIM4,ENABLE);
Speed_up();
}
/********************************************************
函数名:BackADC
功 能:让步进边后退一边采样
输 入:无
输 出:无
********************************************************/
void BackADC(void) //Num为后退的步数,Dis为每步的大小,以mm为单位
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); // PE5与驱动器DIR-对应,使之高电位,沿一个方向运动
delay_us(20);
TIM_Cmd(TIM3,ENABLE);
TIM_Cmd(TIM4,ENABLE);
Speed_up();
}
/********************************************************
函数名:Head
功 能:开启定时器4的PWM输出,让步进电机只有前进功能
输 入:无
输 出:无 *
********************************************************/
void Head(void) //
{
GPIO_SetBits(GPIOE,GPIO_Pin_5); // PE5与驱动器DIR-对应,使之高电位,沿一个方向运动
delay_us(20);
TIM_Cmd(TIM4,ENABLE); //开启TIM4,输出PWM波
Speed_up();
}
/********************************************************
函数名:Head
功 能:开启定时器4的PWM输出,让步进电机只有前进功能
输 入:无
输 出:无
********************************************************/
void Back(void) //
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); // PE5与驱动器DIR-对应,使之高电位,沿一个方向运动
delay_us(20);
TIM_Cmd(TIM4,ENABLE); //开启TIM4,输出PWM波
Speed_up();
}
/********************************************************
函数名:Speed_up
功 能:步进电机加速函数
输 入:无
输 出:无
********************************************************/
void Speed_up(void)
{
for (cnt = 0; cnt<201; cnt++)
{
delay_us(2*value[0]); //每2个PWM脉冲产生后,预装载值和占空比
TIM_SetAutoreload(TIM4,value[cnt]);
TIM_SetCompare1(TIM4,value[cnt]/2);
}
}
/********************************************************
函数名:Speed_down
功 能:步进电机减速函数
输 入:无
输 出:无
********************************************************/
void Speed_down(void)
{
for (cnt =200; cnt>=0; cnt--)
{
delay_us(2*value[0]); //每2个PWM脉冲产生后,预装载值和占空比
TIM_SetAutoreload(TIM4,value[cnt]);
TIM_SetCompare1(TIM4,value[cnt]/2);
}
}
[/mw_shl_code]
步进电机加速的c语言编程,关于步进电机S型加速程序编写相关推荐
- 【c】C语言编程写的一个http下载程序
来自: 百度空间-软件工程师 大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的.每次用到FlashGet之类的下载软件下载网页,当用到那个" ...
- c语言入门小程序素数,C语言编程入门经典18个小程序
C语言是面向过程的,而C++是面向对象的 C跟C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考量的是怎样借助一个过程,对输入(或环境条件)进行运算处理得到输出(或推动 ...
- c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)
C语言我不行,Matlab语言行么? 经典功率谱估计 直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅 ...
- java语言简单代码_java语言编程如何实现一个最简单程序?
在编程语言中,实践出结果是最重要的,其他的什么都是为此做准备,下面我们就来看看该如何编译一个最简单的java程序. 首先,启动你的编程软件,如eclipse等,具体可以网上了解, 再来,创建一个新的j ...
- c语言编程抢30,抢三十-程序?
抢三十-程序? 小时候玩过一个小游戏(从1开始轮流数数,二个人,每个人至多可以数1-3个数,谁先数到最后一个数30谁就嬴),想用C语言编写出来.但是写出来之后却出现问题?只输出前一次的数?希望哪位可以 ...
- 单片机 串口 波特率 c语言 9600 11.0592mhz t1,C51语言编程:单片机与 PC 串口通信程序...
单片机接收PC机发来的指令信号,然后单片机又向PC机发送字符串.具体要求如下: 当接收指令信号为:'go',单片机向PC机发送字符串:WELCOME TO CHINA!; 当接收指令信号为:'who' ...
- 485通信c语言编程linux,Rs485通信单片机C程序
/******************************************************************************* * 标题: ...
- C语言编程入门之--第一章初识程序
导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言程序进行比较,说明 ...
- c语言编程中野指针错误,C程序中可怕的野指针
一.疑问点 指针是C语言一个很强大的功能,同时也是很容易让人犯错的一个功能,用错了指针,轻者只是报个错,重者可能整个系统都崩溃了.下面是大家在编写C程序时,经常遇到的一种错误的使用方法,也许在你的学习 ...
最新文章
- Python使用matplotlib可视化人口金字塔图、人口金字塔显示不同性别不同年龄段的人口数,是了解人口组成的最优可视化方法、人口金字塔图可以用来表示按体积排序的群体的分布、形成漏斗结构
- 动画--过渡属性 transition-property
- 华为电视测试软件,华为智慧屏电视安装第三方软件,简单实测可行攻略
- 第三天:制定项目计划
- k8s单节点部署(master ,node部分)
- SVN中tag branch trunk用法详解
- (3)stm32开发之串口的调试
- 千图成像python_【Python还能干嘛】爬取微信好友头像完成马赛克拼图(千图成像)~...
- maven常用命令大全(附详细解释)
- SSA静态单赋值概念理解
- 技能梳理24@stm32+阿里云+nbiot+dht11+bh1750+土壤湿度传感器+oled
- mmo游戏服务器性能指标,关于performance:厚积薄发MMORPG手游合理的性能参数
- 计算机物联网前沿技术汇总
- getcwd()和chdir()的用法 python
- 儒家思想的核心:仁、义、礼、智、信、忠、孝、悌、节、恕、勇、让
- JS自定义Title文字提示
- Springboot使用Mapstruct拷贝对象,集成swagger2
- centos7 通过git连接GitHub仓库
- VUE + howler.js 播放音频
- 无法连接上 127.0.0.1:XXXX (127.0.0.1)。 - connect (111: 拒绝连接)
热门文章
- [羊城杯 2020]easyre
- Android 11.0 PackageManagerService(一)工作原理和启动流程
- Win7下eclipse ADT调试cocos2dx-lua工程
- DiskGenius清除分区空闲空间后硬盘满了
- 2021年,我们还需要入门深度学习吗?
- Hololens2开发笔记-重刷系统(正常发布版本和内部预览版本)
- DM36x 接入 AR0130 sensor
- 基于STC89C51单片机,CH340芯片的下载电路
- 阿里架构专家教你打通Git任督二脉,20分钟搞定Git工作原理
- Xilinx Vivado复数乘法器Complex Multiplier IP核调用及其仿真