当前位置: 首页 > 传感测量产品 > 工业传感器 > 霍尔传感器

类型分类:
科普知识
数据分类:
霍尔传感器

电机测速霍尔传感器:51单片机霍尔传感器电机测速设计

发布日期:2022-10-09 点击率:51


电机测速霍尔传感器:51单片机霍尔传感器电机测速设计  第1张

电机测速霍尔传感器:51单片机霍尔传感器电机测速设计

1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器
2.采用霍尔传感器非接触式测电机转速
3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。
4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。
注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。
使用说明:
液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。
系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。
下面一排是控制按键:
1键:加速键,可以短按,占空比加1,也可长按,占空比连续加;
2键:减速键,可以短按,占空比减1,也可长按,占空比连续减;
3键:正转切换键,按下后电机正转;
4键:反转切换键,按下后电机反转;
5键:开始暂停键,按一下开始,再按一下暂停。
电路原理图如下:
PCB图+布局图+焊接图:
单片机源程序如下:
#include
#define uchar unsigned char
#define uint unsigned int
void displaym();
void displayj();
sbit en=P2^5;                //1602  6管脚
sbit rs=P2^7;         //1602端口        4管脚
sbit rw=P2^6;//lcd1602控制端口 5管脚
sbit num1=P1^0;                                                //占空比加1
sbit num2=P1^1;                                                                   //占空比减一
sbit num3=P1^2;                                                                                           //正传
sbit num4=P1^3;                                                                                                         //反转
sbit num5=P1^4;                 //开始停止切换
sbit beep=P2^4;
sbit out=P3^4;                                                         //PWM输出用于正传
sbit out1=P3^7;                        //PWM输出用于反转
uint zhuansu,flag,z1,z2,m,flag_1,zheng,fan,kai,j,su,qian,bai,shi,ge;
void delay(uint z)//延时1ms函数
{
uint x,y;
for(x=0;x<z;x++) for(y="0;y<110;y++);" }="" void="" write_com(uchar="" com)="" 向1602写一字节(控制指令)="" {="" rs="0;" p0="com;" delay(5);="" en="1;" delay(10);="" write_data(uchar="" date)="" 向1602写一字节(数据)="" init()="" 初始化函数="" rw="0;" write_com(0x38);="" 5x7显示="" write_com(0x0c);="" 关闭光标="" write_com(0x01);="" lcd初始化="" tmod="0x11;" 定时器方式1="" th0="0xdc;" tl0="0x00;" 定时器装入初值="" ea="1;" 开总中断="" et0="1;" 定时器0开中断="" tr0="1;" ex1="1;" it1="1;" 定时器启动="" th1="0xfc;" tl1="0x66;//定时100us" et1="1;" 定时器1开中断="" tr1="1;" write_com(0x80);="" write_data('v');="" write_data(':');="" write_com(0x87);="" 第一行显示转速="" write_data('m');="" write_data('="" ');="" write_data('i');="" write_data('n');="" write_com(0xc0);="" write_data('z');="" write_data('k');="" write_data('b');="" displaym();="" write_com(0xc8);="" write_data('s');="" write_data('d');="" displayj();="" keyscan()="" 键盘扫描函数="" if(num1="=0)" 消除抖动="" if(m

}
 }
if(num3==0)
 {
delay(5);
if(num3==0)
{
 j=j+1;
displayj();
}

}
 if(num4==0)
 {
delay(5);
if(num4==0)
{
j=j-1;
displayj();

}
 }
 if(num5==0)
 {
delay(5);
if(num5==0)
{
while(num5==0)         ;
 kai=1-kai;

}
 }

}
void display()
{
 write_com(0x82);
 zhuansu=zhuansu*30;          //将两秒内的计数乘以30得到转每分

su=zhuansu*0.01*2*3.14/2;
qian=(su/1000)%100;
write_data(qian+0x30);
bai=(su/100)%10;
 write_data(bai+0x30);
shi=(su/10)%10;
write_data(shi+0x30);
 write_data('.');
ge=su%10;
write_data(ge+0x30);
 write_com(0xd0);
}
void displaym()
{
write_com(0xc4);
  if(m/200%10!=0)
 write_data(m/200%10+0x30);                           //如果占空比百位不为0则显示百位否则显示空格
 else
 write_data(' ');

if(m/200%10==0&&m/20%10==0)
 write_data(' ');
 else
 write_data(m/20%10+0x30);                                 //如果占空比小于10 十位正常显示  否则显示空格

write_data(m/2%10+0x30);                                 //显示个位
}
void displayj()
{
write_com(0xcb);
  if(j/100%10!=0)
 write_data(m/100%10+0x30);
 else
 write_data(' ');

if(j/100%10==0&&j/10%10==0)
 write_data(' ');
 else
 write_data(j/10%10+0x30);

write_data(j/1%10+0x30);
  write_com(0xd0);
}
void main()
{
flag_1=0;
m=100;                                                         //占空比为100

[1] [2]

关键字:51单片机  霍尔传感器  电机测速

编辑:什么鱼  引用地址:

电机测速霍尔传感器:51单片机霍尔传感器电机测速设计  第2张

电机测速霍尔传感器:基于霍尔传感器的电机测速装置

(2008 No.10)
作者简介:
赵树磊(1989-?),男,硕士研究生,研究方向为电力电子与电力传动;?
谢吉华(1964-?),男,副教授,硕士,主要从事电力电子、电机控制、智能仪器与网络安全的教学与研究;?
刘永锋(1983-?),男,硕士研究生,研究方向为电力电子与电力传动。
基于霍尔传感器的电机测速装置
Motor Speed Measurement Device based on Hall Sensor

Abstract:
A kind of motor rotating speed measurement device was designed by using Hall sensor and the relevant speed measurement
algorithm was raised. Rotating speed signal processing circuit was also designed to make pulse signal transferred into standard TTL-level. It
was convenient for AT89C52 to count and via 74LS164 register, rotating speed signal was displayed on LED. The motor rotating speed mea-
surement device is simple in circuit, good in real-time, low in cost, convenient in installation and debugging and saving in space, especially
under the conditions of limited measurement space, shaft eccentric or inconvenient for sensor installation, the measurement method has obvi-
ous superiority.

Key words:
Hall sensor; motor speed measurement device; AT89C52 microcontroller
ZHAO Shu-lei, XIE Ji-hua, LIU Yong-feng
赵树磊,谢吉华,刘永锋
(东南大学?电气工程学院,江苏?南京?)
摘要

利用霍尔传感器,设计了一种电机转速测量装置并提出相应的测速算法

还设计了转速信
号处理电路,将脉冲信号转化为标准的
TTL
电平,便于
AT89C52
单片机的计数运算,并通过
74LS164

存器将转速信号显示在
LED
上。该电机测速装置具有线路简单、实时性好、成本低、安装调试方便和节
省空间等特点,尤其是在测量空间有限、轴偏心或传感器不便安装的条件下,该测量方法有明显的优势。
关键词

霍尔传感器

电机测速装置

AT89C52
单片机
中图分类号

TM306

TP212
文献标识码

A
文章编号

1007-3175(2008)10-0053-04

School of Electrical Engineering, Southeast University, Nanjing
, China

在众多的数字式转速传感器中,因霍尔传感器
具有无触点、长寿命、高可靠性、无火花、无自激
振荡、温度性能好、抗污染能力强、构造简单、坚
固、体积小、耐冲击等优点,所以选用霍尔效应接
近式传感器作为自动控制系统中电机的转速传感
器。该传感器是开关元件,直接输出为脉冲频率信
号,但是由于存在电磁噪声干扰,必须对信号进行
处理,从而提高采集准确度和抗干扰能力。处理后
的信号转换成标准的方波信号,将该信号传输到
AT89C52单片机上,再经过相应的软件设计,就可
以通过LED显示电路显示出电机的转速。
1  霍尔转速传感器检测装置
转速测量系统安装示意图如图1所示,下面对
检测装置主要部件进行介绍。
1)
霍尔转速传感器。该传感器是利用霍尔效
应原理工作的

一个金属或半导体薄片置于磁场
中,磁场垂直于薄片,当薄片通以电流
I
C
时,在
薄片的两侧面上就会产生一个微量的霍尔电压
U
H

如果改变磁场的强度,
霍尔电压的大小亦随之改变,
当磁场消失时,霍尔电压变为零。霍尔效应式转速
传感器输出的信号是矩形脉冲信号,很适合于数字
控制系统,抗干扰能力强。
电机测速霍尔传感器:51单片机霍尔传感器电机测速设计  第3张

电机测速霍尔传感器:带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)

