标题:
stm32源码:L298N利用PID驱动直流电机带光电编码器
[打印本页]
作者:
569975278
时间:
2018-11-25 22:35
标题:
stm32源码:L298N利用PID驱动直流电机带光电编码器
直流电机带光电编码器。
单片机源程序如下:
#include "delay.h"
#include "stm32f10x.h"
#include "sys.h"
#include "timer.h"
#include "usart.h"
#include "encoder.h"
#include "oled.h"
#include "pwm.h"
#include "control.h"
#include "led.h"
#include "key.h"
extern int Target_velocity;
extern u16 Encoder; //左右编码器的脉冲计数
extern u16 Moto1; //电机PWM变量
u8 t=0;
float speed;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
delay_init(); //延时函数初始化
KEY_Init(); //初始化与按键连接的硬件接口
OLED_Init();
uart_init(9600); //=====串口初始化
Encoder_Init_TIM2(); //=====编码器接口
TIM3_Int_Init(99,7199); //10ms
IN2=1;
IN1=0;
LED_Init(); //初始化与LED连接的硬件接口
TIM1_PWM_Init(7199,0);//不分频。PWM频率=72000/(899+1)=80Khz
while(1)
{
speed = Encoder*100/4/13/30;
printf("speed:%0.2f rad/s\r\n",speed); //x100/4/13/30 //13线 30减速比 4分频
OLED_ShowString(0,0,"speed:",16);
OLED_ShowNum( 16,0,speed,3,16);
OLED_ShowString(48,0,"rad/s",16);
OLED_Refresh_Gram();//更新显示到OLED
t=KEY_Scan(0); //得到键值
switch(t)
{
case KEY0_PRES: Target_velocity++; break;
case KEY1_PRES: Target_velocity--; break;
default: delay_ms(10);
}
}
}
复制代码
所有资料51hei提供下载:
a基于PID的调速直流电机成品.rar
(317.7 KB, 下载次数: 256)
2018-11-26 01:21 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
魔术快斗
时间:
2018-12-16 20:47
楼主,能够提供一下详细的调试过程吗?我按照你的程序接线,然后发现电机不能正常工作
作者:
569975278
时间:
2018-12-21 23:27
这个小项目应该算是比较经典的,如果能一步步解决问题,对入门stm32以及后面做项目都能提供思路上的帮助。当初我调试的时候,代码写完发现电机不能正常工作,最后问题竟然出现在程序初始化的过程中,把出波的定时器初始化写在其他前面就会出问题(即TIM1_PWM_Init(7199,0);),写到后面就一切正常了。后来过了几个月我又要用到的时候,用这个代码又不能正常工作了,后来改了下限幅就正常工作。我推荐大家可以先屏蔽调PID初始化那部分,手动给电机赋占空比,看能不能正常工作,再尝试加上PID部分。硬件也是一大问题,没有共地就可能出问题。总之分成一个个小区块一步步来,应该可以实现的。
作者:
ussrarmy2009
时间:
2020-10-14 09:54
看着有点懵。PWM直接驱动电机么?接上PA12 PA13没有效果。。
作者:
haoqingfeng
时间:
2020-10-14 14:03
ussrarmy2009 发表于 2020-10-14 09:54
看着有点懵。PWM直接驱动电机么?接上PA12 PA13没有效果。。
要电调
作者:
lilei12306
时间:
2021-4-14 23:08
想知道文件里有仿真吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1