有问题请教,用51单片机来控制步进电机加压,压力传感器反馈给单片机力值来确定当前加载的力值

来自:    更新日期:早些时候
关于51单片机控制步进电机编程(c语言),求助~

#include
#define uchar unsigned char
#define uint unsigned int
uchar key_l,key,i;
uchar code temp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar code temp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code aa[16]=" :";
uchar code smg[]=" shun zhuan mian kuai gen kuai ting zhi fan zhuan ";
sbit e=P2^6;
sbit rs=P2^4;
sbit rw=P2^5;
void delay(int tt)
{
while(tt--);
}
void w_cmd(uchar dd)
{
rs=0;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
delay(50);
}
void w_dat(uchar dd)
{
rs=1;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
}
void init(uchar smg4[],uchar time[])
{
w_cmd(0x38);
delay(2000);
w_cmd(0x38);
delay(500);
w_cmd(0x38);//注意顺序 ,设置工作方式,显示模式设置
delay(500);
w_cmd(0x08);//注意顺序,关闭显示
w_cmd(0x01);//清屏
w_cmd(0x07);//光标·画面滚动模式设置
w_cmd(0x0c);//显示及光标模式设置
w_cmd(0x80);//
for(i=0;i<16;i++)
w_dat(time[i]);
w_cmd(0x80+0X40);
for(i=0;i<16;i++)
w_dat(smg4[i]);
}
void Tb(uchar smg[],uchar n,uchar s,uchar l,uchar d)
{
unsigned char m;
w_cmd(0x82);
for(m=n;m<s;m++)
w_dat(smg[m]);
w_cmd(0x80+0X42);
for(m=l;m<d;m++)
w_dat(smg[m]);
}
void main()
{
init(aa,aa);
while(1)
{

P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(100);
if(key_l!=0xf0)
{
P1=key_l|0x0f;
key=P1;
}
}
switch(key)
{
case 0xee: Tb(smg,0,10,11,21);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(500);
}
break;
case 0xde:Tb(smg,0,10,19,29);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(300);
}
break;
case 0xbe:Tb(smg,0,10,30,40);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(100);
}
break;
case 0x7e:P2=0xff;Tb(smg,0,10,39,49); break;
case 0xed:Tb(smg,50,60,11,21);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(200);
}
break;
case 0xdd:Tb(smg,50,60,19,29);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(120);
}
break;
case 0xbd: P2=0xff;Tb(smg,50,60,40,50); break;
}
}
}

压力传感器有模拟输出和数字输出的,如果是数字输出的话可以直接接到单片机上,模拟输出的需要转化为数字信号,然后再接到单片机上,然后再把程序写进单片机,再用单片机输出信号给步进电机控制器控制步进电机!

首先我要说明回答你的问题不是为了分。我有个项目遇到的问题与你类似,经过两年多的努力才算解决。你的问题不是软件算法问题,而是步进电机的用法问题。
步进电机的运动是“步进”,压力传感器的“变形”是连续的而且变形量非常之小,在很大范围内不能稳定(不仅仅是一个临界“点”)。
解决的方法是:
1》在要求不高的情况下,用弹簧连接丝杆与传感器,并且丝杆导程尽量选小点,步进驱动器细分尽量高点,弹簧的弹性系数尽量小点。
2》在要求较高的场合,利用步进电机调整压缩空气压力(动态调整),再用气缸去推动传感器。
我有几款产品就是利用这两种方法来解决的,效果感觉良好。

可以多次采样,得出压力变化的趋势,再参考当前的压力,进行控制。
while(1)
{
if (yali2 < 10 - 1) 步进电机工作; //压力远小于标准,立即工作.

else if (yali2 < yali1 - 0.5) 步进电机工作; //本次压力小于上次,立即工作.

…….

else if (yali2 > yali1 + 0.5) //压力上升很快.
if (yali 2 > 10 - 0.5) 步进电机停止; //已经很接近标准值,这时就可以停机了.
…….
}

判断程序编写不好,执行机构就会在临界点反复振荡。

我是用1比3的同步轮来减速,带动一个丝杆及弹簧,就是你说的1的这种情况,但效果不怎么好,就是不稳定
要求高你就用第二种方法,你可以试试。


