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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15331|回復: 12
打印 上一主題 下一主題
收起左側(cè)

二相四線步進電機的單片機源程序 用L298N模塊驅(qū)動

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:220436 發(fā)表于 2017-7-18 09:07 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在網(wǎng)上找了很久資料,都沒有直接的源代碼去驅(qū)動二相四線步進電機。本人編寫了一些基本的代碼,再加上L298N模塊,就可以輕松驅(qū)動啦。


單片機源程序如下:
  1. #include "reg52.h"

  2. //電機IO
  3. #define GPIO_MOTOR P1
  4. //sbit F1 = P1^0;
  5. //sbit F2 = P1^1;
  6. //sbit F3 = P1^2;
  7. //sbit F4 = P1^3;
  8. //按鍵IO

  9. sbit K1=P3^0;
  10. sbit K2=P3^1;
  11. sbit K3=P3^2;
  12. sbit K4=P3^3;

  13.                                                                                                                                                                     
  14. sbit a0=P1^0;                          
  15. sbit a1=P1^1;           
  16. sbit b0=P1^3;
  17. sbit b1=P1^4;

  18. void right(unsigned int y);
  19. void left(unsigned int x);
  20. void Delay(unsigned int t);
  21. unsigned char Direction,Speed;
  22. void motor();
  23. /*******************************************************************************
  24. * 函 數(shù) 名         : main
  25. * 函數(shù)功能                   : 主函數(shù)
  26. * 輸    入         : 無
  27. * 輸    出         : 無
  28. *******************************************************************************/

  29. void main(void)
  30. {
  31.         unsigned char i;       
  32.    Speed=10;

  33.   while(1)
  34.         {
  35.                          
  36.           if(K1==0)                //檢測按鍵K1是否按下
  37.                 {
  38.                         Delay(50);        //消除抖動
  39.                         if(K1==0)
  40.                         {
  41.                                 Direction=1;
  42.                         }
  43.                         while((i<200)&&(K1==0))         //檢測按鍵是否松開
  44.                         {
  45.                                 Delay(50);
  46.                                 i++;
  47.                         }
  48.                         i=0;
  49.                 }


  50.                 if(K2==0)                //檢測按鍵K1是否按下
  51.                 {
  52.                         Delay(50);        //消除抖動
  53.                         if(K2==0)
  54.                         {
  55.                                 Direction=2;
  56.                         }
  57.                         while((i<200)&&(K2==0))         //檢測按鍵是否松開
  58.                         {
  59.                                 Delay(50);
  60.                                 i++;
  61.                         }
  62.                         i=0;
  63.                 }       



  64.                  if(K3==0)                //檢測按鍵K1是否按下
  65.                 {
  66.                         Delay(100);        //消除抖動
  67.                         if(K3==0)
  68.                         {
  69.                                 Speed--;
  70.                                 if(Speed<=3)
  71.                                 Speed=4;
  72.                         }
  73.                         while((i<200)&&(K2==0))         //檢測按鍵是否松開
  74.                         {
  75.                                 Delay(1);
  76.                                 i++;
  77.                         }
  78.                         i=0;
  79.                 }
  80.          
  81.                 if(K4==0)                //檢測按鍵K1是否按下
  82.                 {
  83.                         Delay(100);        //消除抖動
  84.                         if(K4==0)
  85.                         {
  86.                                 Speed++;
  87.                         }
  88.                         while((i<200)&&(K4==0))         //檢測按鍵是否松開
  89.                         {
  90.                                 Delay(100);
  91.                                 i++;
  92.                         }
  93.                         i=0;
  94.                 }       

  95.           motor();
  96.   

  97.         }
  98. }





  99. void motor()
  100. {

  101. if(Direction==1)
  102.         {
  103.         a0=0;
  104.         a1=1;
  105.         b0=1;
  106.         b1=1;
  107.         Delay(Speed);
  108.         a0=1;
  109.         a1=0;
  110.         b0=1;
  111.         b1=1;
  112.         Delay(Speed);
  113.         a0=1;
  114.         a1=1;
  115.         b0=0;
  116.         b1=1;
  117.         Delay(Speed);
  118.         a0=1;
  119.         a1=1;
  120.         b0=1;
  121.         b1=0;
  122.         Delay(Speed);
  123.         }


  124. if(Direction==2)
  125.                  
  126.         {
  127.         a0=1;
  128.         a1=1;
  129.         b0=1;
  130.         b1=0;
  131.         Delay(Speed);
  132.         a0=1;
  133.         a1=1;
  134.         b0=0;
  135.         b1=1;
  136.         Delay(Speed);
  137.         a0=1;
  138.         a1=0;
  139.         b0=1;
  140.         b1=1;
  141.         Delay(Speed);
  142.         a0=0;
  143.         a1=1;
  144.         b0=1;
  145.         b1=1;
  146.         Delay(Speed);
  147.         }


  148. }

  149.                                                                                                                                                                           
  150. void Delay(unsigned int t)
  151. {                           
  152.         unsigned int k;
  153.         while(t--)
  154.         {
  155.                 for(k=0; k<70; k++)
  156.                 { }
  157.         }
  158. }
















  159. /*void left(unsigned int x)
  160. {
  161. a0=0;
  162. a1=1;
  163. b0=1;
  164. b1=1;
  165. Delay(x);
  166. a0=1;
  167. a1=0;
  168. b0=1;
  169. b1=1;
  170. Delay(x);
  171. a0=1;
  172. a1=1;
  173. b0=0;
  174. b1=1;
  175. Delay(x);
  176. a0=1;
  177. a1=1;
  178. b0=1;
  179. b1=0;
  180. Delay(x);
  181. }


  182. void right(unsigned int y)
  183. {
  184. a0=1;
  185. a1=1;
  186. b0=1;
  187. b1=0;
  188. Delay(y);
  189. a0=1;
  190. a1=1;
  191. b0=0;
  192. b1=1;
  193. Delay(y);
  194. a0=1;
  195. a1=0;
  196. b0=1;
  197. b1=1;
  198. Delay(y);
  199. a0=0;
  200. a1=1;
  201. b0=1;
  202. b1=1;
  203. Delay(y);


  204. }*/




  205.   /*
  206. #include<reg52.h>
  207.                                                           
  208. sbit a0=P1^0;
  209. sbit a1=P1^1;           
  210. sbit b0=P1^3;
  211. sbit b1=P1^4;





  212.                                                           
  213. void Delay(unsigned int t)       
  214.                                                          

  215. void main()
  216. {
  217. en0=1;
  218. en1=1;
  219. while(1)
  220. {


  221. a0=0;
  222. a1=1;
  223. b0=1;
  224. b1=1;
  225. Delay(500);



  226. a0=1;
  227. a1=0;
  228. b0=1;
  229. b1=1;
  230. Delay(500);

  231. a0=1;
  232. a1=1;
  233. b0=0;
  234. b1=1;
  235. Delay(500);

  236. a0=1;
  237. a1=1;
  238. b0=1;
  239. b1=0;
  240. Delay(500);

  241. }
  242. }


  243. void Delay(unsigned int t)
  244. {                           
  245.         unsigned int k;

  246.         while(t--)
  247.         {
  248.                 for(k=0; k<80; k++)
  249.                 { }
  250.         }
  251. }



  252. #include<reg52.h>
  253. #define uint unsigned int
  254. #define uchar unsigned char

  255. sbit a0=P1^0;
  256. sbit a1=P1^1;
  257. sbit en0=P1^2;

  258. //1
  259. sbit b0=P1^3;
  260. sbit b1=P1^4;

  261. sbit en1=P1^5;
  262. //2


  263. void zheng(uchar k,uchar j);
  264. void yanshi(uint z);
  265. void xifen(uchar k1,uchar j1);
  266. uchar b,num,n,num1,n1,h;
  267. void main()
  268. {
  269. en0=1;
  270. en1=1;
  271. while(1)
  272. {

  273. xifen(10,100); //1/210mS100   果步  1.890
  274. yanshi(400);


  275. zheng(15,50);          //15mS  50 1.890
  276. yanshi(400);

  277. }
  278. }



  279. void zheng(uchar k,uchar j)


  280. {


  281. b=j/4;
  282. b=b+1;
  283. num=0;

  284. for(b;b>0;b--)

  285. {


  286. if(num<j&n==0)//A-B+

  287. {


  288. a0=0;
  289. a1=1;
  290. b0=1;
  291. b1=0;

  292. yanshi(k);
  293. num++;

  294. n=1;

  295. }


  296. if(num<j&n==1) //A- B-
  297. {
  298. a0=0;
  299. a1=1;
  300. b0=0;
  301. b1=1;
  302. yanshi(k);
  303. num++;
  304. n=2;

  305. }

  306. if(num<j&n==2)//A+ B-

  307. {
  308. a0=1; a1=0; b0=0; b1=1;
  309. yanshi(k);
  310. num++;
  311. n=3;
  312. }



  313. if(num<j&n==3)//A+ B+

  314. {
  315. a0=1;
  316. a1=0;
  317. b0=1;
  318. b1=0;
  319. yanshi(k);
  320. num++;
  321.          
  322. n=0;
  323. }
  324. }
  325. }

  326. void xifen(uchar k1,uchar j1)

  327. {
  328. h=j1/8;
  329. h=h+1;
  330. num1=0;
  331. for(h;h>0;h--)
  332. {
  333. if(num1<j1&n1==0)//A- B+
  334. {
  335. a0=0;
  336. a1=1;
  337. b0=1;
  338. b1=0;
  339. yanshi(k1);
  340. num1++;
  341. n1=1;
  342. }
  343. if(num1<j1&n1==1) //A-
  344. {
  345. a0=0;
  346. a1=1;
  347. b0=0;
  348. b1=0;
  349. yanshi(k1);
  350. num1++;
  351. n1=2;
  352. }
  353. if(num1<j1&n1==2) //A- B-

  354. {
  355. a0=0;
  356. a1=1;
  357. b0=0;
  358. b1=1;
  359. yanshi(k1);
  360. num1++;
  361. n1=3;
  362. }
  363. if(num1<j1&n1==3)// B-
  364. {
  365. a0=0;
  366. a1=0;
  367. b0=0;
  368. b1=1;
  369. yanshi(k1);
  370. num1++;
  371. n1=4;
  372. }
  373. if(num1<j1&n1==4) //A+B-

  374. ……………………

  375. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
二相四線步進電機(可調(diào)速度)1.zip (1.04 MB, 下載次數(shù): 350)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:146206 發(fā)表于 2017-7-22 13:18 | 只看該作者
非常好的資料,先學習了
回復

使用道具 舉報

板凳
ID:401113 發(fā)表于 2018-12-16 22:47 | 只看該作者
幾個月前從軟盤驅(qū)動器上拆下了個二相四線步進電機,用實驗板上的ULN2003試了近百次都沒成功,今天看到樓主的貼子再上網(wǎng)一查原來是ULN2003驅(qū)動不了二相四線步進電機,唉!早該想到是驅(qū)動芯片的問題。
回復

使用道具 舉報

地板
ID:322594 發(fā)表于 2019-3-17 17:35 | 只看該作者
非常好的資料
回復

使用道具 舉報

5#
ID:46475 發(fā)表于 2019-5-28 13:05 | 只看該作者
非常好的資料,先學習了
回復

使用道具 舉報

6#
ID:648939 發(fā)表于 2019-11-29 21:51 | 只看該作者
感謝分享。
回復

使用道具 舉報

7#
ID:499477 發(fā)表于 2020-2-18 10:19 | 只看該作者
謝謝分享 學習了
回復

使用道具 舉報

8#
ID:495287 發(fā)表于 2020-6-20 02:11 | 只看該作者
謝謝樓主分享,好人一生平安。
回復

使用道具 舉報

9#
ID:495287 發(fā)表于 2020-6-20 02:15 | 只看該作者
海洋漁業(yè) 發(fā)表于 2018-12-16 22:47
幾個月前從軟盤驅(qū)動器上拆下了個二相四線步進電機,用實驗板上的ULN2003試了近百次都沒成功,今天看到樓主 ...

看到你的分享,你用的事L293D吧,我用的298,怎么輕微的正反交互蠕動,我是單獨用的L298N,請指點下謝謝!
回復

使用道具 舉報

10#
ID:187947 發(fā)表于 2020-6-26 10:32 | 只看該作者
謝謝分享        
回復

使用道具 舉報

11#
ID:689902 發(fā)表于 2020-12-15 16:31 | 只看該作者
正在尋找的資料,謝謝分享
回復

使用道具 舉報

12#
ID:431123 發(fā)表于 2021-6-23 21:20 | 只看該作者
之前用其他模塊驅(qū)動步進電機,一直不成功,想著換這個模塊試試,正好找到樓主的資料,非常感謝。
回復

使用道具 舉報

13#
ID:975345 發(fā)表于 2021-10-27 10:50 | 只看該作者
非常好的資料,先學習了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美久久不卡 | 伊人久久伊人 | 国产精品久久久久久久久久免费 | 欧美又大粗又爽又黄大片视频 | 亚洲综合三区 | 成人免费av在线 | 成人欧美一区二区三区在线播放 | 亚洲一区视频 | 国产综合久久 | 欧美视频一区二区三区 | 福利视频二区 | 中文字幕乱码一区二区三区 | av影片在线 | 精品久久久久久久久久久下田 | 91黄色片免费看 | 夜夜爽99久久国产综合精品女不卡 | 国产精品乱码一区二三区小蝌蚪 | 色视频网站免费 | 精品一二三 | 成人在线精品 | 日日夜夜精品 | 亚洲成网站 | 日韩一区二区三区在线观看 | 国产精品国产三级国产aⅴ无密码 | 99在线观看视频 | 婷婷久久精品一区二区 | 久久在线看 | 婷婷狠狠 | 日本一二三区在线观看 | 国产福利资源 | 精品视频网 | 久久精品国产亚洲夜色av网站 | 91精品久久久久久久久久入口 | 欧一区二区 | 五月综合激情婷婷 | 妖精视频一区二区三区 | 天天射影院| 韩日一区二区 | 一区二区三区欧美在线观看 | 中文字幕精品一区久久久久 | 亚洲综合色视频在线观看 |