本帖最后由 john800422 于 2014-11-25 02:50 编辑
自己設計的 STM32F030F 開發粄, 體積小, 成本低
【MungBeanSprout】
控制器 : STM32F030F 20Pin 48MHz
PCB 尺寸 : 15.24 * 18.00mm
Sch_MungBeanSprout.png (208.59 KB, 下载次数: 0)
下载附件
2014-11-25 01:05 上传
**** 開發環境 Keil uVision v5.12
BeanSproutM_TestADC_20141124.rar
(435.59 KB, 下载次数: 181)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestGPIO_20141124.rar
(205.61 KB, 下载次数: 154)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestMPU6050_20141124.rar
(209.47 KB, 下载次数: 108)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestPWM_20141124.rar
(206.08 KB, 下载次数: 130)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestSF138_20141124.rar
(206.71 KB, 下载次数: 88)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestSF164_20141124.rar
(206.83 KB, 下载次数: 82)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestSF595_20141124.rar
(206.98 KB, 下载次数: 93)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestSystick_20141124.rar
(206.08 KB, 下载次数: 109)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestTFT2.2_20141124.rar
(214.1 KB, 下载次数: 94)
2014-11-25 01:05 上传
点击文件名下载附件
BeanSproutM_TestUART_20141116.rar
(434.56 KB, 下载次数: 143)
2014-11-25 01:05 上传
点击文件名下载附件
**** 設計軟體 Altium Designer 14
PCB_MungBeanSprout.rar
(983.32 KB, 下载次数: 144)
2014-11-25 01:11 上传
点击文件名下载附件
Gerber_MungBeanSprout.rar
(62.74 KB, 下载次数: 64)
2014-11-25 01:05 上传
点击文件名下载附件
**** GitHub :
https://github.com/KitSprout/MungBeanSprout
在QCopterFC_it.c 127行开始会有一段校正程序,期间会有LED_B作为一个状态指示灯~
疑问一: 为什么会有 八组CASE? 分别测量些什么数据?如何操作~
- switch((u16)(Correction_Time/600)) {
- case 0:
- LED_B = 0;
- MagDataX[0] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[0] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 1:
- LED_B = 1;
- MagDataX[1] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[1] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 2:
- LED_B = 0;
- MagDataX[2] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[2] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 3:
- LED_B = 1;
- MagDataX[3] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[3] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 4:
- LED_B = 0;
- MagDataX[4] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[4] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 5:
- LED_B = 1;
- MagDataX[5] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[5] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 6:
- LED_B = 0;
- MagDataX[6] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[6] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- case 7:
- LED_B = 1;
- MagDataX[7] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[7] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
- default:
- LED_B = 1;
- Correction_Time = 0;
- EllipseFitting(Ellipse, MagDataX, MagDataY, 8);
- Mag.OffsetX = Ellipse[1];
- Mag.OffsetY = Ellipse[2];
- SensorMode = Mode_Algorithm; // 切換至運算模式
- break;
- }
复制代码疑问二: 比如在 以上问中 CASE 0:中 代码如下:
- case 0:
- LED_B = 0;
- MagDataX[0] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
- MagDataY[0] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
- break;
复制代码对于为何会用 MAG_FIFO[0]还有MAG_FIFO[1]呢?根据MoveAve_WMA函数:代码如下:
- s16 MoveAve_WMA( s16 NewData, s16 *MoveAve_FIFO, u8 SampleNum )
- {
- u8 i = 0;
- s16 AveData = 0;
- u16 SampleSum = 0;
- s32 MoveAve_Sum = 0;
- for(i=0; i<SampleNum-1; i++) // 陣列移動
- MoveAve_FIFO[i] = MoveAve_FIFO[i+1];
- MoveAve_FIFO[SampleNum-1] = NewData; // 加入新數據
-
- for(i=0; i<SampleNum; i++) // 求和 & 加權
- MoveAve_Sum += MoveAve_FIFO[i]*(i+1);
-
- SampleSum = (SampleNum*(SampleNum+1))/2; // 計算加權除數
- AveData = (s16)(MoveAve_Sum/SampleSum); // 計算平均值
- return AveData;
- }
复制代码可知滑动加权平均算法中数组是从指针头往后的八位..这样子不是导致X,Y中有很大一部分重叠的值吗?重叠位在MAG_FIFO[1]~MAG_FIFO[7]中~
麻烦楼主大神解答下~谢谢
一周热门 更多>