悬挂系统运动控制系统怎么让模块不掉下来

2146人阅读
STM32笔记(13)
题目连接:05年电赛 悬挂运动控制系统 源代码
系统: 2块STM32 & A为上位机 液晶显示 语言提示 摄像头 + NRF 发送目标路径, &所有步进电机等由STM32 B控制。
下位机 main.c
#include &main.h&
#include &math.h&
#include &stdio.h&
void DrawCircle()
Move2XY(15, 50);
for(x = 15; x &= 65; ++x)
y = sqrt( 625 - (x - 40)*(x - 40) ) + 50;
Move2XY(x, y);
for(x = 65; x &= 15; --x)
y = 50 - sqrt( 625 - (x - 40)*(x - 40) );
Move2XY(x, y);
void DrawL()
for(i = 0; i & 100; ++i)
Move2XY(0, i);
for(i = 0; i & 80; ++ i)
Move2XY(i,99);
void DrawPoly()
for(i = 0; i & 100; ++i)
Move2XY(0, i);
for(i = 0; i & 80; ++ i)
Move2XY(i,99);
for(i = 0; i & 100; ++i)
Move2XY(79, 100 - i);
for(i = 0; i & 80; ++ i)
Move2XY(80 - i,0);
int main(void)
SystemInit();
GPIO_INIT();
COM1Init(115200);
DrawPoly();
//DrawL();
DrawCircle();
#include &Contral.h&
#include &delay.h&
#include &math.h&
#include &usart.h&
#include &stdio.h&
double LeftArm = 115.974, RightArm = 149.164;
NowX = 0, NowY = 0;
StepTim = 10;
int STEP[4] = {0x4, 0x1};
int LSTEPID = 0, RSTEPID = 0;
void GPIO_INIT(void)
GPIO_InitTypeDef GPIO_InitS
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD , ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_4 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOA, &GPIO_InitStructure);
void LeftStepRun(int CTR, int Delay1_4)
int i = 0;
if(CTR & 0)
CTR += LSTEPID;
for(i = LSTEPID; i & CTR; ++i, ++LSTEPID)
GPIO_Write(GPIOD, STEP[i % 4]);
delay_ms(Delay1_4);
if(LSTEPID & 10000) LSTEPID = 0;
if(CTR & 0)
CTR = -CTR + LSTEPID;
for(i = LSTEPID; i & CTR; ++i, ++LSTEPID)
GPIO_Write(GPIOD, STEP[(4 - (i % 4)) % 4]);
delay_ms(Delay1_4);
if(LSTEPID & 10000) LSTEPID = 0;
void RightStepRun(int CTR, int Delay1_4)
int i = 0;
if(CTR & 0)
CTR += RSTEPID;
for(i = RSTEPID; i & CTR; ++i, ++RSTEPID)
GPIO_Write(GPIOA, STEP[i % 4]);
delay_ms(Delay1_4);
if(RSTEPID & 10000) RSTEPID = 0;
if(CTR & 0)
CTR = -CTR + RSTEPID;
for(i = RSTEPID; i & CTR; ++i, ++RSTEPID)
GPIO_Write(GPIOA, STEP[(4 - (i % 4)) % 4]);
delay_ms(Delay1_4);
if(RSTEPID & 10000) RSTEPID = 0;
void Step2XY(int x, int y)
int signL = 1, signR = 1;
double tempLeftArm = 0, tempRightArm = 0;
double LStepCtr = 0, RStepCtr = 0;
tempLeftArm = sqrt((x + 15)*(x + 15) + (115 - y)*(115 - y));
LStepCtr = (tempLeftArm - LeftArm) / 0.05813;
tempRightArm = sqrt((95 - x)*(95 - x) + (115 - y)*(115 - y));
RStepCtr = (tempRightArm - RightArm) / 0.05813;
printf(&LStepCtr = %lf
RStepCtr = %lf !!&,LStepCtr,RStepCtr );
LeftStepRun(LStepCtr, 10);
RightStepRun(RStepCtr, 10);
printf(&x = %d,, y = %d,,LStepCtr = %lf RStepCtr = %lf \n&, x, y, LStepCtr, RStepCtr);
i = 0; j = 0;
if(LStepCtr & 0) LStepCtr = -LStepCtr, signL = -1;
if(RStepCtr & 0) RStepCtr = -RStepCtr, signR = -1;
while(i & LStepCtr || j & RStepCtr)
if(i & LStepCtr) LeftStepRun(signL, StepTim);
if(j & RStepCtr) RightStepRun(signR, StepTim);
i = LStepC
j = RStepC
if(j != 0)RightArm = tempRightA
if(i != 0)LeftArm = tempLeftA
int _abs(int a)
else return -a;
int _max(int a, int b)
void Move2XY(int x, int y)
int tempx, tempy,
int xError = x - NowX, yError = y - NowY;
int MaxError = _max(_abs(xError), _abs(yError));
double xSon = xError*1.0 / MaxError, ySon = yError*1.0 / MaxE
for(i = 0; i &= MaxE ++i)
tempx = NowX + xSon *
tempy = NowY + ySon *
Step2XY(tempx, tempy);
NowX = x, NowY =
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:328687次
积分:4190
积分:4190
排名:第4865名
原创:109篇
转载:22篇
评论:153条
(1)(1)(1)(3)(4)(3)(2)(1)(5)(2)(2)(1)(1)(1)(1)(5)(1)(10)(8)(1)(2)(7)(13)(12)(4)(7)(11)(22)(1)21ic官方微信
每个时代都有一群爱“玩”的人,比如瓦特玩出了蒸汽机,……
近年来,以智能手机、智能硬件为代表的电子产品技术飞速……
2016年ARM的全新一代CPU和GPU系列旗舰产品现已全面昭示天……
烈日艳艳六月天,选择空调房还是WiFi屋?两者择其一成为了……
演讲人:1王伟刚,2、3熊俊时间: 10:00:00
演讲人:骆彦志时间: 10:00:00
演讲人:罗丽平时间: 10:00:00
预算:¥3,000-¥5,000预算:¥1,000-¥3,000
您当前的位置:&&>&
悬挂运动控制系统设计
来源:中国传动网
作者:芮长城 温阳东 方龙
引言&&&&& &&&&& 在现代的工业控制、车辆运动和医疗设备等系统中, 悬挂运动系统的应用越来越多,在这些系统中悬挂运动部件通常是具体的执行机构 , 因而悬挂部件的运动精确性是整个系统工作效能的决定因素, 而在实际中实现悬挂运动控制系统的精确控制是非常困难的。&&&&& 我们采用 AT8 9 5&& l单片机和步进电动机设计了悬挂运动控制系统, 由单片机产生脉冲信号驱动有精确步距的步进电动机, 电机带动悬挂部件在平面上做特定的准确运动。系统的硬件设计与实现&&&& &&&&& 本系统硬件可分为控制部分、电动机驱动部分、键盘输入部分和显示 部分 。1、控制部分系统的控制部分为单片机最小系统, 单片机采用 ATME L公司的 AT8 9 C5 1芯片, 因为作为系统控制芯片, AT8 9系列算术运算功能强 , 可以用不同的语言软件编程( 如 c语言、汇编语言) , 编程简单 , 易于实现控制要求和控制算法 , 并且AT8 9 C 5 1 芯片具有体积小 , 功耗较低, 成本低 , 程序写入简单方便等优点。2、驱动部分为实现硬件上对步进电动机的精确驱动 ,我们采用 2个高性能细分 S M一 2 0 2 A驱动控制器, 该控制器采用新型的双极性横流斩波技术, 输入频率宽, 所以电动机运行精度高, 振动小, 噪声低, 运行过程中比较平稳 , 适合驱动中小型的任何两相或四相混合式步进电机。而且在该驱动器还标明了各个按键开合时所对应的电流、驱动器的静转矩和步矩角 , 这给电动机在实际工作的过程中提供 r很大的方便。3、数码管显示电路设计用单片机的P&& E l 和P&& 口来控制数码管的显示, P& 口作为数码管的选通端 , P& 口_ l 乍为输出端, 将设定点的坐标从数码管上显示出来。通过数码管显示, 可以将输入坐标显示 求 ,以防 止输入数据出错产生不必要的麻烦。硬件电路如图 l 示意。用 P&& 和 P&& 作为脉冲波的输 端 口, 接任 S M 一2 0 2的脉冲信号端端) , 用 P 和P 作为电动机运行方向的控制端 , 通过软件设定一个位置 , 在物体到达该化置的时候电动机的运行方向改变。p.& 和作为驱动器使用, 可以控制电动机的状态, 在物体到达一定的地点时使电动机 白锁。使用.。 和 P.& 作为电动机转动的显示标志 , 通过和P&& 与发光二极管相连 , 电动机转动时卡 醍 管发光, 停止时二卡 眨 管熄灭。用 P , 口作为键盘的输入口, 其中低四位为行, 高四位为列,利用扫描键盘法来确定按下的键 , 从而设定坐标点的参数。&&&&& 系统软件设计采用的步进 电动 机是永磁式步进 电机, 这种电动机是两相混合 的 , 当定子控制绕组按照一定顺序不断地轮流通电时, 步进电机就持续不断地旋转 , 电机的转速与输入电压& 外界温度和负载无关。当相数步距角设定时, 其转速仅于输入脉冲的频率成正比, 改变脉冲频率就可以实现转速 , 因此可以很容易的控制步进电机在某一固定平面上的运动轨迹和路程。当控制脉冲停止输入,让最后一个脉冲控制绕组继续通人直流时, 电动机可以固定在一个位置上, 这样可以实现物体运动后在平面上相应点的停止。&& 此简单介绍以电机带动物体在画板平面上在任意两点『 日 】 运动和画圆( 圆周) 运动的软件设计 。1任意两点子程序为使物体能从板子上的任意一点到另外一点运动, 编写了仟意两点子程序 , 流程如图2。  2 画圆子程序为使物体& 板 I : 以 r为& 径画圆, 在沿任意两点运动的f程序基制 上 ,& 圆周 取八个相对称的点, 利片 { 逐段追近法来绘制圆剧 , 每一段都采用任意两点子程序实现 画圆的过程如下 图所示, 画笔经过手动定位在 l点, 调用任意两点子程序到达2点, 然后到达 3点, 依次顺序类推 , 最终 回到 l点 程序流程图如图3。&&&&& 结语在系统设计调试后, 本控制系统已经在实验和医疗器械改造中得到 了检验并应用 , 我们通过减小步进电机步距角和设定更多的定位点, 使系统的精度得到 了进一步提高。
相 关 推 荐
频道关键词
ICP许可证号:京ICP证070360号&&&&&&
& 21IC电子网 2000-版权所有
公安部备案号:您的位置: &
悬挂运动控制系统(下)
优质期刊推荐君,已阅读到文档的结尾了呢~~
悬挂系统 汽车悬挂系统 后悬挂系统 麦弗逊式悬挂系统 空气悬挂系统 什么悬挂系统好 汽车的悬挂系统 悬挂系统哪种好
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
悬挂运动控制系统的设计
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口您的位置:>
→ → →基于FPGA控制的悬挂运动控制系统设计 -- 正文
基于FPGA控制的悬挂运动控制系统设计
[05-04 22:12:52] & 来源:& EDA/PLD & 阅读:<font color="#FF次
概要:设L1为左绳在d点的线长,L2为右绳在d点的线长,L1&#39;为左绳在e点的线长,L2&#39;为右绳在e点的初始线长,被控对象物体的受限区域的顶点坐标分别为a(xa,ya),b(xb,yb), c(xc,yc),o(0,0),当悬挂物从d点运动到e点时,左绳和右绳的长短必然发生变化,电机M1的收放线长度为△L1,当△L1&0,电机正转;△L1&0时,电机反转。电机M2的收放线长度为△L2,当△L2&0,电机反转;当△L2&0时,电机正转。计算如下:从键盘输入起始坐标值(xd,yd),将(xd,yd)代入式(1)和式(2)中计算出L1和L2,再从键盘输入终点坐标值(xe,ye)代入式(3)和式(4)中计算出L1&#39;和L2&#39;,两点(定点)运动算法流程图如图8所示。3.2 做圆运动的算法和实现本系统设计指标悬挂物能够画一个圆,采用微分曲线直线逼近法,首先将圆周等分为N 份,将每小份弧线段等效为直线段画出,N越大,曲线就越光滑。设所画圆的圆心坐标为(x0,y0),半径为25 cm,(x,y)为圆周上的任意一点,由此确定圆的方程为:(x-x0)2+(y-y0)2=252。若直接使用该方程来求圆上点的坐标,算法复杂;若采用圆的参数方程:X=x0+25co
基于FPGA控制的悬挂运动控制系统设计,
  2.5 显示模块
  液晶显示器是将液晶置于两片导电玻璃之间,靠两个电极间电场的驱动,引起液晶分子扭曲向列的电光效应,在电源的开关之间控制光源透射或遮蔽,产生明暗两种效果。本系统采用16×2 LCD液晶显示屏作为人机对话的友好界面。系统设计实现物体所在坐标和画笔所画线段的长度的动态显示,并有输入光标跟随和开机等待提示等人性化功能。
  3 系统软件设计
  设计系统的总流程相对比较简单,采用VerilogHDL语言。为达到设计指标的控制精度和响应时间,针对各项功能设计相应的控制算法。系统流程图如图6所示。
  3.1 两点运动算法与实现
  采用数学建模法,运用几何知识把物体运动轨迹和两个电机所在的位置联系起来,通过坐标用数学表达式表示出来,并转换成电机所要转动的偏移量,最后把偏移量转化为电机所要转的速度。结合图7说明,设L1为左绳在d点的线长,L2为右绳在d点的线长,L1'为左绳在e点的线长,L2'为右绳在e点的初始线长,被控对象物体的受限区域的顶点坐标分别为a(xa,ya),b(xb,yb), c(xc,yc),o(0,0),当悬挂物从d点运动到e点时,左绳和右绳的长短必然发生变化,电机M1的收放线长度为△L1,当△L1&0,电机正转;△L1&0时,电机反转。电机M2的收放线长度为△L2,当△L2&0,电机反转;当△L2&0时,电机正转。计算如下:
  从键盘输入起始坐标值(xd,yd),将(xd,yd)代入式(1)和式(2)中计算出L1和L2,再从键盘输入终点坐标值(xe,ye)代入式(3)和式(4)中计算出L1'和L2',两点(定点)运动算法流程图如图8所示。
  3.2 做圆运动的算法和实现
  本系统设计指标悬挂物能够画一个圆,采用微分曲线直线逼近法,首先将圆周等分为N 份,将每小份弧线段等效为直线段画出,N越大,曲线就越光滑。设所画圆的圆心坐标为(x0,y0),半径为25 cm,(x,y)为圆周上的任意一点,由此确定圆的方程为:(x-x0)2+(y-y0)2=252。若直接使用该方程来求圆上点的坐标,算法复杂;若采用圆的参数方程:X=x0+25cosθ,Y=y0+25sinθ,则圆的坐标仅与参数θ有关。因此,使角度以θ某一设定的角度步长ω累加,使θ+pω在周期[θ,θ+2π]内变化,其中p为累加值。这样就可以采样到圆上均匀的点,显然,角度步长ω越小,在圆周上取得点越多,控制也会更精确。根据圆的参数方程,计算圆上点的坐标,通过调用定点程序来实现。画圆流程图如图9所示。
  4 结 语
  系统硬件在智能型可编程器件实验系统KH-310集成开发,软件设计在QuartusⅡ环境下。系统各组成模块通过Modelsim进行仿真,选用优化效率和兼容性好的综合器Synplify对程序进行综合,用A1tera公司的EPEC6Q24OC8L作为编程芯片,系统在1 MHz下工作,经现场实验,其结果表明:该系统可以通过键盘任意设置悬挂运动物体的位置;在规定时间和运动区域的情况下,可以快速地完成运动距离;可以完成运动坐标点的显示和电机启/停功能。
  本文设计的基于FPGA控制的步进电机悬挂运动控制系统具有可靠的硬件和优良的软件设计支持,可实现对悬挂运动的精确定位。利用FPGA实时控制能力和步进电机的精确定位能力,完全可以设计出高性能高精度的控制系统,例如改善人工清洗高楼幕墙容易发生危险状况,将悬挂物设置成清洗机构。在现代工业、农业和国防建设中,使用和推广这种系统,有着十分重要的现实意义。&&&[2]&
标签:EDA/PLD,eda技术大全,eda技术实用教程,EDA/PLD
《基于FPGA控制的悬挂运动控制系统设计》相关文章
All Right Reserved.

我要回帖

更多关于 麦弗逊式悬挂系统 的文章

 

随机推荐