查看: |回复: 90
带霍尔传感器编码器的直流减速电机测速原理讲解(附源码)

[复制链接]

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
电梯直达
楼主
发表于 2019-7-25 20:38:57
|
只看该作者
|只看大图
|倒序浏览
|阅读模式
点击关注正点原子公众号,海量视频免费下载学习,包含Linux/STM32/FPGA/ZYNQ/FreeRTOS/UcosIII等

本帖最后由  于 2020-10-11 07:36 编辑
  发了第一篇帖子后,我突然就爱上了发帖,我发现我在发帖的时候,也在总结我学到的东西,并且看着密密麻麻的字,就有一种成就感。更重要的是,能把自己的理解讲给读这篇帖子的人并且帮助到他们我觉得非常的开心。但是,我还是强调,本人真的菜,所以有些地方地方讲错,希望能得到理解。       最近在学习带霍尔传感器编码器的直流减速电机测速原理,看了网上很多帖子,但是能让我感觉写的好的帖子真的很少。很多帖子要不是放个不知道什么芯片写的源码,随便讲解几句,然后下载代码后发现代码写的很乱,阅读性很差,要不就是各种帖子你抄我我抄你,都是纸上谈兵,看了帖子,原理是懂了,但是对于一些细节的东西什么都没讲,然而这些细节往往是初学者们最让人不解的地方。我承认对于一些大佬而言,看了这些很快就能懂,但是对于一些初学者而言,就真的很头痛,并且这样一份资料会浪费很多学习的时间。
  所以,我写下这篇帖子也是想帮助这些初学者,我的代码都是用原子的探索者写的,这样大家都会好看懂一些。看代码时,对着我的讲解来看,我相信你们很快就能懂。但是唯一不足的就是,我可能讲解概念性原理的一些东西可能很少,因为我的表达能力实在是很差,所以在看这篇帖子时如果你连正交编码原理是什么都不知道的人就先去看看别人的帖子怎么讲的,虽然我上面说一些帖子都在纸上谈兵,但是他们纸上谈兵谈的还是可以的,哈哈,一些原理性东西还是讲的很清晰的。废话不多说,开始正题了。
