【BeanSprout】開源 ARM Cortex-M0 STM32F030F4 開發粄

2019-12-27 18:51发布

本帖最后由 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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
83条回答
arm_m0
1楼-- · 2020-01-02 01:59
好资料,谢谢楼主!向你学习
mubei
2楼-- · 2020-01-02 04:05
 精彩回答 2  元偷偷看……
overheat
3楼-- · 2020-01-02 07:34
彩 {MOD}的管脚图是用什么软件画的啊?很漂亮!
john800422
4楼-- · 2020-01-02 11:20
overheat 发表于 2014-12-17 10:41
彩 {MOD}的管脚图是用什么软件画的啊?很漂亮!

PPT, 在 21F
随影
5楼-- · 2020-01-02 13:28
大神~请教你一个关于你的程序校正磁力计的一个小小的疑问.麻烦大神有时间能抽空解答下~O(∩_∩)O~~
在QCopterFC_it.c    127行开始会有一段校正程序,期间会有LED_B作为一个状态指示灯~
疑问一:  为什么会有 八组CASE? 分别测量些什么数据?如何操作~
  1. switch((u16)(Correction_Time/600)) {
  2.         case 0:
  3.           LED_B = 0;
  4.           MagDataX[0] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);  
  5.           MagDataY[0] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  6.           break;
  7.         case 1:
  8.           LED_B = 1;
  9.           MagDataX[1] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  10.           MagDataY[1] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  11.           break;
  12.         case 2:
  13.           LED_B = 0;
  14.           MagDataX[2] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  15.           MagDataY[2] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  16.           break;
  17.         case 3:
  18.           LED_B = 1;
  19.           MagDataX[3] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  20.           MagDataY[3] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  21.           break;
  22.         case 4:
  23.           LED_B = 0;
  24.           MagDataX[4] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  25.           MagDataY[4] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  26.           break;
  27.         case 5:
  28.           LED_B = 1;
  29.           MagDataX[5] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  30.           MagDataY[5] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  31.           break;
  32.         case 6:
  33.           LED_B = 0;
  34.           MagDataX[6] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  35.           MagDataY[6] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  36.           break;
  37.         case 7:
  38.           LED_B = 1;
  39.           MagDataX[7] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);
  40.           MagDataY[7] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  41.           break;
  42.         default:
  43.           LED_B = 1;
  44.           Correction_Time = 0;
  45.           EllipseFitting(Ellipse, MagDataX, MagDataY, 8);
  46.           Mag.OffsetX = Ellipse[1];
  47.           Mag.OffsetY = Ellipse[2];
  48.           SensorMode = Mode_Algorithm;  // 切換至運算模式
  49.           break;
  50.       }
复制代码

疑问二: 比如在 以上问中 CASE 0:中 代码如下:
  1. case 0:
  2.           LED_B = 0;
  3.           MagDataX[0] = (s16)MoveAve_WMA(Mag.X, MAG_FIFO[0], MagCorrectionAve);  
  4.           MagDataY[0] = (s16)MoveAve_WMA(Mag.Y, MAG_FIFO[1], MagCorrectionAve);
  5.           break;
复制代码
对于为何会用  MAG_FIFO[0]还有MAG_FIFO[1]呢?根据MoveAve_WMA函数:代码如下:
  1. s16 MoveAve_WMA( s16 NewData, s16 *MoveAve_FIFO, u8 SampleNum )
  2. {
  3.   u8 i = 0;
  4.   s16 AveData = 0;
  5.   u16 SampleSum = 0;
  6.   s32 MoveAve_Sum = 0;

  7.   for(i=0; i<SampleNum-1; i++)                // 陣列移動
  8.     MoveAve_FIFO[i] = MoveAve_FIFO[i+1];
  9.   MoveAve_FIFO[SampleNum-1] = NewData;        // 加入新數據
  10.    
  11.   for(i=0; i<SampleNum; i++)                  // 求和 & 加權
  12.     MoveAve_Sum += MoveAve_FIFO[i]*(i+1);
  13.    
  14.   SampleSum = (SampleNum*(SampleNum+1))/2;    // 計算加權除數
  15.   AveData = (s16)(MoveAve_Sum/SampleSum);     // 計算平均值

  16.   return AveData;
  17. }
复制代码
可知滑动加权平均算法中数组是从指针头往后的八位..这样子不是导致X,Y中有很大一部分重叠的值吗?重叠位在MAG_FIFO[1]~MAG_FIFO[7]中~
麻烦楼主大神解答下~谢谢
esdart
6楼-- · 2020-01-02 14:08
贴双面不太合适

一周热门 更多>