有问题请教,用51单片机来控制步进电机加压,压力传感器反馈给单片机力值来确定当前加载的力值视频

相关评论:
  • 19314763624可不可以用一个51单片机同时控制多个51单片机运作?
    蓝任庙当然可以了,一个单片机作为主机,其它多个单片机作为从机,这样可以用RS485总线组成一个局域网,由主机通过总线控制其它从机的工作。这种局域网的应用早就有了。

  • 19314763624如何用单片机控制变频器?
    蓝任庙我建议你采用AVR的ATMEGA128L单片机,它具有64个腿,从A-E口各8,再加PINF口的5个口。总共具有40多个腿。但是如果用在你这个课题上,一片AT89S51或者你说的80C51也是足够的。很简单。你可以采用预制的外部端子来控制变频器,由光藕来控制变频器的外部端子,而光藕由51单片机来控制就okay了。如果你想...

  • 19314763624msc51单片机控制器:背后的魔法
    蓝任庙指令寄存器和指令译码器是msc51单片机控制器的核心部件。指令寄存器存储指令代码,指令译码器将指令代码翻译成可执行的操作码。️时钟发生器时钟发生器是msc51单片机控制器的重要组成部分。它有两种模式:内部方式和外部方式。内部方式利用内部的振荡电路和石英晶振,而外部方式则直接接收0.5~16mhz的外部振荡信号。...

  • 1931476362451单片机如何使用?
    蓝任庙这样你就可以使用这款51单片机了。1单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51...

  • 1931476362451单片机可以控制多个传感器和电机吗
    蓝任庙51单片机介绍 51单片机是对兼容英特尔8051指令系统的单片机的统称,广泛应用于家用电器,汽车,工业测控,通信设备中。因51单片机的指令系统,内部结构都相对简单,所以国内许多高校用其进行单片机入门教学。51单片机含8位CPU,4kbytesROM程序存储器,128bytesRAM的数据存储器,32条IO口线可执行111条指令,大...

  • 1931476362451单片机控制继电器
    蓝任庙单片机I\/O直接继电器电流不够。单片机是一个弱电器件,一般情况下它们大都工作在5V甚至更低。驱动电流在mA级以下。而要把它用于一些大功率场合,比如控制电动机,显然是不行的。在这里,继电器驱动含有两个意思:一是对继电器进行驱动,因为继电器本身对于单片机来说就是一个功率器件。

  • 19314763624怎么用51单片机控制32个led灯但是不用完32个引脚,还要能实现很多方式...
    蓝任庙用51单片机控制32个led灯,又不能全用32个IO引脚,还要能实现很多方式的亮灭,这很容易实现。扩展四个并行口就行了,一个并行口控制8个LED灯,最常用的是8位锁存器74HC573,用P0口做数据线,再用P2.0~P2.3做锁存控制线,共用12个IO脚,就可以了。剩下的引脚做其它用不受影响。而扩展的32个...

  • 19314763624用51单片机开发板控制5V小风扇的调速问题
    蓝任庙不过这个档数多了麻烦。如果要搞复杂点的就用模数转换,直接读入热敏电阻值然后控制转速,这个档数可以用程序设置成很多了,但是89C52做不到,要么采用AD芯片拓展,要么买12C5A60S2这些带AD转换的单片机,或者采用温度传感器18B20,那样也挺省事的,就传感器贵了点,但加起来也可能更便宜 ...

  • 19314763624用51单片机控制3个步进电机时的程序!越详细越好。
    蓝任庙程序是指基本指令,通过范围内的修改达到使用目的。一个步进电机控制器和3个步进电机的控制器只是脉冲输出点位不一样而已(芯片不一样)当然,输出的IO点也会增加,3个步进电机的控制器可以控制1~3个步进电机不同的工作,基于51单片机的开发代码指令和软件由芯片生产商提供,基础代码由控制器工程师提供,...

  • 19314763624用51单片机的输出的模拟信号,即0,1怎么控制电动机的开关,电动机的电
    蓝任庙首先,51单片机的输出的0,1,不叫模拟信号,叫数字信号,或脉冲信号。这很简单的。用单片机一个引脚控制一个三极管,三极管控制一个继电器,再由继电器控制电机。如下图

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网