欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
msp430f5529單片機風板控制裝置設計源碼與資料下載
[打印本頁]
作者:
鼓包搽
時間:
2018-6-6 19:08
標題:
msp430f5529單片機風板控制裝置設計源碼與資料下載
0.png
(49.04 KB, 下載次數: 86)
下載附件
2018-6-7 01:49 上傳
全部資料51hei下載地址:
校電賽已完成部分.zip
(1.17 MB, 下載次數: 135)
2018-6-6 19:07 上傳
點擊文件名下載附件
控制組:風板控制裝置
下載積分: 黑幣 -5
二、 要求
1.
基本要求
1) 由起點開始啟動裝置,控制風板在不少于 5s,不大于 10s 的時間內從起點到達終點。
2) 預置風板控制角度(控制角度在 45°~135°之間設定)。由起點開始啟動裝置,控制風板達到預置角度,過渡過程時間不大于 15s,控制角
2 / 2
度誤差不大于 5°,在預置角度上的穩定停留時間為 5s,誤差不大于1s。動作完成后風板平穩停留在終點位置上;
3) 顯示風板設置的控制角度。風板從一個狀態轉變到另一個狀態時應有明顯的聲光提示。
2.
發揮部分
1) 在 45°~135°范圍內預置兩個角度值(Φ 1 和 Φ 2 )。 由終點開始啟動裝置,在 10s 內控制風板到達第一個預置角度上;然后到達第二個預置角度,在兩個預置角度之間做 3 次擺動,擺動周期不大于 5s,擺動幅角誤差不大于 5°,動作完成后風板平穩停留在起點位置上;
2) 利用 LCD 或 OLED 進行風板角度的實時顯示(精確到度);
3) 在基本要求 2)的基礎上實現控制角度誤差不大于 2°
三、 說明
1. 給出的圖 1 僅作參考,風板的外形尺寸要求為:高 150mm×寬 200mm,厚度和制作材料及風板支架的機械連接方式不做限定;風板上除安裝風板轉動軸、角度指示針和傳感器外,不能安裝其他任何裝置;風機數量和控制風向方式可自行設計確定;可以設置風板起始位置、終點位置的限位裝置,限定風板能在與水平線成 30°~150°的夾角內擺動。
2. 風板的運動狀態,都要通過控制風機的風量來完成,不能受機械結構或其它外力的控制。 機械結構摩擦力不能過大,將風板由豎直狀態釋放后, 給予微小擾動, 風板可以在重力作用下倒下。 控制角度誤差為實測角度與預置角度之差的絕對值。風板由靜止開始運動到規定控制角度的時間定義為過渡過程時間。風板從一個狀態轉變到另一個狀態時應有明顯的聲光提示,聲光提示只作為測評計時的參考,以現場實測數據為準。
3. 如裝置在測評時出現故障導致其無法繼續進行測評,則成績無效。
單片機源程序如下:
/* 連接:MSP430 P3.0 P3.1 GND GND
* | | | | |
* MPU6050 SDA SCL GND AD0 */
#include "msp430f5529.h"
#include "DataScope_DP.h"
#include "UART_F5529.h"
#include "I2C_F5529.h"
#include "MPU6050.h"
#include "math.h"
#include "Ucs_Init_Set.h"
#include "lcd12864c.h"
#define CPU_F ((double)25000000)//MCLK=25KHZ,利用自帶的延時函數來實現高精度的延時
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
int a=0,b=0;
float ax,ay,az; //加速度原始數據
float Ax,Ay,Az;//單位 g(9.8m/s^2)
float Angel_accZ[10];//存儲加速度計算出的角度
float Angel_accZ1;//存儲加速度計算出的角度
int Angel_accZ2=0;
void PIDset();
void GetData_Accel(void)//獲取加速度值,及存儲加速度計算出的角度
{
//for(i=0;i<5;i++)
//{
ax = GetAccelX ();//加速度原始數據
ay = GetAccelY ();
az = GetAccelZ ();
Ax=ax/16384.00; //對加速度進行量化,得出單位為g的加速度值
Ay=ay/16384.00;
Az=az/16384.00;
Angel_accZ2=acos(Az/(sqrt(Ax*Ax+Ay*Ay+Az*Az)))*180/3.14; //加速度計算三個軸和水平面坐標系之間的夾角
//}
// Angel_accZ1 = Angel_accZ[0]+Angel_accZ[1]+Angel_accZ[2]+Angel_accZ[3]+Angel_accZ[4]
;
// Angel_accZ2 = Angel_accZ1;
}
int Incremental_PID_C1(float Encoder,float Target)
{
static float Bias=0,Last_bias=0,Pwm=0,ll_bias=0;
Bias=Encoder-Target;
Pwm+=30*(2.45*Bias-3.5*Last_bias+1.25*ll_bias);
ll_bias=Last_bias;
Last_bias=Bias;
if(Pwm>29000) Pwm=29000;
if(Pwm<1000) Pwm=1000;
return Pwm;
}
void PIDset()
{
int i0=0;
int a1=0;
P6DIR|= BIT6+BIT7;
P7DIR|=BIT1+BIT2;
P6OUT|= BIT6;
P6OUT&= ~BIT7;
P7OUT|= BIT1;
P7OUT&= ~BIT2;
a1=Incremental_PID_C1(Angel_accZ2,120);
P2DIR|=BIT0+BIT1;
for(i0=0;i0<30000;i0++)
{
if(i0<=a1) {P2OUT =10; }
else {P2OUT=01; }
}
}
/*void PIDs1()
{
a=Incremental_PID_C1(Angel_accZ2,90);
P6DIR|= BIT6+BIT7;
P7DIR|=BIT1+BIT2;
P6OUT|= BIT6;
P6OUT&= ~BIT7;
P7OUT|= BIT1;
P7OUT&= ~BIT2;
P2DIR |= BIT0+BIT1; // P2.0 and P2.1 output
P2SEL |= BIT0+BIT1; // P2.0 and P2.1 options select
TA1CCR0 =511; // PWM Period
TA1CCTL1 = OUTMOD_7; // CCR1 reset/set
TA1CCR1 = a ; // CCR1 PWM duty cycl
TA1CCTL2 = OUTMOD_7; // CCR2 reset/set
TA1CCR2 = 511- a ; // CCR2 PWM duty cycle
TA1CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR
}*/
void main(void)
{
int ii2=0;
WDTCTL = WDTPW + WDTHOLD;//Stop watchdog timer to prevent time out reset
LCD_init();
Ucs_25Mhz();
UART_Init();
PIDset();
MPU6050Init();
_EINT();
while(1)
{
ii2++;
if(ii2==1)
{
ii2=0;
GetData_Accel();
//LCD_write_float(1,0,Angel_accZ2);
}
PIDset();
//PIDs1();
// LCD_write_float(0,1,TA1CCR1);
// LCD_write_float(1,0,Angel_accZ2);
//LCD_write_float(0,2,TA1CCR2);
}
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1