找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32源码:L298N利用PID驱动直流电机带光电编码器

  [复制链接]
跳转到指定楼层
楼主
ID:338925 发表于 2018-11-25 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
直流电机带光电编码器。

单片机源程序如下:
  1. #include "delay.h"
  2. #include "stm32f10x.h"
  3. #include "sys.h"
  4. #include "timer.h"
  5. #include "usart.h"
  6. #include "encoder.h"
  7. #include "oled.h"
  8. #include "pwm.h"
  9. #include "control.h"
  10. #include "led.h"
  11. #include "key.h"

  12. extern int Target_velocity;
  13. extern u16  Encoder;             //左右编码器的脉冲计数
  14. extern u16  Moto1;                 //电机PWM变量

  15. u8 t=0;         
  16. float speed;

  17. int main(void)
  18. {                
  19.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  20.   
  21.         delay_init();                     //延时函数初始化          
  22.         KEY_Init();                  //初始化与按键连接的硬件接口
  23.         OLED_Init();
  24.         uart_init(9600);                    //=====串口初始化
  25.   Encoder_Init_TIM2();            //=====编码器接口
  26.        
  27.         TIM3_Int_Init(99,7199);          //10ms
  28.        
  29.         IN2=1;
  30.   IN1=0;
  31.        

  32.         LED_Init();                          //初始化与LED连接的硬件接口
  33.        
  34.         TIM1_PWM_Init(7199,0);//不分频。PWM频率=72000/(899+1)=80Khz

  35.     while(1)
  36.            {
  37.                          
  38.                          speed = Encoder*100/4/13/30;           
  39.                          printf("speed:%0.2f rad/s\r\n",speed); //x100/4/13/30 //13线  30减速比  4分频
  40.                          
  41.                          OLED_ShowString(0,0,"speed:",16);
  42.                    OLED_ShowNum( 16,0,speed,3,16);
  43.                    OLED_ShowString(48,0,"rad/s",16);
  44.                    OLED_Refresh_Gram();//更新显示到OLED                          
  45.                          
  46.                        
  47.                         t=KEY_Scan(0);                //得到键值
  48.                         switch(t)
  49.                         {                                 
  50.                                 case KEY0_PRES:  Target_velocity++;  break;
  51.                                 case KEY1_PRES:  Target_velocity--;  break;
  52.                                 default:                        delay_ms(10);       
  53.                         }                         
  54.                 }
  55. }                 
复制代码

所有资料51hei提供下载:
a基于PID的调速直流电机成品.rar (317.7 KB, 下载次数: 256)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:163153 发表于 2018-12-16 20:47 | 只看该作者
楼主,能够提供一下详细的调试过程吗?我按照你的程序接线,然后发现电机不能正常工作
回复

使用道具 举报

板凳
ID:338925 发表于 2018-12-21 23:27 | 只看该作者
这个小项目应该算是比较经典的,如果能一步步解决问题,对入门stm32以及后面做项目都能提供思路上的帮助。当初我调试的时候,代码写完发现电机不能正常工作,最后问题竟然出现在程序初始化的过程中,把出波的定时器初始化写在其他前面就会出问题(即TIM1_PWM_Init(7199,0);),写到后面就一切正常了。后来过了几个月我又要用到的时候,用这个代码又不能正常工作了,后来改了下限幅就正常工作。我推荐大家可以先屏蔽调PID初始化那部分,手动给电机赋占空比,看能不能正常工作,再尝试加上PID部分。硬件也是一大问题,没有共地就可能出问题。总之分成一个个小区块一步步来,应该可以实现的。
回复

使用道具 举报

地板
ID:723250 发表于 2020-10-14 09:54 | 只看该作者
看着有点懵。PWM直接驱动电机么?接上PA12 PA13没有效果。。
回复

使用道具 举报

5#
ID:504645 发表于 2020-10-14 14:03 | 只看该作者
ussrarmy2009 发表于 2020-10-14 09:54
看着有点懵。PWM直接驱动电机么?接上PA12 PA13没有效果。。

要电调
回复

使用道具 举报

6#
ID:903206 发表于 2021-4-14 23:08 来自手机 | 只看该作者
想知道文件里有仿真吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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