解释下什么叫带编码器的直流减速电机
直流电机我相信大家都清楚是什么东西,但偏偏这个东西不仅减速,还带编码器。先解释下为什么带编码器,毕竟我们要测速,就需要一个传感器来完成这样的功能,所以编码器就来充当了这个传感器。不过有时候编码器和电机是单独分开的,比如做过智能车的朋友就会清楚。而我们用的这个电机却把编码器和电机做成了一个整体。而为什么我们需要减速呢,学过物理的人应该清楚这个公式P=FV,即在输出功率相同的时候,力和速度成反比,也就是说,电机的转速越慢,转动的力量就越大。所以这个时候你们就应该明白,为啥你们买电机的时候,厂家会有各种不同减速比的电机。
解释一个概念:
编码器线数: 就是电机旋转一圈你的A(B)会输出多少个脉冲 ,这里的A B就是上面的输出脉冲信号线,它们A相和B相转一圈发出的脉冲数一样的,不过存在90°相位差。通常都是360线的,线数越高代表编码器能够反应的位置精度越高。所以,你们想追求精度,就尽量选择线数越高的电机。
  首先大家第一步就是了解编码器的配置,而其中最关键就是叫做stm32编码器模式配置的东西,就是这一串TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising );编码器模式究竟是什么,不懂得就去百度看看别人怎么讲的。而其中用的是编码器模式3,编码器模式3就是A相和B相的上升沿和下降沿你的定时器都会计数一次,而你用模式1或者2,定时器只会计数A相或者B相的上升沿,然而模式3就是你A相和B相的上升沿和下降沿都会计数一次。假如你的电机线数是360,就是转一圈产生360个脉冲,而你用了编码器模式3后,就产生360*4个脉冲了。有人可能就问,为啥要这样呢,那是因为这样能提高分辨率,你想,A相和B相是一个相差90度的脉冲,意思就是说每90度就有一个上升沿或者下降沿,这样就是每90度计数一次,而你用模式1或2时,你就是360度才计数一次,假如你有个段时间编码器输出不正常,明明A相和B相只相差90度,而这时你信号不稳定,这段时间就会计数不正常,你用了编码器模式3后,就会把误差缩减4倍,不知道我讲清楚没,要是没懂,在下面留言,我再讲。
  然后,我再讲下我觉得很重要的东西,因为这个问题让我头痛很久,最后找了很多帖子和资料才懂了。就是编码器模式配置时,定时器的重装载值对计数有什么影响。相信看过很多帖子的人会知道一个四倍频的东西,就是它定时器的重装载值为(线数-1)*4,然后又有很多代码他的重装载值为-1,还有少数的代码是一些其他值,当时我看到这些代码我就很疑惑,为何他们重装值不同,然而最后他们都说可以完成测速,我试过,我改变重装值,计数会不一样。最后,我终于看到一篇帖子,在那篇帖子中后面有人问楼主关于重装值的问题,然后就这位楼主就讲了关于重装载值对计数的影响。我放下这篇帖子的网址,我建议不懂的人都可以看下 ... #commentsedit   这里面的重装载值就是你最多能记录A相和B相的脉冲数,假如你的电机转1圈产生800个脉冲,而你的重装载值为1,就是说你电机转一圈,你的定时器会溢出800次,假如你重装载值为400,那么你电机转一圈,你的定时器就会溢出2次。这里大家可能就明白为何四倍频时那里的重装载为(线数-1)*4,你想,我前面讲了,你用编码器模式3,产生的脉冲数就是你的线数*4,这样意思就说,你转一圈,产生的脉冲数恰好是你定时器溢出的时候。这样,假如你定时器开启溢出中断,这样溢出一次就代表你电机转了一圈,而你这时,再用另一个定时器定时为1s,计录1s内溢出的次数,这样就能得到你的电机1s转过的圈数了。当然只是这样测速的话,得到的数据误差会很大,因为这种方法只能测到整圈数,万一你的转数是每秒1.5圈呢,这样这种方法就不行了。还是举例说明,假如你的重装载值为(360-1)*4,这样你1秒转1.5圈就计数360*6次,然而你的重装值是(360-1)*4,所以这时你的定时器只溢出一次,并且此时的定时器计数值为360*2,转换成脉冲数也就是360*6,你想你的电机线数是360,用的编码器模式3,就是转一圈产生360*4个脉冲,这样的速度就为(360*6)/(360*4),这样精度就会好很多。至于怎么具体得到脉冲值的,大家可以看下我的代码,如果不懂,可以在下面问我。我建议你要测速定时还是不要1秒,因为我觉得定1s记录的脉冲累计误差可能会比较大,所以你把定时器定时定小点,比如5ms,这样你后面在转换下就行了。最后,再提下为何一些代码重装载值也行,你想,你转一圈,产生360*4个脉冲,假如你1秒转8圈,也就是1秒产生360*4*8个脉冲,只要这个值不超过你的溢出值,那么你只需要在最开始时,将计数器清零,然后开始计数,计时1秒后,记下此时的脉冲数,又将计数器清零,然后再用我上面的计算方法就可以了。记住,你的重装值其实为多少都可以,只是别人用和(360-1)*4只是计算时方便而已,我再举个例子,假如你重装载值为2,你转一圈产生360*4个脉冲,就是说你转一圈产生360*2次溢出,你用再一个定时器定时1秒,记录1s被溢出的次数,假如溢出360*6次,这样的速度就是(360*6)/(360*4)。
  如果还有不懂的,欢迎下面留言,如果有人发现我哪里讲错了,希望有人也给我说下。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割线
2020.3.15
  我再通俗的讲下带编码器的直流减速电机测速原理。首先我们得明白一个东西,电机旋转一圈会产生脉冲,而一圈究竟能产生多少个脉冲,这是由电机的编码器线数决定,线数越高,精度就越高。至于为什么会产生脉冲,这个就是编码器这个传感器的原理,这个我不讲。
  既然电机旋转一圈能产生脉冲,那么我们就能记录一段时间产生的脉冲数来计算速度。而单片机怎么去检测脉冲并且记录脉冲的个数则是我们的重点。在这里我想提一个东西——定时器。我们是如何用定时器定相应的时间的?首先就是设置预分频系数把主频时钟分频,假设主频时钟168MHZ,你预分频系数为168,则分频后的时钟频率就为1MHZ(频率的倒数就是周期,这里即1us),此时TIMx_CNT 寄存器,即定时器的计数器就是按照这个频率(也就是10us)递增的。假如你重装载值为10,则你定时器最终定的时间就为10us。
  从上面的例子可以看出,此时TIMx_CNT 寄存器的值递增是由内部时钟频率造成的,而时钟频率无非就是脉冲。好,那我们岂不是可以用这个寄存器去记录编码器产生的脉冲了?的确就是这样,但是怎么把原本是因为内部时钟递增的TIMx_CNT 寄存器改为是因为外部时钟递增呢?这就是我们为什么需要用到正交编码模式了。至于为什么用了正交编码模式就可以了,这个我就不知道了,反正我就知道用了正交编码模式就可以实现这样的过程。
  以前我讲了重装载值对我们的影响,那现在你们是否就清楚了预分频系数的我们的影响了?原来预分频系数分的内部时钟,现在分频系数分的就是外部时钟。那我代码里为何预分频系数是为1?为其他数可不可以?当然可以,但是没必要。因为你现在就是要记录电机旋转一圈产生的真实的脉冲数,如果你预分频系数为2,假设电机旋转一圈产生200个脉冲,则此时你单片机只能记录100个脉冲了。
 实际啊,其实直流减速电机测速度的本质很简单,以前我们定时器初始化设置重装载值和与分频系数时是基于内部时钟而定的。而现在是基于外部时钟而定的,这个外部时钟就是编码器产生的脉冲。
顺带提下,我这份代码只能测正转或者反转,如果想正反转都能测(当然实际工程就需要这样),去看下17楼,那里我讲了下思路。这是其中一个思路,这里我还想说下另外一个思路,通过定时器的TIMx_CR寄存器的第四位DIR标志位来判断。
.png (27.16 KB, 下载次数: 0)
下载附件
2020-3-15 15:45 上传
,而我目前修改后的代码用的就是这个思路。
我修改后的代码也会传上来,但是由于我没有实物,我无法测试,我不知道我修改的代码究竟实际能不能成功,所以这个代码只供参考用。
带编码器的直流减速电机代码(正反转版).zip
(5.57 MB, 下载次数: 1968)
2020-3-15 16:15 上传
点击文件名下载附件

