标题:
电机位置闭环控制(STM32代码详细注释)
[打印本页]
作者:
顾你北寒
时间:
2019-5-7 11:45
标题:
电机位置闭环控制(STM32代码详细注释)
这是一个电机位置闭环控制(代码详细注释),很适合做伺服电机控制入门的同志们学习借鉴
单片机源程序如下:
#include "sys.h"
u8 Flag_Stop=1; //停止标志位
int Encoder,Position=10000; //编码器的脉冲计数
long SHOW;
int Moto1; //电机PWM变量 应是Motor的 向Moto致敬
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与 LED 连接的硬件接口
uart_init(72,115200); //初始化串口1
MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ 高频可以防止电机低频时的尖叫声
Encoder_Init_TIM2(); //初始化编码器
Timer3_Init(99,7199); //=====10MS进一次中断服务函数,中断服务函数在control.c
while(1)
{
printf("Encoder:%d Position:%d \r\n",Encoder,Position);
}
}
复制代码
#include "motor.h"
void MiniBalance_Motor_Init(void)
{
RCC->APB2ENR|=1<<3; //PORTB时钟使能
GPIOB->CRH&=0X0000FFFF; //PORTB12 13 14 15推挽输出
GPIOB->CRH|=0X22220000; //PORTB12 13 14 15推挽输出
}
void MiniBalance_PWM_Init(u16 arr,u16 psc)
{
MiniBalance_Motor_Init(); //初始化电机控制所需IO
RCC->APB2ENR|=1<<11; //使能TIM1时钟
RCC->APB2ENR|=1<<2; //PORTA时钟使能
GPIOA->CRH&=0XFFFF0FF0; //PORTA8 11复用输出
GPIOA->CRH|=0X0000B00B; //PORTA8 11复用输出
TIM1->ARR=arr; //设定计数器自动重装值
TIM1->PSC=psc; //预分频器不分频
TIM1->CCMR2|=6<<12; //CH4 PWM1模式
TIM1->CCMR1|=6<<4; //CH1 PWM1模式
TIM1->CCMR2|=1<<11; //CH4预装载使能
TIM1->CCMR1|=1<<3; //CH1预装载使能
TIM1->CCER|=1<<12; //CH4输出使能
TIM1->CCER|=1<<0; //CH1输出使能
TIM1->BDTR |= 1<<15; //TIM1必须要这句话才能输出PWM
TIM1->CR1=0x8000; //ARPE使能
TIM1->CR1|=0x01; //使能定时器1
}
复制代码
所有资料51hei提供下载:
电机位置闭环控制(代码详细注释).7z
(122.31 KB, 下载次数: 361)
2019-5-7 15:57 上传
点击文件名下载附件
电机位置闭环控制(代码详细注释)
下载积分: 黑币 -5
作者:
sunsaga1989
时间:
2019-5-22 20:31
感谢楼主的分享,谢谢
作者:
andyf626
时间:
2019-5-23 11:31
不能用标准库函数来实现么,非用操作寄存器
作者:
duolemaoxx
时间:
2019-7-15 15:48
我咋发现这论坛啥都有
作者:
谜鹿
时间:
2019-8-7 14:16
还以为里面有PID的呢。。。
作者:
samon2698
时间:
2019-8-7 16:05
认真学习技术上的知识,给论坛创造一个良好的氛围是很必要的
作者:
jokeyli
时间:
2019-8-14 15:38
没看明白是如何计算位置
作者:
amitof
时间:
2019-8-14 20:54
谢谢分享!学习一下~~~
作者:
miouye
时间:
2019-10-5 11:26
谢谢分享!学习一下~~~
作者:
shenchaobiao
时间:
2019-10-5 14:26
谜鹿 发表于 2019-8-7 14:16
还以为里面有PID的呢。。。
位置控制没有用pid的
作者:
呀呀学单片机
时间:
2019-12-29 14:53
十分感谢楼主的分享,谢谢
作者:
simonxingpeng
时间:
2020-1-31 00:03
谢谢分享!学习一下~~~
作者:
hkldd
时间:
2020-4-27 07:12
谢谢分享
作者:
soosqt
时间:
2020-5-15 23:05
没什么用的
作者:
13119197478
时间:
2020-7-9 10:02
感谢楼主的分享,如果能加上PID的调整方法就更好了,谢谢
作者:
张冠亚
时间:
2020-7-22 16:31
并不是FOC的控制算法,感觉就是个直流电机,位置输出直接给GPIO寄存器???还能有点东西吗
作者:
Jack_Qing
时间:
2020-7-27 16:37
感谢分享,注释很全,代码可读性还比较强!
只是自己电机方面实在较菜,其它不敢点评。
作者:
gm388
时间:
2020-8-1 14:58
shenchaobiao 发表于 2019-10-5 14:26
位置控制没有用pid的
有PID 控制,在 BALANCE 文件里面的 control.C
作者:
woniu6116
时间:
2020-11-17 15:57
没有用
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1