發布日期:2022-10-09 點擊率:60
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單片機 霍爾傳感器 電機測速
編輯:什么魚 引用地址:
(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
,
如果改變磁場的強度,
霍爾電壓的大小亦隨之改變,
當磁場消失時,霍爾電壓變為零。霍爾效應式轉速
傳感器輸出的信號是矩形脈沖信號,很適合于數字
控制系統,抗干擾能力強。
查看: |回復: 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三大控
上一篇: 電氣控制線路圖控制原