带编码器的直流减速电机.zip
2019-7-25 20:38 上传
点击文件名下载附件
11.14 MB, 下载次数: 5683
收藏33
转播
淘帖0
支持16
反对0
回复
使用道具
举报

dlc
dlc
当前离线
积分48
0
主题
4
帖子
0
精华
新手上路
新手上路, 积分 48, 距离下一级还需 2 积分
积分48
金钱48
  注册时间2019-6-30
 在线时间9 小时
收听TA
发消息
推荐
发表于 2019-7-25 20:52:17
|
只看该作者
老哥 讲的很透彻,我喜欢实战派,不喜欢理论派,嘿嘿:
回复
支持 5
反对 0
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
推荐
楼主|
发表于 2019-8-4 17:47:24
|
只看该作者
一念花开 发表于 2019-8-3 16:48
大佬 我拜读了您的代码   这里算一段时间转过的脉冲数    不知道是不是我理解错了   前面这里Current_Count ...
emmm,我没懂你的意思,Current_Count - Previous_Count和-Previous_Count+Current_Count不是一样的么........我先讲你这里为啥这样,看能帮助你理解不
Enc_Timer_Overflow_one是溢出的次数,这个相信你能理解,即脉冲数为Enc_Timer_Overflow_one*4*ENCODER_PPR。我们先假定此时定时器计数器的值为200,即Previous_Count=200,而你这时开始记录脉冲,溢出了2次,而你此时定时器计数器的值为300,即Current_Count=300,那么你记录的脉冲值就不仅仅只是Enc_Timer_Overflow_one*4*ENCODER_PPR了,而是还需要加上Current_Count-Previous_Count。
回复
支持 1
反对 0
使用道具
举报

一念花开
一念花开
当前离线
积分63
2
主题
9
帖子
0
精华
初级会员
初级会员, 积分 63, 距离下一级还需 137 积分
积分63
金钱63
  注册时间2019-7-21
 在线时间19 小时
收听TA
发消息
推荐
发表于 2019-8-3 17:24:06
|
只看该作者
大佬   还有这里我不太理解    我知道前面算的是电机转的圈数,但是后面除以0.05是什么意思啊?  怎么跟速度联系起来了?
QQ截图.png
(5.12 KB, 下载次数: 56)
下载附件
2019-8-3 17:21 上传
回复
支持 1
反对 0
使用道具
举报

亢zhihao
亢zhihao
当前离线
积分246
12
主题
39
帖子
0
精华
中级会员
中级会员, 积分 246, 距离下一级还需 254 积分
积分246
金钱246
  注册时间2019-5-27
 在线时间71 小时
收听TA
发消息
3#
发表于 2019-7-26 08:28:21
|
只看该作者
多谢分享
回复
支持
反对
使用道具
举报

YH123
YH123
当前离线
积分79
0
主题
6
帖子
0
精华
初级会员
初级会员, 积分 79, 距离下一级还需 121 积分
积分79
金钱79
  注册时间2019-6-8
 在线时间40 小时
收听TA
发消息
4#
发表于 2019-7-26 09:46:37
|
只看该作者
多谢分享
回复
支持
反对
使用道具
举报

how2051
how2051
当前离线
积分30
1
主题
5
帖子
0
精华
新手上路
新手上路, 积分 30, 距离下一级还需 20 积分
积分30
金钱30
  注册时间2019-2-27
 在线时间6 小时
收听TA
发消息
5#
发表于 2019-7-26 10:17:46
|
只看该作者
不懂就问:想问一下up主,在TIM_EncoderInterfaceConfig的时候,声明的是TI1的上升沿和TI2的上升沿(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising ),那么它应该是在每一次TI1的上升沿和TI2的上升沿记录一次脉冲吧,应该不包括下降沿的。
然后想问一下编码器模式和输入捕获之间的关系,或者说,输入捕获时定时器设置的自动重装载值(up主已经解释了)和预分频系数的作用以及他们对编码器的影响。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
6#
楼主|
发表于 2019-7-26 15:11:56
|
只看该作者
how2051 发表于 2019-7-26 10:17
不懂就问:想问一下up主,在TIM_EncoderInterfaceConfig的时候,声明的是TI1的上升沿和TI2的上升沿(TIM3,TI ...
先说你的第一个问题:相信你在找正交编码模式资料的时候你看到最多的是这两张图
~04P4_W@0Z5OEE5Q@4K3IK1.png (12.7 KB, 下载次数: 16)
下载附件
2019-7-26 12:19 上传
6QGORAMYD%_W~F183VH1Y]1.png (32.3 KB, 下载次数: 4)
下载附件
2019-7-26 12:19 上传
对于第二张表格可能有很多人就直接跳过,没怎么去分析它(当初我也一样),后来有人告诉我怎么去分析这张表我才知道才怎么去分析。因为我表达能力不好,所以我直接粘贴复制别人的回答:我先放下他的帖子:
8J0_FO929XN~EC{N1UV$C}P.png (21.58 KB, 下载次数: 6)
下载附件
2019-7-26 14:51 上传
看过解释过后,你再去分析编码器模式3的时候你就会发现,在TI1和TI2上升沿和下降沿都在递增。
然后就是第二问题:
首先我们先分析普通定时器的重装载值和预分频系数的作用,普通定时器的时候,假设时钟频率84MHZ,重装载为10,预分频为,这样系统时钟预分频过后的频率就为1HZ,就是1s递增一次,而你的重装载值为10,所以就要递增10次,也就是10s,那么你的定时中断时间就为10s。所以,普通定时器的预分频系数分频的是系统时钟的频率,然而正交编码模式下,你预分频系数分频的是A相或者B相的频率。在你不分频的时候,定时器的计数器就会按照A相或者B相的频率递增,即有一个下降沿或者上升沿就递增一次。然而你改了预分频系数过后,假设为2,你的A相或者B相的频率就会为原来的一半,这样本来是一个脉冲计数一次,然而现在就为2个脉冲计数一次。说白了,正交编码模式下,你输入的时钟频率是AB相的频率而不是系统时钟频率。所以,假如你该我的代码的时候,将预分频系数改为2的话,你会发现比原来的计数值少了一半。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
7#
楼主|
发表于 2019-7-29 00:14:17
来自手机
|
只看该作者
推荐一篇帖子,讲的很很细致,很适合一些原理性知识还不怎么了解的初学者,而且不懂的可以问这个楼主,很热心的一位楼主
回复
支持
反对
使用道具
举报

