久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
2015年電賽練習風力擺代碼 STM32F4 + jy61姿態傳感器 四路pwm 四個空心杯電機 PID
[打印本頁]
作者:
黑客帝國
時間:
2020-3-25 09:55
標題:
2015年電賽練習風力擺代碼 STM32F4 + jy61姿態傳感器 四路pwm 四個空心杯電機 PID
2015年全國電子設計競賽練習風力擺代碼 STM32F4 + jy61姿態傳感器 四路pwm控制 四個空心杯電機 PID控制風力擺畫圓,直線等等
制作出來的實物圖如下:
IMG_20190714_195503.jpg
(6.78 MB, 下載次數: 41)
下載附件
2020-3-25 09:56 上傳
單片機源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "remote.h"
#include "pwm.h"
#include "motor.h"
#include "math.h"
#include "timer.h"
//void Get_Angle();//獲取角度
//void Get_Accelerate();//獲取角度
//void Get_Palstance();//獲取角度
void LCD_display(void);
extern u8 Re_buf[11],counter;
extern u8 jiasudu[6],jiaosudu[6],jiaodu[6];
extern float Angle[3],Accelerate[3],Palstance[3],Temperature;
float Err_X,Err_Y,Err_X_Last,Err_Y_Last;
float X,Y;
float Aim_X,Aim_Y;
float Kp,Ki,Kd;
u32 pwm1 = 0,pwm2 = 0,pwm3 = 0,pwm4 = 0;
int main(void)
{
u8 key;
u8 *str=0;
Kp = 100;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168); //初始化延時函數
uart_init(115200); //初始化串口波特率為115200
USART2_Init(115200); //串口2初始化
delay_ms(1000);
TIM12_PWM_Init(10000-1,21-1);//PWM1
TIM13_PWM_Init(10000-1,21-1);//PWM2
TIM14_PWM_Init(10000,21-1);//PWM3
TIM5_PWM_Init(10000-1,21-1);//PWM4
TIM3_Init(200-1,8400-1); //定時器3初始化
Motor_Init(); //四路空心杯電機初始化
//LED_Init(); //初始化LED
LCD_Init();
Remote_Init(); //紅外接收初始化
POINT_COLOR=RED;//設置字體為紅色
LCD_ShowString(30,130,200,16,16,"PWM1:");
LCD_ShowString(30,150,200,16,16,"PWM2:");
LCD_ShowString(30,170,200,16,16,"PWM3:");
LCD_ShowString(30,190,200,16,16,"PWM4:");
LCD_ShowString(30,210,200,16,16,"X_Angle:");
LCD_ShowString(30,230,200,16,16,"Y_Angle:");
LCD_ShowString(30,250,200,16,16,"Z_Angle:");
Motor_Stop(); //電機置1高電平
//Motor_Stop1();
while(1)
{
LCD_display();
}
}
void TIM3_IRQHandler(void)//20ms進入一次中斷
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
{
Aim_X = 12.0;
Aim_Y = 0;
X = Angle[0];
Y = Angle[1];
Err_X = X - Aim_X;
Err_Y = Y - Aim_Y;
if(Err_X <= 0)
{
Motor_Drive(2,1); //電機2正轉
Motor_Drive(4,0); //電機4反轉
pwm2 += Kp*(fabs(Err_X))*0.02;
pwm4 += Kp*(fabs(Err_X))*0.02;
}
else
{
Motor_Drive(2,1); //電機2反轉
Motor_Drive(4,0); //電機4正轉
pwm2 -= Kp*Err_X*0.02;
pwm4 -= Kp*Err_X*0.02;
}
if(Err_Y <= 0)
{
Motor_Drive(1,1); //電機1正轉
Motor_Drive(3,0); //電機3反轉
pwm1 += Kp*(fabs(Err_Y))*0.02;
pwm3 += Kp*(fabs(Err_Y))*0.02;
}
else
{
Motor_Drive(1,0); //電機1反轉
Motor_Drive(3,1); //電機3正轉
pwm1 += Kp*Err_Y*0.02;
pwm3 += Kp*Err_Y*0.02;
}
//限幅
if(pwm1 >= 9000) pwm1 = 9000;
if(pwm2 >= 9000) pwm2 = 9000;
if(pwm3 >= 9000) pwm3 = 9000;
if(pwm4 >= 9000) pwm4 = 9000;
TIM_SetCompare1(TIM13,pwm1);
TIM_SetCompare1(TIM14,pwm2);
TIM_SetCompare1(TIM12,pwm3);
TIM_SetCompare1(TIM5,pwm4);
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標志位
}
void LCD_display()
{
LCD_ShowNum(86,130,pwm1,5,16);
LCD_ShowNum(86,150,pwm2,5,16);
LCD_ShowNum(86,170,pwm3,5,16);
LCD_ShowNum(86,190,pwm4,5,16);
if(Angle[0] >= 0)
{
LCD_ShowChar(128,210,' ',16,0);
LCD_Showfloat(144,210,Angle[0],4,16);
}
else
{
LCD_ShowChar(128,210,'-',16,0);
LCD_Showfloat(144,210,fabs(Angle[0]),4,16);
}
if(Angle[1] >= 0)
{
LCD_ShowString(128,230,200,16,16," ");
LCD_Showfloat(144,230,Angle[1],4,16);
}
else
{
LCD_ShowString(128,230,200,16,16,"-");
LCD_Showfloat(144,230,fabs(Angle[1]),4,16);
}
if(Angle[2] >= 0)
{
LCD_ShowString(128,250,200,16,16," ");
LCD_Showfloat(144,250,Angle[2],4,16); //顯示鍵值
}
else
{
LCD_ShowString(128,250,200,16,16,"-");
LCD_Showfloat(144,250,fabs(Angle[2]),4,16); //顯示鍵值
}
LCD_Fill(86,170,116+8*8,170+16,WHITE); //清楚之前的顯示
}
/*
void Get_Angle()//獲取角度
{
Angle[0] = ((short)((jiaodu[1]<<8)|jiaodu[0]))/32768.0*180;//x軸角度
Angle[1] = ((short)((jiaodu[3]<<8)|jiaodu[2]))/32768.0*180;//Y軸角度
Angle[2] = ((short)((jiaodu[5]<<8)|jiaodu[4]))/32768.0*180;//Z軸角度
printf("x軸角度:%.3f,Y軸角度:%.3f,Z軸角度:%.3f\r\n",Angle[0],Angle[1],Angle[2]);
//delay_ms(1);
}
void Get_Accelerate()//獲取加速度
{
Accelerate[0] = ((short)((jiasudu[1]<<8)|jiasudu[0]))/32768.0*16;//X軸加速度
Accelerate[1] = ((short)((jiasudu[3]<<8)|jiasudu[2]))/32768.0*16;//Y軸加速度
Accelerate[2] = ((short)((jiasudu[5]<<8)|jiasudu[4]))/32768.0*16;//Z軸加速度
printf("x軸加速度:%.3f,Y軸加速度:%.3f,Z軸加速度:%.3f\r\n",Accelerate[0],Accelerate[1],Accelerate[2]);
delay_ms(10);
}
void Get_Palstance()//獲取角速度
{
Palstance[0] = ((short)((jiaosudu[1]<<8)|jiaosudu[0]))/32768.0*2000;//X軸角速度
Palstance[1] = ((short)((jiaosudu[3]<<8)|jiaosudu[2]))/32768.0*2000;//Y軸角速度
Palstance[2] = ((short)((jiaosudu[5]<<8)|jiaosudu[4]))/32768.0*2000;//Z軸角速度
printf("x軸角速度:%.2f,Y軸角速度:%.2f,Z軸角速度:%.2f\r\n",Palstance[0],Palstance[1],Palstance[2]);
delay_ms(10);
}
*/
/*
key=Remote_Scan();
if(key)
{
LCD_ShowNum(86,130,pwm1,5,16); //顯示鍵值
LCD_ShowNum(86,150,pwm2,5,16); //顯示鍵值
LCD_ShowNum(86,170,pwm3,5,16); //顯示鍵值
LCD_ShowNum(86,190,pwm4,5,16); //顯示鍵值
switch(key)
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
風力擺.7z
(346.31 KB, 下載次數: 94)
2020-3-25 16:01 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩高清黄色
|
九九在线视频
|
刘亦菲国产毛片bd
|
九九久视频
|
九九激情视频
|
国产一区久久精品
|
黑人精品
|
91亚洲精品在线
|
成人免费一区二区三区视频网站
|
欧美成年黄网站色视频
|
毛片在线免费
|
国产精品亚洲片在线播放
|
亚洲午夜精品一区二区三区他趣
|
国产精品高潮呻吟久久
|
正在播放国产精品
|
欧美日韩视频在线播放
|
国产在线成人
|
在线观看成人
|
久久久观看
|
久久精品国产一区二区电影
|
欧美日韩国产在线
|
日韩精品在线观看一区二区
|
国产一区二区在线视频
|
请别相信他免费喜剧电影在线观看
|
一区二区三区影院
|
免费日本视频
|
日本中文字幕在线观看
|
国产精品久久久久久久久久久久
|
91视频在线
|
夜夜爽99久久国产综合精品女不卡
|
午夜视频免费在线
|
日韩欧美国产精品一区二区三区
|
成人亚洲网站
|
欧美综合自拍
|
欧美亚洲高清
|
国产精品久久久久久久久久免费看
|
中文字幕精品一区
|
三级欧美
|
国产精品久久久亚洲
|
亚洲网站在线观看
|
综合欧美亚洲
|