久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 51078|回復(fù): 23
收起左側(cè)

用51單片機(jī)控制步進(jìn)電機(jī)運(yùn)動(dòng)詳解

  [復(fù)制鏈接]
ID:381462 發(fā)表于 2018-7-31 22:19 | 顯示全部樓層 |閱讀模式
本來接觸單片機(jī)挺久了的,但是一直只是停留在非常初級(jí)的認(rèn)識(shí)階段,本科的時(shí)候上過幾門課,但是從來沒有自己搗鼓過單片機(jī),這次突然來了興趣,感覺一下子學(xué)到了好多東西,在這里好好整理一下。這篇文章只適合于入門階段的小白閱讀,高手請(qǐng)繞道。
12年年初的時(shí)候購買了一套普中科技的“單片機(jī)開發(fā)試驗(yàn)儀”,好多次想好好學(xué)學(xué),結(jié)果每一次都半途而廢,主要原因還是周圍的人都不會(huì)用,有問題都不知道找誰問,結(jié)果鎖到箱子里一直到現(xiàn)在。因?yàn)樽罱枰玫揭粋(gè)步進(jìn)電機(jī),而這個(gè)步進(jìn)電機(jī)需要用PWM波控制。以前也用過電機(jī),直流無刷的、交流伺服等等,但是都是RS232、RS485或者Can總線協(xié)議,從來沒有用PWM波控制過。廢話不多說,直接入正題。
硬件單片機(jī)型號(hào):STC90C516RD+
步進(jìn)電機(jī)型號(hào):39HS4012A4 1.8° 1.2A
1.jpg
步進(jìn)電機(jī)驅(qū)動(dòng)器型號(hào):M415B 1.5A
2.jpg
代碼源代碼
  1. #include <reg52.h>

  2. unsigned char timer1;
  3. sbit DIR=P1^0; //位定義DIR為P1.0口
  4. sbit ENA=P1^1; //位定義ENA為P1.1口
  5. sbit PWM=P1^2; //位定義PWM為P1.2口

  6. void system_Ini()
  7. {
  8.     TMOD|= 0x11;
  9.     TH1 = 0xfe; //11.0592MHz 0.5ms定時(shí)
  10.     TL1 = 0x33;
  11.     TR1 = 1; //啟動(dòng)T1定時(shí)
  12.     IE =0x8A; //開T0,T1中斷,開總中斷
  13. }

  14. main()
  15. {
  16.     system_Ini(); //調(diào)用子函數(shù),初始化定時(shí)器T1
  17.     while(1)
  18.     {
  19.         if(timer1>100)
  20.         {
  21.             timer1=0; //輸出占空比0.7的PWM脈沖
  22.         }
  23.         if(timer1<30)
  24.         {
  25.             PWM=0;
  26.         }
  27.         else
  28.         {
  29.             PWM=1;
  30.         }
  31.     }
  32. }

  33. /*************************************
  34. [ t1 (0.5ms)中斷] 中斷中做 PWM 輸出
  35. ------------1000/(0.02ms*250)=200Hz
  36. *************************************/
  37. void T1zd(void) interrupt 3 //3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2 4 串口中斷
  38. {
  39.     TH1 = 0xfe; //11.0592 初始化定時(shí)器
  40.     TL1 = 0x33;
  41.     timer1++; //計(jì)數(shù)+1
  42. }
復(fù)制代碼
  1. #include <reg52.h> //包含了單片機(jī)系統(tǒng)的頭文件
  2. unsigned char timer1; //定義一個(gè)無符號(hào)字符常量timer1,用來給定時(shí)器計(jì)數(shù)用

  3. sbit DIR=P1^0; //位定義DIR為P1.0口,用來控制步進(jìn)電機(jī)的方向
  4. sbit ENA=P1^1; //位定義ENA為P1.1口,用來控制步進(jìn)電機(jī)的使能
  5. sbit PWM=P1^2; //位定義PWM為P1.1口,用來輸出PWM波

  6. TMOD = 0x11;
  7. //這一句代碼比較費(fèi)解,因?yàn)閷?duì)單片機(jī)的控制字不熟悉,仔細(xì)翻看了單片機(jī)的手冊(cè),原來這是控制定時(shí)器的,共有兩位,前一位控制定時(shí)器1,后一位控制定時(shí)器0。因?yàn)榭刂浦皇褂昧艘粋(gè)定時(shí)器1,所以其實(shí)定時(shí)器0所在的位其實(shí)無關(guān)緊要?刂莆坏亩x如下圖所示,共4位,組成一個(gè)16進(jìn)制數(shù),所以代碼中的1其實(shí)鋪開了二進(jìn)制應(yīng)該是0001,對(duì)應(yīng)下面的16位定時(shí)器,TL1、TH1全用。
復(fù)制代碼