how2051
how2051
当前离线
积分30
1
主题
5
帖子
0
精华
新手上路
新手上路, 积分 30, 距离下一级还需 20 积分
积分30
金钱30
  注册时间2019-2-27
 在线时间6 小时
收听TA
发消息
8#
发表于 2019-7-29 10:52:51
|
只看该作者
发表于 2019-7-26 15:11
先说你的第一个问题:相信你在找正交编码模式资料的时候你看到最多的是这两张图
对于第二张表格可能有很 ...
嗯,很感谢你的回复,不好意思现在才看到你的回复,没能及时回复你。
但是在你帖子留言之后我自己又去琢磨了很久,自己最后也把它弄明白了。跟你回复的应该是同一个意思。我发了个帖子,你看看我的理解对不对。
回复
支持
反对
使用道具
举报

一念花开
一念花开
当前离线
积分63
2
主题
9
帖子
0
精华
初级会员
初级会员, 积分 63, 距离下一级还需 137 积分
积分63
金钱63
  注册时间2019-7-21
 在线时间19 小时
收听TA
发消息
9#
发表于 2019-8-3 16:48:11
|
只看该作者
大佬 我拜读了您的代码   这里算一段时间转过的脉冲数    不知道是不是我理解错了   前面这里Current_Count - Previous_Count是不是应该写成:重装载值-Previous_Count+Current_Count,也就是除了算溢出的这一部分。javascript:;
QQ截图.png
(17.55 KB, 下载次数: 28)
下载附件
2019-8-3 16:42 上传
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
12#
楼主|
发表于 2019-8-4 17:51:47
|
只看该作者
一念花开 发表于 2019-8-3 17:24
大佬   还有这里我不太理解    我知道前面算的是电机转的圈数,但是后面除以0.05是什么意思啊?  怎么跟速 ...
我定时器定时的是50ms,就是说我记录的是50ms的脉冲数,你要算速度的话,即每秒转多少圈,你就要把50ms记录的脉冲数除以50ms,就得到了每秒转过的圈数
回复
支持
反对
使用道具
举报

一念花开
一念花开
当前离线
积分63
2
主题
9
帖子
0
精华
初级会员
初级会员, 积分 63, 距离下一级还需 137 积分
积分63
金钱63
  注册时间2019-7-21
 在线时间19 小时
收听TA
发消息
13#
发表于 2019-8-5 00:05:23
|
只看该作者
发表于 2019-8-4 17:47
emmm,我没懂你的意思,Current_Count - Previous_Count和-Previous_Count+Current_Count不是一样的么... ...
哦!!我想明白了,既然要溢出的话,那么也必然包括从200这一次计时开始。而无论最后的Current_Count以及之前的Previous_Count谁大谁小,用Current_Count-Previous_Count都是正确的,大了就加上,小了就减掉。真心感谢!
回复
支持
反对
使用道具
举报

一念花开
一念花开
当前离线
积分63
2
主题
9
帖子
0
精华
初级会员
初级会员, 积分 63, 距离下一级还需 137 积分
积分63
金钱63
  注册时间2019-7-21
 在线时间19 小时
收听TA
发消息
14#
发表于 2019-8-5 00:26:16
|
只看该作者
发表于 2019-8-4 17:51
我定时器定时的是50ms,就是说我记录的是50ms的脉冲数,你要算速度的话,即每秒转多少圈,你就要把50ms记 ...
我真白痴,哈哈哈,没看到您还有个定时器5在计时,而且得出的结果是在TIM5的溢出中断里面的。   我还有最后一个问题,拜托大佬再帮我解答一下(感激不尽啊):就是你之前解释的那个关于配置编码器TI1FP1信号以及TI2FP2信号只在上升沿计数的问题,对应到上面那张表上面的的话(也就是先不看二者的下降沿部分),那结果应该是只在二者的上升沿计数啊,也就是分辨率提升了一倍,而不是变成四倍啊,看了您之前的解释,我还是没明白(对不起,我有点笨)。。。
回复
支持
反对
使用道具
举报

s
s
当前离线
积分48
4
主题
17
帖子
0
精华
新手上路
新手上路, 积分 48, 距离下一级还需 2 积分
积分48
金钱48
  注册时间2018-8-9
 在线时间19 小时
收听TA
发消息
15#
发表于 2019-8-6 16:38:39
|
只看该作者
楼主,我想请问下编码器的正反相需要自己设置吗?没有看到有关的设置啊,是根据接线确定的吗?还是说板子自己判定先出现信号的为正方向呢?比如我先顺时针扭一下,再逆时针扭一下,计数器之后就会在顺时针加值逆时针减值吗?还有就是如果计数器减值减到0之后,我再往反相扭,计数值会变成最大吗?我自己试了下感觉方向是固定的,我设置当脉冲数够一圈LED就会闪,我开头往反方向扭一小下灯直接就闪了。。。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
16#
楼主|
发表于 2019-8-6 20:17:18
|
只看该作者
一念花开 发表于 2019-8-5 00:26
我真白痴,哈哈哈,没看到您还有个定时器5在计时,而且得出的结果是在TIM5的溢出中断里面的。   我还有最 ...
正交编码模式1和2只会在TI1FP1信号或者TI2FP2上升沿计数,而正交编码模式3在TI1FP1信号和TI2FP2上升沿和下降沿都会计数,相比正交编码模式1和2来说在一个脉冲周期内只递增了一次,而正交编码模式3却在一个脉冲周期递增了四次。而我设置的真好是正交编码模式3.你可以再仔细的分析下那张表,我实在不好表达,只能靠你去分析,分析好了,你会发现在正交编码模式3时两者的上升沿和下降沿确实都在递增
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
17#
楼主|
发表于 2019-8-6 20:25:42
|
只看该作者
s 发表于 2019-8-6 16:38
楼主,我想请问下编码器的正反相需要自己设置吗?没有看到有关的设置啊,是根据接线确定的吗?还是说板子自 ...
emm,这个是我的错,我这份代码只能测正转或者反转,如果想要又能测反转又能正转的话,得稍微改一下代码。举个例子:你假如定时器重装载值为,你记录50ms内的脉冲数,你正转的话,就能测到10个脉冲,而你反转的话按照我的代码来看就是-10个脉冲,你会发现,反转的脉冲值就是你的重装载值减去你应该得到的脉冲数。所以这时候你得做下处理,就是说你要做个判断,比如如果脉冲数大于/2,就用-你得到的脉冲数,按照上面的例子来说就是-10-,这样你就能得到反转的脉冲数了。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
18#
楼主|
发表于 2019-8-6 20:30:30
|
只看该作者
emmm,大家用这份代码时,可能只能测反转或者正转,如果想要两者都能测的话,可以看下我后面的回复,我有讲解了思路,等我这段时间忙完,我会发一个正反转都能测得
回复
支持
反对
使用道具
举报

