找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2983|回复: 0
打印 上一主题 下一主题
收起左侧

单片机+L298电机控制程序与Proteus仿真电路图

[复制链接]
跳转到指定楼层
楼主
电机控制_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);                                 //默认速度运转 正
  13.    Delay1s(5);                                 //延时5s
  14.    motor_stop();                         //停止
  15.    Delay1s(5);                                 //延时5s
  16.    back_ward(0);                        //默认速度运转 反
  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   电机驱动函数
  3. ****************************************************************/
  4. #include "config.h"

  5. /******************************************************************************/
  6. //正转,速度
  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. //反转,速度
  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) //防止出现极大情况时候跳跃到很小。
  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, 下载次数: 29)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表