3.jpg
TH1 = 0xfe; //11.0592MHz 0.5ms定時(shí)
TL1 = 0x33;
//這句代碼非常的費(fèi)解,剛開始的時(shí)候完全不懂這兩個(gè)數(shù)索要表示的意思是什么,旁邊還有個(gè)注釋,也是沒看懂。好在實(shí)驗(yàn)室有一位大神,分分鐘幫我講懂了。先看芯片手冊(cè)上給出的例子:

1.jpg 2.jpg 0.png

  1. //也就是說實(shí)際的定時(shí)器定時(shí)464.6ms,這里終于解釋清楚了為什么上面的定時(shí)器數(shù)據(jù)應(yīng)該那么寫


  2. TR1 = 1; //啟動(dòng)T1定時(shí),這里比較好理解

  3. IE =0x8A; //開T0,T1中斷,開總中斷
  4. //這里繼續(xù)翻出芯片的技術(shù)手冊(cè)來解釋,有了前面的基礎(chǔ),后面看起來自然一目了然,必須允許定時(shí)器溢出中斷,定時(shí)器每溢出一次就產(chǎn)生一次中斷,總中斷是必須打開的,用了定時(shí)器1,因此定時(shí)器1的中斷也需要打開,而定時(shí)器0的中斷其實(shí)開不開無所謂的,因?yàn)楦揪蜎]有用定時(shí)器0。
復(fù)制代碼