玖乌御酒
玖乌御酒
当前离线
积分277
2
主题
7
帖子
0
精华
中级会员
中级会员, 积分 277, 距离下一级还需 223 积分
积分277
金钱277
  注册时间2019-5-16
 在线时间30 小时
收听TA
发消息
19#
发表于 2019-8-21 10:36:11
|
只看该作者
楼主讲的很好,小白很受用!!!
还有个问题:
TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising )
请问这个函数选择模式3之后,在AB相上升沿和下降沿都会检测,那么后面两个通道的记性设置又是为了设置什么?这里我还有疑问,请大佬提点一下。谢谢。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
20#
楼主|
发表于 2019-8-23 13:47:59
|
只看该作者
玖乌御酒 发表于 2019-8-21 10:36
楼主讲的很好,小白很受用!!!
还有个问题:
说实话我也不太清楚,我个人理解设置是为了设置捕获极性为上升沿,就是说在上升沿来的时候计数一次,而为何下降沿也会计数呢,我个人认为是stm32芯片里面的一些信号处理,使得下降沿反向,把下降沿变成了上升沿,从而把下降沿也当成的上升沿。具体想知道为什么,你只有去查阅资料了。
回复
支持
反对
使用道具
举报

迅得电子
迅得电子
当前离线
积分623
10
主题
293
帖子
0
精华
高级会员
高级会员, 积分 623, 距离下一级还需 377 积分
积分623
金钱623
  注册时间2019-6-3
 在线时间107 小时
收听TA
发消息
21#
发表于 2019-8-23 14:41:56
|
只看该作者
感谢分享,很不错的资料讲解,
回复
支持
反对
使用道具
举报

玖乌御酒
玖乌御酒
当前离线
积分277
2
主题
7
帖子
0
精华
中级会员
中级会员, 积分 277, 距离下一级还需 223 积分
积分277
金钱277
  注册时间2019-5-16
 在线时间30 小时
收听TA
发消息
22#
发表于 2019-8-23 20:11:01
|
只看该作者
发表于 2019-8-23 13:47
说实话我也不太清楚,我个人理解设置是为了设置捕获极性为上升沿,就是说在上升沿来的时候计数一次,而为 ...
这个函数我弄明白了,查看中文参考手册里面(表75),后面两个参数就是设置的计数的时候另一个通道的标志,这个函数就是设置的表75,楼主需要的话可以对着看一下。
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
23#
楼主|
发表于 2019-8-26 11:21:35
|
只看该作者
玖乌御酒 发表于 2019-8-23 20:11
这个函数我弄明白了,查看中文参考手册里面(表75),后面两个参数就是设置的计数的时候另一个通道的标志 ...
哈哈,谢谢
回复
支持
反对
使用道具
举报

万年花城
万年花城
当前离线
积分52
0
主题
8
帖子
0
精华
初级会员
初级会员, 积分 52, 距离下一级还需 148 积分
积分52
金钱52
  注册时间2019-8-12
 在线时间24 小时
收听TA
发消息
24#
发表于 2019-8-26 18:52:18
|
只看该作者
楼主牛皮,,,
回复
支持
反对
使用道具
举报

XUENV
XUENV
当前离线
积分150
21
主题
40
帖子
0
精华
初级会员
初级会员, 积分 150, 距离下一级还需 50 积分
积分150
金钱150
  注册时间2018-5-17
 在线时间45 小时
收听TA
发消息
25#
发表于 2019-9-11 19:46:56
|
只看该作者
楼主请问,你算的是每秒转多少圈,如果换成每分钟多少圈,比如每秒1圈1min就是60圈,每秒2圈1min就是120圈,结果不全是60的整数倍了吗?我想看到结果是50圈、51圈,是不是就算不出来?
回复
支持
反对
使用道具
举报

万年花城
万年花城
当前离线
积分52
0
主题
8
帖子
0
精华
初级会员
初级会员, 积分 52, 距离下一级还需 148 积分
积分52
金钱52
  注册时间2019-8-12
 在线时间24 小时
收听TA
发消息
26#
发表于 2019-9-12 13:03:28
|
只看该作者
发表于 2019-8-6 20:25
emm,这个是我的错,我这份代码只能测正转或者反转,如果想要又能测反转又能正转的话,得稍微改一下代码 ...
学习  牛!!!!!!
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
27#
楼主|
发表于 2019-9-12 19:16:44
|
只看该作者
XUENV 发表于 2019-9-11 19:46
楼主请问,你算的是每秒转多少圈,如果换成每分钟多少圈,比如每秒1圈1min就是60圈,每秒2圈1min就是120圈 ...
这个每秒几圈并不是你想要它什么速度就是什么速度,这个速度是由你给直流减速电机所加电压和它自己的减速比决定的。你只能通过代码去测它的速度,而不是去决定它的速度。
回复
支持
反对
使用道具
举报

Advent
Advent
当前离线
积分811
37
主题
212
帖子
0
精华
高级会员
高级会员, 积分 811, 距离下一级还需 189 积分
积分811
金钱811
  注册时间2019-6-6
 在线时间100 小时
