当前位置:   article > 正文

l298n电机驱动模块驱动直流电机(佛科院——深夜学习)

l298n电机驱动模块

目录

一、为什么不能直接用单片机IO口驱动电机,要用电机驱动模块?

二、使用步骤:

1.L298n各引脚作用:

2.推荐的供电方式:

3.推荐的控制方式:


一、为什么不能直接用单片机IO口驱动电机,要用电机驱动模块?

由于单片机内部结构原因,其等效内阻极大, 导致输出电流极小,尽管I0口输出高电平为5V,但输出功率极小,无法满足直接电机的额定功率,所以我们一般只把单片机当控制器,而不是驱动器。

二、使用步骤:

1.L298n各引脚作用:

重点解释:

  1. 板载5V使能:插上跳帽就可以由“12V供电”口,通过内部的降压模块,给内部的芯片供电;拔出跳帽则由"5V供电"直接给芯片供电,但如果电压过高则会烧坏芯片(不建议使用)
  2. 通道A/B使能:是控制两个逻辑输入口是否正常工作,插上跳帽则默认一直工作。
  3. 逻辑输入:控制输出是否正常进行

2.推荐的供电方式:

用7-12V电源给L298n供电,GND连接电源负级和单片机的GND,5V给单片机供电(也可以不接)

3.推荐的控制方式:

不使用通道A/B使能口,不去掉跳帽,向两个逻辑输入口输入PWM信号来控制电机:

 用按键控制的代码:(STC89C52RC)

  1. #include <reg52.h>
  2. sbit left_wheel_1 = P2^0;
  3. sbit left_wheel_2 = P2^1;
  4. sbit right_wheel_1 = P2^2;
  5. sbit right_wheel_2 = P2^3;
  6. sbit key1 = P0^1;
  7. sbit key2 = P0^2;
  8. sbit key3 = P0^3;
  9. sbit key4 = P0^4;
  10. sbit key5 = P0^5;
  11. sbit key6 = P0^6;
  12. unsigned char count = 0;
  13. unsigned char timer1 = 100;
  14. unsigned char turn_sign;
  15. #define forword_left 1;
  16. #define forword_rignt 2;
  17. #define back_left 3;
  18. #define back_rignt 4;
  19. /*定时器T0初始化*/
  20. void Timer0_Init()
  21. {
  22. unsigned char time;
  23. TMOD = 0x02; //定时器T0设置成8位自动重装载
  24. time = 92;
  25. TH0 = 256-time; //定时常数 0.1ms 晶振为11.0592MHz
  26. TL0 = TH0;
  27. ET0 = 1;
  28. TR0 = 1;
  29. EA=1;
  30. }
  31. /*T0中断初始化*/
  32. void Time0_Init() interrupt 1
  33. {
  34. if(count <= timer1 && count > 0) //高电平时间
  35. {
  36. switch(turn_sign)
  37. {
  38. case 1:left_wheel_1 = 1;break;
  39. case 2:right_wheel_1 = 1;break;
  40. case 3:left_wheel_2 = 1;break;
  41. case 4:right_wheel_2 = 1;break;
  42. }
  43. }
  44. else
  45. {
  46. switch(turn_sign)
  47. {
  48. case 1:left_wheel_1 = 0;break;
  49. case 2:right_wheel_1 = 0;break;
  50. case 3:left_wheel_2 = 0;break;
  51. case 4:right_wheel_2 = 0;break;
  52. }
  53. }
  54. count++;
  55. if(count >= 200) //脉冲周期T = 20ms
  56. {
  57. count = 0;
  58. }
  59. }
  60. void delay_ms(unsigned int time_out)//12HZ STC89C52RC
  61. {
  62. unsigned int i,j;
  63. for(i=time_out;i>0;i--)
  64. for(j=95;j>0;j--);
  65. }
  66. void Forword();
  67. void Stop();
  68. void Forword_left();
  69. void Forword_right();
  70. void Back();
  71. void Back_left();
  72. void Back_right();
  73. void main()
  74. {
  75. Timer0_Init();//定时器初始化
  76. while(1)
  77. {
  78. /*6个按键控制*/
  79. if(!key1)
  80. {
  81. delay_ms(10);
  82. if(!key1)
  83. {
  84. Forword_left();
  85. while(!key1);
  86. Stop();
  87. }
  88. }
  89. if(!key2)
  90. {
  91. delay_ms(10);
  92. if(!key2)
  93. {
  94. Forword();
  95. while(!key2);
  96. Stop();
  97. }
  98. }
  99. if(!key3)
  100. {
  101. delay_ms(10);
  102. if(!key3)
  103. {
  104. Forword_right();
  105. while(!key3);
  106. Stop();
  107. }
  108. }
  109. if(!key4)
  110. {
  111. delay_ms(10);
  112. if(!key4)
  113. {
  114. Back_left();
  115. while(!key4);
  116. Stop();
  117. }
  118. }
  119. if(!key5)
  120. {
  121. delay_ms(10);
  122. if(!key5)
  123. {
  124. Back();
  125. while(!key5);
  126. Stop();
  127. }
  128. }
  129. if(!key6)
  130. {
  131. delay_ms(10);
  132. if(!key6)
  133. {
  134. Back_right();
  135. while(!key6);
  136. Stop();
  137. }
  138. }
  139. }
  140. }
  141. //全速前进
  142. void Forword()
  143. {
  144. left_wheel_1 = 1;
  145. left_wheel_2 = 0;
  146. right_wheel_1 = 1;
  147. right_wheel_2 =0;
  148. }
  149. //停止
  150. void Stop()
  151. {
  152. ET0 = 0; //关闭定时器
  153. TR0 = 0;
  154. left_wheel_1 = 0;
  155. left_wheel_2 = 0;
  156. right_wheel_1 = 0;
  157. right_wheel_2 =0;
  158. }
  159. void Forword_left()
  160. {
  161. ET0 = 1; //开启定时器
  162. TR0 = 1;
  163. count = 0;//重新计数
  164. turn_sign = forword_left;//确定标志,详情看中断函数
  165. left_wheel_2 = 0;
  166. right_wheel_1 = 1;
  167. right_wheel_2 =0;
  168. }
  169. /***************其他函数和Forword_left函数同理*********************/
  170. void Forword_right()
  171. {
  172. ET0 = 1;
  173. TR0 = 1;
  174. count = 0;
  175. turn_sign = forword_rignt;
  176. left_wheel_1 = 1;
  177. left_wheel_2 = 0;
  178. right_wheel_2 =0;
  179. }
  180. void Back()
  181. {
  182. left_wheel_1 = 0;
  183. left_wheel_2 = 1;
  184. right_wheel_1 = 0;
  185. right_wheel_2 =1;
  186. }
  187. void Back_right()
  188. {
  189. ET0 = 1;
  190. TR0 = 1;
  191. count = 0;
  192. turn_sign = back_left;
  193. left_wheel_1 = 0;
  194. right_wheel_1 = 0;
  195. right_wheel_2 =1;
  196. }
  197. void Back_left()
  198. {
  199. ET0 = 1;
  200. TR0 = 1;
  201. count = 0;
  202. turn_sign = back_rignt;
  203. left_wheel_1 = 0;
  204. left_wheel_2 = 1;
  205. right_wheel_1 =0;
  206. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/695023
推荐阅读
相关标签
  

闽ICP备14008679号