找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+L298電機控制程序與Proteus仿真電路圖

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:762393 發(fā)表于 2020-12-3 20:35 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
電機控制_L298,包含仿真和程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //文件名 main.c 工程主文件

  2. #include "config.h"


  3. void main(void)
  4. {

  5. /******************************************************************************/
  6. //初始工作
  7. /******************************************************************************/
  8.   init_devices();
  9.   
  10.   while(1)
  11.   {
  12.    for_ward(0);                                 //默認速度運轉(zhuǎn) 正
  13.    Delay1s(5);                                 //延時5s
  14.    motor_stop();                         //停止
  15.    Delay1s(5);                                 //延時5s
  16.    back_ward(0);                        //默認速度運轉(zhuǎn) 反
  17.    Delay1s(5);                                 //延時5s
  18.    speed_add(20);                        //加速
  19.    Delay1s(5);                                 //延時5s
  20.    speed_subtract(20);                //減速
  21.    Delay1s(5);                                 //延時5s
  22.   }
  23.    
  24. }

  25. /******************************************************************************/
  26. // T2 控制PWM輸出
  27. // timer2_comp_isr不需要用,但是必須允許中斷,在中斷時有信號輸出變化
  28. /******************************************************************************/

  29. #pragma interrupt_handler timer2_comp_isr:5
  30. void timer2_comp_isr(void)
  31. {
  32.    //compare occured TCNT0=OCR0
  33. }
  34. #pragma interrupt_handler timer2_ovf_isr:6
  35. void timer2_ovf_isr(void)
  36. {
  37. TCNT2 = 0x01;//reload counter value
  38. }
復制代碼
  1. /****************************************************************
  2. ** 文件名:motor.c   電機驅(qū)動函數(shù)
  3. ****************************************************************/
  4. #include "config.h"

  5. /******************************************************************************/
  6. //正轉(zhuǎn),速度
  7. void for_ward(uint8 speed)
  8. {
  9.           if(speed!=0)
  10.            {
  11.              OCR2 = speed;
  12.              while(ASSR&(1<<TCR2UB)==1) ; //啟動TC2 pwm 輸出,異步操作需要等待 OCR2寫入完畢
  13.             }
  14.           TC2_EN;   //pwm_start
  15.           moto_en1;
  16.           moto_uen2;
  17. }
  18. /******************************************************************************/
  19. //反轉(zhuǎn),速度
  20. void back_ward(uint8 speed)
  21. {
  22.           if(speed!=0)
  23.           {
  24.        OCR2 = speed;
  25.              while(ASSR&(1<<TCR2UB)==1) ;// 啟動TC2 pwm 輸出,異步操作需要等待OCR2寫入完畢
  26.     }
  27.    TC2_EN;   //pwm start
  28.    moto_uen1;
  29.    moto_en2;
  30. }
  31. /******************************************************************************/
  32. //停止
  33. void motor_stop(void)
  34. {
  35. moto_en1;   //同時置一停止
  36. moto_en2;
  37. TC2_DIS;    //pwm stop
  38. }
  39. /******************************************************************************/

  40. //加速
  41. void speed_add(uint8 add)
  42. {
  43. if(OCR2 + add < 240) //防止出現(xiàn)極大情況時候跳躍到很小。
  44. {
  45.    OCR2 = OCR2 + add;
  46. }
  47. }
  48. /******************************************************************************/

  49. //加速
  50. void speed_subtract(uint8 subtract)
  51. {
  52. if(OCR2 - subtract > 10) //防止到很小之后跳躍到很大。
  53. {
  54.   OCR2 = OCR2 - subtract;
  55. }
  56. }
  57. /******************************************************************************/
復制代碼

所有資料51hei提供下載:
電機控制_L298.zip (247.46 KB, 下載次數(shù): 29)

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表