收听TA
发消息
28#
发表于 2019-9-16 16:30:52
|
只看该作者
首先非常感谢楼主分享的经验,并且也理解楼主说的计数四次。但是还是想追问一下如果都设置成Botheage会怎么样,望楼主解惑。
1.png
(3.3 KB, 下载次数: 29)
下载附件
2019-9-16 16:29 上传
不会就要俯身倾耳以请啊,博客地址:
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
29#
楼主|
发表于 2019-9-17 10:24:29
来自手机
|
只看该作者
Advent 发表于 2019-9-16 16:30
首先非常感谢楼主分享的经验,并且也理解楼主说的计数四次。但是还是想追问一下如果都设置成Botheage会怎么 ...
这个我没有试过,所以我也不知道怎么给你说。但是我有两个我觉得可行方法。第一个就是用示波器看波形与串口打印数据配合,经过多次实验得出经验,总结出结果。第二个就是查32的数据手册,这些应该在里面都讲了,只是可能有点难找。
回复
支持
反对
使用道具
举报

Advent
Advent
当前离线
积分811
37
主题
212
帖子
0
精华
高级会员
高级会员, 积分 811, 距离下一级还需 189 积分
积分811
金钱811
  注册时间2019-6-6
 在线时间100 小时
收听TA
发消息
30#
发表于 2019-9-17 14:46:41
|
只看该作者
发表于 2019-9-17 10:24
这个我没有试过,所以我也不知道怎么给你说。但是我有两个我觉得可行方法。第一个就是用示波器看波形与串 ...
thanks
不会就要俯身倾耳以请啊,博客地址:
回复
支持
反对
使用道具
举报

Advent
Advent
当前离线
积分811
37
主题
212
帖子
0
精华
高级会员
高级会员, 积分 811, 距离下一级还需 189 积分
积分811
金钱811
  注册时间2019-6-6
 在线时间100 小时
收听TA
发消息
31#
发表于 2019-9-17 20:44:43
|
只看该作者
网上的大部分编码器的程序如图所示,但是我觉得在捕获初始化的时候有问题,明显是只初始化了定时器的一个通道,楼主应该也发现过这个问题把?还是只初始化一个捕获通道就行呢?我看楼主的程序是初始化两个通道的。
3.png
(10.67 KB, 下载次数: 22)
下载附件
2019-9-17 20:42 上传
不会就要俯身倾耳以请啊,博客地址:
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
32#
楼主|
发表于 2019-9-19 11:28:19
来自手机
|
只看该作者
Advent 发表于 2019-9-17 20:44
网上的大部分编码器的程序如图所示,但是我觉得在捕获初始化的时候有问题,明显是只初始化了定时器的一个通 ...
直流减速电机的编码器有两个输出口,A相和B相,你如果只初始化一个通道就只能检测一个相位的方波。
回复
支持
反对
使用道具
举报

尹文铜
尹文铜
当前离线
积分89
4
主题
27
帖子
0
精华
初级会员
初级会员, 积分 89, 距离下一级还需 111 积分
积分89
金钱89
  注册时间2019-4-30
 在线时间24 小时
收听TA
发消息
33#
发表于 2019-9-20 20:14:32
|
只看该作者
回复
支持
反对
使用道具
举报

animalvideo
animalvideo
当前离线
积分73
0
主题
3
帖子
0
精华
初级会员
初级会员, 积分 73, 距离下一级还需 127 积分
积分73
金钱73
  注册时间2019-8-30
 在线时间24 小时
收听TA
发消息
34#
发表于 2019-9-27 09:29:11
|
只看该作者
楼主是不是没有用到LCD显示呀~
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
35#
楼主|
发表于 2019-9-27 09:44:10
|
只看该作者
animalvideo 发表于 2019-9-27 09:29
楼主是不是没有用到LCD显示呀~
嗯,是的,我用串口打印的
回复
支持
反对
使用道具
举报

aotem
aotem
当前离线
积分22
0
主题
4
帖子
0
精华
新手上路
新手上路, 积分 22, 距离下一级还需 28 积分
积分22
金钱22
  注册时间2019-9-16
 在线时间5 小时
收听TA
发消息
36#
发表于 2019-9-28 21:12:41
来自手机
|
只看该作者
看到了一半,先来谢谢你
回复
支持
反对
使用道具
举报

zc2017
zc2017
当前离线
积分178
0
主题
20
帖子
0
精华
初级会员
初级会员, 积分 178, 距离下一级还需 22 积分
积分178
金钱178
  注册时间2019-9-4
 在线时间20 小时
收听TA
发消息
37#
发表于 2019-10-25 20:19:26
|
只看该作者
感谢楼主
回复
支持
反对
使用道具
举报

孙晓天123
孙晓天123
当前离线
积分28
0
主题
5
帖子
0
精华
新手上路
新手上路, 积分 28, 距离下一级还需 22 积分
积分28
金钱28
  注册时间2019-10-30
 在线时间8 小时
收听TA
发消息
38#
发表于 2019-11-21 12:25:51
|
只看该作者
楼主,我有一个问题想问一下
就是我用你的代码在测试的时候打印在串口上的时候会出现 变化很大的值 比如脉冲数大部分是三千多  有一个数是五千多  这是什么原因啊
回复
支持
反对
使用道具
举报

有为青年
有为青年
当前离线
积分310
3
主题
37
帖子
0
精华
中级会员
中级会员, 积分 310, 距离下一级还需 190 积分
积分310
金钱310
  注册时间2019-1-3
 在线时间40 小时
收听TA
发消息
39#
发表于 2019-11-21 15:55:25
|
只看该作者
楼主,我想问一下    假如你的电机线数是360,就是转一圈产生360个脉冲,而你用了编码器模式3后,就产生390*4个脉冲了。   这句话的390*4是怎么得到的我没理解
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
40#
楼主|
发表于 2019-11-21 16:29:49
|
只看该作者
有为青年 发表于 2019-11-21 15:55
楼主,我想问一下    假如你的电机线数是360,就是转一圈产生360个脉冲,而你用了编码器模式3后,就产生390 ...
你可以去6楼看我的评论,我有讲解为什么编码器模式3的脉冲数是4倍。你好好分析那张图就可以分析出编码器模式3下的确A和B相的脉冲都在计数。
回复
支持
反对
使用道具
举报

有为青年
有为青年
当前离线
积分310
3
主题
37
帖子
0
精华
中级会员
中级会员, 积分 310, 距离下一级还需 190 积分
积分310
金钱310
  注册时间2019-1-3
 在线时间40 小时