1.jpg

  1. main()
  2. {
  3.     system_Ini(); //調(diào)用子函數(shù),初始化定時(shí)器T1
  4.     while(1) //無限循環(huán)
  5.     {
  6.         if(timer1>100)
  7.         {
  8.             timer1=0; //輸出占空比0.7的PWM脈沖
  9.         }
  10.         if(timer1<30)
  11.         {
  12.             PWM=0;
  13.         }
  14.         else
  15.         {
  16.             PWM=1;
  17.         }
  18.     }
  19. }


  20. /*************************************
  21. [ t1 (0.5ms)中斷] 中斷中做 PWM 輸出 1000/(0.02ms*250)=200Hz
  22. *************************************/

  23. void T1zd(void) interrupt 3 //3為定時(shí)器1的中斷號(hào); 1為定時(shí)器0的中斷號(hào); 0為外部中斷1的中斷號(hào); 2為外部中斷2的中斷號(hào); 4為串口中斷的中斷號(hào),這是芯片規(guī)定的

  24. {
  25.     TH1 = 0xfe; //11.0592 初始化定時(shí)器,讓定時(shí)器復(fù)位繼續(xù)定時(shí)
  26.     TL1 = 0x33;
  27.     timer1++; //計(jì)數(shù)+1
  28. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:162757 發(fā)表于 2018-12-25 21:04 | 顯示全部樓層
真厲害  我學(xué)了 10年了 沒學(xué)會(huì)
回復(fù)

使用道具 舉報(bào)

ID:451441 發(fā)表于 2018-12-26 08:20 | 顯示全部樓層
正好學(xué)學(xué)東西,在工作中再找機(jī)會(huì)實(shí)踐下
回復(fù)

使用道具 舉報(bào)

ID:162757 發(fā)表于 2018-12-26 19:16 | 顯示全部樓層
昨天來過 樓主說的對(duì) 不練不行呀 我英語不好 不會(huì)語言
回復(fù)

使用道具 舉報(bào)

ID:440142 發(fā)表于 2019-1-4 09:03 | 顯示全部樓層
timer1=0是怎么實(shí)現(xiàn)占空比為0.7的PWM脈沖的呢?
回復(fù)

使用道具 舉報(bào)

ID:440142 發(fā)表于 2019-1-4 09:06 | 顯示全部樓層
關(guān)于占空比的問題我明白了,謝謝資料分享!
回復(fù)

使用道具 舉報(bào)

ID:283906 發(fā)表于 2019-3-8 20:33 | 顯示全部樓層
頻率為什么是200hz???0.5ms中斷一次timer1++,timer計(jì)100次,0.5*100==50ms,1/50==20hz啊?頻率是怎么算的啊
回復(fù)

使用道具 舉報(bào)

ID:483402 發(fā)表于 2019-3-20 00:24 | 顯示全部樓層

timer1=0是怎么實(shí)現(xiàn)占空比為0.7的PWM脈沖的呢?
下面的語句 指示標(biāo)注錯(cuò)地方了
        if(timer1<30)
        {
            PWM=0;
        }
        else
        {
            PWM=1;
頻率為什么是200hz???0.5ms中斷一次timer1++,timer計(jì)100次,0.5*100==50ms,1/50==20hz?頻率是怎么算的啊  
同問 我也想知道 這數(shù)是怎么算出來的還是寫錯(cuò)了
回復(fù)

使用道具 舉報(bào)

ID:483402 發(fā)表于 2019-3-20 00:24 | 顯示全部樓層
不能發(fā)帖嗎
回復(fù)

使用道具 舉報(bào)

ID:538990 發(fā)表于 2019-5-15 16:06 | 顯示全部樓層
有用單片機(jī)開發(fā)控制器的嗎?  就是單片機(jī)系統(tǒng)直接驅(qū)動(dòng)步進(jìn)電機(jī),  省去了步進(jìn)電機(jī)控制器。,求高手賜教
回復(fù)

使用道具 舉報(bào)

ID:540088 發(fā)表于 2019-5-16 18:20 | 顯示全部樓層
樓主 能給個(gè)聯(lián)系方式嗎  我用單片機(jī)控制28byj-4電機(jī),但是程序一直出錯(cuò),能不能幫我看看是什么情況?單片機(jī)也是用的STC90C516RD+
回復(fù)

使用道具 舉報(bào)

ID:582255 發(fā)表于 2019-8-13 16:44 | 顯示全部樓層
up主可以分享一下不?56003418@qq.com
回復(fù)

使用道具 舉報(bào)

ID:564157 發(fā)表于 2019-12-11 18:42 | 顯示全部樓層
無常 發(fā)表于 2019-3-8 20:33
頻率為什么是200hz???0.5ms中斷一次timer1++,timer計(jì)100次,0.5*100==50ms,1/50==20hz。款l率是怎么 ...

可以用軟件算 有一個(gè)軟件可以算
回復(fù)

使用道具 舉報(bào)

ID:298008 發(fā)表于 2020-1-6 23:24 | 顯示全部樓層
謝謝樓主分享!!
回復(fù)

使用道具 舉報(bào)

ID:140644 發(fā)表于 2020-1-7 10:23 | 顯示全部樓層
普中也就51搞搞,STM32服務(wù)都沒有,搞個(gè)BBS癱瘓的,回復(fù)一直要?jiǎng)潏D像還發(fā)不出,普中最垃圾了。
回復(fù)

使用道具 舉報(bào)

ID:298008 發(fā)表于 2020-2-22 10:13 | 顯示全部樓層
謝謝樓主分享!!!
回復(fù)

使用道具 舉報(bào)

ID:710053 發(fā)表于 2020-3-17 17:57 | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:695749 發(fā)表于 2020-3-17 22:23 | 顯示全部樓層
認(rèn)真學(xué)習(xí),努力思考,謝謝分享!
回復(fù)

使用道具 舉報(bào)

ID:707309 發(fā)表于 2020-3-18 15:42 | 顯示全部樓層
有沒有帶加減速的例子,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:695749 發(fā)表于 2020-3-18 21:21 | 顯示全部樓層
“3為定時(shí)器1的中斷號(hào); 1為定時(shí)器0的中斷號(hào); 0為外部中斷1的中斷號(hào); 2為外部中斷2的中斷號(hào); 4為串口中斷的中斷號(hào),這是芯片規(guī)定的”
明白了一些,主要在實(shí)踐,謝謝分享!
回復(fù)

使用道具 舉報(bào)

ID:727456 發(fā)表于 2020-4-26 08:45 | 顯示全部樓層
厲害,確實(shí)清楚
回復(fù)

使用道具 舉報(bào)

ID:282095 發(fā)表于 2020-5-13 22:53 | 顯示全部樓層
樓上思路清晰,蠻值得學(xué)習(xí)的。
回復(fù)

使用道具 舉報(bào)

ID:748312 發(fā)表于 2020-5-18 16:20 | 顯示全部樓層
這個(gè)詳細(xì)適合我學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

ID:732581 發(fā)表于 2020-5-18 21:24 來自觸屏版 | 顯示全部樓層
不錯(cuò)不錯(cuò)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 18成人在线观看 | 欧美激情五月 | 欧美日韩一 | 国产主播第一页 | 久久久久久综合 | 伊人艹| 欧美日韩国产在线观看 | 中文字幕一区二区在线观看 | 精品国产一区二区在线 | 日韩一区二区三区在线播放 | 97色伦网 | 91欧美精品成人综合在线观看 | 午夜免费在线观看 | 亚洲在线一区 | 国产在线精品一区 | 男人天堂久久 | 91在线第一页| 久久久精品一区二区三区 | 成人午夜免费视频 | 日日综合 | 色频| 欧美久 | 国产在线观看一区二区三区 | 最近最新中文字幕 | 欧洲亚洲视频 | 日韩一区二区在线视频 | 一区二区三区日韩精品 | 91在线精品一区二区 | 91视频麻豆| 天天射影院 | 99热在这里只有精品 | 日韩av在线一区 | 免费污视频 | 99精品免费视频 | 欧美综合久久 | 美女国产精品 | 亚洲精品中文字幕在线观看 | 亚洲 欧美 另类 综合 偷拍 | 欧美黄视频 | 99爱在线观看 | 新超碰97|