收听TA
发消息
41#
发表于 2019-11-21 17:36:53
|
只看该作者
发表于 2019-11-21 16:29
你可以去6楼看我的评论,我有讲解为什么编码器模式3的脉冲数是4倍。你好好分析那张图就可以分析出编码器 ...
我理解的应该是360*4才对,你上边写的390*4 并且代码里也是用390算得  不知道是不是搂主的笔误,还是我没理解对
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
42#
楼主|
发表于 2019-11-21 19:09:17
|
只看该作者
有为青年 发表于 2019-11-21 17:36
我理解的应该是360*4才对,你上边写的390*4 并且代码里也是用390算得  不知道是不是搂主的笔误,还是我没 ...
呃,我的锅。帖子上我用的是线数为360的减速电机举的例子。而我代码中用的减速电机的线数为390。emm,总之你记住编码器模式3下,转一圈产生的脉冲数就为你直流减速电机的线数乘4。
回复
支持
反对
使用道具
举报

有为青年
有为青年
当前离线
积分310
3
主题
37
帖子
0
精华
中级会员
中级会员, 积分 310, 距离下一级还需 190 积分
积分310
金钱310
  注册时间2019-1-3
 在线时间40 小时
收听TA
发消息
43#
发表于 2019-11-21 19:22:33
|
只看该作者
发表于 2019-11-21 19:09
呃,我的锅。帖子上我用的是线数为360的减速电机举的例子。而我代码中用的减速电机的线数为390。emm,总 ...
好的,谢谢楼主解答
回复
支持
反对
使用道具
举报

有为青年
有为青年
当前离线
积分310
3
主题
37
帖子
0
精华
中级会员
中级会员, 积分 310, 距离下一级还需 190 积分
积分310
金钱310
  注册时间2019-1-3
 在线时间40 小时
收听TA
发消息
44#
发表于 2019-11-22 15:47:34
|
只看该作者
楼主,还要麻烦您解答一下:    TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising );//编码器配置(定时器、编码模式、上升沿、上升沿)  看了上边六楼的解释,我还是没理解这段代码后边设置的两个上升沿是什么意思,我认为应该设置边沿触发(TIM_ICPolarity_BothEdge)才对.
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
45#
楼主|
发表于 2019-11-22 17:11:33
|
只看该作者
有为青年 发表于 2019-11-22 15:47
楼主,还要麻烦您解答一下:    TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Ri ...
这个就是你得到的脉冲数是线数*4的原因,这一步设置的就是编码器模式3。在编码器模式3下,你看懂那个图后,你会发现A相和B相不管是在上升沿也好还是下降沿也好,都在递增。而在编码器1和2下,只会在A相或者B相下的上升沿递增。
回复
支持
反对
使用道具
举报

孙晓天123
孙晓天123
当前离线
积分28
0
主题
5
帖子
0
精华
新手上路
新手上路, 积分 28, 距离下一级还需 22 积分
积分28
金钱28
  注册时间2019-10-30
 在线时间8 小时
收听TA
发消息
46#
发表于 2019-12-12 21:42:27
|
只看该作者
串口打印的脉冲数出现了负数 什么原因  就是我一旦将定时器设置的时间改小 也就是由1s改为100ms时串口打印的脉冲数就为负数 这是什么问题啊  求教
回复
支持
反对
使用道具
举报

孙晓天123
孙晓天123
当前离线
积分28
0
主题
5
帖子
0
精华
新手上路
新手上路, 积分 28, 距离下一级还需 22 积分
积分28
金钱28
  注册时间2019-10-30
 在线时间8 小时
收听TA
发消息
47#
发表于 2019-12-12 21:52:38
|
只看该作者
我将定时的时间由1s改为了100ms结果打印在串口上的脉冲数出现了负数 怎么办啊
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
48#
楼主|
发表于 2019-12-14 19:16:29
来自手机
|
只看该作者
孙晓天123 发表于 2019-12-12 21:52
我将定时的时间由1s改为了100ms结果打印在串口上的脉冲数出现了负数 怎么办啊
如果1s是正数,100ms是负数的话,说明就是程序哪里出了问题,这个问题只有看你自己才行。我这份程序有个bug,就是反转的时候是负数,然后这样的解决方法我在前面说过,你可以翻一下。
回复
支持
反对
使用道具
举报

animalvideo
animalvideo
当前离线
积分73
0
主题
3
帖子
0
精华
初级会员
初级会员, 积分 73, 距离下一级还需 127 积分
积分73
金钱73
  注册时间2019-8-30
 在线时间24 小时
收听TA
发消息
49#
发表于 2019-12-23 17:15:27
|
只看该作者
楼主,想请教一下,如果想在你的程序里面加入一个PID调速的程序,放在什么位置合适一些
回复
支持
反对
使用道具
举报

当前离线
积分1164
11
主题
131
帖子
0
精华
金牌会员
金牌会员, 积分 1164, 距离下一级还需 1836 积分
积分1164
金钱1164
  注册时间2019-4-22
 在线时间229 小时
收听TA
发消息
50#
楼主|
发表于 2019-12-25 20:54:03
|
只看该作者
animalvideo 发表于 2019-12-23 17:15
楼主,想请教一下,如果想在你的程序里面加入一个PID调速的程序,放在什么位置合适一些
就放在我程序里面的那个定时器5中断里面,里面得到你的速度过后,即得到你想要的数据后,不就可以进行pid么
回复
支持
反对
使用道具
举报

电机测速霍尔传感器:帮你轻松做出基于霍尔传感器的电机测速装置

1.本设计采用STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机作为主控制器
2.采用霍尔传感器非接触式测电机转速
3.LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%。
4.电机的速度可以通过按键调整,也可以开始暂停,正转和反转。
注意:磁铁和霍尔元件最近距离在2mm左右,太近可能会在电机转动时碰到霍尔元件,太远霍尔元件可能会检测不到磁铁。
使用说明:
液晶屏第一行显示电机转速,第二行显示占空比,占空比数值越大,电机转速越快。
系统一共有6个按键,单片机附近的独立按键是系统的复位按键,按下单片机会复位。
下面一排是控制按键:
1键:加速键,可以短按,占空比加1,也可长按,占空比连续加;
2键:减速键,可以短按,占空比减1,也可长按,占空比连续减;
3键:正转切换键,按下后电机正转;
4键:反转切换键,按下后电机反转;
5键:开始暂停键,按一下开始,再按一下暂停。
电路原理图如下:
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
PCB图+布局图+焊接图:

下一篇: PLC、DCS、FCS三大控

上一篇: 电气控制线路图控制原

推荐产品

更多